wobin@18: local Controller = Squawk.Controller wobin@18: local Model = Squawk.Model wobin@18: local View = Squawk.View wobin@18: local Settings = Model.UserSettings wobin@18: local Squawks = Model.Squawks wobin@18: wobin@18: --Controller-- wobin@18: wobin@18: function Controller:TheyWantToFollowMe(Name) wobin@18: if Settings:IsPrivate() then wobin@18: Settings:AddPending(Name) wobin@18: self:PutForwardFollowRequest(Name) wobin@19: self:SendMessageToTarget(Name, "#Pending|"..self.Name) wobin@18: else wobin@18: Settings:AddFollower(Name) wobin@18: View:NotifyOfNewFollower(Name) wobin@19: self:SendMessageToTarget(Name, "#Follow|"..self.Name) wobin@18: end wobin@18: end wobin@18: wobin@18: function Controller:TheyWantToUnfollowMe(Name) wobin@18: Settings:RemoveFollower(Name) wobin@18: end wobin@18: wobin@18: function Controller:IWantToFollowThem(Name) wobin@19: self:SendMessageToTarget(Name, "#Request|"..self.Name) wobin@18: Settings:AddRequested(Name) wobin@18: end wobin@18: wobin@18: function Controller:IWantToUnfollowThem(Name) wobin@18: Settings:RemoveFollowing(Name) wobin@19: self:SendMessageToTarget(Name, "#Unfollow|"..self.Name) wobin@18: View:NotifyOfUnfollowing(Name) wobin@18: end wobin@18: wobin@18: function Controller:IAmNowFollowingThem(Name) wobin@18: Settings:AddFollowing(Name) wobin@18: View:NotifyOfNewFollowing(Name) wobin@18: end wobin@18: wobin@19: function Controller:AddANewSquawk(Name, Class, Message, Reply, Source) wobin@18: if not Settings.Blocked[Name] then wobin@18: wobin@18: if Source == "WHISPER" then wobin@18: if Settings.Requested[Name] then -- We've been approved offline! wobin@18: Settings:AddFollowing(Name) wobin@18: end wobin@18: wobin@18: if not Settings.Following[Name] then -- If we're no longer following this person wobin@19: self:SendMessageToTarget(Name, "#Unfollow|"..self.Name) wobin@18: return wobin@18: end wobin@18: end wobin@18: wobin@19: if Source == "GUILD" and Name == self.Name then wobin@18: return wobin@18: end wobin@18: wobin@19: table.insert(Model.Squawks, Squawks:new(Message, Name, Class, Reply)) wobin@19: --View:UpdateSquawkList() wobin@18: end wobin@18: end wobin@18: wobin@18: local trigger wobin@18: local function RepressFailure(frame, event, ...) wobin@18: if arg1:match(string.gsub(ERR_CHAT_PLAYER_NOT_FOUND_S, "%%s", "(.*)")) then wobin@18: if trigger then Controller:CancelTimer(trigger, true) end wobin@18: trigger = Controller:ScheduleTimer( wobin@18: function() wobin@18: ChatFrame_RemoveMessageEventFilter("CHAT_MSG_SYSTEM", RepressFailure) wobin@18: end, 3) -- Give it three seconds and then remove the filter. wobin@18: return true wobin@18: else wobin@18: return false, unpack(...) wobin@18: end wobin@18: end wobin@18: wobin@19: function Controller:SendNewSquawk(Message, ReplyStamp) wobin@18: if not Settings:IsPrivate() then wobin@19: self:SendMessageToGuild("#Squawk|"..self.Name.."|"..self.Class.."|"..ReplyStamp or "".."|"..Message) wobin@18: end wobin@18: wobin@19: self:AddANewSquawk(self.Name, self.Class, Message, ReplyStamp) wobin@18: for name, _ in pairs(Settings.Following) do wobin@19: self:SendMessageToTarget(name, "#Squawk|"..self.Name.."|"..self.Class.."|"..ReplyStamp or "".."|"..Message) wobin@18: end wobin@18: end wobin@18: wobin@18: function Controller:ImPending(Name) wobin@18: View:NotifyOfPending(Name) wobin@18: end wobin@18: wobin@18: function Controller:PutForwardFollowRequest(Name) wobin@18: View:NotifyOfPendingRequest(Name) wobin@18: end wobin@18: wobin@18: function Controller:ApprovePendingRequest(Name) wobin@18: Settings:AddFollower(Name) wobin@18: View:NotifyOfNewFollower(Name) wobin@19: self:SendMessageToTarget(Name, "#Follow|"..self.Name) wobin@18: end wobin@18: wobin@18: wobin@18: wobin@18: function Controller:SendMessageToTarget(Name, Message) wobin@18: ChatFrame_AddMessageEventFilter("CHAT_MSG_SYSTEM", RepressFailure) wobin@18: self:SendCommMessage("Squawk", Message, "WHISPER", Name) wobin@18: end wobin@18: wobin@18: function Controller:SendMessageToGuild(Message) wobin@18: self:SendCommMessage("Squawk", Message, "GUILD") wobin@18: end wobin@18: wobin@18: local Parse = { wobin@18: ["#Pending"] = Controller.ImPending, wobin@18: ["#Follow"] = Controller.IAmNowFollowingThem, wobin@18: ["#Unfollow"] = Controller.TheyWantToUnfollowMe, wobin@18: ["#Squawk"] = Controller.AddANewSquawk, wobin@18: ["#Request"] = Controller.TheyWantToFollowMe, wobin@18: } wobin@18: wobin@18: function Controller:ReceiveMessage(Message, Distribution, Sender) wobin@19: local command, name, class, reply, info = strsplit("|",Message) wobin@19: Parse[command](Controller, name, class, reply, info, Distribution) wobin@18: end wobin@18: