lots of post tab refactoring

This commit is contained in:
Manuel Simon Hirsig
2016-01-25 03:07:51 +01:00
parent ed6f65277e
commit 7cbb349cd6
7 changed files with 427 additions and 502 deletions
+306 -322
View File
@@ -6,187 +6,198 @@ local existing_auctions = {}
local inventory_data
local bestPriceOurStackSize
local update_auction_listing, undercut, refresh_entries, auction_candidates, charge_classes, get_stack_size_slider_value
local current_auction
--local LIVE, HISTORICAL, FIXED = {}, {}, {}
local set_auction, update_auction_listing, record_auction, undercut, item_class_index, item_subclass_index, report, select_entry, update_recommendation, refresh_entries, auction_candidates, charge_classes, get_stack_size_slider_value
local LIVE, HISTORICAL, FIXED = 1, 2, 3
Aux.sell.inventory_listing_config = {
on_row_click = function (sheet, row_index)
local data_index = row_index + FauxScrollFrame_GetOffset(sheet.scroll_frame)
set_auction(sheet.data[data_index])
end,
on_row_enter = function (sheet, row_index)
sheet.rows[row_index].highlight:SetAlpha(.5)
Aux.info.set_tooltip(sheet.rows[row_index].itemstring, nil, this, 'ANCHOR_LEFT', 0, 0)
end,
on_row_leave = function (sheet, row_index)
local data_index = row_index + FauxScrollFrame_GetOffset(sheet.scroll_frame)
if not (current_auction and sheet.data[data_index] == current_auction) then
sheet.rows[row_index].highlight:SetAlpha(0)
end
AuxTooltip:Hide()
end,
row_setter = function(row, datum)
if current_auction and datum == current_auction then
row.highlight:SetAlpha(.5)
else
row.highlight:SetAlpha(0)
end
row.itemstring = Aux.info.itemstring(datum.item_id, datum.suffix_id)
end,
columns = {
{
title = 'Qty',
width = 25,
comparator = function(datum1, datum2) return Aux.util.compare(datum1.aux_quantity, datum2.aux_quantity, Aux.util.LT) end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
cell_setter = function(cell, datum)
cell.text:SetText(datum.aux_quantity)
end,
},
{
title = 'Item',
width = 186,
comparator = function(row1, row2) return Aux.util.compare(row1.name, row2.name, Aux.util.GT) end,
cell_initializer = function(cell)
local icon = CreateFrame('Button', nil, cell)
icon:EnableMouse(false)
local icon_texture = icon:CreateTexture(nil, 'BORDER')
icon_texture:SetAllPoints(icon)
icon.icon_texture = icon_texture
local normal_texture = icon:CreateTexture(nil)
normal_texture:SetPoint('CENTER', 0, 0)
normal_texture:SetWidth(22)
normal_texture:SetHeight(22)
normal_texture:SetTexture('Interface\\Buttons\\UI-Quickslot2')
icon:SetNormalTexture(normal_texture)
icon:SetPoint('LEFT', cell)
icon:SetWidth(12)
icon:SetHeight(12)
local text = cell:CreateFontString(nil, 'OVERLAY', 'GameFontHighlightSmall')
text:SetPoint('LEFT', icon, 'RIGHT', 1, 0)
text:SetPoint('TOPRIGHT', cell)
text:SetPoint('BOTTOMRIGHT', cell)
text:SetJustifyV('TOP')
text:SetJustifyH('LEFT')
text:SetTextColor(0.8, 0.8, 0.8)
cell.text = text
cell.icon = icon
end,
cell_setter = function(cell, datum)
cell.icon.icon_texture:SetTexture(datum.texture)
cell.text:SetText('['..datum.name..']')
local color = ITEM_QUALITY_COLORS[datum.quality]
cell.text:SetTextColor(color.r, color.g, color.b)
end,
},
},
sort_order = {{column = 2, order = 'ascending' }},
}
Aux.sell.auction_listing_config = {
on_row_click = function (sheet, row_index, column_index)
local data_index = row_index + FauxScrollFrame_GetOffset(sheet.scroll_frame)
AuxSellEntry_OnClick(sheet.data[data_index])
end,
on_row_enter = function (sheet, row_index, column_index)
sheet.rows[row_index].highlight:SetAlpha(.5)
end,
on_row_leave = function (sheet, row_index, column_index)
local data_index = row_index + FauxScrollFrame_GetOffset(sheet.scroll_frame)
local datum = sheet.data[data_index]
if not (datum and current_auction and Aux.util.safe_index{existing_auctions, current_auction.key, 'selected', 'key'} == datum.key) then
sheet.rows[row_index].highlight:SetAlpha(0)
end
end,
row_setter = function(row, datum)
if datum and current_auction and Aux.util.safe_index{existing_auctions, current_auction.key, 'selected', 'key'} == datum.key then
row.highlight:SetAlpha(.5)
else
row.highlight:SetAlpha(0)
end
end,
columns = {
{
title = 'Avail',
width = 40,
comparator = function(row1, row2) return Aux.util.compare(row1.count, row2.count, Aux.util.LT) end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
cell_setter = function(cell, row)
cell.text:SetText(row.count)
end,
},
{
title = 'Yours',
width = 40,
comparator = function(row1, row2) return Aux.util.compare(row1.yours, row2.yours, Aux.util.LT) end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
cell_setter = function(cell, row)
cell.text:SetText(row.yours)
end,
},
{
title = 'Max Left',
width = 55,
comparator = function(row1, row2) return Aux.util.compare(row1.max_time_left, row2.max_time_left, Aux.util.GT) end,
cell_initializer = Aux.sheet.default_cell_initializer('CENTER'),
cell_setter = function(cell, datum)
local text
if datum.max_time_left == 1 then
text = '30m'
elseif datum.max_time_left == 2 then
text = '2h'
elseif datum.max_time_left == 3 then
text = '8h'
elseif datum.max_time_left == 4 then
text = '24h'
end
cell.text:SetText(text)
end,
},
{
title = 'Qty',
width = 25,
comparator = function(row1, row2) return Aux.util.compare(row1.stack_size, row2.stack_size, Aux.util.LT) end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
cell_setter = function(cell, row)
cell.text:SetText(row.stack_size == get_stack_size_slider_value() and GREEN_FONT_COLOR_CODE..row.stack_size..FONT_COLOR_CODE_CLOSE or row.stack_size)
end,
},
{
title = 'Buy/ea',
width = 80,
comparator = function(row1, row2) return Aux.util.compare(row1.unit_buyout_price, row2.unit_buyout_price, Aux.util.GT) end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
cell_setter = function(cell, row)
cell.text:SetText(Aux.util.money_string(row.unit_buyout_price))
end,
},
},
sort_order = {{column = 5, order = 'ascending' }},
}
function private.parse_inventory()
Aux.sheet.populate(AuxSellInventoryListing.sheet, Aux.util.filter(inventory_data, function(item) return item.aux_quantity > 0 end))
function private.update_inventory_listing()
Aux.sheet.populate(private.listings.inventory, Aux.util.filter(inventory_data, function(item) return item.aux_quantity > 0 end))
end
function update_auction_listing()
Aux.sheet.populate(AuxSellAuctionsListing.sheet, current_auction and existing_auctions[current_auction.key] or {})
Aux.sheet.populate(private.listings.auctions, private.current_item() and existing_auctions[private.current_item().key] or {})
end
function Aux.sell.on_open()
function private.current_item()
return private.listings.inventory:get_selected()
end
function private.current_auction()
return private.listings.auctions:get_selected()
end
function public.on_load()
private.inventory_listing_config = {
frame = AuxSellInventoryListing,
on_row_click = function (sheet, row_index)
local data_index = row_index + FauxScrollFrame_GetOffset(sheet.scroll_frame)
private.set_item(sheet.data[data_index])
end,
on_row_enter = function (sheet, row_index)
Aux.info.set_tooltip(sheet.rows[row_index].itemstring, nil, this, 'ANCHOR_LEFT', 0, 0)
end,
on_row_leave = function (sheet, row_index)
AuxTooltip:Hide()
end,
row_setter = function(row, datum)
row.itemstring = Aux.info.itemstring(datum.item_id, datum.suffix_id)
end,
columns = {
{
title = 'Qty',
width = 25,
comparator = function(datum1, datum2) return Aux.util.compare(datum1.aux_quantity, datum2.aux_quantity, Aux.util.LT) end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
cell_setter = function(cell, datum)
cell.text:SetText(datum.aux_quantity)
end,
},
{
title = 'Item',
width = 186,
comparator = function(row1, row2) return Aux.util.compare(row1.name, row2.name, Aux.util.GT) end,
cell_initializer = function(cell)
local icon = CreateFrame('Button', nil, cell)
icon:EnableMouse(false)
local icon_texture = icon:CreateTexture(nil, 'BORDER')
icon_texture:SetAllPoints(icon)
icon.icon_texture = icon_texture
local normal_texture = icon:CreateTexture(nil)
normal_texture:SetPoint('CENTER', 0, 0)
normal_texture:SetWidth(22)
normal_texture:SetHeight(22)
normal_texture:SetTexture('Interface\\Buttons\\UI-Quickslot2')
icon:SetNormalTexture(normal_texture)
icon:SetPoint('LEFT', cell)
icon:SetWidth(12)
icon:SetHeight(12)
local text = cell:CreateFontString(nil, 'OVERLAY', 'GameFontHighlightSmall')
text:SetPoint('LEFT', icon, 'RIGHT', 1, 0)
text:SetPoint('TOPRIGHT', cell)
text:SetPoint('BOTTOMRIGHT', cell)
text:SetJustifyV('TOP')
text:SetJustifyH('LEFT')
text:SetTextColor(0.8, 0.8, 0.8)
cell.text = text
cell.icon = icon
end,
cell_setter = function(cell, datum)
cell.icon.icon_texture:SetTexture(datum.texture)
cell.text:SetText('['..datum.name..']')
local color = ITEM_QUALITY_COLORS[datum.quality]
cell.text:SetTextColor(color.r, color.g, color.b)
end,
},
},
sort_order = {{column = 2, order = 'ascending' }},
}
private.auction_listing_config = {
frame = AuxSellAuctionsListing,
on_row_click = function (sheet, row_index, column_index)
local data_index = row_index + FauxScrollFrame_GetOffset(sheet.scroll_frame)
private.set_auction(sheet.data[data_index])
end,
columns = {
{
title = 'Avail',
width = 40,
comparator = function(row1, row2) return Aux.util.compare(row1.count, row2.count, Aux.util.LT) end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
cell_setter = function(cell, row)
cell.text:SetText(row.count)
end,
},
{
title = 'Yours',
width = 40,
comparator = function(row1, row2) return Aux.util.compare(row1.yours, row2.yours, Aux.util.LT) end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
cell_setter = function(cell, row)
cell.text:SetText(row.yours)
end,
},
{
title = 'Max Left',
width = 55,
comparator = function(row1, row2) return Aux.util.compare(row1.max_time_left, row2.max_time_left, Aux.util.GT) end,
cell_initializer = Aux.sheet.default_cell_initializer('CENTER'),
cell_setter = function(cell, datum)
local text
if datum.max_time_left == 1 then
text = '30m'
elseif datum.max_time_left == 2 then
text = '2h'
elseif datum.max_time_left == 3 then
text = '8h'
elseif datum.max_time_left == 4 then
text = '24h'
end
cell.text:SetText(text)
end,
},
{
title = 'Qty',
width = 25,
comparator = function(row1, row2) return Aux.util.compare(row1.stack_size, row2.stack_size, Aux.util.LT) end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
cell_setter = function(cell, row)
cell.text:SetText(row.stack_size == get_stack_size_slider_value() and GREEN_FONT_COLOR_CODE..row.stack_size..FONT_COLOR_CODE_CLOSE or row.stack_size)
end,
},
{
title = 'Buy/ea',
width = 80,
comparator = function(row1, row2) return Aux.util.compare(row1.unit_buyout_price, row2.unit_buyout_price, Aux.util.GT) end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
cell_setter = function(cell, row)
cell.text:SetText(Aux.util.money_string(row.unit_buyout_price))
end,
},
Aux.listing_util.percentage_market_column(function(entry) return entry.item_key end, function(entry) return entry.unit_buyout_price end),
},
sort_order = {{column = 5, order = 'ascending' }},
}
private.listings = {
inventory = Aux.sheet.create(private.inventory_listing_config),
auctions = Aux.sheet.create(private.auction_listing_config),
}
do
local status_bar = Aux.gui.status_bar(AuxSellFrame)
status_bar:SetWidth(265)
status_bar:SetHeight(30)
status_bar:SetPoint('BOTTOMLEFT', AuxSellFrame, 'BOTTOMLEFT', 6, 6)
status_bar:update_status(100, 0)
status_bar:set_text('')
private.status_bar = status_bar
end
do
local btn = Aux.gui.button(AuxSellParameters, 15, '$parentPostButton')
btn:SetPoint('TOPLEFT', private.status_bar, 'TOPRIGHT', 5, 0)
btn:SetWidth(80)
btn:SetHeight(24)
btn:SetText('Post')
btn:SetScript('OnClick', private.post_auctions)
private.post_button = btn
end
do
local btn = Aux.gui.button(AuxSellParameters, 15, '$parentRefreshButton')
btn:SetPoint('TOPLEFT', private.post_button, 'TOPRIGHT', 5, 0)
btn:SetWidth(80)
btn:SetHeight(24)
btn:SetText('Refresh')
btn:SetScript('OnClick', private.refresh)
private.refresh_button = btn
end
end
function public.on_open()
MoneyFrame_Update('AuxSellParametersDepositMoneyFrame', 0)
AuxSellInventory:SetWidth(AuxSellInventoryListing:GetWidth() + 40)
AuxSellAuctions:SetWidth(AuxSellAuctionsListing:GetWidth() + 40)
@@ -211,37 +222,18 @@ function Aux.sell.on_open()
Aux.sell.validate_parameters()
update_inventory_data()
private.update_inventory_data()
private.parse_inventory()
private.update_inventory_listing()
update_auction_listing()
update_recommendation()
private.update_recommendation()
end
function Aux.sell.on_close()
function public.on_close()
end
function public.on_load()
do
local btn = Aux.gui.button(AuxSellParameters, 15, '$parentPostButton')
btn:SetPoint('BOTTOMLEFT', 8, 15)
btn:SetWidth(80)
btn:SetHeight(24)
btn:SetText('Post')
btn:SetScript('OnClick', private.post_auctions)
end
do
local btn = Aux.gui.button(AuxSellParameters, 15, '$parentRefreshButton')
btn:SetPoint('LEFT', AuxSellParametersPostButton,'RIGHT', 5, 0)
btn:SetWidth(80)
btn:SetHeight(24)
btn:SetText('Refresh')
btn:SetScript('OnClick', private.refresh)
end
end
function Aux.sell.duration_radio_button_on_click(index)
AuxSellParametersShortDurationRadio:SetChecked(false)
AuxSellParametersMediumDurationRadio:SetChecked(false)
@@ -259,7 +251,7 @@ function Aux.sell.duration_radio_button_on_click(index)
AuctionFrameAuctions.duration = 1440
AUX_AUCTION_DURATION = 'long'
end
update_recommendation()
private.update_recommendation()
end
function Aux_Sell_SetAuctionDuration(duration)
@@ -272,8 +264,8 @@ function Aux_Sell_SetAuctionDuration(duration)
end
end
function Aux.sell.post_auctions()
local auction = current_auction
function private.post_auctions()
local auction = private.current_item()
if auction then
local key, hyperlink, stack_size, buyout_price, stack_count = auction.key, auction.hyperlink, get_stack_size_slider_value(), MoneyInputFrame_GetCopper(AuxSellParametersBuyoutPrice), AuxSellStackCountSlider:GetValue()
local duration
@@ -284,7 +276,7 @@ function Aux.sell.post_auctions()
elseif AuctionFrameAuctions.duration == 1440 then
duration = 4
end
Aux.post.start(
key,
stack_size,
@@ -294,12 +286,13 @@ function Aux.sell.post_auctions()
stack_count,
function(posted)
for i = 1, posted do
record_auction(key, stack_size, buyout_price, duration, UnitName('player'))
private.record_auction(key, stack_size, buyout_price, duration, UnitName('player'))
end
if existing_auctions[key] then
for _, entry in ipairs(existing_auctions[key]) do
if entry.buyout_price == buyout_price and entry.stack_size == stack_size then
existing_auctions[key].selected = entry
private.listings.auctions:select(entry)
end
end
end
@@ -308,41 +301,37 @@ function Aux.sell.post_auctions()
local charge_class = auction.charges or 0
auction.availability[charge_class] = auction.availability[charge_class] - (posted * (auction.charges and 1 or stack_size))
private.parse_inventory()
report(hyperlink, stack_size, buyout_price, posted)
private.update_inventory_listing()
end
)
end
end
function select_entry()
if current_auction and existing_auctions[current_auction.key] and not existing_auctions[current_auction.key].selected then
local bestPrice = {} -- a table with one entry per stack_size that is the cheapest auction for that particular stack_size
local absoluteBest -- the overall cheapest auction
function private.select_auction()
if not private.current_auction() and getn(existing_auctions[private.current_item().key]) > 0 then
local cheapest_for_size = {}
local cheapest
----- find the best price per stacksize and overall -----
for _, auction_datum in ipairs(existing_auctions[current_auction.key]) do
if not bestPrice[auction_datum.stack_size] or bestPrice[auction_datum.stack_size].unit_buyout_price >= auction_datum.unit_buyout_price then
bestPrice[auction_datum.stack_size] = auction_datum
for _, auction_entry in ipairs(existing_auctions[private.current_item().key]) do
if not cheapest_for_size[auction_entry.stack_size] or cheapest_for_size[auction_entry.stack_size].unit_buyout_price >= auction_entry.unit_buyout_price then
cheapest_for_size[auction_entry.stack_size] = auction_entry
end
if not absoluteBest or absoluteBest.unit_buyout_price > auction_datum.unit_buyout_price then
absoluteBest = auction_datum
end
end
existing_auctions[current_auction.key].selected = absoluteBest
if bestPrice[get_stack_size_slider_value()] then
existing_auctions[current_auction.key].selected = bestPrice[get_stack_size_slider_value()]
bestPriceOurStackSize = bestPrice[get_stack_size_slider_value()]
if not cheapest or cheapest.unit_buyout_price > auction_entry.unit_buyout_price then
cheapest = auction_entry
end
end
local auction = cheapest_for_size[get_stack_size_slider_value()] or cheapest
existing_auctions[private.current_item().key].selected = auction
private.listings.auctions:clear_selection()
private.listings.auctions:select(auction)
end
end
function get_stack_size_slider_value()
if current_auction.charges then
if private.current_item().charges then
return AuxSellStackSizeSlider.charge_classes[AuxSellStackSizeSlider:GetValue()]
else
return AuxSellStackSizeSlider:GetValue()
@@ -350,10 +339,10 @@ function get_stack_size_slider_value()
end
function Aux.sell.validate_parameters()
AuxSellParametersPostButton:Disable()
private.post_button:Disable()
AuxSellParametersBuyoutPriceErrorText:Hide()
if not current_auction then
if not private.current_item() then
return
end
@@ -366,15 +355,14 @@ function Aux.sell.validate_parameters()
return
end
AuxSellParametersPostButton:Enable()
private.post_button:Enable()
end
function update_recommendation()
-- AuxSellParametersStrategyDropDownStaleWarning:SetText()
function private.update_recommendation()
if not private.current_item() then
private.refresh_button:Disable()
if not current_auction then
AuxSellParametersRefreshButton:Disable()
AuxSellParametersItemIconTexture:SetTexture(nil)
AuxSellParametersItemCount:SetText()
AuxSellParametersItemName:SetText()
@@ -382,51 +370,55 @@ function update_recommendation()
MoneyInputFrame_SetCopper(AuxSellParametersBuyoutPrice, 0)
MoneyInputFrame_SetCopper(AuxSellParametersStartPrice, 0)
AuxSellStackSizeSlider:SetMinMaxValues(0,0)
AuxSellStackSizeSlider:SetMinMaxValues(0, 0)
AuxSellStackSize:SetNumber(0)
AuxSellStackCountSlider:SetMinMaxValues(0,0)
AuxSellStackCountSlider:SetMinMaxValues(0, 0)
AuxSellStackCount:SetNumber(0)
MoneyFrame_Update('AuxSellParametersDepositMoneyFrame', 0)
else
AuxSellStackSize:SetNumber(current_auction.charges and AuxSellStackSizeSlider.charge_classes[AuxSellStackSizeSlider:GetValue()] or AuxSellStackSizeSlider:GetValue())
AuxSellStackSize:SetNumber(private.current_item().charges and AuxSellStackSizeSlider.charge_classes[AuxSellStackSizeSlider:GetValue()] or AuxSellStackSizeSlider:GetValue())
AuxSellStackCount:SetNumber(AuxSellStackCountSlider:GetValue())
AuxSellParametersItemIconTexture:SetTexture(current_auction.texture)
AuxSellParametersItemName:SetText(current_auction.name)
local color = ITEM_QUALITY_COLORS[current_auction.quality]
AuxSellParametersItemIconTexture:SetTexture(private.current_item().texture)
AuxSellParametersItemName:SetText(private.current_item().name)
local color = ITEM_QUALITY_COLORS[private.current_item().quality]
AuxSellParametersItemName:SetTextColor(color.r, color.g, color.b)
if current_auction.aux_quantity > 1 then
AuxSellParametersItemCount:SetText(current_auction.aux_quantity)
if private.current_item().aux_quantity > 1 then
AuxSellParametersItemCount:SetText(private.current_item().aux_quantity)
else
AuxSellParametersItemCount:SetText()
end
AuxSellParametersRefreshButton:Enable()
private.refresh_button:Enable()
-- TODO neutral AH deposit formula
MoneyFrame_Update('AuxSellParametersDepositMoneyFrame', floor(current_auction.unit_vendor_price * 0.05 * (current_auction.charges and 1 or get_stack_size_slider_value())) * AuxSellStackCountSlider:GetValue() * AuctionFrameAuctions.duration / 120)
if existing_auctions[current_auction.key] and existing_auctions[current_auction.key].selected then
MoneyFrame_Update('AuxSellParametersDepositMoneyFrame', floor(private.current_item().unit_vendor_price * 0.05 * (private.current_item().charges and 1 or get_stack_size_slider_value())) * AuxSellStackCountSlider:GetValue() * AuctionFrameAuctions.duration / 120)
local new_buyout_price = existing_auctions[current_auction.key].selected.unit_buyout_price * get_stack_size_slider_value()
if existing_auctions[private.current_item().key] then
private.select_auction()
if existing_auctions[current_auction.key].selected.yours == 0 then
new_buyout_price = undercut(new_buyout_price)
end
if private.current_auction() then
MoneyInputFrame_SetCopper(AuxSellParametersStartPrice, max(1, Aux.round(new_buyout_price * 0.95)))
MoneyInputFrame_SetCopper(AuxSellParametersBuyoutPrice, max(1, Aux.round(new_buyout_price)))
local new_buyout_price = private.current_auction().unit_buyout_price * get_stack_size_slider_value()
elseif existing_auctions[current_auction.key] then -- unsuccessful search
if private.current_auction().yours == 0 then
new_buyout_price = undercut(new_buyout_price)
end
local market_value = Aux.history.market_value(current_auction.key)
if market_value then
MoneyInputFrame_SetCopper(AuxSellParametersStartPrice, max(1, Aux.round(market_value * 0.95)))
MoneyInputFrame_SetCopper(AuxSellParametersBuyoutPrice, max(1, Aux.round(market_value)))
else
MoneyInputFrame_SetCopper(AuxSellParametersStartPrice, max(1, Aux.round(current_auction.unit_vendor_price * (current_auction.charges and 1 or get_stack_size_slider_value()) * 1.053)))
MoneyInputFrame_SetCopper(AuxSellParametersBuyoutPrice, max(1, Aux.round(current_auction.unit_vendor_price * (current_auction.charges and 1 or get_stack_size_slider_value()) * 4)))
MoneyInputFrame_SetCopper(AuxSellParametersStartPrice, max(1, Aux.round(new_buyout_price * 0.95)))
MoneyInputFrame_SetCopper(AuxSellParametersBuyoutPrice, max(1, Aux.round(new_buyout_price)))
elseif existing_auctions[private.current_item().key] then -- unsuccessful search
local market_value = Aux.history.market_value(private.current_item().key)
if market_value then
MoneyInputFrame_SetCopper(AuxSellParametersStartPrice, max(1, Aux.round(market_value * 0.95)))
MoneyInputFrame_SetCopper(AuxSellParametersBuyoutPrice, max(1, Aux.round(market_value)))
else
MoneyInputFrame_SetCopper(AuxSellParametersStartPrice, max(1, Aux.round(private.current_item().unit_vendor_price * (private.current_item().charges and 1 or get_stack_size_slider_value()) * 1.053)))
MoneyInputFrame_SetCopper(AuxSellParametersBuyoutPrice, max(1, Aux.round(private.current_item().unit_vendor_price * (private.current_item().charges and 1 or get_stack_size_slider_value()) * 4)))
end
end
else -- no search yet
MoneyInputFrame_SetCopper(AuxSellParametersStartPrice, 0)
@@ -436,46 +428,49 @@ function update_recommendation()
end
function Aux.sell.quantity_update()
if current_auction then
AuxSellStackCountSlider:SetMinMaxValues(1, current_auction.charges and current_auction.availability[AuxSellStackSizeSlider.charge_classes[AuxSellStackSizeSlider:GetValue()]] or floor(current_auction.availability[0] / get_stack_size_slider_value()))
if private.current_item() then
AuxSellStackCountSlider:SetMinMaxValues(1, private.current_item().charges and private.current_item().availability[AuxSellStackSizeSlider.charge_classes[AuxSellStackSizeSlider:GetValue()]] or floor(private.current_item().availability[0] / get_stack_size_slider_value()))
end
select_entry()
update_recommendation()
private.update_recommendation()
update_auction_listing()
end
function Aux.sell.clear_auction()
current_auction = nil
select_entry()
update_recommendation()
private.listings.inventory:clear_selection()
private.update_recommendation()
end
function set_auction(auction_candidate)
function private.set_item(item)
private.listings.auctions:clear_selection()
private.listings.inventory:clear_selection()
private.listings.inventory:select(item)
local new_auction = Aux.util.safe_index{existing_auctions, item.key, 'selected' }
if new_auction then
private.listings.auctions:select(new_auction)
end
PlaySound('igMainMenuOptionCheckBoxOn')
Aux.scan.abort(function()
current_auction = auction_candidate
private.parse_inventory()
private.update_inventory_listing()
local charge_classes = charge_classes(current_auction.availability)
AuxSellStackSizeSlider.charge_classes = current_auction.charges and charge_classes
local stack_size_slider_max = current_auction.charges and getn(charge_classes) or min(current_auction.max_stack, current_auction.availability[0])
local charge_classes = charge_classes(private.current_item().availability)
AuxSellStackSizeSlider.charge_classes = private.current_item().charges and charge_classes
local stack_size_slider_max = private.current_item().charges and getn(charge_classes) or min(private.current_item().max_stack, private.current_item().availability[0])
AuxSellStackSizeSlider:SetMinMaxValues(1, stack_size_slider_max)
AuxSellStackSizeSlider:SetValue(stack_size_slider_max)
Aux.sell.quantity_update()
AuxSellStackCountSlider:SetValue(current_auction.aux_quantity) -- reduced to max possible
AuxSellStackCountSlider:SetValue(private.current_item().aux_quantity) -- reduced to max possible
if not existing_auctions[current_auction.key] then
if not existing_auctions[private.current_item().key] then
refresh_entries()
end
select_entry()
update_recommendation()
private.update_recommendation()
update_auction_listing()
end)
end
@@ -489,9 +484,9 @@ function charge_classes(availability)
return charge_classes
end
function update_inventory_data()
function private.update_inventory_data()
inventory_data = {}
private.parse_inventory()
private.update_inventory_listing()
local auction_candidate_map = {}
@@ -535,7 +530,7 @@ function update_inventory_data()
key = item_info.item_key,
hyperlink = item_info.hyperlink,
name = item_info.name,
texture = item_info.texture,
quality = item_info.quality,
@@ -567,13 +562,13 @@ function update_inventory_data()
tinsert(auction_candidates, auction_candidate)
end
inventory_data = auction_candidates
private.parse_inventory()
private.update_inventory_listing()
end)
end
function refresh_entries()
if current_auction then
local item_id, suffix_id = current_auction.item_id, current_auction.suffix_id
if private.current_item() then
local item_id, suffix_id = private.current_item().item_id, private.current_item().suffix_id
local item_key = item_id..':'..suffix_id
local item_info = Aux.info.item(item_id, suffix_id)
@@ -594,29 +589,32 @@ function refresh_entries()
usable = item_info.usable,
}
Aux.log('Scanning auctions ...')
private.status_bar:update_status(0,0)
private.status_bar:set_text('Scanning auctions...')
Aux.scan.start{
query = search_query,
page = 0,
on_page_loaded = function(page, total_pages)
Aux.log('Scanning page '..(page + 1)..' out of '..total_pages..' ...')
private.status_bar:update_status(100 * (page + 1) / total_pages, 100 * (page + 1) / total_pages) -- TODO
private.status_bar:set_text(string.format('Scanning (Page %d / %d)', page + 1, total_pages))
end,
on_read_auction = function(auction_info)
if auction_info.name == item_info.name then
local aux_quantity = auction_info.charges or auction_info.count
record_auction(auction_info.item_key, aux_quantity, auction_info.buyout_price, auction_info.duration, auction_info.owner)
if auction_info.item_key == item_key then
private.record_auction(auction_info.item_key, auction_info.aux_quantity, auction_info.buyout_price, auction_info.duration, auction_info.owner)
end
end,
on_abort = function()
existing_auctions[item_key] = nil
Aux.log('Scan aborted.')
private.status_bar:update_status(100, 100)
private.status_bar:set_text('Done Scanning')
end,
on_complete = function()
existing_auctions[item_key] = existing_auctions[item_key] or { created = GetTime() }
select_entry()
update_recommendation()
existing_auctions[item_key] = existing_auctions[item_key] or { created = time() }
private.update_recommendation()
update_auction_listing()
Aux.log('Scan complete: '..getn(existing_auctions[item_key])..' '..Aux_PluralizeIf('auction', getn(existing_auctions[item_key]))..' found.')
private.status_bar:update_status(100, 100)
private.status_bar:set_text('Done Scanning')
end,
next_page = function(page, total_pages)
local last_page = max(total_pages - 1, 0)
@@ -628,12 +626,13 @@ function refresh_entries()
end
end
function AuxSellEntry_OnClick(entry)
function private.set_auction(entry)
existing_auctions[current_auction.key].selected = entry
existing_auctions[private.current_item().key].selected = entry
private.listings.auctions:clear_selection()
private.listings.auctions:select(entry)
update_auction_listing()
update_recommendation()
private.update_recommendation()
PlaySound('igMainMenuOptionCheckBoxOn')
end
@@ -641,38 +640,34 @@ end
function private.refresh()
Aux.scan.abort(function()
refresh_entries()
select_entry()
update_recommendation()
private.update_recommendation()
update_auction_listing()
end)
end
function record_auction(key, aux_quantity, buyout_price, duration, owner)
function private.record_auction(key, aux_quantity, buyout_price, duration, owner)
if buyout_price > 0 then
existing_auctions[key] = existing_auctions[key] or { created = GetTime() }
local entry
for _, existingEntry in ipairs(existing_auctions[key]) do
if existingEntry.buyout_price == buyout_price and existingEntry.stack_size == aux_quantity then
entry = existingEntry
for _, existing_entry in ipairs(existing_auctions[key]) do
if buyout_price == existing_entry.buyout_price and aux_quantity == existing_entry.stack_size then
entry = existing_entry
end
end
if entry then
entry.count = entry.count + 1
entry.yours = entry.yours + (owner == UnitName("player") and 1 or 0)
entry.yours = entry.yours + (owner == UnitName('player') and 1 or 0)
entry.max_time_left = max(entry.max_time_left, duration)
else
entry = {
key = aux_quantity..':'..buyout_price,
else
tinsert(existing_auctions[key], {
item_key = key,
stack_size = aux_quantity,
buyout_price = buyout_price,
unit_buyout_price = buyout_price / aux_quantity,
max_time_left = duration,
count = 1,
yours = owner == UnitName("player") and 1 or 0,
}
tinsert(existing_auctions[key], entry)
table.sort(existing_auctions[key], function(a,b) return a.unit_buyout_price < b.unit_buyout_price end)
yours = owner == UnitName('player') and 1 or 0,
})
end
end
end
@@ -681,17 +676,6 @@ function undercut(price)
return math.max(0, price - 1)
end
function report(hyperlink, aux_quantity, buyout_price, posted)
Aux.log(string.format(
'%i %s of %s (%i) posted at %s.',
posted,
Aux_PluralizeIf('auction', posted),
hyperlink,
aux_quantity,
Aux.util.money_string(buyout_price)
))
end
--function Aux.sell.initialize_strategy_dropdown()
--
-- local function on_click()