Files
coa-quartz/Quartz/modules/Timer.lua
T
Andrew6810 3b75efe038 init
2022-10-21 07:30:59 -07:00

212 lines
5.5 KiB
Lua

--[[
Copyright (C) 2006-2007 Nymbia
Copyright (C) 2010 Hendrik "Nevcairiel" Leppkes < h.leppkes@gmail.com >
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
]]
local Quartz3 = LibStub("AceAddon-3.0"):GetAddon("Quartz3")
local L = LibStub("AceLocale-3.0"):GetLocale("Quartz3")
local MODNAME = "Timer"
local Timer = Quartz3:NewModule(MODNAME, "AceEvent-3.0")
local Mirror = Quartz3:GetModule("Mirror")
----------------------------
-- Upvalues
local GetTime = GetTime
local unpack, pairs, ipairs, tonumber = unpack, pairs, ipairs, tonumber
local table_remove = table.remove
local external = Mirror.ExternalTimers
local thistimers = {}
local getOptions
function Timer:ChatHandler(msg)
if self:IsEnabled() then
if msg:match("^kill") then
local name = msg:match("^kill (.+)$")
if name then
external[name] = nil
for k, v in ipairs(thistimers) do
if v == name then
table_remove(thistimers, k)
break
end
end
self:SendMessage("Quartz3Mirror_UpdateCustom")
else
return Quartz3:Print(L["Usage: /quartztimer timername 60 or /quartztimer kill timername"])
end
else
local duration = tonumber(msg:match("^(%d+)"))
local name
if duration then
name = msg:match("^%d+ (.+)$")
else
duration = tonumber(msg:match("(%d+)$"))
if not duration then
return Quartz3:Print(L["Usage: /quartztimer timername 60 or /quartztimer 60 timername"])
end
name = msg:match("^(.+) %d+$")
end
if not name then
return Quartz3:Print(L["Usage: /quartztimer timername 60 or /quartztimer kill timername"])
end
local currentTime = GetTime()
external[name].startTime = currentTime
external[name].endTime = currentTime + duration
for k, v in ipairs(thistimers) do
if v == name then
table_remove(thistimers, k)
break
end
end
thistimers[#thistimers+1] = name
self:SendMessage("Quartz3Mirror_UpdateCustom")
end
end
end
function Timer:OnDisable()
for k, v in pairs(thistimers) do
external[v] = nil
thistimers[k] = nil
end
self:SendMessage("Quartz3Mirror_UpdateCustom")
end
local function chatHandler(message)
Timer:ChatHandler(message)
end
function Timer:OnInitialize()
self:SetEnabledState(Quartz3:GetModuleEnabled(MODNAME))
Quartz3:RegisterModuleOptions(MODNAME, getOptions, L["Timer"])
Quartz3:RegisterChatCommand("qt", chatHandler)
Quartz3:RegisterChatCommand("quartzt", chatHandler)
Quartz3:RegisterChatCommand("quartztimer", chatHandler)
end
do
local newname, newlength
local options
function getOptions()
if not options then
options = {
type = "group",
name = L["Timer"],
order = 600,
args = {
toggle = {
type = "toggle",
name = L["Enable"],
desc = L["Enable"],
get = function()
return Quartz3:GetModuleEnabled(MODNAME)
end,
set = function(info, v)
Quartz3:SetModuleEnabled(MODNAME, v)
end,
order = 99,
width = "full",
},
newtimername = {
type = "input",
name = L["New Timer Name"],
desc = L["Set a name for the new timer"],
get = function()
return newname or ""
end,
set = function(info, v)
newname = v
end,
order = 100,
},
newtimerlength = {
type = "input",
name = L["New Timer Length"],
desc = L["Length of the new timer, in seconds"],
get = function()
return newlength or 0
end,
set = function(info, v)
newlength = tonumber(v)
end,
usage = L["<Time in seconds>"],
order = 101,
},
makenewtimer = {
type = "execute",
name = L["Make Timer"],
desc = L["Make a new timer using the above settings. NOTE: it may be easier for you to simply use the command line to make timers, /qt"],
func = function()
local currentTime = GetTime()
external[newname].startTime = currentTime
external[newname].endTime = currentTime + newlength
for k, v in ipairs(thistimers) do
if v == newname then
table_remove(thistimers, k)
break
end
end
thistimers[#thistimers+1] = newname
Timer:SendMessage("Quartz3Mirror_UpdateCustom")
newname = nil
newlength = nil
end,
disabled = function()
return not (newname and newlength)
end,
order = -3,
},
nl = {
type = "description",
name = "",
order = -2,
},
killtimer = {
type = "select",
name = L["Stop Timer"],
desc = L["Select a timer to stop"],
get = function()
return ""
end,
set = function(info, name)
if name then
external[name] = nil
for k, v in ipairs(thistimers) do
if v == name then
table_remove(thistimers, k)
break
end
end
Timer:SendMessage("Quartz3Mirror_UpdateCustom")
end
end,
values = thistimers,
order = -1,
},
},
}
end
return options
end
end