initial commit
This commit is contained in:
115
Core/Service/Banking/Util.lua
Normal file
115
Core/Service/Banking/Util.lua
Normal file
@@ -0,0 +1,115 @@
|
||||
-- ------------------------------------------------------------------------------ --
|
||||
-- TradeSkillMaster --
|
||||
-- https://tradeskillmaster.com --
|
||||
-- All Rights Reserved - Detailed license information included with addon. --
|
||||
-- ------------------------------------------------------------------------------ --
|
||||
|
||||
local _, TSM = ...
|
||||
local Util = TSM.Banking:NewPackage("Util")
|
||||
local TempTable = TSM.Include("Util.TempTable")
|
||||
local BagTracking = TSM.Include("Service.BagTracking")
|
||||
local GuildTracking = TSM.Include("Service.GuildTracking")
|
||||
local private = {}
|
||||
|
||||
|
||||
|
||||
-- ============================================================================
|
||||
-- Module Functions
|
||||
-- ============================================================================
|
||||
|
||||
function Util.BagIterator(autoBaseItems)
|
||||
local query = BagTracking.CreateQueryBags()
|
||||
:OrderBy("slotId", true)
|
||||
if autoBaseItems then
|
||||
query:VirtualField("autoBaseItemString", "string", TSM.Groups.TranslateItemString, "itemString")
|
||||
:Select("bag", "slot", "autoBaseItemString", "quantity")
|
||||
else
|
||||
query:Select("bag", "slot", "itemString", "quantity")
|
||||
end
|
||||
if TSM.Banking.IsGuildBankOpen() then
|
||||
query:Equal("isBoP", false)
|
||||
:Equal("isBoA", false)
|
||||
end
|
||||
return query:IteratorAndRelease()
|
||||
end
|
||||
|
||||
function Util.OpenBankIterator(autoBaseItems)
|
||||
if TSM.Banking.IsGuildBankOpen() then
|
||||
local query = GuildTracking.CreateQuery()
|
||||
if autoBaseItems then
|
||||
query:VirtualField("autoBaseItemString", "string", TSM.Groups.TranslateItemString, "itemString")
|
||||
:Select("tab", "slot", "autoBaseItemString", "quantity")
|
||||
else
|
||||
query:Select("tab", "slot", "itemString", "quantity")
|
||||
end
|
||||
return query:IteratorAndRelease()
|
||||
else
|
||||
local query = BagTracking.CreateQueryBank()
|
||||
:OrderBy("slotId", true)
|
||||
if autoBaseItems then
|
||||
query:VirtualField("autoBaseItemString", "string", TSM.Groups.TranslateItemString, "itemString")
|
||||
:Select("bag", "slot", "autoBaseItemString", "quantity")
|
||||
else
|
||||
query:Select("bag", "slot", "itemString", "quantity")
|
||||
end
|
||||
return query:IteratorAndRelease()
|
||||
end
|
||||
end
|
||||
|
||||
function Util.PopulateGroupItemsFromBags(items, groups, getNumFunc, ...)
|
||||
local itemQuantity = TempTable.Acquire()
|
||||
for _, _, _, itemString, quantity in Util.BagIterator(true) do
|
||||
if private.InGroups(itemString, groups) then
|
||||
itemQuantity[itemString] = (itemQuantity[itemString] or 0) + quantity
|
||||
end
|
||||
end
|
||||
for itemString, numHave in pairs(itemQuantity) do
|
||||
local numToMove = getNumFunc(itemString, numHave, ...)
|
||||
if numToMove > 0 then
|
||||
items[itemString] = numToMove
|
||||
end
|
||||
end
|
||||
TempTable.Release(itemQuantity)
|
||||
end
|
||||
|
||||
function Util.PopulateGroupItemsFromOpenBank(items, groups, getNumFunc, ...)
|
||||
local itemQuantity = TempTable.Acquire()
|
||||
for _, _, _, itemString, quantity in Util.OpenBankIterator(true) do
|
||||
if private.InGroups(itemString, groups) then
|
||||
itemQuantity[itemString] = (itemQuantity[itemString] or 0) + quantity
|
||||
end
|
||||
end
|
||||
for itemString, numHave in pairs(itemQuantity) do
|
||||
local numToMove = getNumFunc(itemString, numHave, ...)
|
||||
if numToMove > 0 then
|
||||
items[itemString] = numToMove
|
||||
end
|
||||
end
|
||||
TempTable.Release(itemQuantity)
|
||||
end
|
||||
|
||||
function Util.PopulateItemsFromBags(items, getNumFunc, ...)
|
||||
local itemQuantity = TempTable.Acquire()
|
||||
for _, _, _, itemString, quantity in Util.BagIterator(true) do
|
||||
itemQuantity[itemString] = (itemQuantity[itemString] or 0) + quantity
|
||||
end
|
||||
for itemString, numHave in pairs(itemQuantity) do
|
||||
local numToMove = getNumFunc(itemString, numHave, ...)
|
||||
if numToMove > 0 then
|
||||
items[itemString] = numToMove
|
||||
end
|
||||
end
|
||||
TempTable.Release(itemQuantity)
|
||||
end
|
||||
|
||||
|
||||
|
||||
-- ============================================================================
|
||||
-- Private Helper Functions
|
||||
-- ============================================================================
|
||||
|
||||
function private.InGroups(itemString, groups)
|
||||
local groupPath = TSM.Groups.GetPathByItem(itemString)
|
||||
-- TODO: support the base group
|
||||
return groupPath and groupPath ~= TSM.CONST.ROOT_GROUP_PATH and groups[groupPath]
|
||||
end
|
||||
Reference in New Issue
Block a user