changeset 14:18c33a32ba31

Now supresses 'X Player is not online' messages when broadcasting to followers Tooltip limited to 10 most recent
author wobin
date Fri, 24 Apr 2009 15:19:43 +1000
parents 0ca5ec0b7502
children 9e61a930b822
files Squawk.lua
diffstat 1 files changed, 35 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/Squawk.lua	Thu Apr 23 17:00:45 2009 +1000
+++ b/Squawk.lua	Fri Apr 24 15:19:43 2009 +1000
@@ -37,9 +37,10 @@
 	Settings.Private = Model.db.profile.Private
 	
 	LibStub("AceComm-3.0"):Embed(Controller)
+	LibStub("AceTimer-3.0"):Embed(Controller)
 	Controller:RegisterComm("Squawk", Controller.ReceiveMessage)
+	LibStub("AceConsole-3.0"):Embed(View)
 
-	LibStub("AceConsole-3.0"):Embed(View)
 end
 
 -- Model --
@@ -116,7 +117,8 @@
 end
 
 function Squawk:Sort(Squawks)
-	return table.sort(Squawks, function(a,b) return a.Time < b.Time end)
+	table.sort(Squawks, function(a,b) return a.Time > b.Time end)
+	return Squawks
 end
 
 function Squawk:GetOwn(Squawks)
@@ -129,6 +131,18 @@
 	return self:Sort(mine)
 end
 
+function Squawk:GetLast10(Squawks)
+	local mine = {}
+	local limit = #Squawks < 10 and #Squawks or 10
+	
+	Squawks = Squawk:Sort(Squawks)
+
+	for i=1,limit do
+		table.insert(mine, Squawks[i])
+	end
+	return mine
+end
+
 function Settings:IsPrivate()
 	return Settings.Private
 end
@@ -248,13 +262,26 @@
 	end
 end
 
+local trigger
+local function RepressFailure(frame, event, ...)
+	if arg1:match(string.gsub(ERR_CHAT_PLAYER_NOT_FOUND_S, "%%s", "(.*)")) then
+		if trigger then Controller:CancelTimer(trigger, true) end
+		trigger = Controller:ScheduleTimer(
+				function() 
+					ChatFrame_RemoveMessageEventFilter("CHAT_MSG_SYSTEM", RepressFailure) 
+				end, 3) -- Give it three seconds and then remove the filter.
+		return true
+	else
+		return false, unpack(...)
+	end
+end
+
 function Controller:SendNewSquawk(Message)
 	if not Settings:IsPrivate() then
 		self:SendMessageToGuild("#Squawk|"..UnitName("player").."|"..Message)
 	end
 
 	self:AddANewSquawk(UnitName("player"), Message)
-	
 	for name, _ in pairs(Settings.Following) do
 		self:SendMessageToTarget(name, "#Squawk|"..UnitName("player").."|"..Message)
 	end
@@ -274,7 +301,10 @@
 	self:SendMessageToTarget(Name, "#Follow|"..UnitName("player"))
 end
 
+
+
 function Controller:SendMessageToTarget(Name, Message)
+	ChatFrame_AddMessageEventFilter("CHAT_MSG_SYSTEM", RepressFailure)
 	self:SendCommMessage("Squawk", Message, "WHISPER", Name)
 end
 
@@ -295,6 +325,7 @@
 	View:Print(Distribution..":"..Message)
 	Parse[command](Controller, name, info, Distribution)
 end
+
 -- View --
 
 function View:UpdateSquawkList()
@@ -387,7 +418,7 @@
 	local tooltip = QTip:Acquire("Squawk",4, "LEFT", "LEFT", "LEFT", "RIGHT")
 	self.tooltip = tooltip
 	tooltip:AddHeader('Squawk')
-	for i,squawk in ipairs(Model.Squawks) do
+	for i,squawk in ipairs(Squawk:GetLast10(Model.Squawks)) do
 		if #squawk.Message > 79 then
 			local head = true
 			local message = {strsplit("\n",squawk.Message)}