Commit 41d26bb77ee4cfd1bb0e9ec3eb93647085920bdf

Authored by Rodrigo Souto
1 parent c6665719

chat-workarounds: get roster groups and friends from noosfero

This patch is part of several workarounds done to fix ejabberd problems
with usernames bigger than 8 chars. For more information check:
https://github.com/processone/ejabberd/issues/1152
app/controllers/public/chat_controller.rb
@@ -113,8 +113,11 @@ class ChatController < PublicController @@ -113,8 +113,11 @@ class ChatController < PublicController
113 end 113 end
114 114
115 #TODO Ideally this is done through roster table on ejabberd. 115 #TODO Ideally this is done through roster table on ejabberd.
116 - def roster_groups  
117 - render :text => user.memberships.map {|m| {:jid => m.jid, :name => m.name}}.to_json 116 + def rosters
  117 + rooms = user.memberships.map {|m| {:jid => m.jid, :name => m.name}}
  118 + friends = user.friends.map {|f| {:jid => f.jid, :name => f.name}}
  119 + rosters = {:rooms => rooms, :friends => friends}
  120 + render :text => rosters.to_json
118 end 121 end
119 122
120 protected 123 protected
public/javascripts/chat.js
@@ -271,27 +271,35 @@ jQuery(function($) { @@ -271,27 +271,35 @@ jQuery(function($) {
271 var contacts_to_insert = {}; 271 var contacts_to_insert = {};
272 var groups_to_insert = []; 272 var groups_to_insert = [];
273 273
274 - $(iq).find('item').each(function () {  
275 - var jid = $(this).attr('jid');  
276 - profiles.push(getIdentifier(jid));  
277 - var name = $(this).attr('name') || jid;  
278 - var jid_id = Jabber.jid_to_id(jid);  
279 - contacts_to_insert[jid] = name;  
280 - }); 274 + //FIXME User ejabberd roster when the username length limit bug is solved.
  275 + // $(iq).find('item').each(function () {
  276 + // var jid = $(this).attr('jid');
  277 + // profiles.push(getIdentifier(jid));
  278 + // var name = $(this).attr('name') || jid;
  279 + // var jid_id = Jabber.jid_to_id(jid);
  280 + // contacts_to_insert[jid] = name;
  281 + // });
281 282
282 - //TODO Add groups through roster too...  
283 $.ajax({ 283 $.ajax({
284 - url: '/chat/roster_groups',  
285 - dataType: 'json', 284 + url: '/chat/rosters',
  285 + dataType: 'json,'
286 success: function(data){ 286 success: function(data){
287 - $(data).each(function(index, room){ 287 + $(data.friends).each(function(index, friend){
  288 + var jid = friend.jid;
  289 + profiles.push(getIdentifier(jid));
  290 + var name = friend.name;
  291 + var jid_id = Jabber.jid_to_id(jid);
  292 + contacts_to_insert[jid] = name;
  293 + });
  294 +
  295 + $(data.rooms).each(function(index, room){
288 profiles.push(getIdentifier(room.jid)); 296 profiles.push(getIdentifier(room.jid));
289 var jid_id = Jabber.jid_to_id(room.jid); 297 var jid_id = Jabber.jid_to_id(room.jid);
290 Jabber.jids[jid_id] = {jid: room.jid, name: room.name, type: 'groupchat'}; 298 Jabber.jids[jid_id] = {jid: room.jid, name: room.name, type: 'groupchat'};
291 //FIXME This must check on session if the user is inside the room... 299 //FIXME This must check on session if the user is inside the room...
292 groups_to_insert.push(room.jid); 300 groups_to_insert.push(room.jid);
293 -  
294 }); 301 });
  302 +
295 $.getJSON('/chat/avatars', {profiles: profiles}, function(data) { 303 $.getJSON('/chat/avatars', {profiles: profiles}, function(data) {
296 for(identifier in data) 304 for(identifier in data)
297 Jabber.avatars[identifier] = data[identifier]; 305 Jabber.avatars[identifier] = data[identifier];
@@ -319,7 +327,6 @@ jQuery(function($) { @@ -319,7 +327,6 @@ jQuery(function($) {
319 console.log(data); 327 console.log(data);
320 }, 328 },
321 }); 329 });
322 -  
323 }, 330 },
324 331
325 // NOTE: cause Noosfero store's rosters in database based on friendship relation between people 332 // NOTE: cause Noosfero store's rosters in database based on friendship relation between people