Mercurial > wow > dependencyloader
diff DependencyLoader/DependencyLoader.lua @ 10:e0a4a8b5b389
lots more modifications...
author | mckenziemc |
---|---|
date | Sun, 05 Dec 2010 03:10:07 -0800 |
parents | DependencyLoader/frontend.lua@5362e308c3eb |
children | b230b94d4487 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DependencyLoader/DependencyLoader.lua Sun Dec 05 03:10:07 2010 -0800 @@ -0,0 +1,99 @@ +-- DependencyLoader +-- + +local addonName, addonTable = ... + + +local DependencyLoader = LibStub("AceAddon-3.0"):NewAddon(addonName, "AceHook-3.0") +_G[addonName] = DependencyLoader + +addonTable.interface = DependencyLoader + + +local libPrint = LibStub("LibPrint-1.0") +local LibScriptLink = LibStub("LibScriptLink-1.0") + +DependencyLoader.printStream = libPrint:NewStream("DependencyLoader", "DpLdr", print) +DependencyLoader.debugStream = libPrint:NewStream("DependencyLoader", "DpLdr", "mcm") + + +function DependencyLoader:Print(...) + self.printStream:Print(...) +end + + +function DependencyLoader:Debug(...) + self.debugStream:Print(...) +end + + +function DependencyLoader:OnInitialize() + self:Debug("Initializing", addonName) + self:Enable() +end + + +function DependencyLoader:OnEnable() + self:Print("Enabled", addonName) + + self:Hook("EnableAddOn", true) + + self:FixCurrentAddons() +end + + +function DependencyLoader:OnDisable() + self:Print("Disabled", addonName) +end + + +-- Does not consider user settings or addon errata. +function DependencyLoader:IsForceLoadAvailable() + return IsLoggedIn() and true or false +end + + +function DependencyLoader:IsForceLoadAllowed() + -- TODO: check user settings + return true +end + + +function DependencyLoader:CanForceLoad() + return self:IsForceLoadAvailable() and self:IsForceLoadAllowed() +end + + +-- Enables any dependencies needed by the addons +-- that have already been enabled +function DependencyLoader:FixCurrentAddons() + local requestReload = false + + for i=1, GetNumAddOns() do + local addon = addonTable.classes.Addon:Get(i) + + -- TODO: what if an addon was loaded but its deps were then disabled? + if addon:IsEnabled() and not addon:IsLoaded() then + local tree = addonTable.classes.Tree:Get(addon) + + if self:CanForceLoad() and tree:CanForceLoad() then + tree:ForceLoad() + elseif tree:CanLoD() then + tree:PrepareForLoD() + elseif tree:CanLoad() then + tree:PrepareForReload() + requestReload = true + end + end + end + + if requestReload then + local message = LibScriptLink:NewLink(ReloadUI) .. " to reload your UI." + self:Print(message) + end +end + + +function DependencyLoader:EnableAddOn(...) + print("DependencyLoader:EnableAddOn", ...) +end