From 41d26bb77ee4cfd1bb0e9ec3eb93647085920bdf Mon Sep 17 00:00:00 2001 From: Rodrigo Souto Date: Mon, 1 Aug 2016 20:48:43 -0300 Subject: [PATCH] chat-workarounds: get roster groups and friends from noosfero --- app/controllers/public/chat_controller.rb | 7 +++++-- public/javascripts/chat.js | 33 ++++++++++++++++++++------------- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/app/controllers/public/chat_controller.rb b/app/controllers/public/chat_controller.rb index a673b27..6aeb7be 100644 --- a/app/controllers/public/chat_controller.rb +++ b/app/controllers/public/chat_controller.rb @@ -113,8 +113,11 @@ class ChatController < PublicController end #TODO Ideally this is done through roster table on ejabberd. - def roster_groups - render :text => user.memberships.map {|m| {:jid => m.jid, :name => m.name}}.to_json + def rosters + rooms = user.memberships.map {|m| {:jid => m.jid, :name => m.name}} + friends = user.friends.map {|f| {:jid => f.jid, :name => f.name}} + rosters = {:rooms => rooms, :friends => friends} + render :text => rosters.to_json end protected diff --git a/public/javascripts/chat.js b/public/javascripts/chat.js index fc787df..c06ab88 100644 --- a/public/javascripts/chat.js +++ b/public/javascripts/chat.js @@ -271,27 +271,35 @@ jQuery(function($) { var contacts_to_insert = {}; var groups_to_insert = []; - $(iq).find('item').each(function () { - var jid = $(this).attr('jid'); - profiles.push(getIdentifier(jid)); - var name = $(this).attr('name') || jid; - var jid_id = Jabber.jid_to_id(jid); - contacts_to_insert[jid] = name; - }); + //FIXME User ejabberd roster when the username length limit bug is solved. + // $(iq).find('item').each(function () { + // var jid = $(this).attr('jid'); + // profiles.push(getIdentifier(jid)); + // var name = $(this).attr('name') || jid; + // var jid_id = Jabber.jid_to_id(jid); + // contacts_to_insert[jid] = name; + // }); - //TODO Add groups through roster too... $.ajax({ - url: '/chat/roster_groups', - dataType: 'json', + url: '/chat/rosters', + dataType: 'json,' success: function(data){ - $(data).each(function(index, room){ + $(data.friends).each(function(index, friend){ + var jid = friend.jid; + profiles.push(getIdentifier(jid)); + var name = friend.name; + var jid_id = Jabber.jid_to_id(jid); + contacts_to_insert[jid] = name; + }); + + $(data.rooms).each(function(index, room){ profiles.push(getIdentifier(room.jid)); var jid_id = Jabber.jid_to_id(room.jid); Jabber.jids[jid_id] = {jid: room.jid, name: room.name, type: 'groupchat'}; //FIXME This must check on session if the user is inside the room... groups_to_insert.push(room.jid); - }); + $.getJSON('/chat/avatars', {profiles: profiles}, function(data) { for(identifier in data) Jabber.avatars[identifier] = data[identifier]; @@ -319,7 +327,6 @@ jQuery(function($) { console.log(data); }, }); - }, // NOTE: cause Noosfero store's rosters in database based on friendship relation between people -- libgit2 0.21.2