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@18: self:SendMessageToTarget(Name, "#Pending|"..UnitName("player")) wobin@18: else wobin@18: Settings:AddFollower(Name) wobin@18: View:NotifyOfNewFollower(Name) wobin@18: self:SendMessageToTarget(Name, "#Follow|"..UnitName("player")) 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@18: self:SendMessageToTarget(Name, "#Request|"..UnitName("player")) wobin@18: Settings:AddRequested(Name) wobin@18: end wobin@18: wobin@18: function Controller:IWantToUnfollowThem(Name) wobin@18: Settings:RemoveFollowing(Name) wobin@18: self:SendMessageToTarget(Name, "#Unfollow|"..UnitName("player")) 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@18: function Controller:AddANewSquawk(Name, Message, 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@18: self:SendMessageToTarget(Name, "#Unfollow|"..UnitName("player")) wobin@18: return wobin@18: end wobin@18: end wobin@18: wobin@18: if Source == "GUILD" and Name == UnitName("player") then wobin@18: return wobin@18: end wobin@18: wobin@18: table.insert(Model.Squawks, Squawks:new(Message, Name)) wobin@18: 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@18: function Controller:SendNewSquawk(Message) wobin@18: if not Settings:IsPrivate() then wobin@18: self:SendMessageToGuild("#Squawk|"..UnitName("player").."|"..Message) wobin@18: end wobin@18: wobin@18: self:AddANewSquawk(UnitName("player"), Message) wobin@18: for name, _ in pairs(Settings.Following) do wobin@18: self:SendMessageToTarget(name, "#Squawk|"..UnitName("player").."|"..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@18: self:SendMessageToTarget(Name, "#Follow|"..UnitName("player")) 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@18: local command, name, info = strsplit("|",Message) wobin@18: View:Print(Distribution..":"..Message) wobin@18: Parse[command](Controller, name, info, Distribution) wobin@18: end wobin@18: