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