198 lines
5.1 KiB
Lua
198 lines
5.1 KiB
Lua
local global = {}
|
|
local logs = nil
|
|
local old_print = print
|
|
local safeMode = false
|
|
local util = require("debugplus.util")
|
|
local levelMeta = {
|
|
DEBUG = {
|
|
level = 'DEBUG',
|
|
colour = {1, 0, 1},
|
|
shouldShow = false,
|
|
},
|
|
INFO = {
|
|
level = 'INFO',
|
|
colour = {0, 1, 1},
|
|
shouldShow = true,
|
|
},
|
|
WARN = {
|
|
level = 'WARN',
|
|
colour = {1, 1, 0},
|
|
shouldShow = true,
|
|
},
|
|
ERROR = {
|
|
level = 'ERROR',
|
|
colour = {1, 0, 0},
|
|
shouldShow = true,
|
|
}
|
|
}
|
|
global.levelMeta = levelMeta
|
|
local SMODSLogPattern = "[%d-]+ [%d:]+ :: (%S+) +:: (%S+) :: (.*)"
|
|
local SMODSLevelMeta = {
|
|
TRACE = levelMeta.DEBUG,
|
|
DEBUG = levelMeta.DEBUG,
|
|
INFO = levelMeta.INFO,
|
|
WARN = levelMeta.WARN,
|
|
ERROR = levelMeta.ERROR,
|
|
FATAL = levelMeta.ERROR
|
|
}
|
|
|
|
function global.handleLogAdvanced(data, ...)
|
|
local succ, config = pcall(require, "debugplus.config")
|
|
local safe = safeMode or not succ
|
|
local stringifyPrint = safe or config.getValue("stringifyPrint")
|
|
if not stringifyPrint then
|
|
old_print(...)
|
|
end
|
|
local _str = ""
|
|
local stringify = tostring
|
|
if safe or config.getValue("processTables") then
|
|
stringify = util.stringifyTable
|
|
end
|
|
local args = util.pack(...)
|
|
for i = 1, args.n do
|
|
local v = args[i]
|
|
_str = _str .. stringify(v) .. " "
|
|
end
|
|
if stringifyPrint then
|
|
old_print(_str)
|
|
end
|
|
local meta = {
|
|
str = _str,
|
|
time = love.timer.getTime(),
|
|
colour = data.colour,
|
|
level = data.level,
|
|
command = data.command,
|
|
}
|
|
if data.fromPrint then
|
|
local level, source, msg = string.match(_str, SMODSLogPattern)
|
|
if level then
|
|
local levelMeta = SMODSLevelMeta[level] or SMODSLevelMeta.INFO
|
|
meta = {
|
|
str = "[" .. source .. "] " .. msg,
|
|
time = love.timer.getTime(),
|
|
colour = levelMeta.colour,
|
|
level = levelMeta.level
|
|
}
|
|
else
|
|
-- Handling the few times the game itself prints
|
|
if _str:match("^LONG DT @ [%d.: ]+$") then -- LONG DT messages
|
|
meta.level = "DEBUG"
|
|
meta.colour = levelMeta.DEBUG.colour
|
|
elseif _str:match("^ERROR LOADING GAME: Card area '[%w%d_-]+' not instantiated before load") then -- Error loading areas
|
|
meta.level = "ERROR"
|
|
meta.colour = levelMeta.ERROR.colour
|
|
end
|
|
end
|
|
end
|
|
if not meta.colour then meta.colour = levelMeta[meta.level].colour end
|
|
|
|
-- Dirty hack to work better with multiline text
|
|
if string.match(meta.str, "\n") then
|
|
local first = true
|
|
for w in string.gmatch(meta.str, "[^\n]+") do
|
|
local _meta = {
|
|
str = w,
|
|
time = meta.time,
|
|
colour = meta.colour,
|
|
level = meta.level,
|
|
command = meta.command,
|
|
hack_no_prefix = not first
|
|
}
|
|
first = false
|
|
table.insert(logs, _meta)
|
|
-- TODO: fix me
|
|
if logOffset ~= 0 then
|
|
global.handleLogsChange(1)
|
|
end
|
|
if #logs > 5000 then
|
|
table.remove(logs, 1)
|
|
end
|
|
end
|
|
else
|
|
table.insert(logs, meta)
|
|
global.handleLogsChange(1)
|
|
if logOffset ~= 0 then
|
|
global.handleLogsChange(1)
|
|
end
|
|
if #logs > 5000 then
|
|
table.remove(logs, 1)
|
|
end
|
|
end
|
|
end
|
|
|
|
function global.handleLog(colour, level, ...)
|
|
global.handleLogAdvanced({
|
|
colour = colour,
|
|
level = level,
|
|
command = true,
|
|
}, ...)
|
|
end
|
|
|
|
function global.registerLogHandler()
|
|
if logs then
|
|
return
|
|
end
|
|
logs = {}
|
|
global.logs = logs
|
|
local succ, res = pcall(require, "debugplus.config")
|
|
|
|
if not succ then
|
|
safeMode = true
|
|
print("DebugPlus could not load config!!! Not hooking logging")
|
|
error(res)
|
|
end
|
|
print = function(...)
|
|
global.handleLogAdvanced({
|
|
colour = {0, 1, 1},
|
|
level = "INFO",
|
|
fromPrint = true,
|
|
}, ...)
|
|
end
|
|
end
|
|
|
|
function global.handleLogsChange() -- Placeholder. Overwritten in console.lua
|
|
end
|
|
|
|
function global.log(...)
|
|
global.handleLog({.65, .36, 1}, "INFO", "[DebugPlus]", ...)
|
|
end
|
|
|
|
function global.error(...)
|
|
global.handleLogAdvanced({
|
|
colour = levelMeta.ERROR.colour,
|
|
level = "ERROR",
|
|
}, "[DebugPlus]", ...)
|
|
end
|
|
|
|
function global.warn(...)
|
|
global.handleLogAdvanced({
|
|
colour = levelMeta.WARN.colour,
|
|
level = "WARN",
|
|
}, "[DebugPlus]", ...)
|
|
end
|
|
|
|
function global.info(...)
|
|
global.handleLogAdvanced({
|
|
colour = levelMeta.INFO.colour,
|
|
level = "INFO",
|
|
}, "[DebugPlus]", ...)
|
|
end
|
|
|
|
function global.debug(...)
|
|
global.handleLogAdvanced({
|
|
colour = levelMeta.DEBUG.colour,
|
|
level = "DEBUG",
|
|
}, "[DebugPlus]", ...)
|
|
end
|
|
|
|
function global.createLogFn(name, level)
|
|
return function(...)
|
|
global.handleLogAdvanced({
|
|
colour = levelMeta[level].colour,
|
|
level = level,
|
|
}, "[" .. name .. "]", ...)
|
|
end
|
|
end
|
|
|
|
return global
|