You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
1.8 KiB

local Details = _G.Details
local DF = _G.DetailsFramework
local C_Timer = _G.C_Timer
local unpack = _G.unpack
local addonName, Details222 = ...
--make a namespace for schedules
Details.Schedules = {}
local errorHandler = function(str)
return str
end
--run a scheduled function with its payload
local triggerScheduledTick = function(tickerObject)
local payload = tickerObject.payload
local callback = tickerObject.callback
local result, errortext = xpcall(callback, geterrorhandler(), unpack(payload))
if (not result) then
--Details:Msg("Error:", errortext, tickerObject.name or "")
end
return result
end
--schedule to repeat a task with an interval of @time
function Details.Schedules.NewTicker(time, callback, ...)
local payload = {...}
local newTicker = C_Timer.NewTicker(time, triggerScheduledTick)
newTicker.payload = payload
newTicker.callback = callback
--debug
newTicker.path = debugstack()
--
return newTicker
end
--cancel an ongoing ticker
function Details.Schedules.Cancel(tickerObject)
--ignore if there's no ticker object
if (tickerObject) then
return tickerObject:Cancel()
end
end
--schedule a task with an interval of @time
function Details.Schedules.NewTimer(time, callback, ...)
local payload = {...}
local newTimer = C_Timer.NewTimer(time, triggerScheduledTick)
newTimer.payload = payload
newTimer.callback = callback
--debug
newTimer.path = debugstack()
--
return newTimer
end
--schedule a task with an interval of @time without payload
function Details.Schedules.After(time, callback)
C_Timer.After(time, callback)
end
function Details.Schedules.SetName(object, name)
object.name = name
end