comparison core.lua @ 148:113dd7c86222

Update how LoadOnDemand modules are treated for 6.0. Blizzard API change, different return values. Adds finer-grained handling. Users who don't want to see a module at all can disable the module's "addon", and then later restore it from OL's option tab.
author Farmbuyer of US-Kilrogg <farmbuyer@gmail.com>
date Wed, 07 Jan 2015 17:37:43 -0500
parents e1a90e398231
children df0ca8ed1aff
comparison
equal deleted inserted replaced
147:e1a90e398231 148:113dd7c86222
138 ['[item] by ID'] = '[item]$I[/item]$X - $T', 138 ['[item] by ID'] = '[item]$I[/item]$X - $T',
139 ['Custom...'] = '', 139 ['Custom...'] = '',
140 }, 140 },
141 ['forum_current'] = '[item] by name', 141 ['forum_current'] = '[item] by name',
142 ['display_disabled_LODs'] = false, 142 ['display_disabled_LODs'] = false,
143 ['display_unusable_LODs'] = false,
143 ['display_bcast_from'] = true, 144 ['display_bcast_from'] = true,
144 ['precache_history_uniques'] = false, 145 ['precache_history_uniques'] = false,
145 ['chatty_on_remote_changes'] = false, 146 ['chatty_on_remote_changes'] = false,
146 ['chatty_on_local_changes'] = false, 147 ['chatty_on_local_changes'] = false,
147 ['chatty_on_changes_frame'] = 1, 148 ['chatty_on_changes_frame'] = 1,
430 local func_map = {} --_G.setmetatable({}, {__mode = 'k'}) 431 local func_map = {} --_G.setmetatable({}, {__mode = 'k'})
431 local text_map = setmetatable({}, {__mode = 'v'}) 432 local text_map = setmetatable({}, {__mode = 'v'})
432 local base = newproxy(true) 433 local base = newproxy(true)
433 getmetatable(base).__tostring = function(ud) return text_map[ud] end 434 getmetatable(base).__tostring = function(ud) return text_map[ud] end
434 --@debug@ 435 --@debug@
435 -- auto collecting these tokens is an interesting micro-optimization but not yet 436 --[[ auto collecting these tokens is an interesting micro-optimization but not yet
436 getmetatable(base).__index = { 437 getmetatable(base).__index = {
437 ['done'] = function (ud) 438 ['done'] = function (ud)
438 text_map[ud] = nil 439 text_map[ud] = nil
439 func_map[ud] = nil 440 func_map[ud] = nil
440 end, 441 end,
441 } 442 }
442 getmetatable(base).__gc = function(ud) 443 getmetatable(base).__gc = function(ud)
443 print("Collecting hyperlink object <",tostring(ud),">") 444 print("Collecting hyperlink object <",tostring(ud),">")
444 end 445 end --]]
445 --@end-debug@ 446 --@end-debug@
446 447
447 -- TEXT will automatically be surrounded by brackets 448 -- TEXT will automatically be surrounded by brackets
448 -- COLOR can be LE_ITEM_QUALITY_* or a formatting string ("|cff...") 449 -- COLOR can be LE_ITEM_QUALITY_* or a formatting string ("|cff...")
449 -- FUNC can be "MethodName", "tab_title", or a function 450 -- FUNC can be "MethodName", "tab_title", or a function
1047 if opts.precache_history_uniques and not InCombatLockdown() then 1048 if opts.precache_history_uniques and not InCombatLockdown() then
1048 self:_cache_history_uniques() 1049 self:_cache_history_uniques()
1049 end 1050 end
1050 self._cache_history_uniques = nil 1051 self._cache_history_uniques = nil
1051 1052
1052 self:_scan_LOD_modules() 1053 -- This will be nil if there are no such modules. Used by the GUI
1054 -- in _gui_add_disabled_LOD_tabs
1055 self._disabled_LOD_modules = self:_scan_LOD_modules()
1053 1056
1054 self:_set_chatty_change_chatframe (opts.chatty_on_changes_frame, --[[silent_p=]]true) 1057 self:_set_chatty_change_chatframe (opts.chatty_on_changes_frame, --[[silent_p=]]true)
1055 1058
1056 if self.debug.flow then self:Print"is in control-flow debug mode." end 1059 if self.debug.flow then self:Print"is in control-flow debug mode." end
1057 end 1060 end
1313 else 1316 else
1314 _G.OuroLootSV = nil 1317 _G.OuroLootSV = nil
1315 end 1318 end
1316 1319
1317 worth_saving = false 1320 worth_saving = false
1318 for r,t in pairs(self.history_all) do if type(t) == 'table' then 1321 for r,t in pairs(self.history_all) do
1319 if #t == 0 then 1322 if type(t) == 'table' then
1320 self.history_all[r] = nil 1323 if #t == 0 then
1321 else 1324 self.history_all[r] = nil
1322 worth_saving = true 1325 else
1323 t.realm = nil 1326 worth_saving = true
1324 t.st = nil 1327 t.realm = nil
1325 t.byname = nil 1328 t.st = nil
1326 end 1329 t.byname = nil
1327 end end 1330 end
1331 end
1332 end
1328 if worth_saving then 1333 if worth_saving then
1329 _G.OuroLootSV_hist = self.history_all 1334 _G.OuroLootSV_hist = self.history_all
1330 _G.OuroLootSV_hist.HISTFORMAT = 4 1335 _G.OuroLootSV_hist.HISTFORMAT = 4
1331 else 1336 else
1332 _G.OuroLootSV_hist = nil 1337 _G.OuroLootSV_hist = nil
1992 -- only generated text and raider join/leave data, not worth verbage 1997 -- only generated text and raider join/leave data, not worth verbage
1993 self.dprint('flow', ">:Activate restored generated texts, un-popping") 1998 self.dprint('flow', ">:Activate restored generated texts, un-popping")
1994 return 1999 return
1995 end 2000 end
1996 self:Print("Restored previous data, but not in a raid", 2001 self:Print("Restored previous data, but not in a raid",
1997 "and 5-player mode not active. |cffff0505NOT tracking loot|r;", 2002 "and 5-player mode is not active. |cffff0505NOT tracking loot|r;",
1998 "use 'enable' to activate loot tracking, or 'clear' to erase", 2003 "use 'enable' to activate loot tracking, or 'clear' to erase",
1999 "previous data, or 'help' to read about saved-texts commands.") 2004 "previous data, or 'help' to read about saved-texts commands.")
2000 if #g_loot > 400 then 2005 if #g_loot > 200 then
2001 self:Print("|cffff0505Crikey!|r You are carrying around a lot of", 2006 self:Print("|cffff0505Crikey!|r You are carrying around a lot of",
2002 "stored loot data. You should seriously consider clearing it", 2007 "stored loot data. You should seriously consider clearing it",
2003 "out, as some of the text generation routines can choke the", 2008 "out, as some of the text generation routines can choke the",
2004 "game client if they run for too long.") 2009 "game client if they run for too long.")
2005 end 2010 end
2079 end 2084 end
2080 2085
2081 -- Check for plugins which haven't already been loaded, and add hooks for 2086 -- Check for plugins which haven't already been loaded, and add hooks for
2082 -- them. Credit to DBM for the approach here. 2087 -- them. Credit to DBM for the approach here.
2083 function addon:_scan_LOD_modules() 2088 function addon:_scan_LOD_modules()
2089 local disabled
2084 for i = 1, GetNumAddOns() do 2090 for i = 1, GetNumAddOns() do
2085 if GetAddOnMetadata (i, "X-OuroLoot-Plugin") 2091 if GetAddOnMetadata (i, "X-OuroLoot-Plugin")
2086 and IsAddOnLoadOnDemand(i) 2092 and IsAddOnLoadOnDemand(i)
2087 and not IsAddOnLoaded(i) 2093 and not IsAddOnLoaded(i)
2088 then 2094 then
2089 local folder, _, _, enabled, _, reason = GetAddOnInfo(i) 2095 -- 'loadflag' will be false for LOD addons
2096 local folder, title, notes, loadflag, reason = GetAddOnInfo(i)
2097 local enabled = GetAddOnEnableState (my_name, i) > 0
2098 local tabtitle = GetAddOnMetadata (i, "X-OuroLoot-Plugin")
2099 local decision = 0
2100 self.dprint('flow', "scanning", folder, "loadflag is", loadflag,
2101 "enabled is", enabled, "reason-why-not is", reason)
2090 if enabled or opts.display_disabled_LODs then 2102 if enabled or opts.display_disabled_LODs then
2091 local tabtitle = GetAddOnMetadata (i, "X-OuroLoot-Plugin")
2092 self:_gui_add_LOD_tab (tabtitle, folder, i, enabled, reason) 2103 self:_gui_add_LOD_tab (tabtitle, folder, i, enabled, reason)
2093 end 2104 decision = 1
2094 end 2105 elseif (not enabled) and reason == 'DISABLED' then
2095 end 2106 disabled = disabled or flib.new()
2107 local t = flib.new()
2108 t.tabtitle = tabtitle
2109 t.folder = folder
2110 t.addon_index = i
2111 disabled[#disabled+1] = t
2112 decision = 2
2113 elseif opts.display_unusable_LODs then
2114 self:_gui_add_LOD_tab (tabtitle, folder, i, enabled, reason)
2115 decision = 3
2116 end
2117 self.dprint('flow', "...decision was", decision)
2118 end
2119 end
2120 return disabled
2096 end 2121 end
2097 2122
2098 -- Routines for printing changes made by remote users. 2123 -- Routines for printing changes made by remote users.
2099 do 2124 do
2100 local change_chatframe 2125 local change_chatframe