Quantcast

Added configuration for repeat recycling(Advanced)

Erik L. Vonderscheer [08-21-10 - 20:59]
Added configuration for repeat recycling(Advanced)
Added achievement links to defualt Whitelist
Removed defunct default Whitelist entry that produced a bug in new entries
Filename
Docs/changelog.txt
Docs/main.txt
TradeFilter3.lua
TradeFilter3Options.lua
diff --git a/Docs/changelog.txt b/Docs/changelog.txt
index 6c4d851..7d4d5f9 100644
--- a/Docs/changelog.txt
+++ b/Docs/changelog.txt
@@ -1,15 +1,27 @@
 == ChangeLog
+*r199
+**++Added configuration for repeat recycling(Advanced)++\\
+**++Added achievement links to defualt Whitelist++\\
+**++Removed defunct default Whitelist entry that produced a bug in new entries++\\
+*r198
+**++Let's not check for repeats twice++\\
+*r196
+**++Fix repeat counter++\\
+**++Fix error in localization (r195)++\\
+*r195
+**++Fix repeat detection++\\
+**++GUI typo++\\
 *r192
-**++Added BG Filters++
-**++Config GUI reorganization++
+**++Added BG Filters++\\
+**++Config GUI reorganization++\\
 *r167
-**++Added simple duel spam block++
+**++Added simple duel spam block++\\
 *r159
-**++Keep lists sorted!++
+**++Keep lists sorted!++\\
 *r155
-**++LDB support for Repeats Blocked++
-**++Ability for Whitelist to bypass repeat filter++
-**++GUI layout changed a little++
+**++LDB support for Repeats Blocked++\\
+**++Ability for Whitelist to bypass repeat filter++\\
+**++GUI layout changed a little++\\
 *r148
 **++Minor code cleanup++\\
 **++AceTimer lib added for repeat table recycling++\\
diff --git a/Docs/main.txt b/Docs/main.txt
index 6e0ac48..202f7ff 100644
--- a/Docs/main.txt
+++ b/Docs/main.txt
@@ -51,8 +51,9 @@ Nothing planned

 === Supported Translations
 //Please help localize this project// [[http://www.wowace.com/projects/trade-filter/localization/|HERE]]\\
-German - 97.4%\\
-French - 63.2%\\
-Simplified Chinese - 41.9%\\
-Traditional Chinese - 22.2%\\
-Korean - 47.9%\\
+[[http://www.wowace.com/projects/trade-filter/localization/|German]] - 93.3%\\
+[[http://www.wowace.com/projects/trade-filter/localization/|Simplified Chinese]] - 52.0%\\
+[[http://www.wowace.com/projects/trade-filter/localization/|French]] - 41.9%\\
+[[http://www.wowace.com/projects/trade-filter/localization/|Korean]] - 30.7%\\
+[[http://www.wowace.com/projects/trade-filter/localization/|Russian]] - 26.9%\\
+[[http://www.wowace.com/projects/trade-filter/localization/|Traditional Chinese]] - 14.0%\\
diff --git a/TradeFilter3.lua b/TradeFilter3.lua
index 3be8d70..9a79548 100644
--- a/TradeFilter3.lua
+++ b/TradeFilter3.lua
@@ -49,7 +49,6 @@ local formatIt = string.format
 local insert = table.insert
 local sort = table.sort
 local timerCount = 0
-local repeatdata = {}
 local currentFriend
 local redirectFrame = L["redirectFrame"]
 local debugFrame = L["debugFrame"]
@@ -61,6 +60,9 @@ local rptmsgID
 local lastuserID
 local rptdone

+--[[  Globals  ]]--
+repeatdata = {}
+
 local PROJECT_VERSION = "@project-version@"
 local PROJECT_REVISION = 000 + tonumber(("$Revision: @project-revision@ $"):match("%d+"))
 TF3.date = sub("$Date: @file-date-iso@ $", 8, 17)
@@ -95,6 +97,8 @@ defaults = {
 		special_enable = false,
 		num_repeats = "2",
 		time_repeats = "30",
+		repeat_recycle_time = "1800",
+		repeat_recycle_size = "50",
 		repeats_blocked =  0,
 		friendslist = {},
 		whitelist = {},
@@ -183,7 +187,7 @@ function TF3:IsLoggedIn()
 	self:RegisterEvent("FRIENDLIST_UPDATE", "GetFriends")
 	friends.RegisterCallback(self, "Added")
 	friends.RegisterCallback(self, "Removed")
-	self:ScheduleRepeatingTimer("RecycleTables", 1800, repeatdata)
+	self:ScheduleRepeatingTimer("RecycleTables", tonumber(TF3.db.profile.repeat_recycle_time), repeatdata)
 	self:UnregisterEvent("PLAYER_LOGIN")
 	TF3:DuelFilter()

@@ -232,11 +236,11 @@ end

 function TF3:RecycleTables(t, state)
 	local gtime = math.floor(GetTime()*math.pow(10,0)+0.5) / math.pow(10,0)
-	if (t ~= nil and type(t) == "table" and TF3:GetNumElements(t) >= 100) then
+	if (t ~= nil and type(t) == "table" and TF3:GetNumElements(t) >= tonumber(TF3.db.profile.repeat_recycle_size)) then
 		local key, value = next(t, state)
 		if key then
 			for k,v in pairs(value) do
-				if(k == "lastIndex" and gtime - v > 1800) then
+				if(k == "lastIndex" and gtime - v > tonumber(TF3.db.profile.repeat_recycle_time)) then
 					if (TF3.db.profile.debug) then
 						TF3:FindFrame(debugFrame, "|cFFFFFF80" .. L["RMVRT1"] .. "|r |cFF33FF99" .. key .. "|r |cFFFFFF80" .. L["RMVRT2"] .. "|r")
 					end
@@ -247,7 +251,7 @@ function TF3:RecycleTables(t, state)
 		end
 		timerCount = timerCount + 1
 		if (TF3.db.profile.debug) then
-			TF3:FindFrame(debugFrame, ("%d " .. L["SECPSD"]):format(1800 * timerCount))
+			TF3:FindFrame(debugFrame, ("%d " .. L["SECPSD"]):format(tonumber(TF3.db.profile.repeat_recycle_time) * timerCount))
 		end
 	end
 end
diff --git a/TradeFilter3Options.lua b/TradeFilter3Options.lua
index 80eaf7c..5fb25f4 100644
--- a/TradeFilter3Options.lua
+++ b/TradeFilter3Options.lua
@@ -3,6 +3,7 @@ File Author: @file-author@
 File Revision: @file-revision@
 File Date: @file-date-iso@
 ]]--
+
 local TradeFilter3 = LibStub("AceAddon-3.0"):GetAddon("TradeFilter3")
 local L = LibStub("AceLocale-3.0"):GetLocale("TradeFilter3")
 local TF3 = TradeFilter3
@@ -13,6 +14,16 @@ local pairs = pairs
 local insert = table.insert
 local sort = table.sort

+function getnHash(t)
+   local count = 0;
+   if not t then return 0; end
+   if (type(t)) ~= "table" then return 0; end
+   for i,_ in pairs(t) do
+      count = count + 1;
+   end
+   return count;
+end
+
 --[[ Options Table ]]--
 options = {
 	type="group",
@@ -664,9 +675,10 @@ options = {
 						},
 					},
 				},
-				repeatGroup = {
+				repeatGroupMain = {
 					type = "group",
 					handler = TF3,
+					childGroups = "tab",
 					order = 4,
 					disabled = function()
 						return not TF3.db.profile.turnOn
@@ -674,68 +686,165 @@ options = {
 					name = L["REPEAT"],
 					desc = L["REPEAT"],
 					args = {
-						optionsHeader4 = {
-							type	= "header",
-							order	= 1,
-							name	= L["REPEAT"],
-						},
 						repeat_enable = {
 							type = 'toggle',
-							order = 2,
+							order = 1,
 							width = "double",
 							name = L["RPTENABLE"],
 							desc = L["RPTENABLED"],
 							get = function() return TF3.db.profile.repeat_enable end,
 							set = function() TF3.db.profile.repeat_enable = not TF3.db.profile.repeat_enable end,
 						},
-						num_repeats = {
-							type = 'input',
+						repeatGroup = {
+							type = "group",
+							handler = TF3,
+							order = 2,
 							disabled = function()
 								return not TF3.db.profile.repeat_enable
 							end,
-							order = 3,
-							width = "full",
-							name = L["#RPT"],
-							desc = L["#RPTD"],
-							usage = L["RPTU"],
-							get = function(info) return TF3.db.profile.num_repeats end,
-							set = function(info, value) TF3.db.profile.num_repeats = value end,
+							name = L["REPEAT"],
+							desc = L["REPEAT"],
+							args = {
+								num_repeats = {
+									type = 'input',
+									disabled = function()
+										return not TF3.db.profile.repeat_enable
+									end,
+									order = 3,
+									width = "full",
+									name = L["#RPT"],
+									desc = L["#RPTD"],
+									usage = L["RPTU"],
+									get = function(info) return TF3.db.profile.num_repeats end,
+									set = function(info, value) TF3.db.profile.num_repeats = value end,
+								},
+								time_repeats = {
+									type = 'input',
+									disabled = function()
+										return not TF3.db.profile.repeat_enable
+									end,
+									order = 4,
+									width = "full",
+									name = L["TRPT"],
+									desc = L["TRPTD"],
+									usage = L["RPTU"],
+									get = function(info) return TF3.db.profile.time_repeats end,
+									set = function(info, value) TF3.db.profile.time_repeats = value end,
+								},
+								repeats_blocked = {
+									type = 'input',
+									disabled = true,
+									order = 5,
+									width = "half",
+									name = L["RPTBLOCKED"],
+									desc = L["RPTBLOCKEDD"],
+									get = function(info) return tostring(TF3.db.profile.repeats_blocked) end,
+								},
+								reset_repeats_blocked = {
+									type = 'execute',
+									order = 6,
+									width = "half",
+									name = L["RPTRESET"],
+									desc = L["RPTRESETD"],
+									func = function()
+										TF3.db.profile.repeats_blocked = 0
+										if (LibStub("LibDataBroker-1.1", true)) then
+											TF3Frame.Blocked.text = TF3.db.profile.repeats_blocked .. "Repeats Blocked"
+											TF3Frame.Blocked.value = TF3.db.profile.repeats_blocked
+										end
+									end,
+								},
+							},
 						},
-						time_repeats = {
-							type = 'input',
+						repeatGroupAdv = {
+							type = "group",
+							handler = TF3,
+							order = 3,
 							disabled = function()
 								return not TF3.db.profile.repeat_enable
 							end,
-							order = 4,
-							width = "full",
-							name = L["TRPT"],
-							desc = L["TRPTD"],
-							usage = L["RPTU"],
-							get = function(info) return TF3.db.profile.time_repeats end,
-							set = function(info, value) TF3.db.profile.time_repeats = value end,
-						},
-						repeats_blocked = {
-							type = 'input',
-							disabled = true,
-							order = 5,
-							width = "half",
-							name = L["RPTBLOCKED"],
-							desc = L["RPTBLOCKEDD"],
-							get = function(info) return tostring(TF3.db.profile.repeats_blocked) end,
-						},
-						reset_repeats_blocked = {
-							type = 'execute',
-							order = 6,
-							width = "half",
-							name = L["RPTRESET"],
-							desc = L["RPTRESETD"],
-							func = function()
-								TF3.db.profile.repeats_blocked = 0
-								if (LibStub("LibDataBroker-1.1", true)) then
-									TF3Frame.Blocked.text = TF3.db.profile.repeats_blocked .. "Repeats Blocked"
-									TF3Frame.Blocked.value = TF3.db.profile.repeats_blocked
-								end
-							end,
+							name = L["RPTA"],
+							desc = L["RPTAD"],
+							args = {
+								repeat_recycle_time = {
+									type = 'input',
+									disabled = function()
+										return not TF3.db.profile.repeat_enable
+									end,
+									order = 1,
+									width = "full",
+									name = L["RPTRT"],
+									desc = L["RPTRTD"],
+									usage = L["RPTRTSU"],
+									get = function(info) return TF3.db.profile.repeat_recycle_time end,
+									set = function(info, value)
+										TF3.db.profile.repeat_recycle_time = value
+										TF3:ScheduleRepeatingTimer(TF3:RecycleTables(), tonumber(TF3.db.profile.repeat_recycle_time), repeatdata)
+									end,
+								},
+								repeat_recycle_size = {
+									type = 'input',
+									disabled = function()
+										return not TF3.db.profile.repeat_enable
+									end,
+									order = 2,
+									width = "full",
+									name = L["RPTRS"],
+									desc = L["RPTRSD"],
+									usage = L["RPTRTSU"],
+									get = function(info) return TF3.db.profile.repeat_recycle_size end,
+									set = function(info, value) TF3.db.profile.repeat_recycle_size = value end,
+								},
+								repeats_table_size = {
+									type = 'input',
+									disabled = true,
+									order = 3,
+									name = L["RPTTS"],
+									get = function() return tostring(getnHash(repeatdata)) end,
+								},
+								blank_space1 = {
+									type = 'description',
+									order = 4,
+									name = "",
+								},
+								options_header5 = {
+									type	= "header",
+									order	= 5,
+									name	= L["RPTTC"],
+								},
+								reset_repeat_table_content = {
+									type = 'execute',
+									disabled = function()
+										return not TF3.db.profile.repeat_enable
+									end,
+									order = 6,
+									name = L["RPTTT"],
+									desc = L["RPTTTD"],
+									func = function() TF3:RecycleTables(repeatdata) end,
+								},
+								repeats_table_content = {
+									type = 'description',
+									fontSize = "medium",
+									disabled = true,
+									order = 7,
+									name = function()
+										local ret = ""
+										for k,v in pairs(repeatdata) do
+											if ret == "" then
+												ret = k
+											else
+												ret = ret .. "\n" .. k
+											end
+										end
+										return ret
+									end,
+								},
+								blank_space2 = {
+									type = 'description',
+									order = 8,
+									name = "",
+								},
+							},
 						},
 					},
 				},