Quantcast

Further Debug output cleanup

Erik L. Vonderscheer [07-15-09 - 06:55]
Further Debug output cleanup
Better repeat detection
Whitelisted strings still have to pass repeat test
Whitelisted strings also needs to pass Blacklist
Filename
Docs/main.txt
TradeFilter3.lua
diff --git a/Docs/main.txt b/Docs/main.txt
index 709316f..2e6abdc 100644
--- a/Docs/main.txt
+++ b/Docs/main.txt
@@ -47,6 +47,11 @@ The filtering priorities are as follows: Add-on is ON ->  is NOT friend -> is NO
 Nothing planned

 ==== ChangeLog
+*r144
+**++Further Debug output cleanup++\\
+**++Better repeat detection++\\
+**++Whitelisted strings still have to pass repeat test++\\
+**++Whitelisted strings also needs to pass Blacklist++\\
 *r132
 **++Typo causing reset buttons to error out fixed++\\
 **++Added all strings to locale++\\
diff --git a/TradeFilter3.lua b/TradeFilter3.lua
index 76f3c91..97c7a87 100644
--- a/TradeFilter3.lua
+++ b/TradeFilter3.lua
@@ -55,6 +55,7 @@ local currentFriend
 local redirectFrame = L["redirectFrame"]
 local debugFrame = L["debugFrame"]
 local repeatFrame = L["repeatFrame"]
+local lastmsgID
 local lastmsg
 local lastuserID

@@ -197,17 +198,17 @@ end

 --[[ BlackList Func ]]--
 --[[ Base blacklist words borrowed from BadBoy(Funkydude) ]]--
-function TF3:BlackList(userID, msg)
+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 (lastmsg ~= msg) then
-				if (TF3.db.profile.debug) then
+			if (TF3.db.profile.debug) then
+				if (msgID ~= lastmsgID) then
 					TF3:FindFrame(debugFrame, "|cFFFF0000[" .. L["bLists"] .. "]|r |cFFD9D9D9[" .. userID .. "]:|r |cFFC08080" .. msg .. "|r")
-					lastmsg = msg
+					lastmsgID = msgID
 				end
 			end
 			--@end-alpha@
@@ -218,17 +219,17 @@ function TF3:BlackList(userID, msg)
 end

 --[[ WhiteList Func ]]--
-function TF3:WhiteList(userID, msg)
+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(userID, msg) == false) then
+		if (find(msg,word) and TF3:FindRepeat(msg, userID, msgID) == false and TF3:BlackList(msg, userID, msgID) == false) then
 			--@alpha@
-			if (lastmsg ~= msg) then
-				if (TF3.db.profile.debug) then
+			if (TF3.db.profile.debug) then
+				if (msgID ~= lastmsgID) then
 					TF3:FindFrame(debugFrame, "|cFFFFFF80[" .. L["wLists"] .. "]|r |cFFD9D9D9[" .. userID .. "]:|r |cFFC08080" .. msg .. "|r")
-					lastmsg = msg
+					lastmsgID = msgID
 				end
 			end
 			--@end-alpha@
@@ -239,31 +240,28 @@ function TF3:WhiteList(userID, msg)
 end

 --[[ Repeat Func ]]--
-function TF3:FindRepeat(userID, msg)
+function TF3:FindRepeat(msg, userID, msgID)
 	local gtime = math.floor(GetTime()*math.pow(10,0)+0.5) / math.pow(10,0)
-	if not repeatdata[userID] then
-		repeatdata[userID] = {}
-		repeatdata[userID].lastmsg = msg
-		repeatdata[userID].lastIndex = 1
-		repeatdata[userID].repeats = 0
-	else
-		if (msg == repeatdata[userID].lastmsg and gtime - repeatdata[userID].lastIndex < tonumber(TF3.db.profile.time_repeats)) then
-			repeatdata[userID].repeats = repeatdata[userID].repeats + 1
-			if (repeatdata[userID].repeats >= tonumber(TF3.db.profile.num_repeats)) then
-				--@alpha@
---~ 				if (TF3.db.profile.debug) then
---~ 					TF3:FindFrame(repeatFrame, "|cFFFF8C00[" .. L["#RPT"] .. "]|r |cFFD9D9D9[" .. userID .. "]:|r |cFFC08080" .. msg .. "|r")
---~ 				end
-				--@end-alpha@
---~ 				TF3.db.profile.repeats_blocked = TF3.db.profile.repeats_blocked + 1
-				return true
-			end
-	  elseif (msg ~= repeatdata[userID].lastmsg) then
-	    repeatdata[userID].repeats = 0
-	  end
-		repeatdata[userID].lastmsg = msg
-		repeatdata[userID].lastIndex  = gtime
+	if (msgID ~= repeatdata[userID].lastmsgID and msg == repeatdata[userID].lastmsg and gtime - repeatdata[userID].lastIndex < tonumber(TF3.db.profile.time_repeats)) then
+		repeatdata[userID].repeats = repeatdata[userID].repeats + 1
+		if (repeatdata[userID].repeats >= tonumber(TF3.db.profile.num_repeats)) then
+			--@alpha@
+			if (TF3.db.profile.debug) then
+				if (msg ~= lastmsg) then
+					TF3:FindFrame(repeatFrame, "|cFFFF8C00[" .. L["#RPT"] .. "]|r |cFFD9D9D9[" .. msgID .. "]|r |cFFD9D9D9[" .. userID .. "]:|r |cFFC08080" .. msg .. "|r")
+					lastmsg = msg
+				end
+			end
+			--@end-alpha@
+			TF3.db.profile.repeats_blocked = TF3.db.profile.repeats_blocked + 1
+			return true
+		end
+	elseif (msg ~= repeatdata[userID].lastmsg) then
+	 repeatdata[userID].repeats = 0
 	end
+	repeatdata[userID].lastmsg = msg
+	repeatdata[userID].lastmsgID = msgID
+	repeatdata[userID].lastIndex  = gtime
 	return false
 end

@@ -304,23 +302,30 @@ local function PreFilterFunc_Say(self, event, ...)
 	local filtered = false
 	local msg = arg1 or select(1, ...)
 	local userID = arg2 or select(2, ...)
-	if (lastmsg ~= msg) then
-		if (event == "CHAT_MSG_SAY" and TF3.db.profile.filterSAY and TF3:IsFriend(userID) == false) then
-			if (userID == UnitName("Player") and TF3.db.profile.filterSELF == false or TF3:WhiteList(userID, msg) == true) then
-				filtered = false
-			elseif (TF3:BlackList(userID, msg) == true) then
+	local msgID = arg11 or select(11, ...)
+	if not (repeatdata[userID]) then
+		repeatdata[userID] = {}
+		repeatdata[userID].lastmsg = msg
+		repeatdata[userID].lastmsgID = msgID
+		repeatdata[userID].lastIndex = 1
+		repeatdata[userID].repeats = 1
+	end
+	if (event == "CHAT_MSG_SAY" and TF3.db.profile.filterSAY and TF3:IsFriend(userID) == false) then
+		if (userID == UnitName("Player") and TF3.db.profile.filterSELF == false or TF3:WhiteList(msg, userID, msgID) == true) then
+			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
 				filtered = true
 			else
 				filtered = TF3:FilterFunc(...)
 			end
 		else
-			filtered = false
+			filtered = TF3:FilterFunc(...)
 		end
-		lastmsg = msg
 	else
-		if (TF3.db.profile.repeat_enable) then
-			filtered = TF3:FindRepeat(userID, msg)
-		end
+		filtered = false
 	end
 	return filtered
 end
@@ -330,23 +335,30 @@ local function PreFilterFunc_Yell(self, event, ...)
 	local filtered = false
 	local msg = arg1 or select(1, ...)
 	local userID = arg2 or select(2, ...)
-	if (lastmsg ~= msg) then
-		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(userID, msg) == true) then
-				filtered = false
-			elseif (TF3:BlackList(userID, msg) == true) then
+	local msgID = arg11 or select(11, ...)
+	if not (repeatdata[userID]) then
+		repeatdata[userID] = {}
+		repeatdata[userID].lastmsg = msg
+		repeatdata[userID].lastmsgID = msgID
+		repeatdata[userID].lastIndex = 1
+		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
+			filtered = false
+		elseif (TF3:BlackList(msg, userID) == true) then
+			filtered = true
+		elseif (TF3.db.profile.repeat_enable) then
+			if (TF3:FindRepeat(msg, userID, msgID) == true) then
 				filtered = true
 			else
 				filtered = TF3:FilterFunc(...)
 			end
 		else
-			filtered = false
+			filtered = TF3:FilterFunc(...)
 		end
-		lastmsg = msg
 	else
-		if (TF3.db.profile.repeat_enable) then
-			filtered = TF3:FindRepeat(userID, msg)
-		end
+		filtered = false
 	end
 	return filtered
 end
@@ -358,48 +370,67 @@ local function PreFilterFunc(self, event, ...)
 	local userID = arg2 or select(2, ...)
 	local zoneID = arg7 or select(7, ...)
 	local chanID = arg8 or select(8, ...)
+	local msgID = arg11 or select(11, ...)
+	if not (repeatdata[userID]) then
+		repeatdata[userID] = {}
+		repeatdata[userID].lastmsg = msg
+		repeatdata[userID].lastmsgID = msgID
+		repeatdata[userID].lastIndex = 1
+		repeatdata[userID].repeats = 1
+	end
 	--[[ Check for Trade Channel and User setting ]]--
-	if (lastmsg ~= msg) then
-		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(userID, msg) == true) then
-				filtered = false
-			elseif (TF3:BlackList(userID, msg) == true) then
+	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
+			filtered = false
+		elseif (TF3:BlackList(msg, userID) == true) then
+			filtered = true
+		elseif (TF3.db.profile.repeat_enable) then
+			if (TF3:FindRepeat(msg, userID, msgID) == true) then
 				filtered = true
 			else
 				filtered = TF3:FilterFunc(...)
 			end
-		elseif (zoneID == 2 and not TF3.db.profile.filterTrade) then
-			filtered = false
+		else
+			filtered = TF3:FilterFunc(...)
 		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(userID, msg) == true) then
-				filtered = false
-			elseif (TF3:BlackList(userID, msg) == true) then
+	elseif (zoneID == 2 and not TF3.db.profile.filterTrade) then
+		filtered = false
+	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
+			filtered = false
+		elseif (TF3:BlackList(msg, userID) == true) then
+			filtered = true
+		elseif (TF3.db.profile.repeat_enable) then
+			if (TF3:FindRepeat(msg, userID, msgID) == true) then
 				filtered = true
 			else
 				filtered = TF3:FilterFunc(...)
 			end
-		elseif (chanID == 1 and not TF3.db.profile.filterGeneral) then
-			filtered = false
+		else
+			filtered = TF3:FilterFunc(...)
 		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(userID, msg) == true) then
-				filtered = false
-			elseif (TF3:BlackList(userID, msg) == true) then
+	elseif (chanID == 1 and not TF3.db.profile.filterGeneral) then
+		filtered = false
+	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
+			filtered = false
+		elseif (TF3:BlackList(msg, userID) == true) then
+			filtered = true
+		elseif (TF3.db.profile.repeat_enable) then
+			if (TF3:FindRepeat(msg, userID, msgID) == true) then
 				filtered = true
 			else
 				filtered = TF3:FilterFunc(...)
 			end
-		elseif (chanID == 26 and not TF3.db.profile.filterLFG) then
-			filtered = false
-		end
-		lastmsg = msg
-	else
-		if (TF3.db.profile.repeat_enable) then
-			filtered = TF3:FindRepeat(userID, msg)
+		else
+			filtered = TF3:FilterFunc(...)
 		end
+	elseif (chanID == 26 and not TF3.db.profile.filterLFG) then
+		filtered = false
 	end
 	return filtered
 end
@@ -425,48 +456,54 @@ function TF3:FilterFunc(...)
 		filtered = true
 		--@alpha@
 		if (TF3.db.profile.debug) then
-			TF3:FindFrame(debugFrame, "|cFFC08080[" .. chan .. "]|r |cFFD9D9D9[" .. userID .. "]:|r |cFFC08080" .. msg .. "|r")
+			if (lastmsg ~= msg or lastuserID ~= userID) then
+				TF3:FindFrame(debugFrame, "|cFFC08080[" .. chan .. "]|r |cFFD9D9D9[" .. userID .. "]:|r |cFFC08080" .. msg .. "|r")
+			end
 		end
 		--@end-alpha@
 		if (zoneID == 2) then
 			for i,v in pairs(TF3.db.profile.filters.TRADE) do
 				--@alpha@
-				if (lastmsg ~= msg or lastuserID ~= userID) then
-					if (TF3.db.profile.debug) then
+				if (TF3.db.profile.debug) then
+					if (lastmsg ~= msg or lastuserID ~= userID) then
 						TF3:FindFrame(debugFrame, L["CFM"] .. " " .. v)
 					end
-					--@end-alpha@
-					if (find(msg,v)) then
-						--@alpha@
-						if (TF3.db.profile.debug) then
+				end
+				--@end-alpha@
+				if (find(msg,v)) then
+					--@alpha@
+					if (TF3.db.profile.debug) then
+						if (lastmsg ~= msg or lastuserID ~= userID) then
 							TF3:FindFrame(debugFrame, L["MATCHED"] .. " |cffff8080" .. v .. "|r")
 							lastmsg, lastuserID = msg, userID
 						end
-						--@end-alpha@
-						filtered = false
 					end
+					--@end-alpha@
+					filtered = false
 				end
 			end
 		else
 			for i,v in pairs(TF3.db.profile.filters.BASE) do
 				--@alpha@
-				if (lastmsg ~= msg or lastuserID ~= userID) then
-					if (TF3.db.profile.debug) then
+				if (TF3.db.profile.debug) then
+					if (lastmsg ~= msg or lastuserID ~= userID) then
 						TF3:FindFrame(debugFrame, L["CFM"] .. " " .. v)
 					end
-					--@end-alpha@
-					if (find(msg,v)) then
-						--@alpha@
-						if (TF3.db.profile.debug) then
+				end
+				--@end-alpha@
+				if (find(msg,v)) then
+					--@alpha@
+					if (TF3.db.profile.debug) then
+						if (lastmsg ~= msg or lastuserID ~= userID) then
 							TF3:FindFrame(debugFrame, L["MATCHED"] .. " |cffff8080" .. v .. "|r")
 							lastmsg, lastuserID = msg, userID
 						end
-						--@end-alpha@
-						filtered = false
+					end
+					--@end-alpha@
+					filtered = false
 					end
 				end
 			end
-		end
 		if (filtered == true) then
 			if (lastmsg ~= msg or lastuserID ~= userID) then
 				--@alpha@