# HG changeset patch # User wobin # Date 1240550383 -36000 # Node ID 18c33a32ba31b081d65d8b7b1102770980178139 # Parent 0ca5ec0b75020410c0400c40d024a090a63e35bf Now supresses 'X Player is not online' messages when broadcasting to followers Tooltip limited to 10 most recent diff -r 0ca5ec0b7502 -r 18c33a32ba31 Squawk.lua --- 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)}