From 812afed59ce4439b4bedf867090b3989514c00d8 Mon Sep 17 00:00:00 2001 From: TheKrowi <22818581+TheKrowi@users.noreply.github.com> Date: Thu, 18 Aug 2022 18:11:51 +0200 Subject: [PATCH] workaround for C_AreaPoiInfo.GetAreaPOISecondsLeft not returning a time anymore --- CHANGELOG.md | 4 +++ Changelogs/Changelog.md | 5 ++- Data/EventData.lua | 41 ++++++------------------- GUI/Misc/AlertFrame/AlertFrameMixin.lua | 5 +++ GUI/Misc/SideButton.lua | 9 +++++- Krowi_AchievementFilter.toc | 2 +- Krowi_AchievementFilter_Wrath.toc | 2 +- 7 files changed, 33 insertions(+), 35 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9db60223..0605f14c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,10 @@ # Changelog All notable changes to this project will be documented in this file. +## 39.2 - 2022-08-xx +### Fixed +- Workaround untill Blizzard fixes C_AreaPoiInfo.GetAreaPOISecondsLeft not returning seconds left anymore; handled by adding active events and showing no time data + ## 39.1 - 2022-08-17 ### Fixed - Achievements that were never obtainable or only once (Realm First!) should be flagged correct again diff --git a/Changelogs/Changelog.md b/Changelogs/Changelog.md index 761f5797..30b39479 100644 --- a/Changelogs/Changelog.md +++ b/Changelogs/Changelog.md @@ -12,4 +12,7 @@ - Added translations for all missing texts in English, German and Chinese (Simplified) ### Fixed (39.1) -- Achievements that were never obtainable or only once (Realm First!) should be flagged correct again \ No newline at end of file +- Achievements that were never obtainable or only once (Realm First!) should be flagged correct again + +### Fixed (39.2) +- Workaround untill Blizzard fixes C_AreaPoiInfo.GetAreaPOISecondsLeft not returning seconds left anymore; handled by adding active events and showing no time data \ No newline at end of file diff --git a/Data/EventData.lua b/Data/EventData.lua index 39ddba0e..c85182bf 100644 --- a/Data/EventData.lua +++ b/Data/EventData.lua @@ -126,10 +126,10 @@ function eventData.GetActiveWorldEvents() end function GetSavedWorldEvents(activeWorldEvents, currentDate) - for id, event in next, EventDetails.WorldEvents do - local deltaT = math.floor((event.EndTime - currentDate) / (3600 * 24)); - -- diagnostics.Debug(id .. " - " .. event.Name .. " - " .. tostring(deltaT)); - if deltaT < 0 or not addon.Options.db.EventReminders.WorldEvents[id] then + for id, _ in next, EventDetails.WorldEvents do + local event = data.WorldEvents[id]; + local poiInfo = C_AreaPoiInfo.GetAreaPOIInfo(event.MapID, event.ID); + if poiInfo == nil or not addon.Options.db.EventReminders.WorldEvents[id] then EventDetails.WorldEvents[id] = nil; end end @@ -137,36 +137,23 @@ function GetSavedWorldEvents(activeWorldEvents, currentDate) for id, event in next, data.WorldEvents do if EventDetails.WorldEvents[id] then event.EventDetails = EventDetails.WorldEvents[id]; - -- diagnostics.Debug("Existing event active:" .. event.ID .. " - " .. event.EventDetails.Name .. " - " .. tostring(deltaT)); tinsert(activeWorldEvents, event); end end end function GetNewWorldEvents(activeWorldEvents) - -- print("GetNewWorldEvents(activeWorldEvents)") for _, event in next, data.WorldEvents do - -- print(event.Id, event.ID, event.Icon, event.Name, event.MapID, event.TotalDuration); - if event.EventDetails == nil and addon.Options.db.EventReminders.WorldEvents[event.ID] then + if event.EventDetails == nil and addon.Options.db.EventReminders.WorldEvents[event.Id] then local poiInfo = C_AreaPoiInfo.GetAreaPOIInfo(event.MapID, event.ID); - -- print(poiInfo); if poiInfo then -- The event is active local secondsLeft = C_AreaPoiInfo.GetAreaPOISecondsLeft(event.ID); - -- diagnostics.Debug(secondsLeft); - if secondsLeft == nil or secondsLeft == 0 then - -- print("problem", event.Id) - return; -- C_AreaPoiInfo is not yet properly loaded + local startTime, endTime; + if secondsLeft ~= nil and secondsLeft ~= 0 then + startTime, endTime = GetStartAndEndTime(secondsLeft, event.TotalDuration or 0); end - local startTime, endTime = GetStartAndEndTime(secondsLeft, event.TotalDuration or 0); - -- diagnostics.Debug(startTime); - -- diagnostics.Debug(endTime); - event.EventDetails = {StartTime = startTime, EndTime = endTime, Name = event.Name}; - -- diagnostics.Debug(event.ID .. " - " .. event.EventDetails.Name .. " - " .. - -- date("%Y/%m/%d %H:%M", event.EventDetails.StartTime) .. " - " .. date("%Y/%m/%d %H:%M", event.EventDetails.EndTime)); - - -- diagnostics.Debug("New event active:" .. event.ID .. " - " .. event.EventDetails.Name .. " - " .. tostring(deltaT)); EventDetails.WorldEvents[event.ID] = event.EventDetails; tinsert(activeWorldEvents, event); else @@ -211,8 +198,8 @@ end function GetNewWidgetEvents(activeWidgetEvents) for _, event in next, data.WidgetEvents do - if event.EventDetails == nil and addon.Options.db.EventReminders.WidgetEvents[event.ID] then - local widgetInfo = C_UIWidgetManager.GetTextWithStateWidgetVisualizationInfo(event.ID); + if event.EventDetails == nil and addon.Options.db.EventReminders.WidgetEvents[event.Id] then + local widgetInfo = C_UIWidgetManager.GetTextWithStateWidgetVisualizationInfo(event.Id); if widgetInfo and widgetInfo.shownState == 1 then -- The event is active local secondsLeft = event.TotalDuration; if secondsLeft == 604800 then @@ -220,20 +207,12 @@ function GetNewWidgetEvents(activeWidgetEvents) else secondsLeft = nil; end - -- diagnostics.Debug(secondsLeft); if secondsLeft == nil or secondsLeft == 0 then return; -- Widget time not yet supported end local startTime, endTime = GetStartAndEndTime(secondsLeft, event.TotalDuration or 0); - -- diagnostics.Debug(startTime); - -- diagnostics.Debug(endTime); - event.EventDetails = {StartTime = startTime, EndTime = endTime, Name = event.Name}; - -- diagnostics.Debug(event.ID .. " - " .. event.EventDetails.Name .. " - " .. - -- date("%Y/%m/%d %H:%M", event.EventDetails.StartTime) .. " - " .. date("%Y/%m/%d %H:%M", event.EventDetails.EndTime)); - - -- diagnostics.Debug("New event active:" .. event.ID .. " - " .. event.EventDetails.Name .. " - " .. tostring(deltaT)); EventDetails.WidgetEvents[event.ID] = event.EventDetails; tinsert(activeWidgetEvents, event); else diff --git a/GUI/Misc/AlertFrame/AlertFrameMixin.lua b/GUI/Misc/AlertFrame/AlertFrameMixin.lua index ddab964a..b5211268 100644 --- a/GUI/Misc/AlertFrame/AlertFrameMixin.lua +++ b/GUI/Misc/AlertFrame/AlertFrameMixin.lua @@ -6,6 +6,11 @@ KrowiAF_AlertFrameMixin = {}; function KrowiAF_AlertFrameMixin:UpdateEventRuntime() local line1, line2, timeLeft; + if self.Event.EventDetails.StartTime == nil or self.Event.EventDetails.EndTime == nil then + self.Unlocked:SetText(addon.L["No time data available"]); + return; + end + if addon.Options.db.EventReminders.TimeDisplay.Line1 == 3 or addon.Options.db.EventReminders.TimeDisplay.Line2 == 4 then -- Time Left local secondsLeft = self.Event.EventDetails.EndTime - time(); local days = floor(secondsLeft / 86400); diff --git a/GUI/Misc/SideButton.lua b/GUI/Misc/SideButton.lua index 1065a010..8ff9c523 100644 --- a/GUI/Misc/SideButton.lua +++ b/GUI/Misc/SideButton.lua @@ -13,7 +13,14 @@ end local function OnShow(self, otherButtons) self:UpdateEventRuntime(); - if self.Event.EventDetails.EndTime - time() < 0 then -- Event finished so remove button and reorder rest + local eventElapsed; + if self.Event.MapID then -- Handle the world events different, elapsed if not visible on the map + local poiInfo = C_AreaPoiInfo.GetAreaPOIInfo(self.Event.MapID, self.Event.Id); + eventElapsed = poiInfo == nil; + else + eventElapsed = self.Event.EventDetails.EndTime - time() < 0; + end + if eventElapsed then -- Event finished so remove button and reorder rest for i = 1, #otherButtons, 1 do if otherButtons[i].Event.ID == self.Event.ID then -- Found this button if i == 1 and i + 1 <= #otherButtons then -- Button is the 1st and there are more diff --git a/Krowi_AchievementFilter.toc b/Krowi_AchievementFilter.toc index a609db71..41f77a0b 100644 --- a/Krowi_AchievementFilter.toc +++ b/Krowi_AchievementFilter.toc @@ -1,6 +1,6 @@ ## Interface: 90207 ## Title: Krowi's |cFF1D92C2Achievement Filter|r -## Version: 39.1 +## Version: 39.2-alpha1 ## Author: Krowi-Frostmane EU ## SavedVariables: Options, SavedData, Filters, EventDetails, Test ## Notes: Filters your achievements. diff --git a/Krowi_AchievementFilter_Wrath.toc b/Krowi_AchievementFilter_Wrath.toc index 5a98f221..17f1c1c5 100644 --- a/Krowi_AchievementFilter_Wrath.toc +++ b/Krowi_AchievementFilter_Wrath.toc @@ -1,6 +1,6 @@ ## Interface: 30400 ## Title: Krowi's |cFF1D92C2Achievement Filter|r -## Version: 39.1 +## Version: 39.2-alpha1 ## Author: Krowi-Frostmane EU ## SavedVariables: Options, SavedData, Filters, EventDetails, Test ## Notes: Filters your achievements.