annotate DependencyLoader/DependencyLoader.lua @ 11:47d15fc9208e

updated the .pkgmeta to reflect the directory changes added LibScriptLink external changed the main module's Dependencies to OptDeps moved embeds.xml and Ace3.xml
author mckenziemc
date Sun, 05 Dec 2010 03:39:26 -0800
parents e0a4a8b5b389
children b230b94d4487
rev   line source
mckenziemc@10 1 -- DependencyLoader
mckenziemc@0 2 --
mckenziemc@0 3
mckenziemc@0 4 local addonName, addonTable = ...
mckenziemc@0 5
mckenziemc@0 6
mckenziemc@10 7 local DependencyLoader = LibStub("AceAddon-3.0"):NewAddon(addonName, "AceHook-3.0")
mckenziemc@0 8 _G[addonName] = DependencyLoader
mckenziemc@0 9
mckenziemc@10 10 addonTable.interface = DependencyLoader
mckenziemc@10 11
mckenziemc@10 12
mckenziemc@0 13 local libPrint = LibStub("LibPrint-1.0")
mckenziemc@10 14 local LibScriptLink = LibStub("LibScriptLink-1.0")
mckenziemc@10 15
mckenziemc@0 16 DependencyLoader.printStream = libPrint:NewStream("DependencyLoader", "DpLdr", print)
mckenziemc@0 17 DependencyLoader.debugStream = libPrint:NewStream("DependencyLoader", "DpLdr", "mcm")
mckenziemc@0 18
mckenziemc@0 19
mckenziemc@0 20 function DependencyLoader:Print(...)
mckenziemc@0 21 self.printStream:Print(...)
mckenziemc@0 22 end
mckenziemc@0 23
mckenziemc@0 24
mckenziemc@0 25 function DependencyLoader:Debug(...)
mckenziemc@0 26 self.debugStream:Print(...)
mckenziemc@0 27 end
mckenziemc@0 28
mckenziemc@0 29
mckenziemc@0 30 function DependencyLoader:OnInitialize()
mckenziemc@10 31 self:Debug("Initializing", addonName)
mckenziemc@0 32 self:Enable()
mckenziemc@0 33 end
mckenziemc@0 34
mckenziemc@0 35
mckenziemc@0 36 function DependencyLoader:OnEnable()
mckenziemc@10 37 self:Print("Enabled", addonName)
mckenziemc@0 38
mckenziemc@10 39 self:Hook("EnableAddOn", true)
mckenziemc@0 40
mckenziemc@0 41 self:FixCurrentAddons()
mckenziemc@0 42 end
mckenziemc@0 43
mckenziemc@10 44
mckenziemc@0 45 function DependencyLoader:OnDisable()
mckenziemc@0 46 self:Print("Disabled", addonName)
mckenziemc@0 47 end
mckenziemc@0 48
mckenziemc@0 49
mckenziemc@10 50 -- Does not consider user settings or addon errata.
mckenziemc@10 51 function DependencyLoader:IsForceLoadAvailable()
mckenziemc@10 52 return IsLoggedIn() and true or false
mckenziemc@10 53 end
mckenziemc@10 54
mckenziemc@10 55
mckenziemc@10 56 function DependencyLoader:IsForceLoadAllowed()
mckenziemc@10 57 -- TODO: check user settings
mckenziemc@10 58 return true
mckenziemc@10 59 end
mckenziemc@10 60
mckenziemc@10 61
mckenziemc@10 62 function DependencyLoader:CanForceLoad()
mckenziemc@10 63 return self:IsForceLoadAvailable() and self:IsForceLoadAllowed()
mckenziemc@10 64 end
mckenziemc@10 65
mckenziemc@0 66
mckenziemc@0 67 -- Enables any dependencies needed by the addons
mckenziemc@0 68 -- that have already been enabled
mckenziemc@0 69 function DependencyLoader:FixCurrentAddons()
mckenziemc@10 70 local requestReload = false
mckenziemc@10 71
mckenziemc@0 72 for i=1, GetNumAddOns() do
mckenziemc@10 73 local addon = addonTable.classes.Addon:Get(i)
mckenziemc@0 74
mckenziemc@10 75 -- TODO: what if an addon was loaded but its deps were then disabled?
mckenziemc@10 76 if addon:IsEnabled() and not addon:IsLoaded() then
mckenziemc@10 77 local tree = addonTable.classes.Tree:Get(addon)
mckenziemc@10 78
mckenziemc@10 79 if self:CanForceLoad() and tree:CanForceLoad() then
mckenziemc@10 80 tree:ForceLoad()
mckenziemc@10 81 elseif tree:CanLoD() then
mckenziemc@10 82 tree:PrepareForLoD()
mckenziemc@10 83 elseif tree:CanLoad() then
mckenziemc@10 84 tree:PrepareForReload()
mckenziemc@10 85 requestReload = true
mckenziemc@0 86 end
mckenziemc@0 87 end
mckenziemc@0 88 end
mckenziemc@10 89
mckenziemc@10 90 if requestReload then
mckenziemc@10 91 local message = LibScriptLink:NewLink(ReloadUI) .. " to reload your UI."
mckenziemc@10 92 self:Print(message)
mckenziemc@10 93 end
mckenziemc@0 94 end
mckenziemc@10 95
mckenziemc@10 96
mckenziemc@10 97 function DependencyLoader:EnableAddOn(...)
mckenziemc@10 98 print("DependencyLoader:EnableAddOn", ...)
mckenziemc@10 99 end