# HG changeset patch # User Kim Alvefur # Date 1307471394 -7200 # Node ID 118da85cb3cee2530816cb42b6ec32b4006ea76c # Parent 48a404e083c4cd15bf51c96704a64515827b57e2 plugins.roster: Roster versioning support. diff -r 48a404e083c4 -r 118da85cb3ce plugins/roster.lua --- a/plugins/roster.lua Tue May 24 20:22:02 2011 +0200 +++ b/plugins/roster.lua Tue Jun 07 20:29:54 2011 +0200 @@ -5,9 +5,9 @@ function verse.plugins.roster(stream) local roster = { items = {}; + ver = ""; -- TODO: -- groups = {}; - -- ver = nil; }; stream.roster = roster; @@ -43,6 +43,17 @@ return item_table; end + function roster:load(r) + roster.ver, roster.items = r.ver, r.items; + end + + function roster:dump() + return { + ver = roster.ver, + items = roster.items, + }; + end + -- should this be add_contact(item, callback) instead? function roster:add_contact(jid, nick, groups, callback) local item = { jid = jid, name = nick, groups = groups }; @@ -92,12 +103,16 @@ end function roster:fetch(callback) - stream:send_iq(verse.iq({type="get"}):tag("query", { xmlns = xmlns_roster }), + stream:send_iq(verse.iq({type="get"}):tag("query", { xmlns = xmlns_roster, ver = roster.ver }), function (result) if result.attr.type == "result" then local query = result:get_child("query", xmlns_roster); - for item in query:childtags("item") do - add_item(item) + if query then + roster.items = {}; + for item in query:childtags("item") do + add_item(item) + end + roster.ver = query.attr.ver or ""; end callback(roster); else @@ -123,6 +138,7 @@ add_item(item) target = roster.items[jid]; end + roster.ver = query.attr.ver; if target then stream:event("roster/item-"..event, target); end