comparison Squawk.lua @ 0:2c267c596711

First import Skeleton functionality, working on internals before anything
author wobin
date Thu, 16 Apr 2009 17:26:19 +1000
parents
children 188273d0efad
comparison
equal deleted inserted replaced
-1:000000000000 0:2c267c596711
1 -- A Twitter client of sorts for World of Warcraft
2 -- Author: Wobin
3 -- Email: wobster@gmail.com
4 --
5 Squawk = LibStub("AceAddon-3.0"):NewAddon("Squawk", "AceDB-3.0")
6
7 Squawk.Model = {}
8 Squawk.View = {}
9 Squawk.Controller = {}
10
11 local Model = Squawk.Model
12 local View = Squawk.View
13 local Controller = Squawk.Controller
14
15 Model.UserSettings = {}
16 local Settings = Model.UserSettings
17
18 local defaults = {
19 profile = {
20 Squawks = {},
21 Follower = {},
22 Following = {},
23 Blocked = {},
24 }
25 }
26
27 function Squawk:OnInitialize()
28 Model.db = LibStub("AceDB-3.0"):New("SquawkDB", defaults)
29 Settings.Follower = Model.db.profile.Follower
30 Settings.Following = Model.db.profile.Following
31 Settings.Blocked = Model.db.profile.Blocked
32 Settings.Private = Model.db.profile.Private
33
34 LibStub("AceComm-3.0"):Embed(Controller)
35 Controller:RegisterComm("Squawk", ReceiveMessage)
36 end
37
38 -- Model --
39 --[[
40 --Each Squawk will have the following information:
41 -- * Owner (Name)
42 -- * Time (Epoch)
43 -- * Message (140 characters)
44 -- * ReplyTo (Name)
45 -- * Related (Names)
46 --
47 -- Each User will have the following lists:
48 -- * Follower
49 -- * Following
50 -- * Blocked
51 -- * Privacy State
52 --]]
53 Model.Squawk = {}
54 local Squawk = Model.Squawk
55
56 function Squawk:new(Message, Owner)
57 local o = {}
58 o.Owner = Owner or UnitName("player")
59 o.Message = Message
60 o.Time = os.time()
61 local reply, to = strsplit("@", ((strsplit(" ", Message))))
62 if reply == "" then
63 o.ReplyTo = to
64 end
65
66 o.Related = {}
67
68 for word in string.gmatch(Message, "@(%a+)") do
69 if word ~= o.ReplyTo or "" then
70 table.insert(o.Related, word)
71 end
72 end
73
74 return o
75 end
76
77 function Squawk:Sort(Squawks)
78 return table.sort(Squawks, function(a,b) return a.Time < b.Time end)
79 end
80
81 function Settings:IsPrivate()
82 return Settings.Private
83 end
84
85 function Settings:AddFollower(Name)
86 table.insert(Settings.Follower, Name)
87 end
88
89 function Settings:AddFollowing(Name)
90 table.insert(Settings.Following, Name)
91 end
92
93 function Settings:AddBlock(Name)
94 table.insert(Settings.Blocked, Name)
95 end
96
97 function Settings:RemoveFollower(Name)
98 for i,v in ipairs(Settings.Follower) do
99 if v == Name then
100 table.remove(Settings.Follower, i)
101 return
102 end
103 end
104 end
105
106 function Settings:RemoveFollowing(Name)
107 for i,v in ipairs(Settings.Following) do
108 if v == Name then
109 table.remove(Settings.Following, i)
110 return
111 end
112 end
113 end
114
115 function Settings:RemoveBlock(Name)
116 for i,v in ipairs(Settings.Blocked) do
117 if v == Name then
118 table.remove(Settings.Blocked, i)
119 return
120 end
121 end
122 end
123
124 --Controller--
125
126 function Controller:TheyWantToFollowMe(Name)
127 if Settings:IsPrivate() then
128 self:PutForwardFollowRequest(Name)
129 self:SendMessageToTarget(Name, "#Pending|"..UnitName("player"))
130 else
131 Settings:AddFollower(Name)
132 View:NotifyOfNewFollower(Name)
133 self:SendMessageToTarget(Name, "#Follow|"..UnitName("player"))
134 end
135 end
136
137 function Controller:IWantToFollowThem(Name)
138
139 end
140
141 function Controller:IAmNowFollowingThem(Name)
142 Settings:AddFollowing(Name)
143 View:NotifyOfNewFollowing(Name)
144 end
145
146 function Controller:AddANewSquawk(Name, Message)
147 table.insert(Model.db.Squawks, Squawk:new(Message, Name))
148 View:UpdateSquawkList()
149 end
150
151 function Controller:SendMessageToTarget(Name, Message)
152 self:SendCommMessage("Squawk", Message, "WHISPER", Name, "BULK")
153 end
154
155 function Controller:SendMessageToGuild(Message)
156 self:SendCommMessage("Squawk", Message, "GUILD")
157 end
158
159 local Parse = {
160 ["#Pending"] = View:NotifyOfPending,
161 ["#Follow"] = Controller:IAmNowFollowingThem,
162 ["#Squawk"] = Controller:AddANewSquawk
163 }
164
165 function Controller:ReceiveMessage(Prefix, Message, Distribution, Sender)
166 local command, name, info = strsplit("|",Message)
167 Parse[command](name, info)
168 end
169 -- View --
170
171 function View:UpdateSquawkList()
172 end
173
174 function View:NotifyOfPending()
175 end
176
177 function View:NotifyOfNewFollowing(Name)
178 end
179
180 function View:NotifyOfNewFollower(Name)
181 end