154 lines
4.4 KiB
Lua
154 lines
4.4 KiB
Lua
local mod = Chatter:NewModule("Timestamps", "AceHook-3.0","AceEvent-3.0")
|
|
local L = LibStub("AceLocale-3.0"):GetLocale("Chatter")
|
|
mod.modName = L["Timestamps"]
|
|
|
|
local date = _G.date
|
|
|
|
local SELECTED_FORMAT
|
|
local COLOR
|
|
local FORMATS = {
|
|
["%I:%M:%S %p"] = L["HH:MM:SS AM (12-hour)"],
|
|
["%I:%M:S"] = L["HH:MM (12-hour)"],
|
|
["%X"] = L["HH:MM:SS (24-hour)"],
|
|
["%I:%M"] = L["HH:MM (12-hour)"],
|
|
["%H:%M"] = L["HH:MM (24-hour)"],
|
|
["%M:%S"] = L["MM:SS"],
|
|
}
|
|
local CHATFRAMES = {
|
|
["Frame1"] = L["Chat Frame "].."1",
|
|
["Frame3"] = L["Chat Frame "].."3",
|
|
["Frame4"] = L["Chat Frame "].."4",
|
|
["Frame5"] = L["Chat Frame "].."5",
|
|
["Frame6"] = L["Chat Frame "].."6",
|
|
["Frame7"] = L["Chat Frame "].."7",
|
|
["Frame8"] = L["Chat Frame "].."8",
|
|
["Frame9"] = L["Chat Frame "].."9",
|
|
["Frame10"] = L["Chat Frame "].."10",
|
|
["Frame11"] = L["Chat Frame "].."11",
|
|
["Frame12"] = L["Chat Frame "].."12",
|
|
["Frame13"] = L["Chat Frame "].."13",
|
|
["Frame14"] = L["Chat Frame "].."14",
|
|
["Frame15"] = L["Chat Frame "].."15",
|
|
["Frame16"] = L["Chat Frame "].."16",
|
|
["Frame17"] = L["Chat Frame "].."17",
|
|
["Frame18"] = L["Chat Frame "].."18",
|
|
}
|
|
|
|
local defaults = {
|
|
profile = { format = "%X", color = { r = 0.45, g = 0.45, b = 0.45 }, frames = {["Frame1"] = true, ["Frame3"] = true, ["Frame4"] = true, ["Frame5"] = true, ["Frame6"] = true, ["Frame7"] = true} }
|
|
}
|
|
|
|
local options = {
|
|
format = {
|
|
type = "select",
|
|
name = L["Timestamp format"],
|
|
desc = L["Timestamp format"],
|
|
values = FORMATS,
|
|
get = function() return mod.db.profile.format end,
|
|
set = function(info, v)
|
|
mod.db.profile.format = v
|
|
SELECTED_FORMAT = ("[" .. v .. "]")
|
|
end
|
|
},
|
|
customFormat = {
|
|
type = "input",
|
|
name = L["Custom format (advanced)"],
|
|
desc = L["Enter a custom time format. See http://www.lua.org/pil/22.1.html for a list of valid formatting symbols."],
|
|
get = function() return mod.db.profile.customFormat end,
|
|
set = function(info, v)
|
|
if #v == 0 then v = nil end
|
|
mod.db.profile.customFormat = v
|
|
SELECTED_FORMAT = v
|
|
end,
|
|
order = 101
|
|
},
|
|
color = {
|
|
type = "color",
|
|
name = L["Timestamp color"],
|
|
desc = L["Timestamp color"],
|
|
get = function()
|
|
local c = mod.db.profile.color
|
|
return c.r, c.g, c.b
|
|
end,
|
|
set = function(info, r, g, b, a)
|
|
local c = mod.db.profile.color
|
|
c.r, c.g, c.b = r, g, b
|
|
COLOR = ("%02x%02x%02x"):format(r * 255, g * 255, b * 255)
|
|
end,
|
|
disabled = function() return mod.db.profile.colorByChannel end
|
|
},
|
|
useChannelColor = {
|
|
type = "toggle",
|
|
name = L["Use channel color"],
|
|
desc = L["Color timestamps the same as the channel they appear in."],
|
|
get = function()
|
|
return mod.db.profile.colorByChannel
|
|
end,
|
|
set = function(info, v)
|
|
mod.db.profile.colorByChannel = v
|
|
end
|
|
},
|
|
frames = {
|
|
type = "multiselect",
|
|
name = L["Per chat frame settings"],
|
|
desc = L["Choose which chat frames display timestamps"],
|
|
values = CHATFRAMES,
|
|
get = function(info, k) return mod.db.profile.frames[k] end,
|
|
set = function(info, k, v) mod.db.profile.frames[k] = v end,
|
|
},
|
|
}
|
|
|
|
function mod:OnInitialize()
|
|
self.db = Chatter.db:RegisterNamespace("Timestamps", defaults)
|
|
end
|
|
|
|
function mod:Decorate(frame)
|
|
if not self:IsHooked(frame,"AddMessage") then
|
|
self:RawHook(frame, "AddMessage", true)
|
|
end
|
|
end
|
|
|
|
function mod:OnEnable()
|
|
SELECTED_FORMAT = mod.db.profile.customFormat or ("[" .. self.db.profile.format .. "]")
|
|
local c = self.db.profile.color
|
|
COLOR = ("%02x%02x%02x"):format(c.r * 255, c.g * 255, c.b * 255)
|
|
for i = 1, NUM_CHAT_WINDOWS do
|
|
local cf = _G["ChatFrame" .. i]
|
|
if cf ~= COMBATLOG then
|
|
self:RawHook(cf, "AddMessage", true)
|
|
end
|
|
end
|
|
for index,name in ipairs(self.TempChatFrames) do
|
|
local cf = _G[name]
|
|
if cf then
|
|
self:RawHook(cf, "AddMessage", true)
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:AddMessage(frame, text, ...)
|
|
local id = frame:GetID()
|
|
if id and self.db.profile.frames["Frame"..id] and not(CHAT_TIMESTAMP_FORMAT) then
|
|
if not Chatter.loading then
|
|
if not text then
|
|
return self.hooks[frame].AddMessage(frame, text, ...)
|
|
end
|
|
if self.db.profile.colorByChannel then
|
|
text = date(SELECTED_FORMAT) .. text
|
|
else
|
|
text = "|cff"..COLOR..date(SELECTED_FORMAT).."|r".. text
|
|
end
|
|
end
|
|
return self.hooks[frame].AddMessage(frame, text, ...)
|
|
end
|
|
return self.hooks[frame].AddMessage(frame, text, ...)
|
|
end
|
|
|
|
function mod:Info()
|
|
return L["Adds timestamps to chat."]
|
|
end
|
|
|
|
function mod:GetOptions()
|
|
return options
|
|
end
|