From 012ccfb21d4cf09a3ea231caf6b710eee6996505 Mon Sep 17 00:00:00 2001 From: Manuel Simon Hirsig Date: Fri, 19 Aug 2016 17:44:19 +0200 Subject: [PATCH] more refactoring --- components/cache.lua | 4 +- components/scan.lua | 10 +- components/slash.lua | 38 ++++---- components/stack.lua | 2 +- core.lua | 187 +++++++++++-------------------------- gui.lua | 6 +- init.lua | 5 +- tables/auction_listing.lua | 20 ++-- tabs/post/core.lua | 4 +- tabs/search/filter.lua | 8 +- tabs/search/results.lua | 8 +- util/core.lua | 50 +++++++++- util/filter.lua | 18 ++-- util/money.lua | 2 +- 14 files changed, 168 insertions(+), 194 deletions(-) diff --git a/components/cache.lua b/components/cache.lua index 61001bc..4672e31 100644 --- a/components/cache.lua +++ b/components/cache.lua @@ -195,12 +195,12 @@ function public.populate_wdb(item_id) item_id = item_id or MIN_ITEM_ID if item_id > MAX_ITEM_ID then - aux.log('Cache populated.') + log('Cache populated.') return end if not GetItemInfo('item:'..item_id) then - aux.log('Fetching item '..item_id..'.') + log('Fetching item '..item_id..'.') AuxTooltip:SetHyperlink('item:'..item_id) end diff --git a/components/scan.lua b/components/scan.lua index d7ebd50..a6215cc 100644 --- a/components/scan.lua +++ b/components/scan.lua @@ -27,14 +27,14 @@ do end end for _, state in aborted do - aux.call(state.params.on_abort) + call(state.params.on_abort) end end function complete() local on_complete = state.params.on_complete scan_states[state.params.type] = nil - aux.call(on_complete) + call(on_complete) end function accessor.state() @@ -81,7 +81,7 @@ end function scan() state.query_index = state.query_index and state.query_index + 1 or 1 - if query and (aux.index(query.blizzard_query, 'first_page') or 0) <= (aux.index(query.blizzard_query, 'last_page') or aux.huge) then + if query and (index(query.blizzard_query, 'first_page') or 0) <= (index(query.blizzard_query, 'last_page') or huge) then if query.blizzard_query then state.page = query.blizzard_query.first_page or 0 else @@ -103,7 +103,7 @@ end function submit_query() aux.control.when(function() return state.params.type ~= 'list' or CanSendAuctionQuery() end, function() - aux.call(state.params.on_submit_query) + call(state.params.on_submit_query) state.last_query_time = GetTime() if state.params.type == 'bidder' then GetBidderAuctionItems(state.page) @@ -153,7 +153,7 @@ function scan_page(i) aux.history.process_auction(auction_info) - if aux.call(state.params.auto_buy_validator, auction_info) then + if call(state.params.auto_buy_validator, auction_info) then local send_signal, signal_received = signal() aux.control.when(signal_received, recurse) aux.place_bid(auction_info.query_type, auction_info.index, auction_info.buyout_price, aux.C(send_signal, true)) diff --git a/components/slash.lua b/components/slash.lua index b9fa545..b4c2adf 100644 --- a/components/slash.lua +++ b/components/slash.lua @@ -4,50 +4,50 @@ function SlashCmdList.AUX(command) local arguments = tokenize(command) if arguments[1] == 'clear' and arguments[2] == 'history' then aux.persistence.load_dataset().history = nil - aux.log 'History cleared.' + log 'History cleared.' elseif arguments[1] == 'clear' and arguments[2] == 'post' then aux.persistence.load_dataset().post = nil - aux.log 'Post settings cleared.' + log 'Post settings cleared.' elseif arguments[1] == 'clear' and arguments[2] == 'datasets' then g.aux_datasets = {} - aux.log 'Datasets cleared.' + log 'Datasets cleared.' elseif arguments[1] == 'clear' and arguments[2] == 'merchant' and arguments[3] == 'buy' then g.aux_merchant_buy = {} - aux.log 'Merchant buy prices cleared.' + log 'Merchant buy prices cleared.' elseif arguments[1] == 'clear' and arguments[2] == 'merchant' and arguments[3] == 'sell' then g.aux_merchant_sell = {} - aux.log 'Merchant sell prices cleared.' + log 'Merchant sell prices cleared.' elseif arguments[1] == 'clear' and arguments[2] == 'item' and arguments[3] == 'cache' then g.aux_items = {} g.aux_item_ids = {} g.aux_auctionable_items = {} - aux.log 'Item cache cleared.' + log 'Item cache cleared.' elseif arguments[1] == 'populate' and arguments[2] == 'wdb' then aux.cache.populate_wdb() elseif arguments[1] == 'tooltip' and arguments[2] == 'value' then g.aux_tooltip_value = not g.aux_tooltip_value - aux.log('Historical value in tooltip '..(g.aux_tooltip_value and 'enabled' or 'disabled')..'.') + log('Historical value in tooltip '..(g.aux_tooltip_value and 'enabled' or 'disabled')..'.') elseif arguments[1] == 'tooltip' and arguments[2] == 'daily' then g.aux_tooltip_daily = not g.aux_tooltip_daily - aux.log('Market value in tooltip '..(g.aux_tooltip_daily and 'enabled' or 'disabled')..'.') + log('Market value in tooltip '..(g.aux_tooltip_daily and 'enabled' or 'disabled')..'.') elseif arguments[1] == 'tooltip' and arguments[2] == 'vendor' and arguments[3] == 'buy' then g.aux_tooltip_vendor_buy = not g.aux_tooltip_vendor_buy - aux.log('Vendor buy price in tooltip '..(g.aux_tooltip_vendor_buy and 'enabled' or 'disabled')..'.') + log('Vendor buy price in tooltip '..(g.aux_tooltip_vendor_buy and 'enabled' or 'disabled')..'.') elseif arguments[1] == 'tooltip' and arguments[2] == 'vendor' and arguments[3] == 'sell' then g.aux_tooltip_vendor_sell = not g.aux_tooltip_vendor_sell - aux.log('Vendor sell price in tooltip '..(g.aux_tooltip_vendor_sell and 'enabled' or 'disabled')..'.') + log('Vendor sell price in tooltip '..(g.aux_tooltip_vendor_sell and 'enabled' or 'disabled')..'.') elseif arguments[1] == 'tooltip' and arguments[2] == 'disenchant' and arguments[3] == 'value' then g.aux_tooltip_disenchant_value = not g.aux_tooltip_disenchant_value - aux.log('Disenchant value in tooltip '..(g.aux_tooltip_disenchant_value and 'enabled' or 'disabled')..'.') + log('Disenchant value in tooltip '..(g.aux_tooltip_disenchant_value and 'enabled' or 'disabled')..'.') elseif arguments[1] == 'tooltip' and arguments[2] == 'disenchant' and arguments[3] == 'distribution' then g.aux_tooltip_disenchant_distribution = not g.aux_tooltip_disenchant_distribution - aux.log('Disenchant distribution in tooltip '..(g.aux_tooltip_disenchant_distribution and 'enabled' or 'disabled')..'.') + log('Disenchant distribution in tooltip '..(g.aux_tooltip_disenchant_distribution and 'enabled' or 'disabled')..'.') elseif arguments[1] == 'tooltip' and arguments[2] == 'disenchant' and arguments[3] == 'source' then g.aux_tooltip_disenchant_source = not g.aux_tooltip_disenchant_source - aux.log('Disenchant source in tooltip '..(g.aux_tooltip_disenchant_source and 'enabled' or 'disabled')..'.') + log('Disenchant source in tooltip '..(g.aux_tooltip_disenchant_source and 'enabled' or 'disabled')..'.') elseif arguments[1] == 'ignore' and arguments[2] == 'owner' then g.aux_ignore_owner = not g.aux_ignore_owner - aux.log('Ignoring of owner '..(g.aux_ignore_owner and 'enabled' or 'disabled')..'.') + log('Ignoring of owner '..(g.aux_ignore_owner and 'enabled' or 'disabled')..'.') elseif arguments[1] == 'chars' and arguments[2] == 'add' then local realm = GetCVar 'realmName' g.aux_characters[realm] = g.aux_characters[realm] or {} @@ -55,7 +55,7 @@ function SlashCmdList.AUX(command) local name = string.gsub(strlower(arguments[i]), '^%l', strupper) if not g.aux_characters[realm][name] then g.aux_characters[realm][name] = true - aux.log('Character "'..name..'" added.') + log('Character "'..name..'" added.') end end elseif arguments[1] == 'chars' and arguments[2] == 'remove' then @@ -67,7 +67,7 @@ function SlashCmdList.AUX(command) local name = string.gsub(strlower(arguments[i]), '^%l', strupper) if g.aux_characters[realm][name] then g.aux_characters[realm][name] = nil - aux.log('Character "'..name..'" removed.') + log('Character "'..name..'" removed.') end end elseif arguments[1] == 'chars' then @@ -77,11 +77,11 @@ function SlashCmdList.AUX(command) tinsert(chars, name) end if getn(chars) > 0 then - aux.log('Your characters: "'..table.concat(chars, ', ')..'".') + log('Your characters: "'..table.concat(chars, ', ')..'".') else - aux.log 'You don\'t have any additional characters. To add your characters type "/aux chars add NAME1 NAME2 NAME3...".' + log 'You don\'t have any additional characters. To add your characters type "/aux chars add NAME1 NAME2 NAME3...".' end else - aux.log('Unknown command: "'..command..'"') + log('Unknown command: "'..command..'"') end end \ No newline at end of file diff --git a/components/stack.lua b/components/stack.lua index d0a09e3..cd2775f 100644 --- a/components/stack.lua +++ b/components/stack.lua @@ -111,7 +111,7 @@ function public.stop() slot = nil end m.state = nil - aux.call(callback, slot) + call(callback, slot) end end diff --git a/core.lua b/core.lua index e21b437..e6eb4ea 100644 --- a/core.lua +++ b/core.lua @@ -4,44 +4,6 @@ public.bids_loaded = false public.current_owner_page = nil public.last_owner_page_requested = nil -do - local data = {} - local mt = { - __newindex = function(self, key, value) - data[self].getter{public=self, private=data[self].state}[key] = value - end, - __index = function(self, key) - return data[self].getter{public=self, private=data[self].state}[key] - end, - } - function public.dynamic_table(state, getter) - local self = {} - data[self] = {getter=getter, state=state} - return setmetatable(self, mt) - end -end - -do - local _state = setmetatable({}, {__mode='kv'}) - local __index = function(self, key) - return _state[self].handler({public=self, private=_state[self].state}, key) - end - function public.index_function(state, handler) - local state, self = {handler=handler, state=state}, {} - _state[self] = state - return setmetatable(self, {__metatable=false, __index=__index, state=state}) - end -end - -function public.temp(object) - getfenv(2).__ = object - return object -end - -function public.L(body_string) - return loadstring 'function()' -end - tabs = {} function public.tab(index, name) local module_env = getfenv(2) @@ -61,16 +23,16 @@ do end function on_tab_click(index) if active_tab_index then - m.call(active_tab.env.CLOSE) + call(active_tab.env.CLOSE) end active_tab_index = index if active_tab_index then - m.call(active_tab.env.OPEN) + call(active_tab.env.OPEN) end end end -function public.VARIABLES_LOADED() +function VARIABLES_LOADED() do local frame = CreateFrame('Frame', aux.gui.name, UIParent) tinsert(UISpecialFrames, 'aux_frame1') @@ -103,8 +65,8 @@ function public.VARIABLES_LOADED() public.frame = frame end do - local tabs = m.gui.tabs(m.frame, 'DOWN') - tabs._on_select = m.on_tab_click + local tabs = gui.tabs(frame, 'DOWN') + tabs._on_select = on_tab_click for _, tab in m.tabs do tabs:create_tab(tab.name) end @@ -113,17 +75,17 @@ function public.VARIABLES_LOADED() end end do - local btn = m.gui.button(m.frame, 16) + local btn = gui.button(frame, 16) btn:SetPoint('BOTTOMRIGHT', -6, 6) btn:SetWidth(65) btn:SetHeight(24) btn:SetText 'Close' - btn:SetScript('OnClick', m.C(m.frame.Hide, m.frame)) + btn:SetScript('OnClick', C(frame.Hide, frame)) public.close_button = btn end do - local btn = m.gui.button(m.frame, 16) - btn:SetPoint('RIGHT', m.close_button, 'LEFT' , -5, 0) + local btn = gui.button(frame, 16) + btn:SetPoint('RIGHT', close_button, 'LEFT' , -5, 0) btn:SetWidth(65) btn:SetHeight(24) btn:SetText 'Default UI' @@ -139,43 +101,43 @@ end function AUCTION_HOUSE_SHOW() AuctionFrame:Hide() - m.frame:Show() - m.set_tab(1) + frame:Show() + set_tab(1) end function AUCTION_HOUSE_CLOSED() - m.bids_loaded = false - m.current_owner_page = nil - m.post.stop() - m.stack.stop() - m.scan.abort() - m.set_tab() - m.frame:Hide() + bids_loaded = false + current_owner_page = nil + post.stop() + stack.stop() + scan.abort() + set_tab() + frame:Hide() end function AUCTION_BIDDER_LIST_UPDATE() - m.bids_loaded = true + bids_loaded = true end function AUCTION_OWNED_LIST_UPDATE() - m.current_owner_page = m.last_owner_page_requested or 0 + current_owner_page = last_owner_page_requested or 0 end -function m.ADDON_LOADED.Blizzard_AuctionUI() +function ADDON_LOADED.Blizzard_AuctionUI() AuctionFrame:UnregisterEvent('AUCTION_HOUSE_SHOW') AuctionFrame:SetScript('OnHide', nil) - m.hook('ShowUIPanel', function(...) + hook('ShowUIPanel', function(...) if arg[1] == AuctionFrame then return AuctionFrame:Show() end - return m.orig.ShowUIPanel(unpack(arg)) + return orig.ShowUIPanel(unpack(arg)) end) - m.hook('GetOwnerAuctionItems', m.GetOwnerAuctionItems) - m.hook('SetItemRef', m.SetItemRef) - m.hook('UseContainerItem', m.UseContainerItem) - m.hook('AuctionFrameAuctions_OnEvent', m.AuctionFrameAuctions_OnEvent) + hook('GetOwnerAuctionItems', GetOwnerAuctionItems) + hook('SetItemRef', SetItemRef) + hook('UseContainerItem', UseContainerItem) + hook('AuctionFrameAuctions_OnEvent', AuctionFrameAuctions_OnEvent) end do @@ -186,9 +148,9 @@ do return label end - function m.ADDON_LOADED.Blizzard_CraftUI() - m.hook('CraftFrame_SetSelection', function(...) - local results = {m.orig.CraftFrame_SetSelection(unpack(arg)) } + function ADDON_LOADED.Blizzard_CraftUI() + hook('CraftFrame_SetSelection', function(...) + local results = {orig.CraftFrame_SetSelection(unpack(arg))} local id = GetCraftSelectionIndex() local reagent_count = GetCraftNumReagents(id) @@ -200,10 +162,10 @@ do total_cost = nil break end - local item_id, suffix_id = m.info.parse_link(link) + local item_id, suffix_id = info.parse_link(link) local count = select(3, GetCraftReagentInfo(id, i)) - local _, price, limited = m.cache.merchant_info(item_id) - local value = price and not limited and price or m.history.value(item_id..':'..suffix_id) + local _, price, limited = cache.merchant_info(item_id) + local value = price and not limited and price or history.value(item_id..':'..suffix_id) if not value then total_cost = nil break @@ -218,9 +180,9 @@ do end) end - function m.ADDON_LOADED.Blizzard_TradeSkillUI() - m.hook('TradeSkillFrame_SetSelection', function(...) - local results = {m.orig.TradeSkillFrame_SetSelection(unpack(arg)) } + function ADDON_LOADED.Blizzard_TradeSkillUI() + hook('TradeSkillFrame_SetSelection', function(...) + local results = {orig.TradeSkillFrame_SetSelection(unpack(arg))} local id = GetTradeSkillSelectionIndex() local reagent_count = GetTradeSkillNumReagents(id) @@ -232,10 +194,10 @@ do total_cost = nil break end - local item_id, suffix_id = m.info.parse_link(link) + local item_id, suffix_id = info.parse_link(link) local count = select(3, GetTradeSkillReagentInfo(id, i)) - local _, price, limited = m.cache.merchant_info(item_id) - local value = price and not limited and price or m.history.value(item_id..':'..suffix_id) + local _, price, limited = cache.merchant_info(item_id) + local value = price and not limited and price or history.value(item_id..':'..suffix_id) if not value then total_cost = nil break @@ -270,55 +232,50 @@ end function GetOwnerAuctionItems(...) local page = arg[1] - m.last_owner_page_requested = page - return m.orig.GetOwnerAuctionItems(unpack(arg)) + last_owner_page_requested = page + return orig.GetOwnerAuctionItems(unpack(arg)) end function AuctionFrameAuctions_OnEvent(...) if AuctionFrameAuctions:IsVisible() then - return m.orig.AuctionFrameAuctions_OnEvent(unpack(arg)) + return orig.AuctionFrameAuctions_OnEvent(unpack(arg)) end end function SetItemRef(...) - if arg[3] ~= 'RightButton' or not m.index(active_tab, 'env', 'CLICK_LINK') or not strfind(arg[1], '^item:%d+') then - return m.orig.SetItemRef(unpack(arg)) + if arg[3] ~= 'RightButton' or not index(active_tab, 'env', 'CLICK_LINK') or not strfind(arg[1], '^item:%d+') then + return orig.SetItemRef(unpack(arg)) end - for item_info in present(m.info.item(tonumber(({strfind(arg[1], '^item:(%d+)')})[3]))) do - return m.active_tab.env.CLICK_LINK(item_info) + for item_info in present(info.item(tonumber(({strfind(arg[1], '^item:(%d+)')})[3]))) do + return active_tab.env.CLICK_LINK(item_info) end end function UseContainerItem(...) - if m.modified() or not m.index(active_tab, 'env', 'USE_ITEM') then - return m.orig.UseContainerItem(unpack(arg)) + if modified or not index(active_tab, 'env', 'USE_ITEM') then + return orig.UseContainerItem(unpack(arg)) end - for item_info in present(m.info.container_item(arg[1], arg[2])) do - return m.active_tab.env.USE_ITEM(item_info) + for item_info in present(info.container_item(arg[1], arg[2])) do + return active_tab.env.USE_ITEM(item_info) end end do local locked - function public.bid_in_progress() return locked end - function public.place_bid(type, index, amount, on_success) - if locked then return end - local money = GetMoney() PlaceAuctionBid(type, index, amount) if money >= amount then locked = true - - m.control.event_listener('CHAT_MSG_SYSTEM', function(kill) + control.event_listener('CHAT_MSG_SYSTEM', function(kill) if arg1 == ERR_AUCTION_BID_PLACED then - m.call(on_success) + call(on_success) locked = false kill() end @@ -329,23 +286,18 @@ end do local locked - function public.cancel_in_progress() return locked end - function public.cancel_auction(index, on_success) - if locked then return end - locked = true - CancelAuction(index) - m.control.event_listener('CHAT_MSG_SYSTEM', function(kill) + control.event_listener('CHAT_MSG_SYSTEM', function(kill) if arg1 == ERR_AUCTION_REMOVED then - aux.call(on_success) + call(on_success) locked = false kill() end @@ -364,7 +316,7 @@ do local function call(f, arg1, arg2) local params = {} for i=1,arg1.n do - if arg1[i] == m._this then + if arg1[i] == _this then tinsert(params, this) elseif formal_parameters[arg1[i]] then tinsert(params, arg2[formal_parameters[arg1[i]]]) @@ -382,36 +334,9 @@ do end end -function public.call(f, ...) - if f then - return f(unpack(arg)) - end -end - -function public.index(t, ...) - for i=1,arg.n do - t = t and t[arg[i]] - end - return t -end - -public.huge = 1.8*10^308 - -function public.log(...) - local msg = '[aux]' - for i=1,arg.n do - msg = msg..' '..tostring(arg[i]) - end - DEFAULT_CHAT_FRAME:AddMessage(LIGHTYELLOW_FONT_COLOR_CODE..msg) -end - function public.is_player(name, current) local realm = GetCVar 'realmName' - return not current and m.index(g.aux_characters, realm, name) or UnitName 'player' == name -end - -function public.modified() - return IsShiftKeyDown() or IsControlKeyDown() or IsAltKeyDown() + return not current and index(g.aux_characters, realm, name) or UnitName 'player' == name end function public.neutral_faction() diff --git a/gui.lua b/gui.lua index 48ef4ce..b7e5d2e 100644 --- a/gui.lua +++ b/gui.lua @@ -44,7 +44,7 @@ do end function color_accessor(callback) return function() - return aux.index_function({callback=callback, table=config.colors}, index_handler) + return index_function({callback=callback, table=config.colors}, index_handler) end end end @@ -336,7 +336,7 @@ do function mt.__index:select(id) self._selected = id self:update() - aux.call(self._on_select, id) + call(self._on_select, id) end function mt.__index:update() for _, tab in self._tabs do @@ -389,7 +389,7 @@ function public.editbox(parent) end) editbox:SetScript('OnTextChanged', function() this.last_change = GetTime() - this.text:SetText(aux.call(this.formatter, this:GetText()) or this:GetText()) + this.text:SetText(call(this.formatter, this:GetText()) or this:GetText()) this.cursor:SetPoint('LEFT', this.text, 'LEFT', max(0, this.text:GetStringWidth() - 2), 1) end) do diff --git a/init.lua b/init.lua index 26ca646..eac9063 100644 --- a/init.lua +++ b/init.lua @@ -1,4 +1,5 @@ setglobal('aux', aux_module('core')) +import 'util' public.version = '4.0.0' @@ -40,8 +41,8 @@ event_frame:SetScript('OnEvent', function() m[event]() if event == 'VARIABLES_LOADED' then for _, env in module_envs do - if env.m.LOAD then - env.m.LOAD() + if env.LOAD then + env.LOAD() end end log('v'..version..' loaded.') diff --git a/tables/auction_listing.lua b/tables/auction_listing.lua index 0324a14..a2877c7 100644 --- a/tables/auction_listing.lua +++ b/tables/auction_listing.lua @@ -11,7 +11,7 @@ local AUCTION_PCT_COLORS = { {color=aux.gui.inline_color.green, value=80}, {color=aux.gui.inline_color.yellow, value=110}, {color=aux.gui.inline_color.orange, value=135}, - {color=aux.gui.inline_color.red, value=aux.huge}, + {color=aux.gui.inline_color.red, value=huge}, } local TIME_LEFT_STRINGS = { @@ -198,8 +198,8 @@ public.search_config = { cmp = function(record_a, record_b, desc) local price_a = g.aux_price_per_unit and record_a.unit_buyout_price or record_a.buyout_price local price_b = g.aux_price_per_unit and record_b.unit_buyout_price or record_b.buyout_price - price_a = price_a > 0 and price_a or (desc and -aux.huge or aux.huge) - price_b = price_b > 0 and price_b or (desc and -aux.huge or aux.huge) + price_a = price_a > 0 and price_a or (desc and -huge or huge) + price_b = price_b > 0 and price_b or (desc and -huge or huge) return aux.sorting.compare(price_a, price_b, desc) end, @@ -213,8 +213,8 @@ public.search_config = { cell:SetText((pct or bidPct) and percentage_historical(pct or bidPct, not pct) or '---') end, cmp = function(record_a, record_b, desc) - local pct_a = record_percentage(record_a) or (desc and -aux.huge or aux.huge) - local pct_b = record_percentage(record_b) or (desc and -aux.huge or aux.huge) + local pct_a = record_percentage(record_a) or (desc and -huge or huge) + local pct_b = record_percentage(record_b) or (desc and -huge or huge) return aux.sorting.compare(pct_a, pct_b, desc) end, }, @@ -340,8 +340,8 @@ public.auctions_config = { cmp = function(record_a, record_b, desc) local price_a = g.aux_price_per_unit and record_a.unit_buyout_price or record_a.buyout_price local price_b = g.aux_price_per_unit and record_b.unit_buyout_price or record_b.buyout_price - price_a = price_a > 0 and price_a or (desc and -aux.huge or aux.huge) - price_b = price_b > 0 and price_b or (desc and -aux.huge or aux.huge) + price_a = price_a > 0 and price_a or (desc and -huge or huge) + price_b = price_b > 0 and price_b or (desc and -huge or huge) return aux.sorting.compare(price_a, price_b, desc) end, @@ -493,8 +493,8 @@ public.bids_config = { cmp = function(record_a, record_b, desc) local price_a = g.aux_price_per_unit and record_a.unit_buyout_price or record_a.buyout_price local price_b = g.aux_price_per_unit and record_b.unit_buyout_price or record_b.buyout_price - price_a = price_a > 0 and price_a or (desc and -aux.huge or aux.huge) - price_b = price_b > 0 and price_b or (desc and -aux.huge or aux.huge) + price_a = price_a > 0 and price_a or (desc and -huge or huge) + price_b = price_b > 0 and price_b or (desc and -huge or huge) return aux.sorting.compare(price_a, price_b, desc) end, @@ -644,7 +644,7 @@ local methods = { DressUpItemLink(this.row.data.record.link) elseif IsShiftKeyDown() and ChatFrameEditBox:IsVisible() then ChatFrameEditBox:Insert(this.row.data.record.link) - elseif not aux.modified() and button == 'RightButton' then -- TODO not when alt (how?) + elseif not modified and button == 'RightButton' then -- TODO not when alt (how?) aux.set_tab(1) aux.search_tab.set_filter(strlower(aux.info.item(this.row.data.record.item_id).name)..'/exact') aux.search_tab.execute(nil, false) diff --git a/tabs/post/core.lua b/tabs/post/core.lua index c3d25c6..251756d 100644 --- a/tabs/post/core.lua +++ b/tabs/post/core.lua @@ -155,14 +155,14 @@ function update_auction_listing() sort(auction_rows, function(a, b) return aux.sorting.multi_lt( { - a.record.unit_buyout_price == 0 and aux.huge or a.record.unit_buyout_price, + a.record.unit_buyout_price == 0 and huge or a.record.unit_buyout_price, a.record.unit_blizzard_bid, a.record.stack_size, b.record.own and 1 or 0, a.record.duration, }, { - b.record.unit_buyout_price == 0 and aux.huge or b.record.unit_buyout_price, + b.record.unit_buyout_price == 0 and huge or b.record.unit_buyout_price, b.record.unit_blizzard_bid, b.record.stack_size, a.record.own and 1 or 0, diff --git a/tabs/search/filter.lua b/tabs/search/filter.lua index fe9bfa2..83063b2 100644 --- a/tabs/search/filter.lua +++ b/tabs/search/filter.lua @@ -109,7 +109,7 @@ function get_filter_builder_query() end local name = m.blizzard_query.name - if not aux.index(aux.filter.parse_query_string(name), 'blizzard', 'name') then + if not index(aux.filter.parse_query_string(name), 'blizzard', 'name') then name = aux.filter.quote(name) end add((name ~= '' or m.blizzard_query.exact) and name) @@ -175,7 +175,7 @@ function import_query_string() if components then m.set_form(components) else - aux.log(error) + log(error) end end @@ -277,7 +277,7 @@ function add_post_filter() m.filter_input:HighlightText() m.filter_input:SetFocus() elseif error then - aux.log(error) + log(error) end end end @@ -325,7 +325,7 @@ function initialize_filter_dropdown() value = filter, func = function() m.filter_input:SetText(this.value) - if aux.index(aux.filter.filters[this.value], 'input_type') == '' or this.value == 'not' then + if index(aux.filter.filters[this.value], 'input_type') == '' or this.value == 'not' then m.add_post_filter() elseif aux.filter.filters[this.value] then m.filter_parameter_input:Show() diff --git a/tabs/search/results.lua b/tabs/search/results.lua index f48d5ed..9b7cd59 100644 --- a/tabs/search/results.lua +++ b/tabs/search/results.lua @@ -118,9 +118,9 @@ function update_auto_buy_filter() local queries = aux.filter.queries(g.aux_auto_buy_filter) if queries then if getn(queries) > 1 then - aux.log('Error: The automatic buyout filter may contain only one query') + log('Error: The automatic buyout filter may contain only one query') elseif size(queries[1].blizzard_query) > 0 then - aux.log('Error: The automatic buyout filter does not support Blizzard filters') + log('Error: The automatic buyout filter does not support Blizzard filters') else m.auto_buy_validator = queries[1].validator m.auto_buy_filter_button.prettified = queries[1].prettified @@ -315,10 +315,10 @@ function public.execute(resume, real_time) return elseif real_time then if getn(queries) > 1 then - aux.log('Invalid filter: The real time mode does not support multiple queries') + log('Invalid filter: The real time mode does not support multiple queries') return elseif queries[1].blizzard_query.first_page or queries[1].blizzard_query.last_page then - aux.log('Invalid filter: The real time mode does not support page range filters') + log('Invalid filter: The real time mode does not support page range filters') return end end diff --git a/util/core.lua b/util/core.lua index a37a203..6cddfdb 100644 --- a/util/core.lua +++ b/util/core.lua @@ -1,5 +1,53 @@ aux.module 'util' +function public.call(f, ...) + if f then + return f(unpack(arg)) + end +end + +function public.index(t, ...) + for i=1,arg.n do + t = t and t[arg[i]] + end + return t +end + +public.huge = 1.8*10^308 + +function public.log(...) + local msg = '[aux]' + for i=1,arg.n do + msg = msg..' '..tostring(arg[i]) + end + DEFAULT_CHAT_FRAME:AddMessage(LIGHTYELLOW_FONT_COLOR_CODE..msg) +end + +function public.accessor.modified() + return IsShiftKeyDown() or IsControlKeyDown() or IsAltKeyDown() +end + +do + local _state = setmetatable({}, {__mode='kv'}) + local __index = function(self, key) + return _state[self].handler({public=self, private=_state[self].state}, key) + end + function public.index_function(state, handler) + local state, self = {handler=handler, state=state}, {} + _state[self] = state + return setmetatable(self, {__metatable=false, __index=__index, state=state}) + end +end + +function public.temp(object) + getfenv(2).__ = object + return object +end + +function public.L(body_string) + return loadstring 'function()' +end + function public.present(...) local called return function() @@ -211,7 +259,7 @@ function public.accessor.inventory() end if bag <= 4 then - return {bag, slot}, m.bag_type(bag) + return {bag, slot}, bag_type(bag) end end end diff --git a/util/filter.lua b/util/filter.lua index 67d7eb7..f8c226b 100644 --- a/util/filter.lua +++ b/util/filter.lua @@ -235,8 +235,8 @@ do end for _, parser in { {'class', aux.info.item_class_index}, - {'subclass', aux.C(aux.info.item_subclass_index, aux.index(self.class, 2) or 0, aux._1)}, - {'slot', aux.C(aux.info.item_slot_index, aux.index(self.class, 2) or 0, aux.index(self.subclass, 2) or 0, aux._1)}, + {'subclass', aux.C(aux.info.item_subclass_index, index(self.class, 2) or 0, aux._1)}, + {'slot', aux.C(aux.info.item_slot_index, index(self.class, 2) or 0, index(self.subclass, 2) or 0, aux._1)}, {'quality', aux.info.item_quality_index}, } do if not self[parser[1]] then @@ -285,9 +285,9 @@ function public.parse_query_string(str) local i = 1 while parts[i] do - if aux.temp(m.operator(parts[i])) then + if temp(m.operator(parts[i])) then tinsert(post_filter, __) - elseif aux.temp(m.filters[parts[i]]) then + elseif temp(m.filters[parts[i]]) then local input_type = __.input_type if input_type ~= '' then if not parts[i + 1] or not m.parse_parameter(input_type, parts[i + 1]) then @@ -362,7 +362,7 @@ function public.queries(query_string) local query, _, error = m.query(str) if not query then - aux.log('Invalid filter:', error) + log('Invalid filter:', error) return else tinsert(queries, query) @@ -397,14 +397,14 @@ function suggestions(components) -- subclasses if not components.blizzard.subclass then - for _, subclass in {GetAuctionItemSubClasses(aux.index(components.blizzard.class, 2) or 0)} do + for _, subclass in {GetAuctionItemSubClasses(index(components.blizzard.class, 2) or 0)} do tinsert(suggestions, subclass) end end -- slots if not components.blizzard.slot then - for _, invtype in {GetAuctionInvTypes(aux.index(components.blizzard.class, 2) or 0, aux.index(components.blizzard.subclass, 2) or 0)} do + for _, invtype in {GetAuctionInvTypes(index(components.blizzard.class, 2) or 0, index(components.blizzard.subclass, 2) or 0)} do tinsert(suggestions, getglobal(invtype)) end end @@ -511,7 +511,7 @@ function blizzard_query(components) local query = {name=filters.name and filters.name[2]} local item_info, class_index, subclass_index, slot_index - if filters.exact and aux.temp(aux.cache.item_id(filters.name[2])) and aux.temp(aux.info.item(__)) then + if filters.exact and temp(aux.cache.item_id(filters.name[2])) and temp(aux.info.item(__)) then item_info = __ class_index = aux.info.item_class_index(item_info.class) subclass_index = aux.info.item_subclass_index(class_index or 0, item_info.subclass) @@ -528,7 +528,7 @@ function blizzard_query(components) query.quality = item_info.quality else for _, key in {'min_level', 'max_level', 'class', 'subclass', 'slot', 'usable', 'quality'} do - query[key] = aux.index(filters[key], 2) + query[key] = index(filters[key], 2) end end return query diff --git a/util/money.lua b/util/money.lua index b6211c0..3ec098d 100644 --- a/util/money.lua +++ b/util/money.lua @@ -113,7 +113,7 @@ function public.to_string(money, pad, trim, decimal_points, color, no_color) end function public.from_string(value) - if aux.temp(tonumber(value)) and __ >= 0 then + if temp(tonumber(value)) and __ >= 0 then return __ * COPPER_PER_GOLD end