Add debug log from retail
This commit is contained in:
@@ -0,0 +1,114 @@
|
||||
if not WeakAuras.IsCorrectVersion() or not WeakAuras.IsLibsOK() then return end
|
||||
local AddonName, Private = ...
|
||||
|
||||
local WeakAuras = WeakAuras
|
||||
local L = WeakAuras.L
|
||||
|
||||
local debugLogs = {}
|
||||
local enabled = {}
|
||||
|
||||
Private.DebugLog = {
|
||||
-- Print
|
||||
-- Clear
|
||||
-- SetEnabled
|
||||
-- IsEnabled
|
||||
-- GetLogs
|
||||
}
|
||||
|
||||
local function serialize(log, input)
|
||||
if type(input) == "table" then
|
||||
if log[#log] == "" then
|
||||
log[#log] = L["Dumping table"]
|
||||
else
|
||||
tinsert(log, L["Dumping table"])
|
||||
end
|
||||
-- Use dump to create a table dump, because that already handles depth limitation
|
||||
-- and cycles and looks nice
|
||||
-- But this requires temporarily setting DEFAULT_CHAT_FRAME
|
||||
-- Nothing can go wrong with that.
|
||||
local defaultChatFrame = _G.DEFAULT_CHAT_FRAME
|
||||
_G.DEFAULT_CHAT_FRAME = log
|
||||
DevTools_Dump(input)
|
||||
_G.DEFAULT_CHAT_FRAME = defaultChatFrame
|
||||
tinsert(log, "")
|
||||
else
|
||||
if log[#log] == "" then
|
||||
log[#log] = tostring(input)
|
||||
else
|
||||
log[#log] = log[#log] .. " " .. tostring(input)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function Private.DebugLog.Print(uid, text, ...)
|
||||
if enabled[uid] then
|
||||
local log = debugLogs[uid]
|
||||
tinsert(log, "")
|
||||
if select('#', ...) == 0 then
|
||||
serialize(log, text)
|
||||
else
|
||||
serialize(log, text)
|
||||
local texts = {...}
|
||||
for i = 1, select('#', ...) do
|
||||
local v = select(i, ...)
|
||||
serialize(log, v)
|
||||
end
|
||||
end
|
||||
|
||||
if #log > 1000 then
|
||||
Private.AuraWarnings.UpdateWarning(uid, "Debug_Log", "warning",
|
||||
L["Debug Log contains more than 1000 entries"],
|
||||
true)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function AddMessage(self, msg)
|
||||
tinsert(self, msg)
|
||||
end
|
||||
|
||||
function Private.DebugLog.Clear(uid)
|
||||
if enabled[uid] then
|
||||
debugLogs[uid] = {
|
||||
AddMessage = AddMessage
|
||||
}
|
||||
-- Dance to clear a potential console message from the AuraWarnings
|
||||
Private.AuraWarnings.UpdateWarning(uid, "Debug_Log", "info")
|
||||
Private.AuraWarnings.UpdateWarning(uid, "Debug_Log", "info", L["Debug Logging enabled"])
|
||||
end
|
||||
end
|
||||
|
||||
function Private.DebugLog.SetEnabled(uid, enable)
|
||||
if enabled[uid] == enable then
|
||||
return
|
||||
end
|
||||
enabled[uid] = enable
|
||||
if enable then
|
||||
debugLogs[uid] = {
|
||||
AddMessage = AddMessage
|
||||
}
|
||||
Private.AuraWarnings.UpdateWarning(uid, "Debug_Log", "info", L["Debug Logging enabled"])
|
||||
else
|
||||
debugLogs[uid] = nil
|
||||
Private.AuraWarnings.UpdateWarning(uid, "Debug_Log", "info")
|
||||
end
|
||||
end
|
||||
|
||||
function Private.DebugLog.IsEnabled(uid)
|
||||
return enabled[uid]
|
||||
end
|
||||
|
||||
function Private.DebugLog.GetLogs(uid)
|
||||
if debugLogs[uid] then
|
||||
return table.concat(debugLogs[uid], "\n")
|
||||
end
|
||||
end
|
||||
|
||||
local function OnDelete(_, uid)
|
||||
debugLogs[uid] = nil
|
||||
enabled[uid] = nil
|
||||
end
|
||||
|
||||
Private.callbacks:RegisterCallback("Delete", OnDelete)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user