@@ -40,23 +40,27 @@ function SyndicatorBagCacheMixin:OnLoad()
4040 " BANKFRAME_OPENED" ,
4141 " BANKFRAME_CLOSED" ,
4242 " PLAYERBANKSLOTS_CHANGED" ,
43- " PLAYERBANKBAGSLOTS_CHANGED" ,
4443 })
44+ if not Syndicator .Constants .CharacterBankTabsActive then
45+ self :RegisterEvent (" PLAYERBANKBAGSLOTS_CHANGED" )
46+ end
4547 if Syndicator .Constants .IsRetail then
48+ if not Syndicator .Constants .CharacterBankTabsActive then
49+ self :RegisterEvent (" REAGENTBANK_UPDATE" )
50+ self :RegisterEvent (" PLAYERREAGENTBANKSLOTS_CHANGED" )
51+ end
4652 -- Bank items reagent bank updating
47- self :RegisterEvent (" REAGENTBANK_UPDATE" )
48- self :RegisterEvent (" PLAYERREAGENTBANKSLOTS_CHANGED" )
4953 self :RegisterEvent (" TRADE_SKILL_ITEM_CRAFTED_RESULT" )
5054 -- Keystone level changing due to start/end of an M+ dungeon
5155 self :RegisterEvent (" ITEM_CHANGED" )
5256 self :RegisterEvent (" CHALLENGE_MODE_START" )
5357 self :RegisterEvent (" CHALLENGE_MODE_COMPLETED" )
5458
55- if Syndicator . Constants . WarbandBankActive then
56- self :RegisterEvent (" BANK_TABS_CHANGED " )
57- self :RegisterEvent (" BANK_TAB_SETTINGS_UPDATED " )
58- self : RegisterEvent ( " PLAYER_ACCOUNT_BANK_TAB_SLOTS_CHANGED " )
59- end
59+ self : RegisterEvent ( " BANK_TABS_CHANGED " )
60+ self :RegisterEvent (" BANK_TAB_SETTINGS_UPDATED " )
61+ self :RegisterEvent (" PLAYER_ACCOUNT_BANK_TAB_SLOTS_CHANGED " )
62+ else
63+ self : RegisterEvent ( " PLAYERBANKBAGSLOTS_CHANGED " )
6064 end
6165
6266 self .craftingTime = 0
@@ -95,7 +99,14 @@ function SyndicatorBagCacheMixin:OnEvent(eventName, ...)
9599 self :QueueCaching ()
96100
97101 elseif eventName == " PLAYERBANKSLOTS_CHANGED" then
98- if self .bankOpen then
102+ if Syndicator .Constants .CharacterBankTabsActive then
103+ if self .bankOpen or time () - self .craftingTime < craftingItemUpdateDelay then
104+ local tab = ...
105+ if tab then
106+ self .pending .bank [Syndicator .Constants .AllBankIndexes [tab ]] = true
107+ end
108+ end
109+ elseif self .bankOpen then
99110 self .pending .bank [Enum .BagIndex .Bank ] = true
100111 self :QueueCaching ()
101112 end
@@ -123,19 +134,24 @@ function SyndicatorBagCacheMixin:OnEvent(eventName, ...)
123134
124135 elseif eventName == " BANK_TAB_SETTINGS_UPDATED" then
125136 if self .bankOpen then
126- self :ScanWarbandSlots ()
137+ self :ScanBankTabs ()
127138 self :QueueCaching ()
128139 end
129140
130141 -- Guessing that these events may be fired when a new warband tab is purchased
131- elseif eventName == " BANK_TABS_CHANGED" or eventName == " PLAYER_ACCOUNT_BANK_TAB_SLOTS_CHANGED" then
142+ elseif eventName == " BANK_TABS_CHANGED" then
143+ if self .bankOpen then
144+ self :ScanBankTabs ()
145+ self :QueueCaching ()
146+ end
147+
148+ elseif eventName == " PLAYER_ACCOUNT_BANK_TAB_SLOTS_CHANGED" then
132149 if (self .bankOpen or time () - self .craftingTime < craftingItemUpdateDelay ) and C_PlayerInfo .HasAccountInventoryLock () then
133- self :ScanWarbandSlots ()
134150 local tab = ...
135151 if tab then
136152 self .pending .warband [Syndicator .Constants .AllWarbandIndexes [tab ]] = true
153+ self :QueueCaching ()
137154 end
138- self :QueueCaching ()
139155 end
140156
141157 elseif eventName == " BANKFRAME_OPENED" then
@@ -149,7 +165,7 @@ function SyndicatorBagCacheMixin:OnEvent(eventName, ...)
149165 end
150166 end
151167 self :ScanContainerBagSlots ()
152- self :ScanWarbandSlots ()
168+ self :ScanBankTabs ()
153169 self :QueueCaching ()
154170
155171 elseif eventName == " BANKFRAME_CLOSED" then
@@ -192,7 +208,7 @@ function SyndicatorBagCacheMixin:UpdateContainerSlots()
192208 end
193209 end
194210
195- if self .bankOpen then
211+ if self .bankOpen and not Syndicator . Constants . CharacterBankTabsActive then
196212 local bank = SYNDICATOR_DATA .Characters [self .currentCharacter ].bank
197213 for index , bagID in ipairs (Syndicator .Constants .AllBankIndexes ) do
198214 local numSlots = C_Container .GetContainerNumSlots (bagID )
@@ -206,8 +222,24 @@ function SyndicatorBagCacheMixin:UpdateContainerSlots()
206222 self :QueueCaching ()
207223end
208224
209- function SyndicatorBagCacheMixin :ScanWarbandSlots ()
210- if C_Bank == nil or C_Bank .FetchPurchasedBankTabData == nil or not C_PlayerInfo .HasAccountInventoryLock () then
225+ function SyndicatorBagCacheMixin :ScanBankTabs ()
226+ if C_Bank == nil or C_Bank .FetchPurchasedBankTabData == nil then
227+ return
228+ end
229+
230+ local allTabs = C_Bank .FetchPurchasedBankTabData (Enum .BankType .Character )
231+ local bank = SYNDICATOR_DATA .Characters [self .currentCharacter ].bankTabs
232+
233+ for index , tabDetails in ipairs (allTabs ) do
234+ if not bank [index ] then
235+ bank [index ] = { slots = {}, iconTexture = QUESTION_MARK_ICON , name = " " , depositFlags = 0 }
236+ end
237+ bank [index ].iconTexture = tabDetails .icon
238+ bank [index ].name = tabDetails .name
239+ bank [index ].depositFlags = tabDetails .depositFlags
240+ end
241+
242+ if not C_PlayerInfo .HasAccountInventoryLock () then
211243 return
212244 end
213245
@@ -264,7 +296,7 @@ function SyndicatorBagCacheMixin:ScanContainerBagSlots()
264296 self .pending .containerBags .bags = true
265297 end
266298
267- if self .bankOpen then
299+ if self .bankOpen and not Syndicator . Constants . CharacterBankTabsActive then
268300 containerInfo .bank = {}
269301 for index = 1 , Syndicator .Constants .BankBagSlotsCount do
270302 local inventorySlot = BankButtonIDToInvSlotID (index , 1 )
@@ -371,26 +403,42 @@ function SyndicatorBagCacheMixin:OnUpdate()
371403 end
372404 end
373405
374- local bank = SYNDICATOR_DATA .Characters [self .currentCharacter ].bank
375406
376- if self .bankOpen then
407+ if not Syndicator .Constants .CharacterBankTabsActive then
408+ if self .bankOpen then
409+ local bank = SYNDICATOR_DATA .Characters [self .currentCharacter ].bank
410+ for bagID in pairs (self .pending .bank ) do
411+ local bagIndex = bankBags [bagID ]
412+ bank [bagIndex ] = {}
413+ local bagData = bank [bagIndex ]
414+ if bagID ~= Enum .BagIndex .Reagentbank or IsReagentBankUnlocked () then
415+ for slotID = 1 , C_Container .GetContainerNumSlots (bagID ) do
416+ DoSlot (bagID , slotID , bagData )
417+ end
418+ end
419+ end
420+ elseif self .pending .bank [Enum .BagIndex .Reagentbank ] and bank [bankBags [Enum .BagIndex .Reagentbank ]] and IsReagentBankUnlocked () then
421+ local bank = SYNDICATOR_DATA .Characters [self .currentCharacter ].bank
422+ local reagentBankData = bank [bankBags [Enum .BagIndex .Reagentbank ]]
423+ for slotID in pairs (self .pending .reagentBankSlots ) do
424+ if # reagentBankData >= slotID then
425+ DoSlot (Enum .BagIndex .Reagentbank , slotID , reagentBankData )
426+ end
427+ end
428+ end
429+ else
430+ local bankTabs = SYNDICATOR_DATA .Characters [self .currentCharacter ].bankTabs
377431 for bagID in pairs (self .pending .bank ) do
378432 local bagIndex = bankBags [bagID ]
379- bank [bagIndex ] = {}
380- local bagData = bank [bagIndex ]
381- if bagID ~= Enum . BagIndex . Reagentbank or IsReagentBankUnlocked () then
433+ if bankTabs [bagIndex ] then
434+ bankTabs [bagIndex ]. slots = {}
435+ local bagData = bankTabs [ bagIndex ]. slots
382436 for slotID = 1 , C_Container .GetContainerNumSlots (bagID ) do
383437 DoSlot (bagID , slotID , bagData )
384438 end
385439 end
386440 end
387- elseif self .pending .bank [Enum .BagIndex .Reagentbank ] and bank [bankBags [Enum .BagIndex .Reagentbank ]] and IsReagentBankUnlocked () then
388- local reagentBankData = bank [bankBags [Enum .BagIndex .Reagentbank ]]
389- for slotID in pairs (self .pending .reagentBankSlots ) do
390- if # reagentBankData >= slotID then
391- DoSlot (Enum .BagIndex .Reagentbank , slotID , reagentBankData )
392- end
393- end
441+ SYNDICATOR_DATA .Characters [self .currentCharacter ].bank = {}
394442 end
395443
396444 local warband = SYNDICATOR_DATA .Warband [1 ]
0 commit comments