Mercurial > prosody-hg
comparison core/rostermanager.lua @ 1898:1ce02e2f5a3f
rostermanager: Fixed: Roster version was not being properly updated in some edge cases.
| author | Waqas Hussain <waqas20@gmail.com> |
|---|---|
| date | Sun, 04 Oct 2009 21:34:17 +0500 |
| parents | 6d81e74310a7 |
| children | ff2b86076e9c |
comparison
equal
deleted
inserted
replaced
| 1897:6d81e74310a7 | 1898:1ce02e2f5a3f |
|---|---|
| 128 item.subscription = "to"; | 128 item.subscription = "to"; |
| 129 else -- subscription == from | 129 else -- subscription == from |
| 130 item.subscription = "both"; | 130 item.subscription = "both"; |
| 131 end | 131 end |
| 132 item.ask = nil; | 132 item.ask = nil; |
| 133 return datamanager.store(username, host, "roster", roster); | 133 return save_roster(username, host, roster); |
| 134 end | 134 end |
| 135 end | 135 end |
| 136 | 136 |
| 137 function process_inbound_subscription_cancellation(username, host, jid) | 137 function process_inbound_subscription_cancellation(username, host, jid) |
| 138 local roster = load_roster(username, host); | 138 local roster = load_roster(username, host); |
| 150 item.subscription = "from"; | 150 item.subscription = "from"; |
| 151 changed = true; | 151 changed = true; |
| 152 end | 152 end |
| 153 end | 153 end |
| 154 if changed then | 154 if changed then |
| 155 return datamanager.store(username, host, "roster", roster); | 155 return save_roster(username, host, roster); |
| 156 end | 156 end |
| 157 end | 157 end |
| 158 | 158 |
| 159 function process_inbound_unsubscribe(username, host, jid) | 159 function process_inbound_unsubscribe(username, host, jid) |
| 160 local roster = load_roster(username, host); | 160 local roster = load_roster(username, host); |
| 172 item.subscription = "to"; | 172 item.subscription = "to"; |
| 173 changed = true; | 173 changed = true; |
| 174 end | 174 end |
| 175 end | 175 end |
| 176 if changed then | 176 if changed then |
| 177 return datamanager.store(username, host, "roster", roster); | 177 return save_roster(username, host, roster); |
| 178 end | 178 end |
| 179 end | 179 end |
| 180 | 180 |
| 181 function is_contact_subscribed(username, host, jid) | 181 function is_contact_subscribed(username, host, jid) |
| 182 local roster = load_roster(username, host); | 182 local roster = load_roster(username, host); |
| 194 if item and (item.subscription == "from" or item.subscription == "both") then | 194 if item and (item.subscription == "from" or item.subscription == "both") then |
| 195 return; -- false | 195 return; -- false |
| 196 end | 196 end |
| 197 if not roster.pending then roster.pending = {}; end | 197 if not roster.pending then roster.pending = {}; end |
| 198 roster.pending[jid] = true; | 198 roster.pending[jid] = true; |
| 199 return datamanager.store(username, host, "roster", roster); | 199 return save_roster(username, host, roster); |
| 200 end | 200 end |
| 201 function is_contact_pending_out(username, host, jid) | 201 function is_contact_pending_out(username, host, jid) |
| 202 local roster = load_roster(username, host); | 202 local roster = load_roster(username, host); |
| 203 local item = roster[jid]; | 203 local item = roster[jid]; |
| 204 return item and item.ask; | 204 return item and item.ask; |
| 213 item = {subscription = "none", groups = {}}; | 213 item = {subscription = "none", groups = {}}; |
| 214 roster[jid] = item; | 214 roster[jid] = item; |
| 215 end | 215 end |
| 216 item.ask = "subscribe"; | 216 item.ask = "subscribe"; |
| 217 log("debug", "set_contact_pending_out: saving roster; set "..username.."@"..host..".roster["..jid.."].ask=subscribe"); | 217 log("debug", "set_contact_pending_out: saving roster; set "..username.."@"..host..".roster["..jid.."].ask=subscribe"); |
| 218 return datamanager.store(username, host, "roster", roster); | 218 return save_roster(username, host, roster); |
| 219 end | 219 end |
| 220 function unsubscribe(username, host, jid) | 220 function unsubscribe(username, host, jid) |
| 221 local roster = load_roster(username, host); | 221 local roster = load_roster(username, host); |
| 222 local item = roster[jid]; | 222 local item = roster[jid]; |
| 223 if not item then return false; end | 223 if not item then return false; end |
| 228 if item.subscription == "both" then | 228 if item.subscription == "both" then |
| 229 item.subscription = "from"; | 229 item.subscription = "from"; |
| 230 elseif item.subscription == "to" then | 230 elseif item.subscription == "to" then |
| 231 item.subscription = "none"; | 231 item.subscription = "none"; |
| 232 end | 232 end |
| 233 return datamanager.store(username, host, "roster", roster); | 233 return save_roster(username, host, roster); |
| 234 end | 234 end |
| 235 function subscribed(username, host, jid) | 235 function subscribed(username, host, jid) |
| 236 if is_contact_pending_in(username, host, jid) then | 236 if is_contact_pending_in(username, host, jid) then |
| 237 local roster = load_roster(username, host); | 237 local roster = load_roster(username, host); |
| 238 local item = roster[jid]; | 238 local item = roster[jid]; |
| 245 else -- subscription == to | 245 else -- subscription == to |
| 246 item.subscription = "both"; | 246 item.subscription = "both"; |
| 247 end | 247 end |
| 248 roster.pending[jid] = nil; | 248 roster.pending[jid] = nil; |
| 249 -- TODO maybe remove roster.pending if empty | 249 -- TODO maybe remove roster.pending if empty |
| 250 return datamanager.store(username, host, "roster", roster); | 250 return save_roster(username, host, roster); |
| 251 end -- TODO else implement optional feature pre-approval (ask = subscribed) | 251 end -- TODO else implement optional feature pre-approval (ask = subscribed) |
| 252 end | 252 end |
| 253 function unsubscribed(username, host, jid) | 253 function unsubscribed(username, host, jid) |
| 254 local roster = load_roster(username, host); | 254 local roster = load_roster(username, host); |
| 255 local item = roster[jid]; | 255 local item = roster[jid]; |
| 267 item.subscription = "to"; | 267 item.subscription = "to"; |
| 268 changed = true; | 268 changed = true; |
| 269 end | 269 end |
| 270 end | 270 end |
| 271 if changed then | 271 if changed then |
| 272 return datamanager.store(username, host, "roster", roster); | 272 return save_roster(username, host, roster); |
| 273 end | 273 end |
| 274 end | 274 end |
| 275 | 275 |
| 276 function process_outbound_subscription_request(username, host, jid) | 276 function process_outbound_subscription_request(username, host, jid) |
| 277 local roster = load_roster(username, host); | 277 local roster = load_roster(username, host); |
| 278 local item = roster[jid]; | 278 local item = roster[jid]; |
| 279 if item and (item.subscription == "none" or item.subscription == "from") then | 279 if item and (item.subscription == "none" or item.subscription == "from") then |
| 280 item.ask = "subscribe"; | 280 item.ask = "subscribe"; |
| 281 return datamanager.store(username, host, "roster", roster); | 281 return save_roster(username, host, roster); |
| 282 end | 282 end |
| 283 end | 283 end |
| 284 | 284 |
| 285 --[[function process_outbound_subscription_approval(username, host, jid) | 285 --[[function process_outbound_subscription_approval(username, host, jid) |
| 286 local roster = load_roster(username, host); | 286 local roster = load_roster(username, host); |
| 287 local item = roster[jid]; | 287 local item = roster[jid]; |
| 288 if item and (item.subscription == "none" or item.subscription == "from" then | 288 if item and (item.subscription == "none" or item.subscription == "from" then |
| 289 item.ask = "subscribe"; | 289 item.ask = "subscribe"; |
| 290 return datamanager.store(username, host, "roster", roster); | 290 return save_roster(username, host, roster); |
| 291 end | 291 end |
| 292 end]] | 292 end]] |
| 293 | 293 |
| 294 | 294 |
| 295 | 295 |
