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
|