Mercurial > prosody-modules
comparison mod_profile/mod_profile.lua @ 1516:48d95ab404c7
mod_profile: Save photo and nickname from PEP to vCard
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 27 Sep 2014 19:29:28 +0200 |
parents | f367d7cbfaa6 |
children | 8fbe16c83807 |
comparison
equal
deleted
inserted
replaced
1515:f367d7cbfaa6 | 1516:48d95ab404c7 |
---|---|
127 module:hook("iq-get/host/vcard-temp:vCard", handle_get); | 127 module:hook("iq-get/host/vcard-temp:vCard", handle_get); |
128 | 128 |
129 module:hook("iq-set/bare/vcard-temp:vCard", handle_set); | 129 module:hook("iq-set/bare/vcard-temp:vCard", handle_set); |
130 module:hook("iq-set/host/vcard-temp:vCard", handle_set); | 130 module:hook("iq-set/host/vcard-temp:vCard", handle_set); |
131 | 131 |
132 local function on_publish(event) | |
133 if event.actor == true then return end -- Not from a client | |
134 local node, item = event.node, event.item; | |
135 local username = jid_split(event.actor); | |
136 local data = storage:get(username) or {}; | |
137 if node == "urn:xmpp:avatar:data" then | |
138 local new_photo = item:get_child_text("data", "urn:xmpp:avatar:data"); | |
139 new_photo = new_photo and { name = "PHOTO"; ENCODING = { "b" }; new_photo } or nil; | |
140 local _, i = get_item(data, "PHOTO") | |
141 if new_photo then | |
142 data[i or #data+1] = new_photo; | |
143 elseif i then | |
144 table.remove(data, i); | |
145 end | |
146 elseif node == "http://jabber.org/protocol/nick" then | |
147 local new_nick = item:get_child_text("nick", "http://jabber.org/protocol/nick"); | |
148 new_nick = new_nick and new_nick ~= "" and { name = "NICKNAME"; new_nick } or nil; | |
149 local _, i = get_item(data, "NICKNAME") | |
150 if new_nick then | |
151 data[i or #data+1] = new_nick; | |
152 elseif i then | |
153 table.remove(data, i); | |
154 end | |
155 else | |
156 return; | |
157 end | |
158 storage:set(username, data); | |
159 end | |
160 | |
132 local function pep_service_added(event) | 161 local function pep_service_added(event) |
133 local item = event.item; | 162 local item = event.item; |
134 local service, username = item.service, jid_split(item.jid); | 163 local service, username = item.service, jid_split(item.jid); |
164 service.events.add_handler("item-published", on_publish); | |
135 local data = storage:get(username); | 165 local data = storage:get(username); |
136 if data then | 166 if data then |
137 update_pep(username, data, service); | 167 update_pep(username, data, service); |
138 end | 168 end |
139 end | 169 end |