comparison ClassPlan.lua @ 8:802abb8a10ea

Fixed loss of mission progress data while changing zones by using `GARRISON_LANDINGPAGE_SHIPMENTS' as the trigger point for mission scoops. * `MISSION_LIST_UPDATE' fires before all data is available, and if this is happens on a loading screen, then several landing page items may get snipped.
author Nenue
date Sun, 23 Oct 2016 07:19:53 -0400
parents 48001b6a9496
children a2b623043970
comparison
equal deleted inserted replaced
7:34d9fbf7af20 8:802abb8a10ea
26 playerFirst = false, 26 playerFirst = false,
27 prototypes = {} 27 prototypes = {}
28 } 28 }
29 ClassPlanMissionMixin = { 29 ClassPlanMissionMixin = {
30 templateName = 'ClassPlanMissionEntry', 30 templateName = 'ClassPlanMissionEntry',
31 events = {'GARRISON_MISSION_LIST_UPDATE', 'GARRISON_MISSION_STARTED', 'GARRISON_MISSION_FINISHED'},} 31 events = {'GARRISON_MISSION_LIST_UPDATE', 'GARRISON_MISSION_STARTED', 'GARRISON_MISSION_FINISHED', 'GARRISON_LANDINGPAGE_SHIPMENTS'},}
32 ClassPlanShipmentMixin = { 32 ClassPlanShipmentMixin = {
33 templateName = 'ClassPlanShipmentEntry', 33 templateName = 'ClassPlanShipmentEntry',
34 parent = false, 34 parent = false,
35 point = 'TOPRIGHT', 35 point = 'TOPRIGHT',
36 relativePoint ='TOPRIGHT', 36 relativePoint ='TOPRIGHT',
54 54
55 MissionsHandler.GetPlayerData = function(self) 55 MissionsHandler.GetPlayerData = function(self)
56 if not self.profile then 56 if not self.profile then
57 return 57 return
58 end 58 end
59 self.items = C_Garrison.GetLandingPageItems(LE_GARRISON_TYPE_7_0) 59 local items = C_Garrison.GetLandingPageItems(LE_GARRISON_TYPE_7_0)
60 print(#items)
60 61
61 wipe(self.profile.missions) 62 wipe(self.profile.missions)
62 for index, data in ipairs(self.items) do 63 for index, data in ipairs(items) do
63 print(' ',data.name, '|cFF00FF00'.. data.timeLeft .. '|r', date("%A %I:%m %p", data.missionEndTime)) 64 print(' ',data.name, '|cFF00FF00'.. data.timeLeft .. '|r', date("%A %I:%m %p", data.missionEndTime))
64 tinsert(self.profile.missions, data) 65 tinsert(self.profile.missions, data)
65 end 66 end
66 print('items update pending') 67 print('items update pending')
67 self.isStale = true 68 self.isStale = true
68
69 if self:IsVisible() then
70 self:Refresh()
71 end
72 end 69 end
73 70
74 MissionsHandler.OnGetItem = function(data) 71 MissionsHandler.OnGetItem = function(data)
75 if data.missionEndTime < GI_currentTime then 72 if data.missionEndTime < GI_currentTime then
76 data.isComplete = true 73 data.isComplete = true
129 local AddShipmentInfo = function(shipmentType, name, texture, shipmentCapacity, shipmentsReady, shipmentsTotal, creationTime, duration, timeleftString, itemName, itemIcon, itemQuality, itemID, followerID) 126 local AddShipmentInfo = function(shipmentType, name, texture, shipmentCapacity, shipmentsReady, shipmentsTotal, creationTime, duration, timeleftString, itemName, itemIcon, itemQuality, itemID, followerID)
130 -- early login queries may return empty tables, causing the sorter to compare nil 127 -- early login queries may return empty tables, causing the sorter to compare nil
131 if not creationTime then 128 if not creationTime then
132 return 129 return
133 end 130 end
134 print(shipmentType, name, shipmentCapacity, shipmentsReady, shipmentsTotal, creationTime, duration, timeleftString) 131 --print(shipmentType, name, shipmentCapacity, shipmentsReady, shipmentsTotal, creationTime, duration, timeleftString)
135 tinsert(ShipmentsInfo, 132 tinsert(ShipmentsInfo,
136 { 133 {
137 shipmentType = shipmentType, 134 shipmentType = shipmentType,
138 name = name, 135 name = name,
139 icon = texture, 136 icon = texture,
201 --DEFAULT_CHAT_FRAME:AddMessage(data.shipmentType ..' '.. tostring(data.name) ..' '.. tostring(data.creationTime) ..' '.. tostring(data.duration)) 198 --DEFAULT_CHAT_FRAME:AddMessage(data.shipmentType ..' '.. tostring(data.name) ..' '.. tostring(data.creationTime) ..' '.. tostring(data.duration))
202 tinsert(self.profile.shipments, data) 199 tinsert(self.profile.shipments, data)
203 end 200 end
204 self.isStale = true 201 self.isStale = true
205 202
206 if self:IsVisible() then
207 self:Refresh()
208 end
209 end 203 end
210 204
211 function core:OnLoad () 205 function core:OnLoad ()
212 self:RegisterEvent('PLAYER_LOGIN') 206 self:RegisterEvent('PLAYER_LOGIN')
213 self:RegisterEvent('PLAYER_ENTERING_WORLD')
214 self:RegisterEvent('ADDON_LOADED') 207 self:RegisterEvent('ADDON_LOADED')
215 self:RegisterEvent('PLAYER_REGEN_ENABLED') 208 self:RegisterEvent('PLAYER_REGEN_ENABLED')
216 self:RegisterEvent('PLAYER_REGEN_DISABLED') 209 self:RegisterEvent('PLAYER_REGEN_DISABLED')
217 -- Blizzard_GarrisonUI already fires a shipment data request for GARRISON_SHIPMENT_RECEIVED; this is unlikely to 210 -- Blizzard_GarrisonUI already fires a shipment data request for GARRISON_SHIPMENT_RECEIVED; this is unlikely to
218 211
340 local numCalls = 0 333 local numCalls = 0
341 for ptype, eventFunc in pairs(self.events[event]) do 334 for ptype, eventFunc in pairs(self.events[event]) do
342 numCalls = numCalls + 1 335 numCalls = numCalls + 1
343 print('|cFF88FF00' .. tostring(ptype) .. '|r:GetPlayerData() --', numCalls) 336 print('|cFF88FF00' .. tostring(ptype) .. '|r:GetPlayerData() --', numCalls)
344 eventFunc(self, event) 337 eventFunc(self, event)
338 end
339
340
341 if self:IsVisible() then
342 self:Refresh()
345 end 343 end
346 end 344 end
347 end 345 end
348 346
349 function core:UpdateNotifications() 347 function core:UpdateNotifications()