Commit d45f8eba1303de9699e61c3529e533b4b8d349d7

Authored by Rodrigo Souto
1 parent f0426bdc

Move conversation to the top after message

Conflicts:
	public/javascripts/chat.js
app/controllers/public/chat_controller.rb
@@ -65,7 +65,7 @@ class ChatController < PublicController @@ -65,7 +65,7 @@ class ChatController < PublicController
65 65
66 def recent_conversations 66 def recent_conversations
67 conversations_order = ActiveRecord::Base.connection.execute("select profiles.identifier from profiles inner join (select distinct r.id as id, MAX(r.created_at) as created_at from (select from_id, to_id, created_at, (case when from_id=#{user.id} then to_id else from_id end) as id from chat_messages where from_id=#{user.id} or to_id=#{user.id}) as r group by id order by created_at desc, id) as t on profiles.id=t.id order by t.created_at desc").entries.map {|e| e['identifier']} 67 conversations_order = ActiveRecord::Base.connection.execute("select profiles.identifier from profiles inner join (select distinct r.id as id, MAX(r.created_at) as created_at from (select from_id, to_id, created_at, (case when from_id=#{user.id} then to_id else from_id end) as id from chat_messages where from_id=#{user.id} or to_id=#{user.id}) as r group by id order by created_at desc, id) as t on profiles.id=t.id order by t.created_at desc").entries.map {|e| e['identifier']}
68 - render :json => conversations_order.to_json 68 + render :json => {:order => conversations_order.reverse, :domain => environment.default_hostname.gsub('.','-')}.to_json
69 end 69 end
70 70
71 protected 71 protected
public/javascripts/chat.js
@@ -450,6 +450,8 @@ jQuery(function($) { @@ -450,6 +450,8 @@ jQuery(function($) {
450 .c('active', {xmlns: Strophe.NS.CHAT_STATES}); 450 .c('active', {xmlns: Strophe.NS.CHAT_STATES});
451 Jabber.connection.send(message); 451 Jabber.connection.send(message);
452 Jabber.show_message(jid, $own_name, escape_html(body), 'self', Strophe.getNodeFromJid(Jabber.connection.jid)); 452 Jabber.show_message(jid, $own_name, escape_html(body), 'self', Strophe.getNodeFromJid(Jabber.connection.jid));
  453 + Archive.register(jid, Jabber.connection.jid, body);
  454 + move_conversation_to_the_top(jid);
453 }, 455 },
454 456
455 is_a_room: function(jid_id) { 457 is_a_room: function(jid_id) {
@@ -613,10 +615,29 @@ jQuery(function($) { @@ -613,10 +615,29 @@ jQuery(function($) {
613 Jabber.show_message(jid, from['name'], body, who, from['id'], date, offset); 615 Jabber.show_message(jid, from['name'], body, who, from['id'], date, offset);
614 }); 616 });
615 stop_fetching('.history'); 617 stop_fetching('.history');
  618 + console.log('Done fetching...');
616 ensure_scroll(jid, offset); 619 ensure_scroll(jid, offset);
617 }); 620 });
618 } 621 }
619 622
  623 + function move_conversation_to_the_top(jid) {
  624 + id = Jabber.jid_to_id(jid);
  625 + console.log('Moving ' + id);
  626 + console.log(id);
  627 + var link = $('#'+id);
  628 + var li = link.closest('li');
  629 + var ul = link.closest('ul');
  630 + ul.prepend(li);
  631 + }
  632 +
  633 + function recent_conversations() {
  634 + $.getJSON('/chat/recent_conversations', {}, function(data) {
  635 + $.each(data['order'], function(i, identifier) {
  636 + move_conversation_to_the_top(identifier+'-'+data['domain']);
  637 + })
  638 + })
  639 + }
  640 +
620 function count_unread_messages(jid_id, hide) { 641 function count_unread_messages(jid_id, hide) {
621 var unread = $('.buddies #'+jid_id+ ' .unread-messages'); 642 var unread = $('.buddies #'+jid_id+ ' .unread-messages');
622 if (hide) { 643 if (hide) {