-- ------------------------------------------------------------------------------ -- -- TradeSkillMaster_Warehousing -- -- http://www.curse.com/addons/wow/tradeskillmaster_warehousing -- -- -- -- A TradeSkillMaster Addon (http://tradeskillmaster.com) -- -- All Rights Reserved* - Detailed license information included with addon. -- -- ------------------------------------------------------------------------------ -- -- loads the localization table -- local L = LibStub("AceLocale-3.0"):GetLocale("TradeSkillMaster_Warehousing") -- load the parent file (TSM) into a local variable and register this file as a module local TSM = select(2, ...) local move = TSM:NewModule("move", "AceEvent-3.0") local AceGUI = LibStub("AceGUI-3.0") -- load the AceGUI libraries local private = { shoppingItems = {} } local function GetSelectedGroupInfoFallback() local selection = TSM.db.profile.groupTreeSelectedGroupStatus and TSM.db.profile.groupTreeSelectedGroupStatus["Warehousing_Bank"] if not selection then return end local groupInfo = {} for groupPath, isSelected in pairs(selection) do if isSelected then local operations = TSM:GetGroupOperations(groupPath, "Warehousing") if operations then groupInfo[groupPath] = { operations = operations, items = TSM:GetGroupItems(groupPath) } end end end if next(groupInfo) == nil then return end return groupInfo end local function ShoppingNextSearch() if next(private.shoppingItems) then move:ShoppingSearch(private.shoppingItems[1].itemString, private.shoppingItems[1].quantity) end end local function ShoppingCallback(remainingQty, boughtItem) if not boughtItem then if next(private.shoppingItems) then local name = TSMAPI:GetSafeItemInfo(private.shoppingItems[1].itemString) TSM:Print(format(L["No Auctions found for %s"], name or private.shoppingItems[1].itemString)) tremove(private.shoppingItems, 1) TSMAPI:CreateTimeDelay("warehousingShoppingSearchThrottle", 0.5, ShoppingNextSearch) end elseif math.max(remainingQty or 0, 0) == 0 and next(private.shoppingItems) then tremove(private.shoppingItems, 1) TSMAPI:CreateTimeDelay("warehousingShoppingSearchThrottle", 0.5, ShoppingNextSearch) end end function move:ShoppingSearch(itemString, need) if not itemString or not need or need <= 0 then return end local name = TSMAPI:GetSafeItemInfo(itemString) if not name then return end TSMAPI:ModuleAPI("Shopping", "runSearch", name .. "/exact/x" .. need, ShoppingCallback) end function move:restockGroup(grpInfo) local restockItems, next = TSM.data:unIndexRestockGroupTree(grpInfo), next if next(restockItems) == nil then TSM:Print(L["Nothing to Restock"]) else TSM:Print(L["Restocking"]) TSMAPI:MoveItems(restockItems, TSM.PrintMsg) end end function move:restockGroupAuction(grpInfo) if not TSMAPI:AHTabIsVisible("Shopping") then TSM:Print(L["Please switch to the Shopping tab to restock from the auction house."]) return end if not grpInfo then grpInfo = GetSelectedGroupInfoFallback() end if not grpInfo or next(grpInfo) == nil then TSM:Print(L["No groups selected."]) return end local restockItems = TSM.data:unIndexRestockGroupTree(grpInfo) private.shoppingItems = {} for itemString, quantity in pairs(restockItems) do if quantity > 0 then tinsert(private.shoppingItems, { itemString = itemString, quantity = quantity }) end end if next(private.shoppingItems) == nil then TSM:Print(L["Nothing to Restock"]) return end TSM:Print(L["Restocking"]) move:ShoppingSearch(private.shoppingItems[1].itemString, private.shoppingItems[1].quantity) end function move:groupTree(grpInfo, src) local moveItems, next = TSM.data:unIndexMoveGroupTree(grpInfo, src), next if next(moveItems) == nil then TSM:Print(L["Nothing to Move"]) else TSM:Print(L["Preparing to Move"]) TSMAPI:MoveItems(moveItems, TSM.PrintMsg) end end function move:EmptyRestore(dest, restore) local moveItems local next = next local isGuildBank = false if dest == "guildbank" then isGuildBank = true else isGuildBank = false end if restore then moveItems = TSM.db.realm.BagState else local srcTable = move:getContainerTable("bags") moveItems = TSM.data:getEmptyRestoreGroup(srcTable, isGuildBank) end if next(moveItems) == nil then TSM:Print(L["Nothing to Move"]) else TSM:Print(L["Preparing to Move"]) TSMAPI:MoveItems(moveItems, TSM.PrintMsg, true) if restore then TSM.db.realm.BagState = {} end end end function move:manualMove(searchString, src, quantity) local moveItems = TSM.data:unIndexItem(searchString, src, quantity) local next = next if next(moveItems) == nil then TSM:Print(L["Nothing to Move"]) else TSM:Print(L["Preparing to Move"]) TSMAPI:MoveItems(moveItems, TSM.PrintMsg) end end function move:getContainerTable(cnt) local t = {} if cnt == "bank" then local numSlots, _ = GetNumBankSlots() for i = 1, numSlots + 1 do if i == 1 then t[i] = -1 else t[i] = i + 3 end end return t elseif cnt == "guildbank" then for i = 1, GetNumGuildBankTabs() do local canView, canDeposit, stacksPerDay = GetGuildBankTabInfo(i); if canView and canDeposit and stacksPerDay then t[i] = i end end return t elseif cnt == "bags" then for i = 1, NUM_BAG_SLOTS + 1 do t[i] = i - 1 end return t end end function move:areBanksVisible() if BagnonFrameguildbank and BagnonFrameguildbank:IsVisible() then return true elseif BagnonFramebank and BagnonFramebank:IsVisible() then return true elseif GuildBankFrame and GuildBankFrame:IsVisible() then return true elseif BankFrame and BankFrame:IsVisible() then return true elseif (ARKINV_Frame4 and ARKINV_Frame4:IsVisible()) or (ARKINV_Frame3 and ARKINV_Frame3:IsVisible()) then return true elseif (BagginsBag8 and BagginsBag8:IsVisible()) or (BagginsBag9 and BagginsBag9:IsVisible()) or (BagginsBag10 and BagginsBag10:IsVisible()) or (BagginsBag11 and BagginsBag11:IsVisible()) or (BagginsBag12 and BagginsBag12:IsVisible()) then return true elseif (CombuctorFrame2 and CombuctorFrame2:IsVisible()) then return true elseif (BaudBagContainer2_1 and BaudBagContainer2_1:IsVisible()) then return true elseif (AdiBagsContainer2 and AdiBagsContainer2:IsVisible()) then return true elseif (OneBankFrame and OneBankFrame:IsVisible()) then return true elseif (EngBank_frame and EngBank_frame:IsVisible()) then return true elseif (TBnkFrame and TBnkFrame:IsVisible()) then return true elseif (famBankFrame and famBankFrame:IsVisible()) then return true elseif (LUIBank and LUIBank:IsVisible()) then return true elseif (ElvUI_BankContainerFrame and ElvUI_BankContainerFrame:IsVisible()) then return true elseif (TukuiBank and TukuiBank:IsShown()) then return true elseif (AdiBagsContainer1 and AdiBagsContainer1.isBank and AdiBagsContainer1:IsVisible()) or (AdiBagsContainer2 and AdiBagsContainer2.isBank and AdiBagsContainer2:IsVisible()) then return true elseif BagsFrameBank and BagsFrameBank:IsVisible() then return true elseif AspUIBank and AspUIBank:IsVisible() then return true elseif NivayacBniv_Bank and NivayacBniv_Bank:IsVisible() then return true elseif DufUIBank and DufUIBank:IsVisble() then return true end TSM:Print(L["Canceled"]) return nil end function TSM.PrintMsg(message) TSM:Print(message) end