97e38d5c3d
release / release (push) Successful in 5s
- Extract AddCharacterTooltipHeader() + SetCharacterRowNameLevel() (Altoholic.lua);
nil-guards centralized, callers in AccountSummary/Activity/BagUsage/Skills/tooltip.
- Fix sites the manual sweep missed: Skills.lua (row + skill ranks), Keys.lua x3,
ShowClassIcons sort (Altoholic.lua:705, getters bypass their own or-0 via the wrapper).
- Restore login scan: OnPlayerAlive was ghost-only (fdcb25a) so iLvl never populated;
now scans once per session. Removed dated DEBUG leftovers.
343 lines
10 KiB
Lua
343 lines
10 KiB
Lua
local addonName = ...
|
|
local addon = _G[addonName]
|
|
|
|
local L = LibStub("AceLocale-3.0"):GetLocale(addonName)
|
|
|
|
local INFO_REALM_LINE = 0
|
|
local INFO_CHARACTER_LINE = 1
|
|
local INFO_TOTAL_LINE = 2
|
|
|
|
local WHITE = "|cFFFFFFFF"
|
|
local GREEN = "|cFF00FF00"
|
|
local YELLOW = "|cFFFFFF00"
|
|
local GREY = "|cFF808080"
|
|
local GOLD = "|cFFFFD700"
|
|
local RED = "|cFFFF0000"
|
|
|
|
local ICON_FACTION_HORDE = "Interface\\Icons\\INV_BannerPVP_01"
|
|
local ICON_FACTION_ALLIANCE = "Interface\\Icons\\INV_BannerPVP_02"
|
|
|
|
addon.Activity = {}
|
|
|
|
local ns = addon.Activity -- ns = namespace
|
|
local Characters = addon.Characters
|
|
|
|
function ns:Update()
|
|
local VisibleLines = 14
|
|
local frame = "AltoholicFrameActivity"
|
|
local entry = frame.."Entry"
|
|
|
|
local DS = DataStore
|
|
|
|
local offset = FauxScrollFrame_GetOffset( _G[ frame.."ScrollFrame" ] );
|
|
local DisplayedCount = 0
|
|
local VisibleCount = 0
|
|
local DrawRealm
|
|
local i=1
|
|
|
|
for _, line in pairs(Characters:GetView()) do
|
|
local lineType = Characters:GetLineType(line)
|
|
|
|
if (offset > 0) or (DisplayedCount >= VisibleLines) then -- if the line will not be visible
|
|
if lineType == INFO_REALM_LINE then -- then keep track of counters
|
|
if Characters:GetField(line, "isCollapsed") == false then
|
|
DrawRealm = true
|
|
else
|
|
DrawRealm = false
|
|
end
|
|
VisibleCount = VisibleCount + 1
|
|
offset = offset - 1 -- no further control, nevermind if it goes negative
|
|
elseif DrawRealm then
|
|
VisibleCount = VisibleCount + 1
|
|
offset = offset - 1 -- no further control, nevermind if it goes negative
|
|
end
|
|
else -- line will be displayed
|
|
if lineType== INFO_REALM_LINE then
|
|
local _, realm, account = Characters:GetInfo(line)
|
|
|
|
if Characters:GetField(line, "isCollapsed") == false then
|
|
_G[ entry..i.."Collapse" ]:SetNormalTexture("Interface\\Buttons\\UI-MinusButton-Up");
|
|
DrawRealm = true
|
|
else
|
|
_G[ entry..i.."Collapse" ]:SetNormalTexture("Interface\\Buttons\\UI-PlusButton-Up");
|
|
DrawRealm = false
|
|
end
|
|
_G[entry..i.."Collapse"]:Show()
|
|
_G[entry..i.."Name"]:SetWidth(300)
|
|
_G[entry..i.."Name"]:SetPoint("TOPLEFT", 25, 0)
|
|
_G[entry..i.."NameNormalText"]:SetWidth(300)
|
|
if account == "Default" then -- saved as default, display as localized.
|
|
_G[entry..i.."NameNormalText"]:SetText(format("%s (%s".. L["Account"]..": %s%s|r)", realm, WHITE, GREEN, L["Default"]))
|
|
else
|
|
local last = addon:GetLastAccountSharingInfo(realm, account)
|
|
_G[entry..i.."NameNormalText"]:SetText(format("%s (%s".. L["Account"]..": %s%s %s%s|r)", realm, WHITE, GREEN, account, YELLOW, last or ""))
|
|
end
|
|
_G[entry..i.."Level"]:SetText("")
|
|
_G[entry..i.."MailsNormalText"]:SetText("")
|
|
_G[entry..i.."LastMailCheckNormalText"]:SetText("")
|
|
_G[entry..i.."AuctionsNormalText"]:SetText("")
|
|
_G[entry..i.."BidsNormalText"]:SetText("")
|
|
_G[entry..i.."LastAHCheckNormalText"]:SetText("")
|
|
_G[entry..i.."LastLogoutNormalText"]:SetText("")
|
|
|
|
_G[ entry..i ]:SetID(line)
|
|
_G[ entry..i ]:Show()
|
|
i = i + 1
|
|
VisibleCount = VisibleCount + 1
|
|
DisplayedCount = DisplayedCount + 1
|
|
elseif DrawRealm then
|
|
if (lineType == INFO_CHARACTER_LINE) then
|
|
local character = DS:GetCharacter( Characters:GetInfo(line) )
|
|
|
|
local icon
|
|
if DS:GetCharacterFaction(character) == "Alliance" then
|
|
icon = addon:TextureToFontstring(ICON_FACTION_ALLIANCE, 18, 18) .. " "
|
|
else
|
|
icon = addon:TextureToFontstring(ICON_FACTION_HORDE, 18, 18) .. " "
|
|
end
|
|
|
|
_G[entry..i.."Collapse"]:Hide()
|
|
_G[entry..i.."Name"]:SetWidth(170)
|
|
_G[entry..i.."Name"]:SetPoint("TOPLEFT", 10, 0)
|
|
_G[entry..i.."NameNormalText"]:SetWidth(170)
|
|
addon:SetCharacterRowNameLevel(entry, i, icon, character)
|
|
|
|
local color
|
|
local num = DS:GetNumMails(character) or 0
|
|
if num == 0 then
|
|
color = GREY
|
|
_G[entry..i.."MailsNormalText"]:SetText(GREY .. "0")
|
|
else
|
|
color = GREEN -- green by default, red if at least one mail is about to expire
|
|
|
|
local threshold = DataStore:GetOption("DataStore_Mails", "MailWarningThreshold")
|
|
if (DS:GetNumExpiredMails(character, threshold) or 0) > 0 then
|
|
color = RED
|
|
end
|
|
end
|
|
_G[entry..i.."MailsNormalText"]:SetText(color .. num)
|
|
|
|
local lastVisit = DS:GetMailboxLastVisit(character)
|
|
_G[entry..i.."LastMailCheckNormalText"]:SetText(WHITE .. addon:FormatDelay(lastVisit))
|
|
|
|
num = DS:GetNumAuctions(character) or 0
|
|
_G[entry..i.."AuctionsNormalText"]:SetText(((num == 0) and GREY or GREEN) .. num)
|
|
|
|
num = DS:GetNumBids(character) or 0
|
|
_G[entry..i.."BidsNormalText"]:SetText(((num == 0) and GREY or GREEN) .. num)
|
|
|
|
lastVisit = DS:GetAuctionHouseLastVisit(character)
|
|
_G[entry..i.."LastAHCheckNormalText"]:SetText(WHITE .. addon:FormatDelay(lastVisit))
|
|
|
|
local player, realm, account = Characters:GetInfo(line)
|
|
if (player == UnitName("player")) and (realm == GetRealmName()) and (account == "Default") then
|
|
_G[entry..i.."LastLogoutNormalText"]:SetText(GREEN .. GUILD_ONLINE_LABEL)
|
|
else
|
|
_G[entry..i.."LastLogoutNormalText"]:SetText(WHITE .. addon:FormatDelay(DS:GetLastLogout(character)))
|
|
end
|
|
elseif (lineType == INFO_TOTAL_LINE) then
|
|
_G[entry..i.."Collapse"]:Hide()
|
|
_G[entry..i.."Name"]:SetWidth(200)
|
|
_G[entry..i.."Name"]:SetPoint("TOPLEFT", 15, 0)
|
|
_G[entry..i.."NameNormalText"]:SetWidth(200)
|
|
_G[entry..i.."NameNormalText"]:SetText(L["Totals"])
|
|
_G[entry..i.."Level"]:SetText(Characters:GetField(line, "level"))
|
|
_G[entry..i.."MailsNormalText"]:SetText("")
|
|
_G[entry..i.."LastMailCheckNormalText"]:SetText("")
|
|
_G[entry..i.."AuctionsNormalText"]:SetText("")
|
|
_G[entry..i.."BidsNormalText"]:SetText("")
|
|
_G[entry..i.."LastAHCheckNormalText"]:SetText("")
|
|
_G[entry..i.."LastLogoutNormalText"]:SetText("")
|
|
end
|
|
_G[ entry..i ]:SetID(line)
|
|
_G[ entry..i ]:Show()
|
|
i = i + 1
|
|
VisibleCount = VisibleCount + 1
|
|
DisplayedCount = DisplayedCount + 1
|
|
end
|
|
end
|
|
end
|
|
|
|
while i <= VisibleLines do
|
|
_G[ entry..i ]:SetID(0)
|
|
_G[ entry..i ]:Hide()
|
|
i = i + 1
|
|
end
|
|
|
|
FauxScrollFrame_Update( _G[ frame.."ScrollFrame" ], VisibleCount, VisibleLines, 18);
|
|
end
|
|
|
|
function ns:OnEnter(self)
|
|
local line = self:GetParent():GetID()
|
|
local lineType = Characters:GetLineType(line)
|
|
if lineType ~= INFO_CHARACTER_LINE then
|
|
return
|
|
end
|
|
|
|
local DS = DataStore
|
|
local character = DS:GetCharacter(Characters:GetInfo(line))
|
|
|
|
AltoTooltip:ClearLines();
|
|
AltoTooltip:SetOwner(self, "ANCHOR_RIGHT");
|
|
|
|
addon:AddCharacterTooltipHeader(character)
|
|
|
|
local zone, subZone = DS:GetLocation(character)
|
|
AltoTooltip:AddLine(format("%s: %s |r(%s|r)", L["Zone"], GOLD..(zone or "?"), GOLD..(subZone or "")),1,1,1)
|
|
|
|
AltoTooltip:AddLine(EXPERIENCE_COLON .. " "
|
|
.. GREEN .. (DS:GetXP(character) or 0) .. WHITE .. "/"
|
|
.. GREEN .. (DS:GetXPMax(character) or 0) .. WHITE .. " ("
|
|
.. GREEN .. (DS:GetXPRate(character) or 0) .. "%"
|
|
.. WHITE .. ")",1,1,1);
|
|
|
|
local restXP = DS:GetRestXP(character)
|
|
if restXP and restXP > 0 then
|
|
AltoTooltip:AddLine(format("%s: %s", L["Rest XP"], GREEN..restXP),1,1,1)
|
|
end
|
|
|
|
AltoTooltip:AddLine(" ",1,1,1);
|
|
AltoTooltip:AddLine(GOLD..CURRENCY..":",1,1,1);
|
|
|
|
local num = DS:GetNumCurrencies(character) or 0
|
|
for i = 1, num do
|
|
local isHeader, name, count = DS:GetCurrencyInfo(character, i)
|
|
if isHeader then
|
|
AltoTooltip:AddLine(YELLOW..name)
|
|
else
|
|
AltoTooltip:AddLine(format(" %s: %s", name, GREEN..count),1,1,1);
|
|
end
|
|
end
|
|
|
|
if num == 0 then
|
|
AltoTooltip:AddLine(WHITE..NONE,1,1,1);
|
|
end
|
|
|
|
AltoTooltip:Show();
|
|
end
|
|
|
|
local VIEW_MAILS = 3
|
|
local VIEW_AUCTIONS = 5
|
|
local VIEW_BIDS = 6
|
|
|
|
function ns:OnClick(self)
|
|
local line = self:GetParent():GetID()
|
|
local lineType = Characters:GetLineType(line)
|
|
|
|
if lineType ~= INFO_CHARACTER_LINE then
|
|
return
|
|
end
|
|
|
|
local id = self:GetID()
|
|
if (id == 2) or (id >= 5) then -- exit if it's not the right column
|
|
return
|
|
end
|
|
|
|
addon:SetCurrentCharacter( Characters:GetInfo(line) )
|
|
|
|
local DS = DataStore
|
|
local character = DS:GetCharacter(Characters:GetInfo(line))
|
|
|
|
local action, num
|
|
|
|
if id == 1 then -- mails
|
|
num = DS:GetNumMails(character) or 0
|
|
if num > 0 then -- only set the action if there are data to show
|
|
action = VIEW_MAILS
|
|
end
|
|
elseif id == 3 then -- auctions
|
|
num = DS:GetNumAuctions(character) or 0
|
|
if num > 0 then
|
|
action = VIEW_AUCTIONS
|
|
end
|
|
elseif id == 4 then -- bids
|
|
num = DS:GetNumBids(character) or 0
|
|
if num > 0 then
|
|
action = VIEW_BIDS
|
|
end
|
|
end
|
|
|
|
if action then
|
|
addon.Tabs.Characters:SetCurrent( addon:GetCurrentCharacter() )
|
|
addon.Tabs:OnClick(2)
|
|
addon.Tabs.Characters:ViewCharInfo(action)
|
|
end
|
|
end
|
|
|
|
function ns:Mails_OnEnter(self)
|
|
local line = self:GetParent():GetID()
|
|
local lineType = Characters:GetLineType(line)
|
|
|
|
if lineType ~= INFO_CHARACTER_LINE then
|
|
return
|
|
end
|
|
|
|
local DS = DataStore
|
|
local character = DS:GetCharacter(Characters:GetInfo(line))
|
|
local num = DS:GetNumMails(character)
|
|
if not num or num == 0 then return end
|
|
|
|
AltoTooltip:ClearLines();
|
|
AltoTooltip:SetOwner(self, "ANCHOR_RIGHT");
|
|
|
|
AltoTooltip:AddDoubleLine(DS:GetColoredCharacterName(character), format("%sMails found: %s%d", WHITE, GREEN, num))
|
|
|
|
local numReturned, numDeleted, numExpired = 0, 0, 0
|
|
local closestReturn
|
|
local closestDelete
|
|
|
|
for index = 1, num do
|
|
local _, _, _, _, _, isReturned = DS:GetMailInfo(character, index)
|
|
local _, seconds = DS:GetMailExpiry(character, index)
|
|
|
|
if seconds < 0 then -- mail has already expired
|
|
if isReturned then -- .. and it was a returned mail
|
|
numExpired = numExpired + 1
|
|
end
|
|
else
|
|
if isReturned then
|
|
numDeleted = numDeleted + 1
|
|
|
|
if not closestDelete then
|
|
closestDelete = seconds
|
|
else
|
|
if seconds < closestDelete then
|
|
closestDelete = seconds
|
|
end
|
|
end
|
|
else
|
|
numReturned = numReturned + 1
|
|
|
|
if not closestReturn then
|
|
closestReturn = seconds
|
|
else
|
|
if seconds < closestReturn then
|
|
closestReturn = seconds
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
AltoTooltip:AddLine(" ");
|
|
AltoTooltip:AddLine(format("%s%d %swill be returned upon expiry", GREEN, numReturned, WHITE))
|
|
if closestReturn then
|
|
AltoTooltip:AddLine(format("%sClosest return in %s%s", WHITE, GREEN, SecondsToTime(closestReturn)))
|
|
end
|
|
|
|
if numDeleted > 0 then
|
|
AltoTooltip:AddLine(" ");
|
|
AltoTooltip:AddLine(format("%s%d %swill be %sdeleted%s upon expiry", GREEN, numDeleted, WHITE, RED, WHITE))
|
|
if closestDelete then
|
|
AltoTooltip:AddLine(format("%sClosest deletion in %s%s", WHITE, GREEN, SecondsToTime(closestDelete)))
|
|
end
|
|
end
|
|
|
|
if numExpired > 0 then
|
|
AltoTooltip:AddLine(" ");
|
|
AltoTooltip:AddLine(format("%s%d %shave expired !", RED, numExpired, WHITE))
|
|
end
|
|
|
|
AltoTooltip:Show();
|
|
end
|