/trunk/RDX/Raid/RaidLogger
if overrideName then |
tbln = overrideName; |
else |
local myunit = RDXDAL._ReallyFastProject("player"); |
local myunit = RDXDAL.GetMyUnit(); |
tbln = (prefix or "") .. myunit.name .. " " .. date("%H:%M:%S", VFLT.GetServerTime()); |
end |
local symtab, cdata = Omni.CompressData(tbl); |
local function Omni_HistoryQuery(commInfo, name, secs) |
-- If not from a leader, abort |
if not RPC.IsGroupLeader(commInfo) then return; end |
local myunit = RDXDAL._ReallyFastProject("player"); |
local myunit = RDXDAL.GetMyUnit(); |
-- If this query isn't directed at me, abort. |
if string.lower(name) ~= myunit.name then return; end |
secs = tonumber(secs); if (not secs) then return; end |
local function Omni_TimeQuery(commInfo, name, serverTime, window) |
-- If not from a leader, abort |
if not RPC.IsGroupLeader(commInfo) then return; end |
local myunit = RDXDAL._ReallyFastProject("player"); |
local myunit = RDXDAL.GetMyUnit(); |
-- If this query isn't directed at me, abort. |
if string.lower(name) ~= myunit.name then return; end |
serverTime, window = tonumber(serverTime), VFL.clamp(tonumber(window), 0, 3600); |
t = math.modf(t*10); |
local now = VFLT.GetTimeTenths(); |
local targetTime = now - t; |
local ret = Omni.TemporalExtractionTransform(Omni.localLog, "LAST", VFL.True, -1, function(tbl, row) |
if row.t and row.t >= targetTime then return true; end |
end); |
if ret then ret:Timeshift(-now); end |
return ret; |
local session = Omni.GetSessionByName("Local"); |
if session then |
local tbl = session:FindTable("WoWRDX:Logs_Me_tl"); |
if tbl then |
local ret = Omni.TemporalExtractionTransform(tbl, "LAST", VFL.True, -1, function(tbl, row) |
if row.tm and row.tm >= targetTime then return true; end |
end); |
if ret then ret:Timeshift(-now); end |
return ret; |
end |
end |
end |
-- Starting from the given server time, extract a window of +/- w seconds. |
function Omni.ExtractWindow(t, w) |
t = math.modf(t*10); w = math.modf(w*10); |
local t0, t1, dt = t-w, t+w, Omni.localLog.timeOffset; |
local ret = Omni.TemporalExtractionTransform(Omni.localLog, "LAST", VFL.True, -1, function(tbl, row) |
local rt = row.t; if not rt then return; end |
rt = rt + dt; |
if(rt < t0) or (rt > t1) then return nil; else return true; end |
end); |
if ret then ret:Timeshift(dt-t); end |
return ret; |
local t0, t1, dt = t-w, t+w; |
local session = Omni.GetSessionByName("Local"); |
if session then |
local tbl = session:FindTable("WoWRDX:Logs_Me_tl"); |
dt = tbl.timeOffset; |
if tbl then |
local ret = Omni.TemporalExtractionTransform(tbl, "LAST", VFL.True, -1, function(tbl, row) |
local rt = row.tm; if not rt then return; end |
rt = rt + dt; |
if(rt < t0) or (rt > t1) then return nil; else return true; end |
end); |
if ret then ret:Timeshift(dt-t); end |
return ret; |
end |
end |
end |
if(n >= x.sizemax) then row = table.remove(x.data, 1); VFL.empty(row); else row = {}; end |
row = VFL.copy(log); |
row.sg = nil; row.tg = nil; |
--VFL.print(row.tm); |
table.insert(x.data, row); |
OmniEvents:Dispatch("TABLE_DATA_CHANGED", x); |
end |
x.source = UnitName("player"); |
x.data = RDXGetTableLogs(path); |
x.timeOffset = 0; |
local sysEpoch = VFLT.GetSystemEpoch(); |
if sysEpoch then |
x.timeOffset = math.modf(sysEpoch:GetKernelTimeCorrection() * 10); |
else |
VFLEvents:Bind("SYSTEM_EPOCH_ESTABLISHED", nil, function(syse) |
x.timeOffset = math.modf(syse:GetKernelTimeCorrection() * 10); |
VFLEvents:Unbind("omni_init"); |
end, "omni_init"); |
end |
x.sizemax = md.data.size or 1000; |
x.path = path; |
if md.data.filter then |
function Omni.Table:Cleanse() |
if not self.data then return; end |
for _,row in ipairs(self.data) do |
if row.t then row.t = tonumber(row.t); end |
if row.tm then row.tm = tonumber(row.tm); end |
if row.x then row.x = tonumber(row.x); end |
if row.y then row.y = tonumber(row.y); end |
if row.e then row.e = tonumber(row.e); end |
function Omni.Table:Timeshift(dt) |
if self:IsImmutable() then return nil; end |
self.timeOffset = self.timeOffset - dt; |
for _,row in ipairs(self.data) do row.t = row.t + dt; end |
for _,row in ipairs(self.data) do row.tm = row.tm + dt; end |
return true; |
end |
--- Get the true time from a row of this table. |
function Omni.Table:GetRowTime(row) |
if row.t then |
return self.timeOffset + row.t; |
if row.tm then |
return self.timeOffset + row.tm; |
else |
return nil; |
end |
local rowType = data.y; |
local str = nil; |
-------------- TIME |
--if (tbl.displayTime == "RELATIVE") then |
if data.tm then |
--str = string.format("%0.1f", (data.tm / 10)); |
--if(data.tm < 0) then str = "T" .. str; else str = "T+" .. str; end |
str = date("%H:%M:%S", data.tm); |
if (tbl.displayTime == "RELATIVE") then |
str = string.format("%0.1f", (data.tm / 10)); |
if(data.tm < 0) then str = "T" .. str; else str = "T+" .. str; end |
tm:SetText("|cFFAAAAAA" .. str .. "|r"); |
elseif (tbl.displayTime == "ABSOLUTE") then |
local stWhole, stFrac = VFL.modf( (tbl.timeOffset + data.tm) / 10); |
local str = date("%H:%M:%S", stWhole); |
str = str .. string.format(".%1d", stFrac*10); |
tm:SetText("|cFFAAAAAA" .. str .. "|r"); |
end |
--elseif (tbl.displayTime == "ABSOLUTE") then |
-- local stWhole, stFrac = VFL.modf( (tbl.timeOffset + data.tm) / 10); |
-- local str = date("%H:%M:%S", stWhole); |
-- str = str .. string.format(".%1d", stFrac*10); |
-- tm:SetText("|cFFAAAAAA" .. str .. "|r"); |
--end |
-------------- SOURCE/TARGET |
--src:SetText(tbl:GetRowSource(data) or ""); |
--targ:SetText(tbl:GetRowTarget(data) or ""); |