From dbd4309799d7f4c6360c0e0ccc3c832dd22e2abb Mon Sep 17 00:00:00 2001 From: "Erik L. Vonderscheer" Date: Mon, 6 Jul 2009 05:32:55 +0000 Subject: [PATCH] Distinguish between Trade channel and LFG/General for the ability to have differant filter tables for pattern matching. Ability to edit entire filter tables rather than having static lists. Heavy locale update and restructure --- Docs/main.txt | 16 ++-- TradeFilter3.lua | 65 +++++++++----- TradeFilter3Options.lua | 220 +++++++++++++++++++++++++++++++++-------------- 3 files changed, 210 insertions(+), 91 deletions(-) diff --git a/Docs/main.txt b/Docs/main.txt index 6544ab4..7a6333a 100644 --- a/Docs/main.txt +++ b/Docs/main.txt @@ -30,14 +30,18 @@ Adding a set, ie [xXyY], will attempt to find a match for any character given in <>/tf or /filter<> === To Do === + + +==== ChangeLog +<> +r122 - Distinguish between Trade channel and LFG/General for the ability to have differant filter tables for pattern matching.\\ - Ability to edit //entire// filter tables rather than having static lists. -==== ChangeLog -===== r82 -++TradeFilter also will not filter any messages from your friends, they must be on your current characters friends list for this functionality to work.++ - -===== r111 -++TradeFilter now contains a Black/White list, though not yet configurable through the GUI.++ +r111 + - TradeFilter now contains a Black/White list, though not yet configurable through the GUI. +r82 + - TradeFilter also will not filter any messages from your friends, they must be on your current characters friends list for this functionality to work. +<> === Supported Translations //Please help localize this project// [[http://www.wowace.com/projects/trade-filter/localization/|HERE]] diff --git a/TradeFilter3.lua b/TradeFilter3.lua index 9e7d49b..f05e4c8 100644 --- a/TradeFilter3.lua +++ b/TradeFilter3.lua @@ -38,9 +38,9 @@ local friends = LibStub("LibFriends-1.0") local TF3 = TradeFilter3 local MAJOR_VERSION = "3.0" -local MINOR_VERSION = 000 + tonumber(("$Revision: @project-revision@ $"):match("%d+")) +local MINOR_VERSION = 000 + tonumber(("$Revision: 120 $"):match("%d+")) TF3.version = MAJOR_VERSION .. "." .. MINOR_VERSION -TF3.date = string.sub("$Date: @file-date-iso@ $", 8, 17) +TF3.date = string.sub("$Date: 2009-07-03T15:59:07Z $", 8, 17) --[[ Locals ]]-- local _G = _G @@ -68,12 +68,15 @@ defaults = { filterLFG = false, filterGeneral = false, filterTrade = true, - addfilter_enable = false, + editfilter_enable = false, + editlists_enable = false, friendslist = {}, whitelist = L.WHITELIST, blacklist = L.BLACKLIST, - filter = L.FILTER - } + filters = L.FILTERS, + basefilters = L.FILTERS.BASE, + tradefilters = L.FILTERS.TRADE, + }, } function TF3:OnInitialize() @@ -204,14 +207,14 @@ function TF3:FindFrame(toFrame, msg) if (toFrame == name) then toFrame = _G["ChatFrame" .. i] toFrame:AddMessage(msg) - else - --TF3:CreateFrame(toFrame) + elseif (toFrame ~= name) then +--~ TF3:CreateFrame(toFrame) end end end function TF3:CreateFrame(newFrame) - --Need to find the proper way to create a new chatframe that is docked to the default frame +--~ Looking for the proper solution end --[[ PreFilter Functions ]]-- @@ -283,7 +286,7 @@ local function PreFilterFunc(self, event, ...) else filtered = TF3:FilterFunc(...) end - elseif (zoneID == 2 and not TF3.db.profile.filtertrade) then + elseif (zoneID == 2 and not TF3.db.profile.filterTrade) then filtered = false end --[[ Check for General Channel and User setting ]]-- @@ -295,7 +298,7 @@ local function PreFilterFunc(self, event, ...) else filtered = TF3:FilterFunc(...) end - elseif (chanID == 1 and not TF3.db.profile.filtergeneral) then + elseif (chanID == 1 and not TF3.db.profile.filterGeneral) then filtered = false end --[[ Check for LFG Channel and User setting ]]-- @@ -326,26 +329,44 @@ function TF3:FilterFunc(...) chan = "0. Say/Yell" end local arg1 = lower(arg1) - if (filterFuncList and self.db.profile.turnOn) then - filtered = true - --@alpha@ - if (self.db.profile.debug) then - TF3:FindFrame(debugFrame, "arg1: " .. arg1 .. " arg2: " .. arg2) - end - --@end-alpha@ - for i,v in pairs(self.db.profile.filter) do + if (filterFuncList and self.db.profile.turnOn) then + filtered = true --@alpha@ if (self.db.profile.debug) then - TF3:FindFrame(debugFrame, "Checking for Match with " .. v) + TF3:FindFrame(debugFrame, "arg1: " .. arg1 .. " arg2: " .. arg2) end --@end-alpha@ - if (find(arg1,v)) then + if (arg7 == 26) then + for i,v in pairs(self.db.profile.basefilters) do --@alpha@ if (self.db.profile.debug) then - TF3:FindFrame(debugFrame, "|cff00ff00**** Matched ***|r") + TF3:FindFrame(debugFrame, "Checking for Match with " .. v) end --@end-alpha@ - filtered = false + if (find(arg1,v)) then + --@alpha@ + if (self.db.profile.debug) then + TF3:FindFrame(debugFrame, "|cff00ff00**** Matched ***|r") + end + --@end-alpha@ + filtered = false + end + end + else + for i,v in pairs(self.db.profile.tradefilters) do + --@alpha@ + if (self.db.profile.debug) then + TF3:FindFrame(debugFrame, "Checking for Match with " .. v) + end + --@end-alpha@ + if (find(arg1,v)) then + --@alpha@ + if (self.db.profile.debug) then + TF3:FindFrame(debugFrame, "|cff00ff00**** Matched ***|r") + end + --@end-alpha@ + filtered = false + end end end if (filtered == true) then diff --git a/TradeFilter3Options.lua b/TradeFilter3Options.lua index fad3322..97ec5f2 100644 --- a/TradeFilter3Options.lua +++ b/TradeFilter3Options.lua @@ -7,6 +7,33 @@ local TradeFilter3 = LibStub("AceAddon-3.0"):GetAddon("TradeFilter3") local L = LibStub("AceLocale-3.0"):GetLocale("TradeFilter3") local TF3 = TradeFilter3 +function TF3:Del(t) + wipe(t) + setmetatable(t, nil) + pool[t] = true + return nil +end + +function TF3:ClearTable(t, recursively) + if t ~= nil and type(t) == 'table' then + if not recursively then + wipe(t) + else + for k, v in pairs(t) do + if type(v) == 'table' then + TF3:ClearTable(v, true); + t[k] = TF3:Del(v); + else + t[k] = nil; + end + end + end + return t; + else + return {}; + end +end + --[[ Options Table ]]-- options = { type="group", @@ -102,105 +129,102 @@ options = { }, }, }, - addFilterGroup = { + editFilterGroup = { type = "group", handler = TF3, order = 2, disabled = function() return not TF3.db.profile.turnOn end, - name = L["addFilterGroup"], - desc = L["AddFilterGD"], + name = L["EditFilterGroup"], + desc = L["EditFilterGD"], args = { optionsHeader2 = { type = "header", order = 1, - name = L["AddFilter"], + name = L["EditFilter"], }, - addfilter_enable = { + editfilter_enable = { type = 'toggle', order = 2, width = "double", - name = L["AddFilter"], - desc = L["AddFilterD"], + name = L["EditFilter"], + desc = L["EditFilterD"], get = function() return TF3.db.profile.addfilter_enable end, set = function() TF3.db.profile.addfilter_enable = not TF3.db.profile.addfilter_enable end, }, - addfilter1 = { - type = 'input', - disabled = function() - return not TF3.db.profile.addfilter_enable - end, - order = 3, - width = "double", - name = L["AddFilter1"], - desc = L["AddFilter1D"], - get = function(info) - return TF3.db.profile.filter["20"] - end, - set = function(info, value) - if (value == "") then - TF3.db.profile.filter["20"] = nil - print("Expression removed from custom filter list.") - else - TF3.db.profile.filter["20"] = value - print(format("%s added to filter expression list.", value)) - end - end, - usage = L["AddFilterUsage"], - }, - addfilter2 = { + tradefilters = { type = 'input', disabled = function() return not TF3.db.profile.addfilter_enable end, - order = 4, + multiline = 8, + order = 7, width = "double", - name = L["AddFilter2"], - desc = L["AddFilter1D"], + name = L["BTF"], +--~ desc = L["BTF"], get = function(info) - return TF3.db.profile.filter["21"] - end, + local ret = ''; + for k, v in pairs(TF3.db.profile.tradefilters) do + if ret == '' then + ret = k..' = '..v; + else + ret = ret..'\n'..k..' = '..v; + end + end + return ret; + end, set = function(info, value) - if (value == "") then - TF3.db.profile.filter["21"] = nil - print("Expression removed from custom filter list.") - else - TF3.db.profile.filter["21"] = value - print(format("%s added to filter expression list.", value)) + TF3:ClearTable(TF3.db.profile.tradefilters) + local tbl = { strsplit('\n', value) }; + local type, val; + for i, str in pairs(tbl) do + type, val = strsplit('=', str); + type = strtrim(type); + val = strtrim(val); + TF3.db.profile.tradefilters[type] = val; end end, - usage = L["AddFilterUsage"], }, - addfilter3 = { + basefilters = { type = 'input', disabled = function() return not TF3.db.profile.addfilter_enable end, - order = 5, + multiline = 8, + order = 8, width = "double", - name = L["AddFilter3"], - desc = L["AddFilter1D"], + name = L["BCF"], +--~ desc = L["BCF"], get = function(info) - return TF3.db.profile.filter["22"] - end, + local ret = ''; + for k, v in pairs(TF3.db.profile.basefilters) do + if ret == '' then + ret = k..' = '..v; + else + ret = ret..'\n'..k..' = '..v; + end + end + return ret; + end, set = function(info, value) - if (value == "") then - TF3.db.profile.filter["22"] = nil - print("Expression removed from custom filter list.") - else - TF3.db.profile.filter["22"] = value - print(format("%s added to filter expression list.", value)) + TF3:ClearTable(TF3.db.profile.basefilters) + local tbl = { strsplit('\n', value) }; + local type, val; + for i, str in pairs(tbl) do + type, val = strsplit('=', str); + type = strtrim(type); + val = strtrim(val); + TF3.db.profile.basefilters[type] = val; end end, - usage = L["AddFilterUsage"], }, }, }, listsGroup = { type = "group", handler = TF3, - order = 2, + order = 3, disabled = function() return not TF3.db.profile.turnOn end, @@ -210,19 +234,89 @@ options = { optionsHeader3 = { type = "header", order = 1, - name = L["bLists"], + name = L["bwLists"], }, - optionsHeader4 = { - type = "header", - order = 1, - name = L["wLists"], + editlists_enable = { + type = 'toggle', + order = 2, + width = "double", + name = L["EditLists"], + desc = L["EditLists"], + get = function() return TF3.db.profile.editlists_enable end, + set = function() TF3.db.profile.editlists_enable = not TF3.db.profile.editlists_enable end, + }, + blist = { + type = 'input', + disabled = function() + return not TF3.db.profile.editlists_enable + end, + multiline = 8, + order = 3, + width = "double", + name = L["bLists"], +--~ desc = L["bLists"], + get = function(info) + local ret = ''; + for k, v in pairs(TF3.db.profile.blacklist) do + if ret == '' then + ret = k..' = '..v; + else + ret = ret..'\n'..k..' = '..v; + end + end + return ret; + end, + set = function(info, value) + TF3:ClearTable(TF3.db.profile.blacklist) + local tbl = { strsplit('\n', value) }; + local type, val; + for i, str in pairs(tbl) do + type, val = strsplit('=', str); + type = strtrim(type); + val = strtrim(val); + TF3.db.profile.blacklist[type] = val; + end + end, + }, + wlist = { + type = 'input', + disabled = function() + return not TF3.db.profile.editlists_enable + end, + multiline = 8, + order = 4, + width = "double", + name = L["wLists"], +--~ desc = L["wLists"], + get = function(info) + local ret = ''; + for k, v in pairs(TF3.db.profile.whitelist) do + if ret == '' then + ret = k..' = '..v; + else + ret = ret..'\n'..k..' = '..v; + end + end + return ret; + end, + set = function(info, value) + TF3:ClearTable(TF3.db.profile.whitelist) + local tbl = { strsplit('\n', value) }; + local type, val; + for i, str in pairs(tbl) do + type, val = strsplit('=', str); + type = strtrim(type); + val = strtrim(val); + TF3.db.profile.whitelist[type] = val; + end + end, }, }, }, outputGroup = { type = "group", handler = TF3, - order = 3, + order = 4, disabled = function() return not TF3.db.profile.turnOn end, -- 1.7.9.5