mckenziemc@10: -- DependencyLoader mckenziemc@0: -- mckenziemc@0: mckenziemc@0: local addonName, addonTable = ... mckenziemc@0: mckenziemc@0: mckenziemc@10: local DependencyLoader = LibStub("AceAddon-3.0"):NewAddon(addonName, "AceHook-3.0") mckenziemc@0: _G[addonName] = DependencyLoader mckenziemc@0: mckenziemc@10: addonTable.interface = DependencyLoader mckenziemc@10: mckenziemc@10: mckenziemc@0: local libPrint = LibStub("LibPrint-1.0") mckenziemc@10: local LibScriptLink = LibStub("LibScriptLink-1.0") mckenziemc@10: mckenziemc@0: DependencyLoader.printStream = libPrint:NewStream("DependencyLoader", "DpLdr", print) mckenziemc@0: DependencyLoader.debugStream = libPrint:NewStream("DependencyLoader", "DpLdr", "mcm") mckenziemc@0: mckenziemc@0: mckenziemc@0: function DependencyLoader:Print(...) mckenziemc@0: self.printStream:Print(...) mckenziemc@0: end mckenziemc@0: mckenziemc@0: mckenziemc@0: function DependencyLoader:Debug(...) mckenziemc@0: self.debugStream:Print(...) mckenziemc@0: end mckenziemc@0: mckenziemc@0: mckenziemc@0: function DependencyLoader:OnInitialize() mckenziemc@10: self:Debug("Initializing", addonName) mckenziemc@0: self:Enable() mckenziemc@0: end mckenziemc@0: mckenziemc@0: mckenziemc@0: function DependencyLoader:OnEnable() mckenziemc@10: self:Print("Enabled", addonName) mckenziemc@0: mckenziemc@10: self:Hook("EnableAddOn", true) mckenziemc@0: mckenziemc@0: self:FixCurrentAddons() mckenziemc@0: end mckenziemc@0: mckenziemc@10: mckenziemc@0: function DependencyLoader:OnDisable() mckenziemc@0: self:Print("Disabled", addonName) mckenziemc@0: end mckenziemc@0: mckenziemc@0: mckenziemc@10: -- Does not consider user settings or addon errata. mckenziemc@10: function DependencyLoader:IsForceLoadAvailable() mckenziemc@10: return IsLoggedIn() and true or false mckenziemc@10: end mckenziemc@10: mckenziemc@10: mckenziemc@10: function DependencyLoader:IsForceLoadAllowed() mckenziemc@10: -- TODO: check user settings mckenziemc@10: return true mckenziemc@10: end mckenziemc@10: mckenziemc@10: mckenziemc@10: function DependencyLoader:CanForceLoad() mckenziemc@10: return self:IsForceLoadAvailable() and self:IsForceLoadAllowed() mckenziemc@10: end mckenziemc@10: mckenziemc@0: mckenziemc@0: -- Enables any dependencies needed by the addons mckenziemc@0: -- that have already been enabled mckenziemc@0: function DependencyLoader:FixCurrentAddons() mckenziemc@10: local requestReload = false mckenziemc@10: mckenziemc@0: for i=1, GetNumAddOns() do mckenziemc@10: local addon = addonTable.classes.Addon:Get(i) mckenziemc@0: mckenziemc@10: -- TODO: what if an addon was loaded but its deps were then disabled? mckenziemc@10: if addon:IsEnabled() and not addon:IsLoaded() then mckenziemc@10: local tree = addonTable.classes.Tree:Get(addon) mckenziemc@10: mckenziemc@10: if self:CanForceLoad() and tree:CanForceLoad() then mckenziemc@10: tree:ForceLoad() mckenziemc@10: elseif tree:CanLoD() then mckenziemc@10: tree:PrepareForLoD() mckenziemc@10: elseif tree:CanLoad() then mckenziemc@10: tree:PrepareForReload() mckenziemc@10: requestReload = true mckenziemc@0: end mckenziemc@0: end mckenziemc@0: end mckenziemc@10: mckenziemc@10: if requestReload then mckenziemc@10: local message = LibScriptLink:NewLink(ReloadUI) .. " to reload your UI." mckenziemc@10: self:Print(message) mckenziemc@10: end mckenziemc@0: end mckenziemc@10: mckenziemc@10: mckenziemc@10: function DependencyLoader:EnableAddOn(...) mckenziemc@10: print("DependencyLoader:EnableAddOn", ...) mckenziemc@10: end