Erik L. Vonderscheer [07-16-09 - 02:35]
diff --git a/Docs/main.txt b/Docs/main.txt
index 2e6abdc..2240e39 100644
--- a/Docs/main.txt
+++ b/Docs/main.txt
@@ -47,8 +47,15 @@ The filtering priorities are as follows: Add-on is ON -> is NOT friend -> is NO
Nothing planned
==== ChangeLog
+*r145
+**++Rewrite on DB functions, Repeat Function and Friends functions++\\
+**++Show repeat count with ability to reset count++\\
+**++Ability to enable/disable Black and White list checking++\\
+**++Debug: Black and White list debugging messages contain whitespaces++\\
+**++Debug: Black and White list debugging messages now show what they matched in your pattern list++\\
+**++Debug: Option to strip "Checking for Match" when debugging++\\
*r144
-**++Further Debug output cleanup++\\
+**++Debug: Further Debug output cleanup++\\
**++Better repeat detection++\\
**++Whitelisted strings still have to pass repeat test++\\
**++Whitelisted strings also needs to pass Blacklist++\\
@@ -56,7 +63,7 @@ Nothing planned
**++Typo causing reset buttons to error out fixed++\\
**++Added all strings to locale++\\
**++Keys are no longer necessary when adding filter or list patterns++\\
-**++Cleaned up debugging output, will now show what pattern that was matched to allow it to not be filtered++\\
+**++Debug: Cleaned up debugging output, will now show what pattern that was matched to allow it to not be filtered++\\
*r131
**++Repeat filtration++\\
**++Configurable number of repeats before filtered++\\
@@ -73,7 +80,8 @@ Nothing planned
=== Supported Translations
//Please help localize this project// [[http://www.wowace.com/projects/trade-filter/localization/|HERE]]\\
-German - 93.3%\\
-Simplified Chinese - 46.7%\\
-Traditional Chinese - 24.8%\\
-French - 27.6%
+German - 92.1%\\
+French - 64.9%\\
+Simplified Chinese - 43%\\
+Traditional Chinese - 22.8%\\
+Korean - 19.3%\\
diff --git a/TradeFilter3.lua b/TradeFilter3.lua
index 97c7a87..be19047 100644
--- a/TradeFilter3.lua
+++ b/TradeFilter3.lua
@@ -74,7 +74,10 @@ defaults = {
filterTrade = true,
editfilter_enable = false,
editlists_enable = false,
- repeat_enable = false,
+ blacklist_enable = true,
+ whitelist_enable = true,
+ redirect_blacklist = false,
+ repeat_enable = true,
num_repeats = "2",
time_repeats = "30",
repeats_blocked = 0,
@@ -139,36 +142,54 @@ function TF3:IsLoggedIn()
friends.RegisterCallback(self, "Added")
friends.RegisterCallback(self, "Removed")
self:UnregisterEvent("PLAYER_LOGIN")
- self:UnregisterEvent("FRIENDLIST_UPDATE")
end
---[[ Friends Functions - Borrowed from AuldLangSyne Sync module ]]--
+--[[ DB Functions ]]--
+function TF3:WipeTable(tbl)
+ if tbl ~= nil and type(tbl) == "table" then
+ wipe(tbl)
+ end
+end
+
+function TF3:CopyTable(tbl)
+ local new_tbl = {}
+ for k, v in pairs(tbl) do
+ if (type(v) == "table") then
+ new_tbl[k] = copyTable(v)
+ else
+ new_tbl[k] = v
+ end
+ end
+ return new_tbl
+end
+
+--[[ Friends Functions ]]--
function TF3:GetFriends()
- local friends = self.db.profile.friendslist
+ local friends = TF3.db.profile.friendslist
local numFriends = GetNumFriends()
- if #friendCache ~= numFriends then
+ if (#friends ~= numFriends) then
+ print(L["TFFR"])
+ TF3:WipeTable(friends)
for i=1, numFriends do
local name = GetFriendInfo(i)
if name then
- friends[name] = true
- print(name .. " " .. L["FADD"])
+ friends[i] = name
+ if (TF3.db.profile.debug) then
+ print("|cFFFFFF80" .. name .. " " .. L["FADD"] .. "|r")
+ end
end
end
end
- self:StopGet()
-end
-
-function TF3:StopGet()
- for name in pairs(friendCache) do
- friendCache[name] = nil
- end
- currentFriend = nil
+ self:UnregisterEvent("FRIENDLIST_UPDATE")
end
function TF3:Added(event, name)
+ local friends = TF3.db.profile.friendslist
if name ~= UnitName("player") then
- self.db.profile.friendslist[name] = true
- print(name .. " " .. L["FADD"])
+ friends[#friends + 1] = name
+ if (TF3.db.profile.debug) then
+ print("|cFFFFFF80" .. name .. " " .. L["FADD"] .. "|r")
+ end
end
if currentFriend then
self:GetFriends()
@@ -176,9 +197,16 @@ function TF3:Added(event, name)
end
function TF3:Removed(event, name)
- if self.db.profile.friendslist[name] ~= nil then
- self.db.profile.friendslist[name] = nil
- print(name .. " " .. L["FREM"])
+ local friends = TF3.db.profile.friendslist
+ if friends ~= nil then
+ for k,v in ipairs(friends) do
+ if find(name,v) then
+ friends[k] = nil
+ if (TF3.db.profile.debug) then
+ print("|cFFFFFF80" .. name .. " " .. L["FREM"] .. "|r")
+ end
+ end
+ end
end
if currentFriend then
self:GetFriends()
@@ -188,7 +216,7 @@ end
--[[ IsFriend Func ]]--
function TF3:IsFriend(userID)
local friends = self.db.profile.friendslist
- for name in pairs(friends) do
+ for _,name in ipairs(friends) do
if find(userID,name) then
return true
end
@@ -197,22 +225,33 @@ function TF3:IsFriend(userID)
end
--[[ BlackList Func ]]--
---[[ Base blacklist words borrowed from BadBoy(Funkydude) ]]--
+--[[ Base blacklist words from BadBoy(Funkydude) ]]--
function TF3:BlackList(msg, userID, msgID)
local blword = self.db.profile.blacklist
local msg = lower(msg)
- local msg = sub(msg, " ", "")
- for _,word in pairs(blword) do
- if (find(msg,word)) then
- --@alpha@
- if (TF3.db.profile.debug) then
- if (msgID ~= lastmsgID) then
- TF3:FindFrame(debugFrame, "|cFFFF0000[" .. L["bLists"] .. "]|r |cFFD9D9D9[" .. userID .. "]:|r |cFFC08080" .. msg .. "|r")
- lastmsgID = msgID
+ if (TF3.db.profile.blacklist_enable) then
+ for _,word in pairs(blword) do
+ if (find(msg,word)) then
+ --@alpha@
+ if (TF3.db.profile.debug) then
+ if (msgID ~= lastmsgID) then
+ TF3:FindFrame(debugFrame, "|cFFFF0000[" .. L["bLists"] .. "]|r |cFFD9D9D9[" .. userID .. "]:|r |cFFC08080" .. msg .. "|r")
+ TF3:FindFrame(debugFrame, L["MATCHED"] .. " |cFFFF0000" .. word .. "|r")
+ if not (TF3.db.profile.redirect_blacklist) then
+ lastmsgID = msgID
+ end
+ end
end
+ --@end-alpha@
+ if (TF3.db.profile.redirect_blacklist) then
+ if (msgID ~= lastmsgID) then
+ TF3:FindFrame(redirectFrame, "|cFFFF0000[" .. L["bLists"] .. "]|r |cFFD9D9D9[" .. userID .. "]:|r |cFFC08080" .. msg .. "|r")
+ TF3:FindFrame(redirectFrame, L["MATCHED"] .. " |cFFFF0000" .. word .. "|r")
+ lastmsgID = msgID
+ end
+ end
+ return true
end
- --@end-alpha@
- return true
end
end
return false
@@ -222,18 +261,20 @@ end
function TF3:WhiteList(msg, userID, msgID)
local wlword = self.db.profile.whitelist
local msg = lower(msg)
- local msg = sub(msg, " ", "")
- for _,word in pairs(wlword) do
- if (find(msg,word) and TF3:FindRepeat(msg, userID, msgID) == false and TF3:BlackList(msg, userID, msgID) == false) then
- --@alpha@
- if (TF3.db.profile.debug) then
- if (msgID ~= lastmsgID) then
- TF3:FindFrame(debugFrame, "|cFFFFFF80[" .. L["wLists"] .. "]|r |cFFD9D9D9[" .. userID .. "]:|r |cFFC08080" .. msg .. "|r")
- lastmsgID = msgID
+ if (TF3.db.profile.whitelist_enable) then
+ for _,word in pairs(wlword) do
+ if (find(msg,word) and TF3:FindRepeat(msg, userID, msgID) == false and TF3:BlackList(msg, userID, msgID) == false) then
+ --@alpha@
+ if (TF3.db.profile.debug) then
+ if (msgID ~= lastmsgID) then
+ TF3:FindFrame(debugFrame, "|cFFFFFF80[" .. L["wLists"] .. "]|r |cFFD9D9D9[" .. userID .. "]:|r |cFFC08080" .. msg .. "|r")
+ TF3:FindFrame(debugFrame, L["MATCHED"] .. " |cFFFFFF80" .. word .. "|r")
+ lastmsgID = msgID
+ end
end
+ --@end-alpha@
+ return true
end
- --@end-alpha@
- return true
end
end
return false
@@ -257,7 +298,7 @@ function TF3:FindRepeat(msg, userID, msgID)
return true
end
elseif (msg ~= repeatdata[userID].lastmsg) then
- repeatdata[userID].repeats = 0
+ repeatdata[userID].repeats = 1
end
repeatdata[userID].lastmsg = msg
repeatdata[userID].lastmsgID = msgID
@@ -344,9 +385,18 @@ local function PreFilterFunc_Yell(self, event, ...)
repeatdata[userID].repeats = 1
end
if (event == "CHAT_MSG_YELL" and TF3.db.profile.filterYELL and TF3:IsFriend(userID) == false) then
- if (userID == UnitName("Player") and TF3.db.profile.filterSELF == false or TF3:WhiteList(msg, userID) == true) then
+ if (userID == UnitName("Player") and TF3.db.profile.filterSELF == false) then
filtered = false
- elseif (TF3:BlackList(msg, userID) == true) then
+ elseif (TF3:WhiteList(msg, userID, msgID) == true) then
+ if (TF3.db.profile.repeat_enable) then
+ if (TF3:FindRepeat(msg, userID, msgID) == true) then
+ filtered = true
+ else
+ filtered = false
+ end
+ end
+ filtered = false
+ elseif (TF3:BlackList(msg, userID, msgID) == true) then
filtered = true
elseif (TF3.db.profile.repeat_enable) then
if (TF3:FindRepeat(msg, userID, msgID) == true) then
@@ -380,9 +430,18 @@ local function PreFilterFunc(self, event, ...)
end
--[[ Check for Trade Channel and User setting ]]--
if (zoneID == 2 and TF3.db.profile.filtertrade and TF3:IsFriend(userID) == false) then
- if (userID == UnitName("Player") and TF3.db.profile.filterSELF == false or TF3:WhiteList(msg, userID) == true) then
+ if (userID == UnitName("Player") and TF3.db.profile.filterSELF == false) then
+ filtered = false
+ elseif (TF3:WhiteList(msg, userID, msgID) == true) then
+ if (TF3.db.profile.repeat_enable) then
+ if (TF3:FindRepeat(msg, userID, msgID) == true) then
+ filtered = true
+ else
+ filtered = false
+ end
+ end
filtered = false
- elseif (TF3:BlackList(msg, userID) == true) then
+ elseif (TF3:BlackList(msg, userID, msgID) == true) then
filtered = true
elseif (TF3.db.profile.repeat_enable) then
if (TF3:FindRepeat(msg, userID, msgID) == true) then
@@ -398,9 +457,18 @@ local function PreFilterFunc(self, event, ...)
end
--[[ Check for General Channel and User setting ]]--
if (chanID == 1 and TF3.db.profile.filtergeneral and TF3:IsFriend(userID) == false) then
- if (userID == UnitName("Player") and TF3.db.profile.filterSELF == false or TF3:WhiteList(msg, userID) == true) then
+ if (userID == UnitName("Player") and TF3.db.profile.filterSELF == false) then
+ filtered = false
+ elseif (TF3:WhiteList(msg, userID, msgID) == true) then
+ if (TF3.db.profile.repeat_enable) then
+ if (TF3:FindRepeat(msg, userID, msgID) == true) then
+ filtered = true
+ else
+ filtered = false
+ end
+ end
filtered = false
- elseif (TF3:BlackList(msg, userID) == true) then
+ elseif (TF3:BlackList(msg, userID, msgID) == true) then
filtered = true
elseif (TF3.db.profile.repeat_enable) then
if (TF3:FindRepeat(msg, userID, msgID) == true) then
@@ -416,9 +484,18 @@ local function PreFilterFunc(self, event, ...)
end
--[[ Check for LFG Channel and User setting ]]--
if (zoneID == 26 and TF3.db.profile.filterLFG and TF3:IsFriend(userID) == false) then
- if (userID == UnitName("Player") and TF3.db.profile.filterSELF == false or TF3:WhiteList(msg, userID) == true) then
+ if (userID == UnitName("Player") and TF3.db.profile.filterSELF == false) then
filtered = false
- elseif (TF3:BlackList(msg, userID) == true) then
+ elseif (TF3:WhiteList(msg, userID, msgID) == true) then
+ if (TF3.db.profile.repeat_enable) then
+ if (TF3:FindRepeat(msg, userID, msgID) == true) then
+ filtered = true
+ else
+ filtered = false
+ end
+ end
+ filtered = false
+ elseif (TF3:BlackList(msg, userID, msgID) == true) then
filtered = true
elseif (TF3.db.profile.repeat_enable) then
if (TF3:FindRepeat(msg, userID, msgID) == true) then
@@ -464,7 +541,7 @@ function TF3:FilterFunc(...)
if (zoneID == 2) then
for i,v in pairs(TF3.db.profile.filters.TRADE) do
--@alpha@
- if (TF3.db.profile.debug) then
+ if (TF3.db.profile.debug and not TF3.db.profile.debug_checking) then
if (lastmsg ~= msg or lastuserID ~= userID) then
TF3:FindFrame(debugFrame, L["CFM"] .. " " .. v)
end
@@ -485,7 +562,7 @@ function TF3:FilterFunc(...)
else
for i,v in pairs(TF3.db.profile.filters.BASE) do
--@alpha@
- if (TF3.db.profile.debug) then
+ if (TF3.db.profile.debug and not TF3.db.profile.debug_checking) then
if (lastmsg ~= msg or lastuserID ~= userID) then
TF3:FindFrame(debugFrame, L["CFM"] .. " " .. v)
end
diff --git a/TradeFilter3Options.lua b/TradeFilter3Options.lua
index e213713..024394e 100644
--- a/TradeFilter3Options.lua
+++ b/TradeFilter3Options.lua
@@ -7,46 +7,6 @@ local TradeFilter3 = LibStub("AceAddon-3.0"):GetAddon("TradeFilter3")
local L = LibStub("AceLocale-3.0"):GetLocale("TradeFilter3")
local TF3 = TradeFilter3
---[[ DB Functions ]]--
-function TF3:Del(t)
- wipe(t)
- setmetatable(t, nil)
- pool[t] = true
- return nil
-end
-
-function TF3:ClearTable(t, recursive)
- if t ~= nil and type(t) == 'table' then
- if not recursive 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
-
-function TF3:CopyTable(t, recursive)
- local ret = {}
- for k, v in pairs(t) do
- if (type(v) == "table") and recursive and not v.GetObjectType then
- ret[k] = copyTable(v)
- else
- ret[k] = v
- end
- end
- return ret
-end
-
--[[ Options Table ]]--
options = {
type="group",
@@ -166,13 +126,21 @@ options = {
get = function() return TF3.db.profile.addfilter_enable end,
set = function() TF3.db.profile.addfilter_enable = not TF3.db.profile.addfilter_enable end,
},
+ optionsHeader2a = {
+ type = "header",
+ order = 3,
+ name = L["BTF"],
+ },
reset_tradefilters = {
type = 'execute',
- order = 3,
+ disabled = function()
+ return not TF3.db.profile.addfilter_enable
+ end,
+ order = 4,
width = "double",
name = L["RTF"],
desc = L["RTF"],
- func = function() TF3.db.profile.filters.TRADE = TF3:CopyTable(L.FILTERS.TRADE, true) end,
+ func = function() TF3.db.profile.filters.TRADE = TF3:CopyTable(L.FILTERS.TRADE) end,
},
tradefilters = {
type = 'input',
@@ -180,7 +148,7 @@ options = {
return not TF3.db.profile.addfilter_enable
end,
multiline = 8,
- order = 4,
+ order = 5,
width = "double",
name = L["BTF"],
--~ desc = L["BTF"],
@@ -196,7 +164,7 @@ options = {
return ret
end,
set = function(info, value)
- TF3:ClearTable(TF3.db.profile.filters.TRADE)
+ TF3:WipeTable(TF3.db.profile.filters.TRADE)
local tbl = { strsplit("\n", value) }
for k, v in pairs(tbl) do
key = "FILTER"
@@ -204,13 +172,21 @@ options = {
end
end,
},
+ optionsHeader2b = {
+ type = "header",
+ order = 6,
+ name = L["BCF"],
+ },
reset_basefilters = {
type = 'execute',
- order = 5,
+ disabled = function()
+ return not TF3.db.profile.addfilter_enable
+ end,
+ order = 7,
width = "double",
name = L["RBF"],
desc = L["RBF"],
- func = function() TF3.db.profile.filters.BASE = TF3:CopyTable(L.FILTERS.BASE, true) end,
+ func = function() TF3.db.profile.filters.BASE = TF3:CopyTable(L.FILTERS.BASE) end,
},
basefilters = {
@@ -219,7 +195,7 @@ options = {
return not TF3.db.profile.addfilter_enable
end,
multiline = 8,
- order = 6,
+ order = 8,
width = "double",
name = L["BCF"],
desc = L["BCFD"],
@@ -235,7 +211,7 @@ options = {
return ret
end,
set = function(info, value)
- TF3:ClearTable(TF3.db.profile.filters.BASE)
+ TF3:WipeTable(TF3.db.profile.filters.BASE)
local tbl = { strsplit("\n", value) }
for k, v in pairs(tbl) do
key = "FILTER"
@@ -269,13 +245,39 @@ options = {
get = function() return TF3.db.profile.editlists_enable end,
set = function() TF3.db.profile.editlists_enable = not TF3.db.profile.editlists_enable end,
},
- reset_lists = {
- type = 'execute',
+ blacklist_enable = {
+ type = 'toggle',
order = 3,
width = "double",
- name = L["RLS"],
- desc = L["RLS"],
- func = function() TF3.db.profile.blacklist = TF3:CopyTable(L.BLACKLIST, true); TF3.db.profile.whitelist = TF3:CopyTable(L.WHITELIST, true) end,
+ name = L["BLE"],
+ desc = L["BLE"],
+ get = function() return TF3.db.profile.blacklist_enable end,
+ set = function() TF3.db.profile.blacklist_enable = not TF3.db.profile.blacklist_enable end,
+ },
+ whitelist_enable = {
+ type = 'toggle',
+ order = 4,
+ width = "double",
+ name = L["WLE"],
+ desc = L["WLE"],
+ get = function() return TF3.db.profile.whitelist_enable end,
+ set = function() TF3.db.profile.whitelist_enable = not TF3.db.profile.whitelist_enable end,
+ },
+ optionsHeader3a = {
+ type = "header",
+ order = 5,
+ name = L["bLists"],
+ },
+ reset_blist = {
+ type = 'execute',
+ disabled = function()
+ return not TF3.db.profile.editlists_enable
+ end,
+ order = 6,
+ width = "double",
+ name = L["RBLS"],
+ desc = L["RBLS"],
+ func = function() TF3.db.profile.blacklist = TF3:CopyTable(L.BLACKLIST) end,
},
blist = {
type = 'input',
@@ -283,23 +285,22 @@ options = {
return not TF3.db.profile.editlists_enable
end,
multiline = 8,
- order = 4,
+ order = 7,
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 = v
- else
- ret = ret .. "\n" .. v
- end
+ for k, v in pairs(TF3.db.profile.blacklist) do
+ if ret == "" then
+ ret = v
+ else
+ ret = ret .. "\n" .. v
end
- return ret
- end,
+ end
+ return ret
+ end,
set = function(info, value)
- TF3:ClearTable(TF3.db.profile.blacklist)
+ TF3:WipeTable(TF3.db.profile.blacklist)
local tbl = { strsplit("\n", value) }
for k, v in pairs(tbl) do
key = "BLIST"
@@ -307,29 +308,44 @@ options = {
end
end,
},
+ optionsHeader3b = {
+ type = "header",
+ order = 8,
+ name = L["wLists"],
+ },
+ reset_wlist = {
+ type = 'execute',
+ disabled = function()
+ return not TF3.db.profile.editlists_enable
+ end,
+ order = 9,
+ width = "double",
+ name = L["RWLS"],
+ desc = L["RWLS"],
+ func = function() TF3.db.profile.whitelist = TF3:CopyTable(L.WHITELIST) end,
+ },
wlist = {
type = 'input',
disabled = function()
return not TF3.db.profile.editlists_enable
end,
multiline = 8,
- order = 5,
+ order = 10,
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 = v
- else
- ret = ret .. "\n" .. v
- end
+ for k, v in pairs(TF3.db.profile.whitelist) do
+ if ret == "" then
+ ret = v
+ else
+ ret = ret .. "\n" .. v
end
- return ret
- end,
+ end
+ return ret
+ end,
set = function(info, value)
- TF3:ClearTable(TF3.db.profile.whitelist)
+ TF3:WipeTable(TF3.db.profile.whitelist)
local tbl = { strsplit("\n", value) }
for k, v in pairs(tbl) do
key = "WLIST"
@@ -349,11 +365,10 @@ options = {
name = L["REPEAT"],
desc = L["REPEAT"],
args = {
- optionsHeader3 = {
+ optionsHeader4 = {
type = "header",
order = 1,
name = L["REPEAT"],
- desc = L["REPEAT"],
},
repeat_enable = {
type = 'toggle',
@@ -421,11 +436,10 @@ options = {
name = L["OUTPUT"],
desc = L["OUTPUT"],
args = {
- optionsHeader3 = {
+ optionsHeader5 = {
type = "header",
order = 1,
name = L["OUTPUT"],
- desc = L["OUTPUT"],
},
redirect = {
type = 'toggle',
@@ -436,10 +450,24 @@ options = {
get = function() return TF3.db.profile.redirect end,
set = function() TF3.db.profile.redirect = not TF3.db.profile.redirect end,
},
+ redirect_blacklist = {
+ type = 'toggle',
+ order = 3,
+ width = "full",
+ name = L["RedirBL"],
+ desc = L["RedirDesc"],
+ get = function() return TF3.db.profile.redirect_blacklist end,
+ set = function() TF3.db.profile.redirect_blacklist = not TF3.db.profile.redirect_blacklist end,
+ },
--@alpha@
+ optionsHeader6 = {
+ type = "header",
+ order = 4,
+ name = L["DEBUGGING"],
+ },
debug = {
type = 'toggle',
- order = 3,
+ order = 5,
width = "full",
disabled = false,
hidden = false,
@@ -448,16 +476,27 @@ options = {
get = function() return TF3.db.profile.debug end,
set = function() TF3.db.profile.debug = not TF3.db.profile.debug end,
},
+ debug_checking = {
+ type = 'toggle',
+ order = 6,
+ width = "full",
+ disabled = false,
+ hidden = false,
+ name = L["DebugChecking"],
+ desc = L["DebugCheckingD"],
+ get = function() return TF3.db.profile.debug_checking end,
+ set = function() TF3.db.profile.debug_checking = not TF3.db.profile.debug_checking end,
+ },
--@end-alpha@
optionsHeader4 = {
type = "header",
- order = 4,
+ order = 7,
name = L["FSELF"],
desc = L["FSELFD"],
},
filterSELF = {
type = 'toggle',
- order = 5,
+ order = 8,
width = "double",
disabled = false,
name = L["FSELF"],