224 lines
8.9 KiB
Lua
224 lines
8.9 KiB
Lua
--[[
|
|
Auctioneer - Price Level Utility module
|
|
Version: 5.9.4961 (WhackyWallaby)
|
|
Revision: $Id: ScanProgress.lua 4840 2010-08-04 21:44:00Z Nechckn $
|
|
URL: http://auctioneeraddon.com/
|
|
|
|
This is an Auctioneer module that adds a textual scan progress
|
|
indicator to the Auction House UI.
|
|
|
|
License:
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License
|
|
as published by the Free Software Foundation; either version 2
|
|
of the License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program(see GPL.txt); if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
Note:
|
|
This AddOn's source code is specifically designed to work with
|
|
World of Warcraft's interpreted AddOn system.
|
|
You have an implicit license to use this AddOn with these facilities
|
|
since that is its designated purpose as per:
|
|
http://www.fsf.org/licensing/licenses/gpl-faq.html#InterpreterIncompat
|
|
--]]
|
|
if not AucAdvanced then return end
|
|
|
|
local libType, libName = "Util", "ScanProgress"
|
|
local lib,parent,private = AucAdvanced.NewModule(libType, libName)
|
|
if not lib then return end
|
|
local print,decode,_,_,replicate,empty,get,set,default,debugPrint,fill,_TRANS = AucAdvanced.GetModuleLocals()
|
|
|
|
function lib.Processor(callbackType, ...)
|
|
if (callbackType == "scanprogress") then
|
|
private.UpdateScanProgress(...)
|
|
elseif (callbackType == "config") then
|
|
private.SetupConfigGui(...)
|
|
elseif (callbackType == "configchanged") then
|
|
private.ConfigChanged(...)
|
|
end
|
|
end
|
|
|
|
lib.Processors = {}
|
|
function lib.Processors.scanprogress(callbackType, ...)
|
|
private.UpdateScanProgress(...)
|
|
end
|
|
|
|
function lib.Processors.config(callbackType, ...)
|
|
private.SetupConfigGui(...)
|
|
end
|
|
|
|
function lib.Processors.configchanged(callbackType, ...)
|
|
private.ConfigChanged(...)
|
|
end
|
|
|
|
|
|
|
|
function lib.OnLoad()
|
|
--print("AucAdvanced: {{"..libType..":"..libName.."}} loaded!")
|
|
AucAdvanced.Settings.SetDefault("util.scanprogress.activated", true)
|
|
AucAdvanced.Settings.SetDefault("util.scanprogress.leaveshown", true)
|
|
end
|
|
|
|
---- Functions to manage the progress indicator ----
|
|
private.scanStartTime = time()
|
|
--private.scanProgressFormat = "Auctioneer Advanced: %s\nScanning page %d of %d\n\nAuctions per second: %.2f\nAuctions scanned thus far: %d\n\nEstimated time left: %s\nElapsed scan time: %s"
|
|
private.scanProgressFormat = "Auctioneer Advanced: %s\nScanning page %d of %d\n\nAuctions per second: %.2f\nAuctions expected: %d\nAuctions scanned thus far: %d (%3.1f%%)\n\nElapsed scan time: %s\nEstimated time left: %s"
|
|
|
|
function private.UpdateScanProgress(state, totalAuctions, scannedAuctions, elapsedTime)
|
|
--Check that we're enabled before passing on the callback
|
|
if not AucAdvanced.Settings.GetSetting("util.scanprogress.activated")
|
|
|
|
--Check to see if browseoverride has been set, if so gracefully allow it to continue as is
|
|
or AucAdvanced.Settings.GetSetting("util.browseoverride.activated") then
|
|
state = false
|
|
end
|
|
|
|
--Change the state if we have not scanned any auctions yet.
|
|
--This is done so that we don't start the timer too soon and thus get skewed numbers
|
|
if (state == nil and (
|
|
not scannedAuctions or
|
|
scannedAuctions == 0 or
|
|
not AucAdvanced.API.IsBlocked() or
|
|
BrowseButton1:IsVisible()
|
|
)) then
|
|
state = true
|
|
end
|
|
|
|
--Distribute the callback according to the value of the state variable
|
|
if (state == false) then
|
|
if AucAdvanced.API.IsBlocked() then
|
|
private.HideScanProgressUI()
|
|
end
|
|
return
|
|
elseif (state == true) then
|
|
private.ShowScanProgressUI(totalAuctions)
|
|
end
|
|
if scannedAuctions and scannedAuctions > 0 then
|
|
private.UpdateScanProgressUI(totalAuctions, scannedAuctions, elapsedTime)
|
|
end
|
|
end
|
|
|
|
local initShown = false
|
|
function private.ShowScanProgressUI(totalAuctions)
|
|
if (nLog) then nLog.AddMessage("Auctioneer", "ScanProgress", N_INFO, "ShowScanProgressUI Called") end
|
|
for i=1, NUM_BROWSE_TO_DISPLAY do
|
|
_G["BrowseButton"..i]:Hide()
|
|
end
|
|
BrowseNoResultsText:Show()
|
|
private.scanStartTime = time()
|
|
local msg
|
|
if totalAuctions and totalAuctions > 0 then
|
|
msg = ("Scanning %d items..."):format(totalAuctions)
|
|
else
|
|
msg = "Scanning..."
|
|
end
|
|
BrowseNoResultsText:SetText(msg)
|
|
initShown = msg.." DONE"
|
|
AucAdvanced.API.BlockUpdate(true, true)
|
|
end
|
|
|
|
function private.HideScanProgressUI()
|
|
if (nLog) then nLog.AddMessage("Auctioneer", "ScanProgress", N_INFO, "HideScanProgressUI Called") end
|
|
|
|
if (AucAdvanced.Settings.GetSetting("util.scanprogress.leaveshown")) then
|
|
if (initShown) then BrowseNoResultsText:SetText(initShown) end
|
|
AucAdvanced.API.BlockUpdate(false, false)
|
|
else
|
|
BrowseNoResultsText:Hide()
|
|
BrowseNoResultsText:SetText(SEARCHING_FOR_ITEMS)
|
|
|
|
local numBatchAuctions, totalAuctions = GetNumAuctionItems("list")
|
|
local offset = FauxScrollFrame_GetOffset(BrowseScrollFrame)
|
|
for i=1, NUM_BROWSE_TO_DISPLAY do
|
|
index = offset + i + (NUM_AUCTION_ITEMS_PER_PAGE * AuctionFrameBrowse.page)
|
|
if ( index > (numBatchAuctions + (NUM_AUCTION_ITEMS_PER_PAGE * AuctionFrameBrowse.page)) ) then
|
|
_G["BrowseButton"..i]:Hide()
|
|
else
|
|
_G["BrowseButton"..i]:Show()
|
|
end
|
|
end
|
|
AucAdvanced.API.BlockUpdate(false, true)
|
|
end
|
|
initShown = nil
|
|
end
|
|
|
|
function private.UpdateScanProgressUI(totalAuctions, scannedAuctions, elapsedTime)
|
|
if (nLog) then nLog.AddMessage("Auctioneer", "ScanProgress", N_INFO, "UpdateScanProgressUI Called") end
|
|
local numAuctionsPerPage = NUM_AUCTION_ITEMS_PER_PAGE
|
|
initShown = false
|
|
-- Prefer the elapsed time which is provided by core and excludes paused time.
|
|
local secondsElapsed = elapsedTime or (time() - private.scanStartTime)
|
|
|
|
local auctionsToScan = totalAuctions - scannedAuctions
|
|
|
|
local currentPage = math.floor(scannedAuctions / numAuctionsPerPage)
|
|
|
|
local totalPages = math.ceil(totalAuctions / numAuctionsPerPage)
|
|
if (totalPages < 1) then
|
|
totalPages = 1
|
|
end
|
|
-- if (totalPages - math.floor(totalPages) > 0) then
|
|
-- totalPages = math.ceil(totalPages)
|
|
-- else
|
|
-- totalPages = math.floor(totalPages)
|
|
-- end
|
|
|
|
local auctionsScannedPerSecond = scannedAuctions / secondsElapsed
|
|
local secondsToScanCompletion = auctionsToScan / auctionsScannedPerSecond
|
|
if (currentPage+1 == totalPages) then
|
|
secondsToScanCompletion = "Done"
|
|
else
|
|
secondsToScanCompletion = SecondsToTime(secondsToScanCompletion)
|
|
end
|
|
|
|
BrowseNoResultsText:SetText(
|
|
private.scanProgressFormat:format(
|
|
"Scanning auctions.",
|
|
currentPage + 1, totalPages,
|
|
auctionsScannedPerSecond,
|
|
totalAuctions,
|
|
scannedAuctions, ((currentPage+1)/totalPages)*100,
|
|
SecondsToTime(secondsElapsed),
|
|
secondsToScanCompletion
|
|
)
|
|
)
|
|
end
|
|
|
|
--Config UI functions
|
|
function private.SetupConfigGui(gui)
|
|
-- The defaults for the following settings are set in the lib.OnLoad function
|
|
local id = gui:AddTab(libName, libType.." Modules")
|
|
gui:AddControl(id, "Header", 0, libName.." Options")
|
|
|
|
gui:AddHelp(id, "what scanprogress",
|
|
_TRANS('SPRG_Help_WhatScanProgress'), --"What is the Scan Progress indicator?"
|
|
_TRANS('SPRG_Help_WhatScanProgressAnswer')) --"The Scan Progress indicator is the text that appears while scanning the Auction House. It displays: the speed of the scan, current auctions and total number of auctions scanned, aswell as the current number of pages and total pages scanned."
|
|
|
|
-- Old answer, incase the new one is too short and/or vague.
|
|
-- "The Scan Progress indicator is the text that appears while scanning the Auction House, indicating "..
|
|
-- "how fast you are scanning, how many auctions you have scanned so far, how many total auctions there are, "..
|
|
-- "how many pages you have scanned so far, and how many total pages there are.")
|
|
|
|
gui:AddControl(id, "Checkbox", 0, 1, "util.scanprogress.activated", _TRANS('SPRG_Interface_Activated')) --"Show a textual progress indicator when scanning"
|
|
gui:AddTip(id, _TRANS('SPRG_HelpTooltip_Activated')) --"Toggles the display of the scan progress indicator\n\nNOTE: This setting is also affected by the CompactUI option to prevent other modules from changing the display of the browse tab while scanning."
|
|
gui:AddControl(id, "Checkbox", 0, 1, "util.scanprogress.leaveshown", _TRANS('SPRG_Interface_LeaveShown')) --"Leave the scan progress text shown after scan completion"
|
|
gui:AddTip(id, _TRANS('SPRG_HelpTooltip_LeaveShown')) --"If toggled, it will leave the scan progress indicator on the screen after scan has completed.\n\nIf disabled it will show the last scanned page."
|
|
end
|
|
|
|
function private.ConfigChanged()
|
|
if (not AucAdvanced.Settings.GetSetting("util.scanprogress.activated")) then
|
|
private.UpdateScanProgress(false)
|
|
elseif (AucAdvanced.Scan.IsScanning()) then
|
|
private.UpdateScanProgress(true)
|
|
end
|
|
end
|
|
|
|
AucAdvanced.RegisterRevision("$URL: http://svn.norganna.org/auctioneer/branches/5.9/Auc-Util-ScanProgress/ScanProgress.lua $", "$Rev: 4840 $")
|