Refactor Heimdall module fields for improved organization and clarity

This commit is contained in:
2025-05-18 11:36:40 +02:00
parent e3eefadb75
commit 6cb918c13c
3 changed files with 91 additions and 89 deletions

View File

@@ -37,29 +37,29 @@ local function init()
---@field GetLocaleForChannel fun(channel: string): string
---@field WhoQueryService WhoQueryService
---@field Whoer InitTable|{ShouldNotifyForZone: fun(zone: string): boolean}
---@field Messenger InitTable
---@field Spotter InitTable
---@field DeathReporter InitTable
---@field Inviter InitTable
---@field Dueler InitTable
---@field Bully InitTable
---@field AchievementSniffer InitTable
---@field AgentTracker AgentTracker
---@field Emoter InitTable
---@field Echoer InitTable
---@field Macroer InitTable
---@field Commander InitTable
---@field StinkyTracker StinkyTracker
---@field CombatAlerter InitTable
---@field Config InitTable
---@field Sniffer InitTable
---@field MinimapTagger InitTable
---@field BonkDetector InitTable
---@field Noter InitTable
---@field Bully InitTable
---@field CombatAlerter InitTable
---@field Commander InitTable
---@field Config InitTable
---@field Configurator InitTable
---@field DeathReporter InitTable
---@field Dueler InitTable
---@field Echoer InitTable
---@field Emoter InitTable
---@field Inviter InitTable
---@field Macroer InitTable
---@field Messenger InitTable
---@field MinimapTagger InitTable
---@field Network InitTable
---@field NetworkMessenger InitTable
---@field Noter InitTable
---@field Sniffer InitTable
---@field Spotter InitTable
---@field StinkyCache InitTable
---@field Configurator InitTable
---@field AchievementSniffer InitTable
---@field StinkyTracker StinkyTracker
--- Config ---
---@class HeimdallConfig
@@ -284,9 +284,6 @@ local function init()
---@field whoTicker Timer?
---@field ignored table<string, boolean>
---@class HeimdallNetworkData
---@field ticker Timer?
---@class HeimdallStinkyCacheData
---@field stinkies table<string, {value: number, timestamp: number}>

View File

@@ -2,13 +2,6 @@ local _, shared = ...
---@cast shared HeimdallShared
local ModuleName = "AgentTracker"
---@class AgentTracker
---@field Init fun(): nil
---@field Track fun(name: string): boolean
---@field IsAgent fun(name: string): boolean
---@field OnChange fun(callback: fun(name: string)): nil
---@field ForEach fun(callback: fun(name: string)): nil
---@class AgentTrackerData
---@field agents ReactiveValue<table<string, string>>
@@ -16,6 +9,8 @@ shared.agentTracker.agents = ReactiveValue(Heimdall_Data.config.agents)
---@class AgentTracker
shared.AgentTracker = {
---@param name string
---@return boolean
Track = function(name)
if not name then return false end
local exists = shared.AgentTracker.IsAgent(name)
@@ -28,11 +23,15 @@ shared.AgentTracker = {
end
return true
end,
---@param name string
---@return boolean
IsAgent = function(name)
if not name then return false end
return shared.agentTracker.agents[name] ~= nil
end,
---@param callback fun(agent: string)
OnChange = function(callback) shared.agentTracker.agents:onChange(callback) end,
---@param callback fun(agent: string)
ForEach = function(callback)
---@type table<string, string>
local agents = shared.agentTracker.agents:get()
@@ -40,6 +39,7 @@ shared.AgentTracker = {
callback(name)
end
end,
---@return nil
Init = function()
--/run Heimdall_Data.config.agents["Cyheuraeth"]=date("%Y-%m-%dT%H:%M:%S")
---@type table<string, boolean>

View File

@@ -2,72 +2,77 @@ local _, shared = ...
---@cast shared HeimdallShared
local ModuleName = "Network"
---@diagnostic disable-next-line: missing-fields
shared.Network = {}
function shared.Network.Init()
if not shared.network then shared.network = {} end
local updatePending = false
---@class HeimdallNetworkData
---@field ticker Timer?
local function FriendListUpdate()
updatePending = false
if not Heimdall_Data.config.network.enabled then return end
---@type table<string, boolean>
local friends = {}
for i = 1, GetNumFriends() do
local name, _, _, _, connected, _, _, _ = GetFriendInfo(i)
if name then
friends[name] = connected
if Heimdall_Data.config.network.debug then
print(string.format("[%s] Friend %s is %s", ModuleName, name, connected and "online" or "offline"))
shared.Network = {
Init = function()
if not shared.network then shared.network = {} end
local updatePending = false
local function FriendListUpdate()
updatePending = false
if not Heimdall_Data.config.network.enabled then return end
---@type table<string, boolean>
local friends = {}
for i = 1, GetNumFriends() do
local name, _, _, _, connected, _, _, _ = GetFriendInfo(i)
if name then
friends[name] = connected
if Heimdall_Data.config.network.debug then
print(
string.format("[%s] Friend %s is %s", ModuleName, name, connected and "online" or "offline")
)
end
else
if Heimdall_Data.config.network.debug then
print(string.format("[%s] Friend %s is nil", ModuleName, i))
end
end
else
if Heimdall_Data.config.network.debug then
print(string.format("[%s] Friend %s is nil", ModuleName, i))
end
for _, member in ipairs(Heimdall_Data.config.network.members) do
if friends[member] == nil and member ~= UnitName("player") then
if Heimdall_Data.config.network.debug then
print(string.format("[%s] Adding friend %s", ModuleName, member))
end
AddFriend(member)
end
end
friends[UnitName("player")] = true
shared.networkNodes = {}
-- Why are we skipping this again...?
-- if false then shared.networkNodes[#shared.networkNodes + 1] = UnitName("player") end
for _, player in ipairs(Heimdall_Data.config.network.members) do
if friends[player] then
shared.networkNodes[#shared.networkNodes + 1] = player
if Heimdall_Data.config.network.debug then
print(string.format("[%s] Adding network node %s", ModuleName, player))
end
end
end
if Heimdall_Data.config.network.debug then
print(string.format("[%s] Network nodes:", ModuleName))
shared.dumpTable(shared.networkNodes)
end
end
for _, member in ipairs(Heimdall_Data.config.network.members) do
if friends[member] == nil and member ~= UnitName("player") then
if Heimdall_Data.config.network.debug then
print(string.format("[%s] Adding friend %s", ModuleName, member))
end
AddFriend(member)
end
local friendsFrame = CreateFrame("Frame")
friendsFrame:RegisterEvent("FRIENDLIST_UPDATE")
friendsFrame:SetScript("OnEvent", function(self, event, ...) end)
local function NetworkTick()
if Heimdall_Data.config.network.debug then print("Network module is updating.") end
ShowFriends()
updatePending = true
C_Timer.After(1, function()
if updatePending then FriendListUpdate() end
end)
shared.network.ticker = C_Timer.NewTimer(Heimdall_Data.config.network.updateInterval, NetworkTick, 1)
end
friends[UnitName("player")] = true
shared.networkNodes = {}
-- Why are we skipping this again...?
-- if false then shared.networkNodes[#shared.networkNodes + 1] = UnitName("player") end
for _, player in ipairs(Heimdall_Data.config.network.members) do
if friends[player] then
shared.networkNodes[#shared.networkNodes + 1] = player
if Heimdall_Data.config.network.debug then
print(string.format("[%s] Adding network node %s", ModuleName, player))
end
end
end
if Heimdall_Data.config.network.debug then
print(string.format("[%s] Network nodes:", ModuleName))
shared.dumpTable(shared.networkNodes)
end
end
local friendsFrame = CreateFrame("Frame")
friendsFrame:RegisterEvent("FRIENDLIST_UPDATE")
friendsFrame:SetScript("OnEvent", function(self, event, ...) end)
local function NetworkTick()
if Heimdall_Data.config.network.debug then print("Network module is updating.") end
ShowFriends()
updatePending = true
C_Timer.After(1, function()
if updatePending then FriendListUpdate() end
end)
shared.network.ticker = C_Timer.NewTimer(Heimdall_Data.config.network.updateInterval, NetworkTick, 1)
end
NetworkTick()
print("[Heimdall] Network module loaded")
end
NetworkTick()
print("[Heimdall] Network module loaded")
end,
}