You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
179 lines
5.9 KiB
179 lines
5.9 KiB
-- ------------------------------------------------------------------------------ -- |
|
-- TradeSkillMaster_Auctioning -- |
|
-- http://www.curse.com/addons/wow/tradeskillmaster_auctioning -- |
|
-- -- |
|
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) -- |
|
-- All Rights Reserved* - Detailed license information included with addon. -- |
|
-- ------------------------------------------------------------------------------ -- |
|
|
|
-- This file is to contain things that are common between different scan types. |
|
|
|
local TSM = select(2, ...) |
|
local Manage = TSM:NewModule("Manage", "AceEvent-3.0") |
|
local L = LibStub("AceLocale-3.0"):GetLocale("TradeSkillMaster_Auctioning") -- loads the localization table |
|
|
|
local scanStatus = {} |
|
local GUI, Util, mode |
|
|
|
function Manage:StartScan(GUIRef, options) |
|
GUI = GUIRef |
|
mode = GUI.mode |
|
Util = TSM[mode] |
|
GUI.OnAction = Manage.OnGUIEvent |
|
wipe(scanStatus) |
|
TSM.Log:Clear() |
|
|
|
local scanList = Util:GetScanListAndSetup(GUI, options) |
|
GUI:UpdateSTData() |
|
if #scanList == 0 then |
|
GUI:Stopped() |
|
return |
|
end |
|
|
|
if options and options.noScan then -- no scanning required |
|
Manage:StartNoScanScan(GUIRef, scanList) |
|
return |
|
end |
|
|
|
GUI.statusBar:SetStatusText(L["Starting Scan..."]) |
|
GUI.statusBar:UpdateStatus(0, 0) |
|
GUI.infoText:SetInfo(L["Running Scan..."]) |
|
TSM.Scan:StartItemScan(scanList) |
|
end |
|
|
|
function Manage:StartNoScanScan(GUIRef, scanList) |
|
GUI.infoText:SetInfo(L["Processing Items..."]) |
|
GUI.statusBar:UpdateStatus(0, 0) |
|
TSMAPI:CancelFrame("auctioningNoScanProcessing") |
|
scanStatus.query = {1, 1} |
|
|
|
local totalToScan = #scanList |
|
local function ProcessNoScanItems() |
|
local numLeft = #scanList |
|
for i=1, min(numLeft, 10) do |
|
Manage:ProcessScannedItem(tremove(scanList, 1), (i ~= min(numLeft, 10) and i ~= 1)) |
|
Manage:UpdateStatus("scan", totalToScan-#scanList, totalToScan) |
|
end |
|
|
|
if #scanList == 0 then |
|
TSMAPI:CancelFrame("auctioningNoScanProcessing") |
|
Manage:ScanComplete() |
|
end |
|
end |
|
TSMAPI:CreateTimeDelay("auctioningNoScanProcessing", 0, ProcessNoScanItems, 0.1) |
|
end |
|
|
|
function Manage:OnGUIEvent(event) |
|
if event == "action" then |
|
Util:DoAction() |
|
elseif event == "skip" then |
|
Util:SkipItem() |
|
elseif event == "stop" then |
|
TSMAPI:CancelFrame("auctioningNoScanProcessing") |
|
TSMAPI.AuctionScan:StopScan() |
|
Util:Stop() |
|
end |
|
TSMAPI:CreateTimeDelay("aucManageSTUpdate", 0.01, GUI.UpdateAuctionsSTData) |
|
end |
|
|
|
function Manage:ProcessScannedItem(itemString, noUpdate) |
|
Util:ProcessItem(itemString) |
|
if not noUpdate then |
|
GUI:UpdateSTData() |
|
end |
|
end |
|
|
|
function Manage:ScanComplete(interrupted) |
|
if interrupted then |
|
Util:Stop(true) |
|
else |
|
local numToManage = Util:DoneScanning() |
|
TSMAPI:FireEvent("AUCTIONING:SCANDONE", {num=numToManage}) |
|
if numToManage == 0 then |
|
Util:Stop() |
|
elseif TSM.db.global.scanCompleteSound ~= 1 then |
|
PlaySound(TSM.Options:GetScanCompleteSound(TSM.db.global.scanCompleteSound), "Master") |
|
end |
|
end |
|
end |
|
|
|
-- these functions help display the status text which goes inside the statusbar |
|
local function IsStepStarted(step) |
|
return scanStatus[step] and scanStatus[step][1] and scanStatus[step][2] |
|
end |
|
local function IsStepDone(step) |
|
return IsStepStarted(step) and scanStatus[step][1] == scanStatus[step][2] |
|
end |
|
-- update the statusbar |
|
function Manage:UpdateStatus(statusType, current, total) |
|
scanStatus[statusType] = {current, total} |
|
if statusType == "query" then |
|
if total >= 0 then |
|
GUI.statusBar:SetStatusText(format(L["Preparing Filter %d / %d"], current, total)) |
|
else |
|
GUI.statusBar:SetStatusText(format(L["Preparing Filters..."], current, total)) |
|
end |
|
elseif IsStepDone("scan") and IsStepDone("manage") and IsStepDone("confirm") then -- scan complete |
|
GUI.statusBar:SetStatusText(L["Scan Complete!"]) |
|
else |
|
local parts = {} |
|
if IsStepDone("scan") then |
|
tinsert(parts, L["Done Scanning"]) |
|
elseif IsStepStarted("scan") then |
|
if IsStepStarted("page") then |
|
tinsert(parts, format(L["Scanning %d / %d (Page %d / %d)"], scanStatus.scan[1], scanStatus.scan[2], scanStatus.page[1], scanStatus.page[2])) |
|
else |
|
tinsert(parts, format(L["Scanning %d / %d"], scanStatus.scan[1], scanStatus.scan[2])) |
|
end |
|
end |
|
if IsStepDone("manage") then |
|
if mode == "Post" then |
|
tinsert(parts, L["Done Posting"]) |
|
elseif mode == "Cancel" then |
|
tinsert(parts, L["Done Canceling"]) |
|
end |
|
if IsStepStarted("confirm") then |
|
tinsert(parts, format(L["Confirming %d / %d"], scanStatus.confirm[1]+1, scanStatus.confirm[2])) |
|
else |
|
tinsert(parts, format(L["Confirming %d / %d"], 1, scanStatus.manage[2])) |
|
end |
|
elseif IsStepDone("scan") and IsStepStarted("manage") then |
|
if mode == "Post" then |
|
tinsert(parts, format(L["Posting %d / %d"], scanStatus.manage[1]+1, scanStatus.manage[2])) |
|
elseif mode == "Cancel" then |
|
tinsert(parts, format(L["Canceling %d / %d"], scanStatus.manage[1]+1, scanStatus.manage[2])) |
|
end |
|
if IsStepStarted("confirm") then |
|
tinsert(parts, format(L["Confirming %d / %d"], scanStatus.confirm[1]+1, scanStatus.confirm[2])) |
|
else |
|
tinsert(parts, format(L["Confirming %d / %d"], 1, scanStatus.manage[2])) |
|
end |
|
end |
|
GUI.statusBar:SetStatusText(table.concat(parts, " - ")) |
|
end |
|
|
|
if IsStepDone("query") then |
|
local scanCurrent = scanStatus.scan and scanStatus.scan[1] or 0 |
|
local scanTotal = scanStatus.scan and scanStatus.scan[2] or 1 |
|
local confirmCurrent = scanStatus.confirm and scanStatus.confirm[1] or 0 |
|
local confirmTotal = scanStatus.confirm and scanStatus.confirm[2] or 1 |
|
GUI.statusBar:UpdateStatus(100*confirmCurrent/confirmTotal, 100*scanCurrent/scanTotal) |
|
end |
|
end |
|
|
|
function Manage:SetCurrentItem(currentItem) |
|
if currentItem and currentItem.itemString then |
|
GUI.infoText:SetInfo(currentItem) |
|
end |
|
end |
|
|
|
function Manage:GetCurrentItem() |
|
return GUI.infoText:GetInfo() |
|
end |
|
|
|
function Manage:SetInfoText(text) |
|
if type(text) ~= "table" then |
|
GUI:UpdateLogSTHighlight() |
|
end |
|
GUI.infoText:SetInfo(text) |
|
end |