TradeSkillMaster/Core/Service/Auctioning/Log.lua

143 lines
5.9 KiB
Lua
Raw Normal View History

2020-11-13 14:13:12 -05:00
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster --
-- https://tradeskillmaster.com --
-- All Rights Reserved - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
local _, TSM = ...
local Log = TSM.Auctioning:NewPackage("Log")
local L = TSM.Include("Locale").GetTable()
local Database = TSM.Include("Util.Database")
local Theme = TSM.Include("Util.Theme")
local ItemInfo = TSM.Include("Service.ItemInfo")
local private = {
db = nil,
}
local REASON_INFO = {
-- general
invalidItemGroup = { color = "RED", str = L["Item/Group is invalid (see chat)."] },
invalidSeller = { color = "RED", str = L["Invalid seller data returned by server."] },
-- post scan
postDisabled = { color = "ORANGE", str = L["Posting disabled."] },
postNotEnough = { color = "ORANGE", str = L["Not enough items in bags."] },
postMaxExpires = { color = "ORANGE", str = L["Above max expires."] },
postBelowMin = { color = "ORANGE", str = L["Cheapest auction below min price."] },
postTooMany = { color = "BLUE", str = L["Maximum amount already posted."] },
postNormal = { color = "GREEN", str = L["Posting at normal price."] },
postResetMin = { color = "GREEN", str = L["Below min price. Posting at min."] },
postResetMax = { color = "GREEN", str = L["Below min price. Posting at max."] },
postResetNormal = { color = "GREEN", str = L["Below min price. Posting at normal."] },
postAboveMaxMin = { color = "GREEN", str = L["Above max price. Posting at min."] },
postAboveMaxMax = { color = "GREEN", str = L["Above max price. Posting at max."] },
postAboveMaxNormal = { color = "GREEN", str = L["Above max price. Posting at normal."] },
postAboveMaxNoPost = { color = "ORANGE", str = L["Above max price. Not posting."] },
postUndercut = { color = "GREEN", str = L["Undercutting competition."] },
postPlayer = { color = "GREEN", str = L["Posting at your current price."] },
postWhitelist = { color = "GREEN", str = L["Posting at whitelisted player's price."] },
postWhitelistNoPost = { color = "ORANGE", str = L["Lowest auction by whitelisted player."] },
postBlacklist = { color = "GREEN", str = L["Undercutting blacklisted player."] },
-- cancel scan
cancelDisabled = { color = "ORANGE", str = L["Canceling disabled."] },
cancelNotUndercut = { color = "GREEN", str = L["Your auction has not been undercut."] },
cancelBid = { color = "BLUE", str = L["Auction has been bid on."] },
cancelNoMoney = { color = "BLUE", str = L["Not enough money to cancel."] },
cancelKeepPosted = { color = "BLUE", str = L["Keeping undercut auctions posted."] },
cancelBelowMin = { color = "ORANGE", str = L["Not canceling auction below min price."] },
cancelAtReset = { color = "GREEN", str = L["Not canceling auction at reset price."] },
cancelAtNormal = { color = "GREEN", str = L["At normal price and not undercut."] },
cancelAtAboveMax = { color = "GREEN", str = L["At above max price and not undercut."] },
cancelAtWhitelist = { color = "GREEN", str = L["Posted at whitelisted player's price."] },
cancelUndercut = { color = "RED", str = L["You've been undercut."] },
cancelRepost = { color = "BLUE", str = L["Canceling to repost at higher price."] },
cancelReset = { color = "BLUE", str = L["Canceling to repost at reset price."] },
cancelWhitelistUndercut = { color = "RED", str = L["Undercut by whitelisted player."] },
cancelPlayerUndercut = { color = "BLUE", str = L["Canceling auction you've undercut."] },
}
-- ============================================================================
-- Module Functions
-- ============================================================================
function Log.OnInitialize()
private.db = Database.NewSchema("AUCTIONING_LOG")
:AddNumberField("index")
:AddStringField("itemString")
:AddStringField("seller")
:AddNumberField("buyout")
:AddStringField("operation")
:AddStringField("reasonStr")
:AddStringField("reasonKey")
:AddStringField("state")
:AddIndex("index")
:Commit()
end
function Log.Truncate()
private.db:Truncate()
end
function Log.CreateQuery()
return private.db:NewQuery()
:InnerJoin(ItemInfo.GetDBForJoin(), "itemString")
:OrderBy("index", true)
end
function Log.UpdateRowByIndex(index, field, value)
local row = private.db:NewQuery()
:Equal("index", index)
:GetFirstResultAndRelease()
if field == "state" then
assert(value == "POSTED" or value == "CANCELLED" or value == "SKIPPED")
if not row then
return
end
end
row:SetField(field, value)
:Update()
row:Release()
end
function Log.SetQueryUpdatesPaused(paused)
private.db:SetQueryUpdatesPaused(paused)
end
function Log.AddEntry(itemString, operationName, reasonKey, seller, buyout, index)
private.db:NewRow()
:SetField("itemString", itemString)
:SetField("seller", seller)
:SetField("buyout", buyout)
:SetField("operation", operationName)
:SetField("reasonStr", REASON_INFO[reasonKey].str)
:SetField("reasonKey", reasonKey)
:SetField("index", index)
:SetField("state", "PENDING")
:Create()
end
function Log.GetColorFromReasonKey(reasonKey)
return Theme.GetFeedbackColor(REASON_INFO[reasonKey].color)
end
function Log.GetInfoStr(row)
local state, reasonKey = row:GetFields("state", "reasonKey")
local reasonInfo = REASON_INFO[reasonKey]
local color = nil
if state == "PENDING" then
return Theme.GetFeedbackColor(reasonInfo.color):ColorText(reasonInfo.str)
elseif state == "POSTED" then
return Theme.GetColor("INDICATOR"):ColorText(L["Posted:"]).." "..reasonInfo.str
elseif state == "CANCELLED" then
return Theme.GetColor("INDICATOR"):ColorText(L["Cancelled:"]).." "..reasonInfo.str
elseif state == "SKIPPED" then
return Theme.GetColor("INDICATOR"):ColorText(L["Skipped:"]).." "..reasonInfo.str
else
error("Invalid state: "..tostring(state))
end
return color:ColorText(reasonInfo.str)
end