diff --git a/core.xml b/core.xml
index f934043..841a70d 100644
--- a/core.xml
+++ b/core.xml
@@ -18,156 +18,8 @@
-
-
-
-
-
-
+
@@ -239,9 +91,7 @@
-
-
-
+
@@ -266,9 +116,7 @@
-
-
-
+
@@ -334,9 +182,7 @@
-
-
-
+
@@ -362,6 +208,14 @@
this:StopMovingOrSizing()
+
+
+
+
+
+
+
+
diff --git a/filter_search_frame.lua b/filter_search_frame.lua
index f766bb0..4101624 100644
--- a/filter_search_frame.lua
+++ b/filter_search_frame.lua
@@ -4,9 +4,7 @@ Aux.filter_search_frame = public
aux_favorite_searches = {}
aux_recent_searches = {}
-local auctions
local tooltip_patterns = {}
-local refresh
local selected_auction
local RESULTS, SAVED, FILTER = {}, {}, {}
@@ -74,14 +72,12 @@ end
function private.select_auction(entry)
selected_auction = entry
- refresh = true
private.buyout_button:Disable()
private.bid_button:Disable()
end
function private.clear_selection(entry)
selected_auction = nil
- refresh = true
private.buyout_button:Disable()
private.bid_button:Disable()
end
@@ -92,7 +88,7 @@ end
function public.on_open()
private.update_search_listings()
- AuxFrame:SetWidth(991)
+-- AuxFrame:SetWidth(991)
end
function public.on_load()
@@ -370,7 +366,7 @@ function public.on_load()
do
local btn = Aux.gui.button(AuxFilterSearchFrame, 18)
btn:SetPoint('TOPLEFT', 10, -49)
- btn:SetWidth(320)
+ btn:SetWidth(250)
btn:SetHeight(22)
btn:SetText('Search Results')
btn:SetScript('OnClick', function() private.update_tab(RESULTS) end)
@@ -379,7 +375,7 @@ function public.on_load()
do
local btn = Aux.gui.button(AuxFilterSearchFrame, 18)
btn:SetPoint('TOPLEFT', private.search_results_button, 'TOPRIGHT', 5, 0)
- btn:SetWidth(320)
+ btn:SetWidth(250)
btn:SetHeight(22)
btn:SetText('Saved Searches')
btn:SetScript('OnClick', function() private.update_tab(SAVED) end)
@@ -388,7 +384,7 @@ function public.on_load()
do
local btn = Aux.gui.button(AuxFilterSearchFrame, 18)
btn:SetPoint('TOPLEFT', private.saved_searches_button, 'TOPRIGHT', 5, 0)
- btn:SetWidth(320)
+ btn:SetWidth(250)
btn:SetHeight(22)
btn:SetText('New Filter')
btn:SetScript('OnClick', function() private.update_tab(FILTER) end)
@@ -949,6 +945,7 @@ function public.on_load()
-- private.testlisting:Clear()
private.testlisting:Show()
private.testlisting:SetSort(9)
+ private.testlisting:SetHandler('OnSelectionChanged', private.on_selection_changed)
end
function public.stop_search()
@@ -957,20 +954,20 @@ end
function private.update_listing()
- if not AuxFilterSearchFrame:IsVisible() then
- return
- end
-
- local buyout_auctions = auctions and Aux.util.filter(auctions, function(auction) return auction.owner ~= UnitName('player') and auction.buyout_price end) or {}
- Aux.sheet.populate(private.listings.results, auctions and Aux.util.group_by(buyout_auctions, function(a1, a2)
- return a1.item_id == a2.item_id
- and a1.suffix_id == a2.suffix_id
- and a1.enchant_id == a2.enchant_id
- and a1.aux_quantity == a2.aux_quantity
- and a1.buyout_price == a2.buyout_price
- and a1.bid_price == a2.bid_price
- and a1.owner == a2.owner
- end) or {})
+-- if not AuxFilterSearchFrame:IsVisible() then
+-- return
+-- end
+--
+-- local buyout_auctions = auctions and Aux.util.filter(auctions, function(auction) return auction.owner ~= UnitName('player') and auction.buyout_price end) or {}
+-- Aux.sheet.populate(private.listings.results, auctions and Aux.util.group_by(buyout_auctions, function(a1, a2)
+-- return a1.item_id == a2.item_id
+-- and a1.suffix_id == a2.suffix_id
+-- and a1.enchant_id == a2.enchant_id
+-- and a1.aux_quantity == a2.aux_quantity
+-- and a1.buyout_price == a2.buyout_price
+-- and a1.bid_price == a2.bid_price
+-- and a1.owner == a2.owner
+-- end) or {})
end
function public.start_search()
@@ -1010,14 +1007,15 @@ function public.start_search()
private.clear_selection()
private.search_button:Hide()
private.stop_button:Show()
- auctions = nil
- refresh = true
private.update_tab(RESULTS)
private.status_bar:update_status(0,0)
private.status_bar:set_text('Scanning auctions...')
+ local scanned_records = {}
+ private.testlisting:SetDatabase(scanned_records)
+
Aux.scan.start{
queries = queries,
on_page_loaded = function(page, total_pages)
@@ -1025,33 +1023,28 @@ function public.start_search()
private.status_bar:set_text(format('Scanning (Page %d / %d)', page + 1, total_pages))
end,
on_page_complete = function()
- refresh = true
+ private.testlisting:SetDatabase()
end,
on_start_query = function(query_index)
private.status_bar:update_status(0, 100 * (query_index - 1) / getn(queries)) -- TODO
private.status_bar:set_text(format('Processing query %d / %d', query_index, getn(queries)))
end,
on_read_auction = function(auction_info)
- auctions = auctions or {}
- tinsert(auctions, private.create_auction_record(auction_info))
- private.testlisting:InsertAuctionRecord(auction_info)
+-- tinsert(scanned_records, private.create_auction_record(auction_info))
+ tinsert(scanned_records, auction_info)
end,
on_complete = function()
- auctions = auctions or {}
private.status_bar:update_status(100, 100)
private.status_bar:set_text('Done Scanning')
private.stop_button:Hide()
private.search_button:Show()
- refresh = true
end,
on_abort = function()
- auctions = auctions or {}
private.status_bar:update_status(100, 100)
private.status_bar:set_text('Done Scanning')
private.stop_button:Hide()
private.search_button:Show()
- refresh = true
end,
}
end)
@@ -1066,13 +1059,12 @@ function private.process_request(entry, express_mode, buyout_mode)
PlaySound('igMainMenuOptionCheckBoxOn')
local function test(index)
- local auction_record = private.create_auction_record(Aux.info.auction(index))
+ local auction_record = Aux.info.auction(index)
return auction_record.signature == entry.signature and auction_record.bid_price == entry.bid_price and auction_record.duration == entry.duration and auction_record.owner ~= UnitName('player')
end
local function remove_entry()
entry.gone = true
- refresh = true
private.clear_selection()
end
@@ -1110,15 +1102,14 @@ function private.process_request(entry, express_mode, buyout_mode)
end
end
-function private.on_row_click(datum, grouped)
+function private.on_selection_changed(rt, datum)
- local entry
- if grouped then
- entry = Aux.util.filter(datum, function(auction) return not auction.gone end)[1] or datum[1]
- else
- entry = datum
+ if not datum then
+ return
end
+ local entry = datum.record
+
if IsControlKeyDown() then
DressUpItemLink(entry.hyperlink)
elseif IsShiftKeyDown() then
@@ -1132,58 +1123,51 @@ function private.on_row_click(datum, grouped)
end
end
-function private.create_auction_record(auction_info)
-
- local buyout_price = auction_info.buyout_price > 0 and auction_info.buyout_price or nil
- local unit_buyout_price = buyout_price and auction_info.buyout_price / auction_info.aux_quantity
- local status
- if auction_info.current_bid == 0 then
- status = 'No Bid'
- elseif auction_info.high_bidder then
- status = GREEN_FONT_COLOR_CODE..'Your Bid'..FONT_COLOR_CODE_CLOSE
- else
- status = 'Other Bidder'
- end
-
- return {
- query = auction_info.query,
- page = auction_info.page,
-
- item_id = auction_info.item_id,
- suffix_id = auction_info.suffix_id,
- unique_id = auction_info.unique_id,
- enchant_id = auction_info.enchant_id,
-
- item_key = auction_info.item_key,
- signature = auction_info.signature,
-
- name = auction_info.name,
- level = auction_info.level,
- tooltip = auction_info.tooltip,
- aux_quantity = auction_info.aux_quantity,
- buyout_price = buyout_price,
- unit_buyout_price = unit_buyout_price,
- quality = auction_info.quality,
- hyperlink = auction_info.hyperlink,
- itemstring = auction_info.itemstring,
- bid_price = auction_info.bid_price,
- unit_bid_price = auction_info.bid_price / auction_info.aux_quantity,
- owner = auction_info.owner,
- duration = auction_info.duration,
- usable = auction_info.usable,
- high_bidder = auction_info.high_bidder,
- status = status,
-
- EnhTooltip_info = auction_info.EnhTooltip_info,
- }
-end
-
-function public.on_update()
- if refresh then
- refresh = false
- private.update_listing()
- end
-end
+--function private.create_auction_record(auction_info)
+--
+-- local buyout_price = auction_info.buyout_price > 0 and auction_info.buyout_price or nil
+-- local unit_buyout_price = buyout_price and auction_info.buyout_price / auction_info.aux_quantity
+-- local status
+-- if auction_info.current_bid == 0 then
+-- status = 'No Bid'
+-- elseif auction_info.high_bidder then
+-- status = GREEN_FONT_COLOR_CODE..'Your Bid'..FONT_COLOR_CODE_CLOSE
+-- else
+-- status = 'Other Bidder'
+-- end
+--
+-- return {
+-- query = auction_info.query,
+-- page = auction_info.page,
+--
+-- item_id = auction_info.item_id,
+-- suffix_id = auction_info.suffix_id,
+-- unique_id = auction_info.unique_id,
+-- enchant_id = auction_info.enchant_id,
+--
+-- item_key = auction_info.item_key,
+-- signature = auction_info.signature,
+--
+-- name = auction_info.name,
+-- level = auction_info.level,
+-- tooltip = auction_info.tooltip,
+-- aux_quantity = auction_info.aux_quantity,
+-- buyout_price = buyout_price,
+-- unit_buyout_price = unit_buyout_price,
+-- quality = auction_info.quality,
+-- hyperlink = auction_info.hyperlink,
+-- itemstring = auction_info.itemstring,
+-- bid_price = auction_info.bid_price,
+-- unit_bid_price = auction_info.bid_price / auction_info.aux_quantity,
+-- owner = auction_info.owner,
+-- duration = auction_info.duration,
+-- usable = auction_info.usable,
+-- high_bidder = auction_info.high_bidder,
+-- status = status,
+--
+-- EnhTooltip_info = auction_info.EnhTooltip_info,
+-- }
+--end
function private.initialize_class_dropdown()
local function on_click()
diff --git a/filter_search_frame.xml b/filter_search_frame.xml
index d0abe09..be3fade 100644
--- a/filter_search_frame.xml
+++ b/filter_search_frame.xml
@@ -2,14 +2,6 @@
-
-
-
- Aux.filter_search_frame.on_update()
-
-
-
-
@@ -26,11 +18,11 @@
-
-
-
-
-
+
+
+
+
+
diff --git a/groups.lua b/groups.lua
index 3bbd11f..097e66e 100644
--- a/groups.lua
+++ b/groups.lua
@@ -1,10 +1,6 @@
local m = {}
Aux.test = m
-function m.niltest(object)
- if not object then snipe.log('eheu')
- else snipe.log('euge') end
-end
function m.prettify_search(search)
local item_pattern = '([^/;]+)([^;]*)/exact'
while true do
diff --git a/info.lua b/info.lua
index 4b518c3..a851ce0 100644
--- a/info.lua
+++ b/info.lua
@@ -79,10 +79,12 @@ function public.auction(index, type)
local item_info = public.item(item_id, suffix_id, unique_id, enchant_id)
local name, texture, count, quality, usable, level, start_price, min_increment, buyout_price, high_bid, high_bidder, owner, sale_status = GetAuctionItemInfo(type, index)
+
local duration = GetAuctionItemTimeLeft(type, index)
local tooltip = public.tooltip(function(tt) tt:SetAuctionItem(type, index) end)
local charges = private.item_charges(tooltip)
local aux_quantity = charges or count
+ local bid_price = (high_bid > 0 and high_bid or start_price) + min_increment
return {
item_id = item_id,
@@ -94,6 +96,7 @@ function public.auction(index, type)
itemstring = item_info.itemstring,
item_key = item_id..':'..suffix_id,
signature = Aux.util.join({item_id, suffix_id, unique_id, enchant_id, aux_quantity, start_price, buyout_price}, ':'), -- not unique!
+ search_signature = Aux.util.join({item_id, suffix_id, enchant_id, buyout_price, bid_price, aux_quantity, duration, owner or ''}, ':'),
name = name,
texture = texture,
@@ -109,8 +112,10 @@ function public.auction(index, type)
high_bid = high_bid,
current_bid = high_bid, -- deprecated
min_increment = min_increment,
- bid_price = (high_bid > 0 and high_bid or start_price) + min_increment,
+ bid_price = bid_price,
buyout_price = buyout_price,
+ unit_bid_price = bid_price / aux_quantity,
+ unit_buyout_price = buyout_price / aux_quantity,
high_bidder = high_bidder,
owner = owner,
sale_status = sale_status,
@@ -124,7 +129,7 @@ function public.auction(index, type)
name = name,
hyperlink = hyperlink,
quality = quality,
- count = count,
+ count = aux_quantity,
},
}
end
diff --git a/listing.lua b/listing.lua
index 94c22da..f429009 100644
--- a/listing.lua
+++ b/listing.lua
@@ -4,17 +4,17 @@ local RT_COUNT = 1
local HEAD_HEIGHT = 27
local HEAD_SPACE = 2
local AUCTION_PCT_COLORS = {
- {color="|cff2992ff", value=50}, -- blue
- {color="|cff16ff16", value=80}, -- green
- {color="|cffffff00", value=110}, -- yellow
- {color="|cffff9218", value=135}, -- orange
- {color="|cffff0000", value=Aux.huge}, -- red
+ {color='|cff2992ff', value=50}, -- blue
+ {color='|cff16ff16', value=80}, -- green
+ {color='|cffffff00', value=110}, -- yellow
+ {color='|cffff9218', value=135}, -- orange
+ {color='|cffff0000', value=Aux.huge}, -- red
}
local TIME_LEFT_STRINGS = {
- "|cffff000030m|r", -- Short
- "|cffff92182h|r", -- Medium
- "|cffffff0012h|r", -- Long
- "|cff2992ff48h|r", -- Very Long
+ '|cffff000030m|r', -- Short
+ '|cffff92182h|r', -- Medium
+ '|cffffff0012h|r', -- Long
+ '|cff2992ff48h|r', -- Very Long
}
@@ -111,7 +111,7 @@ local methods = {
OnCellLeave = function()
GameTooltip:Hide()
-- hide highlight if it's not selected
- if not this.rt.selected or this.rt.selected.hash2 ~= this.row.data.record.hash2 then
+ if not this.rt.selected or this.rt.selected.search_signature ~= this.row.data.record.search_signature then
this.row.highlight:Hide()
end
end,
@@ -138,29 +138,38 @@ local methods = {
end,
-
-- ============================================================================
-- Internal Results Table Methods
-- ============================================================================
- -- default functions which will be overridden
- GetMarketValue = function(itemString) return end,
--- GetRowPrices = function(record, isPerUnit) return end, -- TODO
- GetRowPrices = function(record, isPerUnit)
- return record.bid_price, record.buyout_price
+ -- GetRowPrices = function(record, isPerUnit) return end, -- TODO
+ GetRowPrices = function(record, per_unit)
+ if per_unit then
+ return record.unit_bid_price, record.unit_buyout_price
+ else
+ return record.bid_price, record.buyout_price
+ end
end,
GetRecordPercent = function(rt, record)
if not record then return end
- -- cache the market value on the record
--- record.marketValue = record.marketValue or rt.GetMarketValue(record.item_key) or 0
+-- cache the market value on the record
+-- record.market_value = record.market_value or rt.GetMarketValue(record.item_key) or 0
-- if record.marketValue > 0 then
-- if record.itemBuyout > 0 then
-- return Aux.round(100 * record.itemBuyout / record.marketValue, 1)
-- end
-- return nil, Aux.round(100 * record.itemDisplayedBid / record.marketValue, 1)
-- end
+
+ local market_value = Aux.history.market_value(record.item_key)
+ if market_value and market_value > 0 then
+ if record.unit_buyout_price > 0 then
+ return Aux.round(100 * record.unit_buyout_price / market_value, 1)
+ end
+ return nil, Aux.round(100 * record.unit_bid_price / market_value, 1)
+ end
end,
UpdateRowInfo = function(rt)
@@ -169,11 +178,7 @@ local methods = {
rt.sortInfo.isSorted = nil
rt:SetSelectedRecord(nil, true)
- local function search_signature(record)
- return Aux.util.join({record.item_key, record.buyout_price, record.bid_price, record.aux_quantity, record.duration, record.owner}, ':')
- end
-
- sort(rt.records, function(a,b) return search_signature(a) < search_signature(b) end)
+ sort(rt.records, function(a,b) return a.search_signature < b.search_signature end)
local records = rt.records
if getn(records) == 0 then return end
@@ -183,7 +188,7 @@ local methods = {
for i=1, getn(records) do
local record = records[i]
local prevRecord = records[i-1]
- if prevRecord and search_signature(record) == search_signature(prevRecord) then
+ if prevRecord and record.search_signature == prevRecord.search_signature then
-- it's an identical auction to the previous row so increment the number of auctions
rt.rowInfo[getn(rt.rowInfo)].children[getn(rt.rowInfo[getn(rt.rowInfo)].children)].numAuctions = rt.rowInfo[getn(rt.rowInfo)].children[getn(rt.rowInfo[getn(rt.rowInfo)].children)].numAuctions + 1
elseif prevRecord and record.item_key == prevRecord.item_key then
@@ -271,7 +276,7 @@ local methods = {
aVal = aVal[sortKey]
bVal = bVal[sortKey]
end
- if sortKey == "buyout" or sortKey == "itemBuyout" then
+ if sortKey == 'buyout' or sortKey == 'itemBuyout' then
-- for buyout, put bid-only auctions at the bottom
if not aVal or aVal == 0 then
aVal = (rt.sortInfo.descending and -1 or 1) * Aux.huge
@@ -352,7 +357,7 @@ local methods = {
local row = rt.rows[rowIndex]
-- show this row
row:Show()
- if rt.selected and record.hash2 == rt.selected.hash2 then
+ if rt.selected and record.search_signature == rt.selected.search_signature then
row.highlight:Show()
else
row.highlight:Hide()
@@ -422,7 +427,7 @@ local methods = {
-- show / hide highlight accordingly
for _, row in ipairs(rt.rows) do
- if rt.selected and row.data and row.data.record.hash2 == rt.selected.hash2 then
+ if rt.selected and row.data and row.data.record.search_signature == rt.selected.search_signature then
row.highlight:Show()
else
row.highlight:Hide()
@@ -536,22 +541,6 @@ local methods = {
rt.handlers[event] = handler
end,
- SetPriceInfo = function(rt, info)
- -- update the header text
- rt.headCells[7].info.name = info.headers[1]
- rt.headCells[8].info.name = info.headers[2]
- rt.headCells[9].info.name = info.pctHeader
- for i=7, 9 do
- if rt.headCells[i].info.isPrice then
- rt.headCells[i]:SetText(rt.headCells[i].info.name[aux_price_per_unit and 1 or 2])
- else
- rt.headCells[i]:SetText(rt.headCells[i].info.name)
- end
- end
- rt.GetRowPrices = info.GetRowPrices
- rt.GetMarketValue = info.GetMarketValue
- end,
-
SetDisabled = function(rt, disabled)
rt.disabled = disabled
if not disabled then
@@ -568,19 +557,13 @@ local methods = {
GetSelection = function(rt)
if not rt.selected then return end
- local selectedData = nil
- for i, info in ipairs(rt.rowInfo) do
- if rt.expanded[info.expandKey] then
- for _, childInfo in ipairs(info.children) do
- if childInfo.record.hash2 == rt.selected.hash2 then
- selectedData = childInfo
- break
- end
+ local selectedData
+ for _, info in ipairs(rt.rowInfo) do
+ for _, childInfo in ipairs(info.children) do
+ if childInfo.record.search_signature == rt.selected.search_signature then
+ selectedData = childInfo
+ break
end
- if selectedData then break end
- elseif info.children[1].record.hash2 == rt.selected.hash2 then
- selectedData = info.children[1]
- break
end
end
return selectedData
@@ -605,16 +588,16 @@ function CreateAuctionResultsTable(parent)
{name="Stack Size", width=0.055, align="CENTER"},
{name='Time Left', width=0.04, align="CENTER"},
{name='Seller', width=0.13, align="CENTER"},
- {name={"??", "??"}, width=0.125, align="RIGHT", isPrice=true},
- {name={"??", "??"}, width=0.125, align="RIGHT", isPrice=true},
- {name="", width=0.08, align="CENTER"},
+ {name={'Auction Bid\n(per item)', 'Auction Bid\n(per stack)'}, width=0.125, align="RIGHT", isPrice=true},
+ {name={'Auction Buyout\n(per item)', 'Auction Buyout\n(per stack)'}, width=0.125, align="RIGHT", isPrice=true},
+ {name='% Market Value', width=0.08, align="CENTER"},
}
local rtName = 'TSMAuctionResultsTable'..RT_COUNT
RT_COUNT = RT_COUNT + 1
local rt = CreateFrame('Frame', rtName, parent)
-- local numRows = TSM.db.profile.auctionResultRows
- local numRows = 10
+ local numRows = 16
rt.ROW_HEIGHT = (parent:GetHeight() - HEAD_HEIGHT-HEAD_SPACE) / numRows
rt.scrollDisabled = nil
rt.expanded = {}
@@ -644,9 +627,9 @@ function CreateAuctionResultsTable(parent)
-- frame to hold the header columns and the rows
local scrollFrame = CreateFrame('ScrollFrame', rtName..'ScrollFrame', rt, 'FauxScrollFrameTemplate')
- scrollFrame:SetScript('OnVerticalScroll', function(self, offset)
+ scrollFrame:SetScript('OnVerticalScroll', function()
if not rt.scrollDisabled then
- FauxScrollFrame_OnVerticalScroll(self, offset, rt.ROW_HEIGHT, function() rt:UpdateRows() end)
+ FauxScrollFrame_OnVerticalScroll(rt.ROW_HEIGHT, function() rt:UpdateRows() end)
end
end)
scrollFrame:SetAllPoints(contentFrame)
@@ -661,7 +644,7 @@ function CreateAuctionResultsTable(parent)
scrollBar:SetWidth(10)
local thumbTex = scrollBar:GetThumbTexture()
thumbTex:SetPoint('CENTER', 0, 0)
--- TSMAPI.Design:SetContentColor(thumbTex)
+ thumbTex:SetTexture(unpack(Aux.gui.config.content_color))
thumbTex:SetHeight(150)
thumbTex:SetWidth(scrollBar:GetWidth())
getglobal(scrollBar:GetName()..'ScrollUpButton'):Hide()
@@ -670,7 +653,6 @@ function CreateAuctionResultsTable(parent)
-- create the header cells
rt.headCells = {}
for i, info in ipairs(colInfo) do
- snipe.log(i)
local cell = CreateFrame('Button', rtName..'HeadCol'..i, rt.contentFrame)
cell:SetHeight(HEAD_HEIGHT)
if i == 1 then