Quantcast

Distinguish between Trade channel and LFG/General for the ability to have differant filter tables for pattern matching.

Erik L. Vonderscheer [07-06-09 - 05:32]
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
Filename
Docs/main.txt
TradeFilter3.lua
TradeFilter3Options.lua
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
 <<code php>>/tf or /filter<</code>>

 === To Do ===
+
+
+==== ChangeLog
+<<code php>>
+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.
+<</code>>

 === 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,