Mercurial > wow > squawk
comparison Squawk.lua @ 15:9e61a930b822
Modified the Model model for additional filters and subqueries
author | wobin |
---|---|
date | Sat, 25 Apr 2009 21:42:27 +1000 |
parents | 18c33a32ba31 |
children | 6c28e55a00cf |
comparison
equal
deleted
inserted
replaced
14:18c33a32ba31 | 15:9e61a930b822 |
---|---|
80 -- Guild open: you're not private, you broadcast to the guild your last X | 80 -- Guild open: you're not private, you broadcast to the guild your last X |
81 -- squawks on login | 81 -- squawks on login |
82 -- | 82 -- |
83 -- followers: | 83 -- followers: |
84 --]] | 84 --]] |
85 Model.Squawk = {} | 85 Model.Squawks = {} |
86 local Squawk = Model.Squawk | 86 local Squawks = Model.Squawks |
87 Squawks.Main = {} | |
88 Squawks.Owners = {} | |
89 | |
87 local function wrap(str, limit) | 90 local function wrap(str, limit) |
88 limit = limit or 72 | 91 limit = limit or 72 |
89 local here = 1 | 92 local here = 1 |
90 return str:gsub("(%s+)()(%S+)()", | 93 return str:gsub("(%s+)()(%S+)()", |
91 function(sp, st, word, fi) | 94 function(sp, st, word, fi) |
93 here = st | 96 here = st |
94 return "\n"..word | 97 return "\n"..word |
95 end | 98 end |
96 end) | 99 end) |
97 end | 100 end |
98 function Squawk:new(Message, Owner) | 101 |
102 function Squawks:new(Message, Owner) | |
99 local o = {} | 103 local o = {} |
100 o.Owner = Owner or UnitName("player") | 104 o.Owner = Owner or UnitName("player") |
101 o.Message = wrap(Message) | 105 o.Message = wrap(Message) |
102 o.Time = time() | 106 o.Time = time() |
103 local reply, to = strsplit("@", ((strsplit(" ", Message)))) | 107 local reply, to = strsplit("@", ((strsplit(" ", Message)))) |
110 for word in string.gmatch(Message, "@(%a+)") do | 114 for word in string.gmatch(Message, "@(%a+)") do |
111 if word ~= o.ReplyTo or "" then | 115 if word ~= o.ReplyTo or "" then |
112 table.insert(o.Related, word) | 116 table.insert(o.Related, word) |
113 end | 117 end |
114 end | 118 end |
119 | |
120 table.insert(self.Main, o) | |
121 | |
122 if not self.Owners[Owner] then | |
123 self.Owners[Owner] = {} | |
124 end | |
125 table.insert(self.Owners[Owner], o) | |
115 | 126 |
116 return o | 127 return o |
117 end | 128 end |
118 | 129 |
119 function Squawk:Sort(Squawks) | 130 function Squawks:Sort(Squawks) |
120 table.sort(Squawks, function(a,b) return a.Time > b.Time end) | 131 table.sort(Squawks or self.Main, function(a,b) return a.Time > b.Time end) |
121 return Squawks | 132 return Squawks or self.Main |
122 end | 133 end |
123 | 134 |
124 function Squawk:GetOwn(Squawks) | 135 function Squawks:GetOwn(Squawks) |
125 local mine = {} | 136 local mine = {} |
126 for _, squawk in ipairs(Squawks) do | 137 for _, squawk in ipairs(Squawks or self.Main) do |
127 if squawk.Owner == UnitName("player") then | 138 if squawk.Owner == UnitName("player") then |
128 table.insert(mine, squawk) | 139 table.insert(mine, squawk) |
129 end | 140 end |
130 end | 141 end |
131 return self:Sort(mine) | 142 return self:Sort(mine) |
132 end | 143 end |
133 | 144 |
134 function Squawk:GetLast10(Squawks) | 145 function Squawks:GetLast10(Squawks) |
135 local mine = {} | 146 local mine = {} |
147 Squawks = Squawks or self.Main | |
136 local limit = #Squawks < 10 and #Squawks or 10 | 148 local limit = #Squawks < 10 and #Squawks or 10 |
137 | 149 |
138 Squawks = Squawk:Sort(Squawks) | 150 Squawks = Squawk:Sort(Squawks) |
139 | 151 |
140 for i=1,limit do | 152 for i=1,limit do |
141 table.insert(mine, Squawks[i]) | 153 table.insert(mine, Squawks[i]) |
142 end | 154 end |
143 return mine | 155 return mine |
156 end | |
157 | |
158 -- initially called with no arguments to get the latest timestamp of | |
159 -- my squawks, or with a name to find the latest timestamp of all | |
160 -- squawks from that user | |
161 function Squawks:GetLatestTimestamp(Name, Squawks) | |
162 if Name then | |
163 if self.Owners[Name] then | |
164 return self:GetLatestTimestamp(nil, self.Owners[Name]) | |
165 else | |
166 return -1 -- No squawks exist for that name in our records | |
167 end | |
168 end | |
169 | |
170 Squawks = Squawks or self.Main or {} | |
171 local latest = self:Sort(Squawks) | |
172 return latest and #latest > 0 and latest[1].Time or -1 | |
173 end | |
174 | |
175 function Squawks:GetLatestSquawks(Timestamp) | |
176 local latest = {} | |
177 for i, squawk in ipairs(self:Sort()) do | |
178 if squawk.Time > Timestamp and i < 10 then | |
179 table.insert(latest, squawk) | |
180 else | |
181 return latest | |
182 end | |
183 end | |
144 end | 184 end |
145 | 185 |
146 function Settings:IsPrivate() | 186 function Settings:IsPrivate() |
147 return Settings.Private | 187 return Settings.Private |
148 end | 188 end |
352 function View:NotifyOfNewFollower(Name) | 392 function View:NotifyOfNewFollower(Name) |
353 self:Print(Name.." is now following you") | 393 self:Print(Name.." is now following you") |
354 end | 394 end |
355 | 395 |
356 function View:ShowMeMySquawks() | 396 function View:ShowMeMySquawks() |
357 for _,squawk in ipairs(Model.Squawks) do | 397 for _,squawk in ipairs(Model.Squawks.Main) do |
358 self:Print(squawk.Message) | 398 self:Print(squawk.Message) |
359 end | 399 end |
360 end | 400 end |
361 | 401 |
362 function View:ShowMeMyFollowers() | 402 function View:ShowMeMyFollowers() |
416 | 456 |
417 function LDBFeed:OnEnter() | 457 function LDBFeed:OnEnter() |
418 local tooltip = QTip:Acquire("Squawk",4, "LEFT", "LEFT", "LEFT", "RIGHT") | 458 local tooltip = QTip:Acquire("Squawk",4, "LEFT", "LEFT", "LEFT", "RIGHT") |
419 self.tooltip = tooltip | 459 self.tooltip = tooltip |
420 tooltip:AddHeader('Squawk') | 460 tooltip:AddHeader('Squawk') |
421 for i,squawk in ipairs(Squawk:GetLast10(Model.Squawks)) do | 461 for i,squawk in ipairs(Squawk:GetLast10()) do |
422 if #squawk.Message > 79 then | 462 if #squawk.Message > 79 then |
423 local head = true | 463 local head = true |
424 local message = {strsplit("\n",squawk.Message)} | 464 local message = {strsplit("\n",squawk.Message)} |
425 for _,line in ipairs(message) do | 465 for _,line in ipairs(message) do |
426 if head then | 466 if head then |