Mercurial > wow > lfg-premade-filter
view LFGFilter.lua @ 6:5a89e06534ac
ssingular versions for all plural vars
author | ovolkov |
---|---|
date | Sat, 24 Jan 2015 01:35:48 +0300 |
parents | 041bc456db50 |
children | 1c43d75054e7 |
line wrap: on
line source
LFGListFrame.SearchPanel.SearchBox:SetMaxLetters(2048) local filter_expression_functions = setmetatable({}, { __mode = "k", __index = function(t, key) local func, error = loadstring("return " .. key) if error then print("Error in LFG filter expression:\n", error) end t[key] = func return func end }) function LFGListSearchPanel_DoSearch(self) local searchText = self.SearchBox:GetText(); local real_search, filter_expression = searchText:match("^([^=]-)=(.+)$") if filter_expression then filter_expression = filter_expression:lower() self.filter_func = filter_expression_functions[filter_expression] end self.filter_expression = filter_expression -- print("lfgsearch", real_search, filter_expression) C_LFGList.Search(self.categoryID, real_search or searchText, self.filters, self.preferredFilters); self.searching = true; self.searchFailed = false; self.selectedResult = nil; LFGListSearchPanel_UpdateResultList(self); LFGListSearchPanel_UpdateResults(self); end local result_env = {} -- =highmaul and ((normal and (name:match("imp") or defeated == 6)) or (heroic and defeated == 2)) function LFGListUtil_SortSearchResults(results) local self = LFGListFrame.SearchPanel if self.filter_expression then local check = self.filter_func local shift_down = 0 local original_size = #results for idx = 1, original_size do local id = results[idx] local _, activityID, name, comment, voiceChat, iLvl, age, numBNetFriends, numCharFriends, numGuildMates, isDelisted, leaderName, numMembers = C_LFGList.GetSearchResultInfo(id) local completedEncounters = C_LFGList.GetSearchResultEncounterInfo(id) local memberCounts = C_LFGList.GetSearchResultMemberCounts(id) wipe(result_env) result_env.name = name:lower() result_env.comment = comment:lower() result_env.ilvl = iLvl -- TODO: should be calculated in meta result_env.defeated = completedEncounters and #completedEncounters or 0 result_env.members = numMembers result_env.member = numMembers result_env.tanks = memberCounts.TANK result_env.tank = memberCounts.TANK result_env.healers = memberCounts.HEALER result_env.healer = memberCounts.HEALER result_env.damagers = memberCounts.DAMAGER + memberCounts.NOROLE result_env.damager = memberCounts.DAMAGER + memberCounts.NOROLE result_env.my_server = leaderName and not leaderName:find('-') if activityID == 37 then result_env.highmaul = true result_env.normal = true elseif activityID == 38 then result_env.highmaul = true result_env.heroic = true end local pass if check then setfenv(check, result_env) pass = check() end if pass then if shift_down > 0 then results[idx - shift_down] = id end else shift_down = shift_down + 1 end end for idx = original_size - shift_down + 1, original_size do results[idx] = nil end end table.sort(results, LFGListUtil_SortSearchResultsCB); end function LFGListUtil_SortSearchResultsCB(id1, id2) local id1, activityID1, name1, comment1, voiceChat1, iLvl1, age1, numBNetFriends1, numCharFriends1, numGuildMates1, isDelisted1 = C_LFGList.GetSearchResultInfo(id1); local id2, activityID2, name2, comment2, voiceChat2, iLvl2, age2, numBNetFriends2, numCharFriends2, numGuildMates2, isDelisted2 = C_LFGList.GetSearchResultInfo(id2); --If one has more friends, do that one first if ( numBNetFriends1 ~= numBNetFriends2 ) then return numBNetFriends1 > numBNetFriends2; end if ( numCharFriends1 ~= numCharFriends2 ) then return numCharFriends1 > numCharFriends2; end if ( numGuildMates1 ~= numGuildMates2 ) then return numGuildMates1 > numGuildMates2; end if ( activityID1 ~= activityID2 ) then return activityID1 > activityID2; end --If we aren't sorting by anything else, just go by ID return id1 < id2; end function LFGPrintRawResults() local totalResults, results = C_LFGList.GetSearchResults() for idx = 1, totalResults do local id1, activityID1, name1, comment1, voiceChat1, iLvl1, age1, numBNetFriends1, numCharFriends1, numGuildMates1, isDelisted1 = C_LFGList.GetSearchResultInfo(results[idx]) print(id1, activityID1, C_LFGList.GetActivityInfo(activityID1), '*', name1) end end