mod_profile/mod_profile.lua
changeset 1516 48d95ab404c7
parent 1515 f367d7cbfaa6
child 1593 3e4d15ae2133
child 1747 8fbe16c83807
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