TradeSkillMaster/Core/Service/Vendoring/Buyback.lua

75 lines
2.4 KiB
Lua

-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster --
-- https://tradeskillmaster.com --
-- All Rights Reserved - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
local _, TSM = ...
local Buyback = TSM.Vendoring:NewPackage("Buyback")
local Database = TSM.Include("Util.Database")
local Delay = TSM.Include("Util.Delay")
local Event = TSM.Include("Util.Event")
local ItemString = TSM.Include("Util.ItemString")
local ItemInfo = TSM.Include("Service.ItemInfo")
local private = {
buybackDB = nil,
}
-- ============================================================================
-- Module Functions
-- ============================================================================
function Buyback.OnInitialize()
private.buybackDB = Database.NewSchema("BUYBACK")
:AddUniqueNumberField("index")
:AddStringField("itemString")
:AddNumberField("price")
:AddNumberField("quantity")
:Commit()
Event.Register("MERCHANT_SHOW", private.MerchantShowEventHandler)
Event.Register("MERCHANT_CLOSED", private.MerchantClosedEventHandler)
Event.Register("MERCHANT_UPDATE", private.MerchantUpdateEventHandler)
end
function Buyback.CreateQuery()
return private.buybackDB:NewQuery()
:InnerJoin(ItemInfo.GetDBForJoin(), "itemString")
end
function Buyback.BuybackItem(index)
BuybackItem(index)
end
-- ============================================================================
-- Private Helper Functions
-- ============================================================================
function private.MerchantShowEventHandler()
Delay.AfterFrame("UPDATE_BUYBACK_DB", 1, private.UpdateBuybackDB)
end
function private.MerchantClosedEventHandler()
Delay.Cancel("UPDATE_BUYBACK_DB")
private.buybackDB:Truncate()
end
function private.MerchantUpdateEventHandler()
Delay.AfterFrame("UPDATE_BUYBACK_DB", 1, private.UpdateBuybackDB)
end
function private.UpdateBuybackDB()
private.buybackDB:TruncateAndBulkInsertStart()
for i = 1, GetNumBuybackItems() do
local itemString = ItemString.Get(GetBuybackItemLink(i))
if itemString then
local _, _, price, quantity = GetBuybackItemInfo(i)
private.buybackDB:BulkInsertNewRow(i, itemString, price, quantity)
end
end
private.buybackDB:BulkInsertEnd()
end