Files
Prat/modules/Timestamps.lua
buhfur-ubuntu 120bb38b37 Initial commit
2026-05-31 14:10:07 -04:00

469 lines
23 KiB
Lua
Executable File

--[[
Name: Prat_Timestamps
Revision: $Revision: 16065 $
Author(s): Curney (asml8ed@gmail.com)
Krtek (krtek4@gmail.com)
Inspired by: idChat2_Timestamps by Industrial
Website: http://www.wowace.com/files/index.php?path=Prat/
Documentation: http://www.wowace.com/wiki/Prat/Integrated_Modules#Timestamps
SVN: http://svn.wowace.com/wowace/trunk/Prat/
Description: Module for Prat that adds timestamps to chat windows (default=on).
Dependencies: Prat
]]
local L = AceLibrary("AceLocale-2.2"):new("PratTimestamps")
L:RegisterTranslations("enUS", function() return {
["Timestamps"] = true,
["Timestamp options."] = true,
["ShowMode"] = true,
["Choose mode for showing timestamps."] = true,
["All"] = true,
["Individual"] = true,
["Show"] = true,
["Toggle showing timestamp settings for each window."] = true,
["Chat%dTimestampShow"] = true,
["Toggles timestamp on and off for chat window %d."] = true,
["ShowAll"] = true,
["Toggles timestamp on and off for all chat windows."] = true,
["FormatMode"] = true,
["Choose mode for setting timestamps."] = true,
["Format"] = true,
["Format the timestamp format for each window."] = true,
["Chat%dTimestampFormat"] = true,
["Set timestamp format for chat window %d (strftime format)."] = true,
["FormatAll"] = true,
["Set timestamp format for all chat windows (strftime format)."] = true,
["Show Space"] = true,
["Toggle adding space after timestamp."] = true,
["Color Timestamp"] = true,
["Toggle the coloring the timestamp on and off."] = true,
["Set Color"] = true,
["Change the color of the timestamp."] = true,
["Use Local Time"] = true,
["Toggle using local time on and off."] = true,
["Toggle"] = true,
["Toggle the module on and off."] = true,
} end)
L:RegisterTranslations("ruRU", function() return {
["Timestamps"] = "Timestamps",
["Timestamp options."] = "Настройки времени",
["ShowMode"] = "Показать режим",
["Choose mode for showing timestamps."] = "Выберите режим для показа времени.",
["All"] = "Все",
["Individual"] = "Индивидуальный ",
["Show"] = "Показать",
["Toggle showing timestamp settings for each window."] = "Вкл/Выкл показ настроек времени для каждого окна.",
["Chat%dTimestampShow"] = "ПоказатьВремяЧата%d",
["Toggles timestamp on and off for chat window %d."] = "Вкл/Выкл время для окна чата %d.",
["ShowAll"] = "Показать все",
["Toggles timestamp on and off for all chat windows."] = "Вкл/Выкл время для всех окон чата.",
["FormatMode"] = "ФорматРежим",
["Choose mode for setting timestamps."] = "Выберите режим для задания времени.",
["Format"] = "Формат",
["Format the timestamp format for each window."] = "Форматировать формат времени для каждого окна.",
["Chat%dTimestampFormat"] = "ФорматВремениЧата%d",
["Set timestamp format for chat window %d (strftime format)."] = "Установить формат времени для окна чата %d.",
["FormatAll"] = "ФорматВсего",
["Set timestamp format for all chat windows (strftime format)."] = "Установить формат времени для всех окон чата.",
["Show Space"] = "Показать пробел",
["Toggle adding space after timestamp."] = "Вкл/Выкл добавление пробела после времени.",
["Color Timestamp"] = "Цвет времени",
["Toggle the coloring the timestamp on and off."] = "Вкл/Выкл окраску времени.",
["Set Color"] = "Установить цвет",
["Change the color of the timestamp."] = "Изменить цвет времени.",
["Use Local Time"] = "Использовать часовой пояс",
["Toggle using local time on and off."] = "Вкл/Выкл использование локального времени.",
["Toggle"] = "Вкл/Выкл",
["Toggle the module on and off."] = "Вкл/Выкл модуль.",
} end)
L:RegisterTranslations("zhCN", function() return {
["Timestamps"] = "时间",
["Timestamp options."] = "聊天时间显示选项。",
["ShowMode"] = "显示模式",
["Choose mode for showing timestamps."] = "选择聊天窗口显示时间模式。",
["All"] = "全部",
["Individual"] = "独立",
["Show"] = "显示",
["Toggle showing timestamp settings for each window."] = "切换每一聊天窗口切换显示时间标签设置。",
["Chat%dTimestampShow"] = "窗口%d时间显示",
["Toggles timestamp on and off for chat window %d."] = "切换聊天窗口%d时间显示功能打开与关闭。",
["ShowAll"] = "全部显示",
["Toggles timestamp on and off for all chat windows."] = "切换所有聊天窗口时间显示的打开与关闭。",
["FormatMode"] = "格式模式",
["Choose mode for setting timestamps."] = "选择时间标签的格式设置。",
["Format"] = "格式化",
["Format the timestamp format for each window."] = "格式化每一窗口的时间显示。",
["Chat%dTimestampFormat"] = "窗口%d时间格式",
["Set timestamp format for chat window %d (strftime format)."] = "设置窗口%d的时间格式 (strftime格式)。",
["FormatAll"] = "全部格式",
["Set timestamp format for all chat windows (strftime format)."] = "设置全部窗口的时间格式 (strftime 格式)。",
["Show Space"] = "空格",
["Toggle adding space after timestamp."] = "切换时间标签后的空格。",
["Color Timestamp"] = "颜色",
["Toggle the coloring the timestamp on and off."] = "切换时间标签颜色功能打开与关闭。",
["Set Color"] = "设置颜色",
["Change the color of the timestamp."] = "更改时间标签颜色.",
["Use Local Time"] = "本地时间",
["Toggle using local time on and off."] = "切换服务器时间和本地时间.",
["Toggle"] = "切换",
["Toggle the module on and off."] = "切换此模块的打开与关闭。",
} end)
L:RegisterTranslations("koKR", function() return {
["Timestamps"] = "타임스탬프",
["Timestamp options."] = "타임스탬프 설정입니다.",
["ShowMode"] = "표시 모드",
["Choose mode for showing timestamps."] = "타임스탬프 표시에 대한 모드를 선택합니다.",
["All"] = "모두",
["Individual"] = "개별",
["Show"] = "표시",
["Toggle showing timestamp settings for each window."] = "각 창에 대한 타임스탬프 표시 전환",
["Chat%dTimestampShow"] = "대화%d 타임스탬프 표시",
["Toggles timestamp on and off for chat window %d."] = "대화창%d에 대한 타임스템프를 켜고 끄기를 전환합니다.",
["ShowAll"] = "모두 표시",
["Toggles timestamp on and off for all chat windows."] = "모든 대화창에 대한 타임스탬프 켜고 끄기를 전환합니다.",
["FormatMode"] = "형식 모드",
["Choose mode for setting timestamps."] = "타임스탬프 설정에 대한 모드를 선택합니다.",
["Format"] = "형식",
["Format the timestamp format for each window."] = "각 창에 대한 타임스탬프 형식을 설정합니다.",
["Chat%dTimestampFormat"] = "대화%d 타임스탬프 형식",
["Set timestamp format for chat window %d (strftime format)."] = "대화창 %d에 대한 타임스탬프 형식을 설정합니다(strftime format).",
["FormatAll"] = "모든 형식",
["Set timestamp format for all chat windows (strftime format)."] = "모든 대화창에 대한 타임스탬프 형식을 설정합니다(strftime format).",
["Show Space"] = "빈칸 표시",
["Toggle adding space after timestamp."] = "타임스탬프 다음에 빈 칸 추가를 전환합니다.",
["Color Timestamp"] = "타임스탬프 색상",
["Toggle the coloring the timestamp on and off."] = "타임스탬프 색상 켜고 끄기를 전환합니다.",
["Set Color"] = "색상 설정",
["Change the color of the timestamp."] = "타임스탬프의 색상을 변경합니다.",
["Use Local Time"] = "로컬 시간 사용",
["Toggle using local time on and off."] = "로컬 시간 사용 켜고 끄기를 전환합니다.",
["Toggle"] = "전환",
["Toggle the module on and off."] = "모듈 켜고 끄기를 전환합니다.",
} end)
Prat_Timestamps = Prat:NewModule("timestamps")
function Prat_Timestamps:OnInitialize()
self.db = Prat:AcquireDBNamespace("Timestamps")
Prat:RegisterDefaults("Timestamps", "profile", {
on = true,
showmode = "ALL",
show = {true, true, true, true, true, true, true},
showall = true,
formatmode = "ALL",
format = {"%X", "%X", "%X", "%X", "%X", "%X", "%X"},
formatall = "%X",
colortimestamp = true,
color = {
r = 1,
g = 1,
b = 1
},
space = true,
localtime = true
})
Prat.Options.args.timestamps = {
name = L["Timestamps"],
desc = L["Timestamp options."],
type = "group",
args = {
showmode = {
name = L["ShowMode"],
desc = L["Choose mode for showing timestamps."],
type = "text",
order = 100,
get = function() return self.db.profile.showmode end,
set = function(v) self.db.profile.showmode = v end,
validate = {["ALL"] = L["All"], ["INDIVIDUAL"] = L["Individual"]}
},
show = {
name = L["Show"],
desc = L["Toggle showing timestamp settings for each window."],
type = "group",
order = 110,
args = {
chat1 = {
name = string.format(L["Chat%dTimestampShow"], 1),
desc = string.format(L["Toggles timestamp on and off for chat window %d."], 1),
type = "toggle",
get = function() return self.db.profile.show[1] end,
set = function(v) self.db.profile.show[1] = v; self:SetFrameStatus(1) end
},
chat2 = {
name = string.format(L["Chat%dTimestampShow"], 2),
desc = string.format(L["Toggles timestamp on and off for chat window %d."], 2),
type = "toggle",
get = function() return self.db.profile.show[2] end,
set = function(v) self.db.profile.show[2] = v; self:SetFrameStatus(2) end
},
chat3 = {
name = string.format(L["Chat%dTimestampShow"], 3),
desc = string.format(L["Toggles timestamp on and off for chat window %d."], 3),
type = "toggle",
get = function() return self.db.profile.show[3] end,
set = function(v) self.db.profile.show[3] = v; self:SetFrameStatus(3) end
},
chat4 = {
name = string.format(L["Chat%dTimestampShow"], 4),
desc = string.format(L["Toggles timestamp on and off for chat window %d."], 4),
type = "toggle",
get = function() return self.db.profile.show[4] end,
set = function(v) self.db.profile.show[4] = v; self:SetFrameStatus(4) end
},
chat5 = {
name = string.format(L["Chat%dTimestampShow"], 5),
desc = string.format(L["Toggles timestamp on and off for chat window %d."], 5),
type = "toggle",
get = function() return self.db.profile.show[5] end,
set = function(v) self.db.profile.show[5] = v; self:SetFrameStatus(5) end
},
chat6 = {
name = string.format(L["Chat%dTimestampShow"], 6),
desc = string.format(L["Toggles timestamp on and off for chat window %d."], 6),
type = "toggle",
get = function() return self.db.profile.show[6] end,
set = function(v) self.db.profile.show[6] = v; self:SetFrameStatus(6) end
},
chat7 = {
name = string.format(L["Chat%dTimestampShow"], 7),
desc = string.format(L["Toggles timestamp on and off for chat window %d."], 7),
type = "toggle",
get = function() return self.db.profile.show[7] end,
set = function(v) self.db.profile.show[7] = v; self:SetFrameStatus(7) end
},
},
disabled = function() if self.db.profile.showmode == "ALL" then return true else return false end end,
},
showall = {
name = L["ShowAll"],
desc = L["Toggles timestamp on and off for all chat windows."],
type = "toggle",
order = 120,
get = function() return self.db.profile.showall end,
set = function(v)
self.db.profile.showall = v
for i=1,NUM_CHAT_WINDOWS do
self.db.profile.show[i] = v
self:SetFrameStatus(i)
end
end,
disabled = function() if self.db.profile.showmode == "INDIVIDUAL" then return true else return false end end,
},
formatmode = {
name = L["FormatMode"],
desc = L["Choose mode for setting timestamps."],
type = "text",
order = 130,
get = function() return self.db.profile.formatmode end,
set = function(v) self.db.profile.formatmode = v end,
validate = {["ALL"] = L["All"], ["INDIVIDUAL"] = L["Individual"]}
},
format = {
name = L["Format"],
desc = L["Format the timestamp format for each window."],
type = "group",
order = 140,
args = {
chat1 = {
name = string.format(L["Chat%dTimestampFormat"], 1),
desc = string.format(L["Set timestamp format for chat window %d (strftime format)."], 1),
type = "text",
order = 150,
usage = "<string>",
get = function() return self.db.profile.format[1] end,
set = function(v) self.db.profile.format[1] = v end
},
chat2 = {
name = string.format(L["Chat%dTimestampFormat"], 2),
desc = string.format(L["Set timestamp format for chat window %d (strftime format)."], 2),
type = "text",
order = 150,
usage = "<string>",
get = function() return self.db.profile.format[2] end,
set = function(v) self.db.profile.format[2] = v end
},
chat3 = {
name = string.format(L["Chat%dTimestampFormat"], 3),
desc = string.format(L["Set timestamp format for chat window %d (strftime format)."], 3),
type = "text",
order = 150,
usage = "<string>",
get = function() return self.db.profile.format[3] end,
set = function(v) self.db.profile.format[3] = v end
},
chat4 = {
name = string.format(L["Chat%dTimestampFormat"], 4),
desc = string.format(L["Set timestamp format for chat window %d (strftime format)."], 4),
type = "text",
order = 150,
usage = "<string>",
get = function() return self.db.profile.format[4] end,
set = function(v) self.db.profile.format[4] = v end
},
chat5 = {
name = string.format(L["Chat%dTimestampFormat"], 5),
desc = string.format(L["Set timestamp format for chat window %d (strftime format)."], 5),
type = "text",
order = 150,
usage = "<string>",
get = function() return self.db.profile.format[5] end,
set = function(v) self.db.profile.format[5] = v end
},
chat6 = {
name = string.format(L["Chat%dTimestampFormat"], 6),
desc = string.format(L["Set timestamp format for chat window %d (strftime format)."], 6),
type = "text",
order = 150,
usage = "<string>",
get = function() return self.db.profile.format[6] end,
set = function(v) self.db.profile.format[6] = v end
},
chat7 = {
name = string.format(L["Chat%dTimestampFormat"], 7),
desc = string.format(L["Set timestamp format for chat window %d (strftime format)."], 7),
type = "text",
order = 150,
usage = "<string>",
get = function() return self.db.profile.format[7] end,
set = function(v) self.db.profile.format[7] = v end
},
},
disabled = function() if self.db.profile.formatmode == "ALL" then return true else return false end end,
},
formatall = {
name = L["FormatAll"],
desc = L["Set timestamp format for all chat windows (strftime format)."],
type = "text",
order = 150,
usage = "<string>",
get = function() return self.db.profile.formatall end,
set = function(v)
self.db.profile.formatall = v
for i=1,NUM_CHAT_WINDOWS do
self.db.profile.format[i] = v
end
end,
disabled = function() if self.db.profile.formatmode == "INDIVIDUAL" then return true else return false end end,
},
showspace = {
name = L["Show Space"],
desc = L["Toggle adding space after timestamp."],
type = "toggle",
order = 160,
get = function() return self.db.profile.space end,
set = function(v) self.db.profile.space = v end,
},
colortimestamp = {
name = L["Color Timestamp"],
desc = L["Toggle the coloring the timestamp on and off."],
type = "toggle",
order = 170,
get = function() return self.db.profile.colortimestamp end,
set = function(v) self.db.profile.colortimestamp = v end
},
setcolor = {
name = L["Set Color"],
desc = L["Change the color of the timestamp."],
type = "color",
order = 180,
get = function() return self.db.profile.color.r, self.db.profile.color.g, self.db.profile.color.b end,
set = function(r, g, b, a) self.db.profile.color.r, self.db.profile.color.g, self.db.profile.color.b = r, g, b end,
disabled = function() if not self.db.profile.colortimestamp then return true else return false end end,
},
localtime = {
name = L["Use Local Time"],
desc = L["Toggle using local time on and off."],
type = "toggle",
order = 190,
get = function() return self.db.profile.localtime end,
set = function(v) self.db.profile.localtime = v end
},
toggle = {
name = L["Toggle"],
desc = L["Toggle the module on and off."],
type = "toggle",
order = 200,
get = function() return self.db.profile.on end,
set = function() self.db.profile.on = Prat:ToggleModuleActive("timestamps") end
}
}
}
end
function Prat_Timestamps:OnEnable()
for i=1,NUM_CHAT_WINDOWS do
Prat_Timestamps:SetFrameStatus(i)
end
self.secondsDifference = 0
_,self.lastMinute = GetGameTime()
end
function Prat_Timestamps:SetFrameStatus(id)
if self.db.profile.show[id] then
if not self:IsHooked(getglobal("ChatFrame"..id), "AddMessage") then self:Hook(getglobal("ChatFrame"..id), "AddMessage", "AddMessage"..id) end
else
if self:IsHooked(getglobal("ChatFrame"..id), "AddMessage") then self:Unhook(getglobal("ChatFrame"..id), "AddMessage") end
end
end
function Prat_Timestamps:AddMessage1(...)
Prat_Timestamps:AddMessage(1, unpack(arg))
end
function Prat_Timestamps:AddMessage2(...)
Prat_Timestamps:AddMessage(2, unpack(arg))
end
function Prat_Timestamps:AddMessage3(...)
Prat_Timestamps:AddMessage(3, unpack(arg))
end
function Prat_Timestamps:AddMessage4(...)
Prat_Timestamps:AddMessage(4, unpack(arg))
end
function Prat_Timestamps:AddMessage5(...)
Prat_Timestamps:AddMessage(5, unpack(arg))
end
function Prat_Timestamps:AddMessage6(...)
Prat_Timestamps:AddMessage(6, unpack(arg))
end
function Prat_Timestamps:AddMessage7(...)
Prat_Timestamps:AddMessage(7, unpack(arg))
end
function Prat_Timestamps:AddMessage(id, frame, text, ...)
if text then
-- get timestamp format
local dateFormat
dateFormat = self.db.profile.format[id]
-- get space character useage
if ( self.db.profile.space ) then space = " " else space = "" end
-- get color format
if self.db.profile.colortimestamp then
local color = string.format("%02x%02x%02x", self.db.profile.color.r*255, self.db.profile.color.g*255, self.db.profile.color.b*255)
text = string.format("|cff"..color.."%s|r" .. space .. "%s", self:GetTime(dateFormat), text)
else
text = string.format("%s".. space .. "%s", self:GetTime(dateFormat), text)
end
end
self.hooks[frame].AddMessage(frame, text, unpack(arg))
end
function Prat_Timestamps:GetTime(format)
if self.db.profile.localtime then
return date(format)
else
local tempDate = date("*t")
tempDate["hour"], tempDate["min"] = GetGameTime()
-- taken from FuBar_ClockFu
if self.lastMinute ~= tempDate["min"] then
_,self.lastMinute = GetGameTime()
self.secondsDifference = mod(time(), 60)
end
tempDate["sec"] = mod(time() - self.secondsDifference, 60)
return date(format, time(tempDate))
end
end