annotate Controller.lua @ 18:a3328fffef5c

Split of main file into components
author wobin
date Thu, 07 May 2009 02:52:23 +1000
parents
children 431f2fce08f2
rev   line source
wobin@18 1 local Controller = Squawk.Controller
wobin@18 2 local Model = Squawk.Model
wobin@18 3 local View = Squawk.View
wobin@18 4 local Settings = Model.UserSettings
wobin@18 5 local Squawks = Model.Squawks
wobin@18 6
wobin@18 7 --Controller--
wobin@18 8
wobin@18 9 function Controller:TheyWantToFollowMe(Name)
wobin@18 10 if Settings:IsPrivate() then
wobin@18 11 Settings:AddPending(Name)
wobin@18 12 self:PutForwardFollowRequest(Name)
wobin@18 13 self:SendMessageToTarget(Name, "#Pending|"..UnitName("player"))
wobin@18 14 else
wobin@18 15 Settings:AddFollower(Name)
wobin@18 16 View:NotifyOfNewFollower(Name)
wobin@18 17 self:SendMessageToTarget(Name, "#Follow|"..UnitName("player"))
wobin@18 18 end
wobin@18 19 end
wobin@18 20
wobin@18 21 function Controller:TheyWantToUnfollowMe(Name)
wobin@18 22 Settings:RemoveFollower(Name)
wobin@18 23 end
wobin@18 24
wobin@18 25 function Controller:IWantToFollowThem(Name)
wobin@18 26 self:SendMessageToTarget(Name, "#Request|"..UnitName("player"))
wobin@18 27 Settings:AddRequested(Name)
wobin@18 28 end
wobin@18 29
wobin@18 30 function Controller:IWantToUnfollowThem(Name)
wobin@18 31 Settings:RemoveFollowing(Name)
wobin@18 32 self:SendMessageToTarget(Name, "#Unfollow|"..UnitName("player"))
wobin@18 33 View:NotifyOfUnfollowing(Name)
wobin@18 34 end
wobin@18 35
wobin@18 36 function Controller:IAmNowFollowingThem(Name)
wobin@18 37 Settings:AddFollowing(Name)
wobin@18 38 View:NotifyOfNewFollowing(Name)
wobin@18 39 end
wobin@18 40
wobin@18 41 function Controller:AddANewSquawk(Name, Message, Source)
wobin@18 42 if not Settings.Blocked[Name] then
wobin@18 43
wobin@18 44 if Source == "WHISPER" then
wobin@18 45 if Settings.Requested[Name] then -- We've been approved offline!
wobin@18 46 Settings:AddFollowing(Name)
wobin@18 47 end
wobin@18 48
wobin@18 49 if not Settings.Following[Name] then -- If we're no longer following this person
wobin@18 50 self:SendMessageToTarget(Name, "#Unfollow|"..UnitName("player"))
wobin@18 51 return
wobin@18 52 end
wobin@18 53 end
wobin@18 54
wobin@18 55 if Source == "GUILD" and Name == UnitName("player") then
wobin@18 56 return
wobin@18 57 end
wobin@18 58
wobin@18 59 table.insert(Model.Squawks, Squawks:new(Message, Name))
wobin@18 60 View:UpdateSquawkList()
wobin@18 61 end
wobin@18 62 end
wobin@18 63
wobin@18 64 local trigger
wobin@18 65 local function RepressFailure(frame, event, ...)
wobin@18 66 if arg1:match(string.gsub(ERR_CHAT_PLAYER_NOT_FOUND_S, "%%s", "(.*)")) then
wobin@18 67 if trigger then Controller:CancelTimer(trigger, true) end
wobin@18 68 trigger = Controller:ScheduleTimer(
wobin@18 69 function()
wobin@18 70 ChatFrame_RemoveMessageEventFilter("CHAT_MSG_SYSTEM", RepressFailure)
wobin@18 71 end, 3) -- Give it three seconds and then remove the filter.
wobin@18 72 return true
wobin@18 73 else
wobin@18 74 return false, unpack(...)
wobin@18 75 end
wobin@18 76 end
wobin@18 77
wobin@18 78 function Controller:SendNewSquawk(Message)
wobin@18 79 if not Settings:IsPrivate() then
wobin@18 80 self:SendMessageToGuild("#Squawk|"..UnitName("player").."|"..Message)
wobin@18 81 end
wobin@18 82
wobin@18 83 self:AddANewSquawk(UnitName("player"), Message)
wobin@18 84 for name, _ in pairs(Settings.Following) do
wobin@18 85 self:SendMessageToTarget(name, "#Squawk|"..UnitName("player").."|"..Message)
wobin@18 86 end
wobin@18 87 end
wobin@18 88
wobin@18 89 function Controller:ImPending(Name)
wobin@18 90 View:NotifyOfPending(Name)
wobin@18 91 end
wobin@18 92
wobin@18 93 function Controller:PutForwardFollowRequest(Name)
wobin@18 94 View:NotifyOfPendingRequest(Name)
wobin@18 95 end
wobin@18 96
wobin@18 97 function Controller:ApprovePendingRequest(Name)
wobin@18 98 Settings:AddFollower(Name)
wobin@18 99 View:NotifyOfNewFollower(Name)
wobin@18 100 self:SendMessageToTarget(Name, "#Follow|"..UnitName("player"))
wobin@18 101 end
wobin@18 102
wobin@18 103
wobin@18 104
wobin@18 105 function Controller:SendMessageToTarget(Name, Message)
wobin@18 106 ChatFrame_AddMessageEventFilter("CHAT_MSG_SYSTEM", RepressFailure)
wobin@18 107 self:SendCommMessage("Squawk", Message, "WHISPER", Name)
wobin@18 108 end
wobin@18 109
wobin@18 110 function Controller:SendMessageToGuild(Message)
wobin@18 111 self:SendCommMessage("Squawk", Message, "GUILD")
wobin@18 112 end
wobin@18 113
wobin@18 114 local Parse = {
wobin@18 115 ["#Pending"] = Controller.ImPending,
wobin@18 116 ["#Follow"] = Controller.IAmNowFollowingThem,
wobin@18 117 ["#Unfollow"] = Controller.TheyWantToUnfollowMe,
wobin@18 118 ["#Squawk"] = Controller.AddANewSquawk,
wobin@18 119 ["#Request"] = Controller.TheyWantToFollowMe,
wobin@18 120 }
wobin@18 121
wobin@18 122 function Controller:ReceiveMessage(Message, Distribution, Sender)
wobin@18 123 local command, name, info = strsplit("|",Message)
wobin@18 124 View:Print(Distribution..":"..Message)
wobin@18 125 Parse[command](Controller, name, info, Distribution)
wobin@18 126 end
wobin@18 127