Commit 8a1382428dd80ffb3f261a018c27b07020c1ec3c
Committed by
Rodrigo Souto
1 parent
e69496e7
Exists in
master
and in
27 other branches
Save chat history
Conflicts: app/controllers/public/chat_controller.rb Conflicts: app/controllers/public/chat_controller.rb
Showing
4 changed files
with
77 additions
and
3 deletions
Show diff stats
app/controllers/public/chat_controller.rb
@@ -35,6 +35,29 @@ class ChatController < PublicController | @@ -35,6 +35,29 @@ class ChatController < PublicController | ||
35 | render :nothing => true | 35 | render :nothing => true |
36 | end | 36 | end |
37 | 37 | ||
38 | + def save_message | ||
39 | + to = environment.profiles.find_by_identifier(params[:to]) | ||
40 | + body = params[:body] | ||
41 | + | ||
42 | + ChatMessage.create!(:to => to, :from => user, :body => body) | ||
43 | + render :text => 'ok' | ||
44 | + end | ||
45 | + | ||
46 | + def recent_messages | ||
47 | + other = environment.profiles.find_by_identifier(params[:identifier]) | ||
48 | + messages = ChatMessage.where('(to_id=:other and from_id=:me) or (to_id=:me and from_id=:other)', {:me => user.id, :other => other.id}).order('created_at DESC').includes(:to, :from).limit(20) | ||
49 | + | ||
50 | + messages = messages.map do |message| | ||
51 | + { | ||
52 | + :body => message.body, | ||
53 | + :to => {:id => message.to.identifier, :name => message.to.name, :type => message.to.type}, | ||
54 | + :from => {:id => message.from.identifier, :name => message.from.name, :type => message.from.type}, | ||
55 | + :created_at => message.created_at | ||
56 | + } | ||
57 | + end | ||
58 | + render :json => messages.reverse | ||
59 | + end | ||
60 | + | ||
38 | protected | 61 | protected |
39 | 62 | ||
40 | def check_environment_feature | 63 | def check_environment_feature |
public/javascripts/chat.js
@@ -467,7 +467,7 @@ jQuery(function($) { | @@ -467,7 +467,7 @@ jQuery(function($) { | ||
467 | 467 | ||
468 | // save presence_status as offline in Noosfero database when close or reload chat window | 468 | // save presence_status as offline in Noosfero database when close or reload chat window |
469 | $(window).unload(function() { | 469 | $(window).unload(function() { |
470 | - disconnect(); | 470 | + //disconnect(); |
471 | }); | 471 | }); |
472 | 472 | ||
473 | $('#chat-busy').click(function() { | 473 | $('#chat-busy').click(function() { |
@@ -508,12 +508,20 @@ jQuery(function($) { | @@ -508,12 +508,20 @@ jQuery(function($) { | ||
508 | var jid = $(this).attr('data-to'); | 508 | var jid = $(this).attr('data-to'); |
509 | var body = $(this).val(); | 509 | var body = $(this).val(); |
510 | body = body.stripScripts(); | 510 | body = body.stripScripts(); |
511 | + save_message(jid, body); | ||
511 | Jabber.deliver_message(jid, body); | 512 | Jabber.deliver_message(jid, body); |
512 | $(this).val(''); | 513 | $(this).val(''); |
513 | return false; | 514 | return false; |
514 | } | 515 | } |
515 | }); | 516 | }); |
516 | 517 | ||
518 | + function save_message(jid, body) { | ||
519 | + $.post('/chat/save_message', { | ||
520 | + to: getIdentifier(jid), | ||
521 | + body: body | ||
522 | + }); | ||
523 | + } | ||
524 | + | ||
517 | // open new conversation or change to already opened tab | 525 | // open new conversation or change to already opened tab |
518 | $('#buddy-list .buddy-list li a').live('click', function() { | 526 | $('#buddy-list .buddy-list li a').live('click', function() { |
519 | var jid_id = $(this).attr('id'); | 527 | var jid_id = $(this).attr('id'); |
@@ -534,14 +542,18 @@ jQuery(function($) { | @@ -534,14 +542,18 @@ jQuery(function($) { | ||
534 | $('.conversation textarea:visible').val(val + name + ', ').focus(); | 542 | $('.conversation textarea:visible').val(val + name + ', ').focus(); |
535 | }); | 543 | }); |
536 | 544 | ||
537 | - $('.conversation .history').live('click', function() { | 545 | + $('#chat .conversation .history').live('click', function() { |
538 | $('.conversation textarea:visible').focus(); | 546 | $('.conversation textarea:visible').focus(); |
539 | }); | 547 | }); |
540 | 548 | ||
541 | - $('.conversation .back').live('click', function() { | 549 | + $('#chat .conversation .back').live('click', function() { |
542 | $('#chat #chat-window .conversation').hide(); | 550 | $('#chat #chat-window .conversation').hide(); |
543 | }); | 551 | }); |
544 | 552 | ||
553 | + $('#chat .toolbar .back').live('click', function() { | ||
554 | + $('#chat').hide('fast'); | ||
555 | + }); | ||
556 | + | ||
545 | function create_conversation_tab(title, jid_id) { | 557 | function create_conversation_tab(title, jid_id) { |
546 | var conversation_id = Jabber.conversation_prefix + jid_id; | 558 | var conversation_id = Jabber.conversation_prefix + jid_id; |
547 | var conversation = $('#' + conversation_id); | 559 | var conversation = $('#' + conversation_id); |
@@ -567,9 +579,30 @@ jQuery(function($) { | @@ -567,9 +579,30 @@ jQuery(function($) { | ||
567 | panel.find('.history').addClass('room'); | 579 | panel.find('.history').addClass('room'); |
568 | } | 580 | } |
569 | textarea.attr('data-to', jid); | 581 | textarea.attr('data-to', jid); |
582 | + | ||
583 | + recent_messages(jid); | ||
584 | + | ||
570 | return panel; | 585 | return panel; |
571 | } | 586 | } |
572 | 587 | ||
588 | + function recent_messages(jid) { | ||
589 | + $.getJSON('/chat/recent_messages', { | ||
590 | + identifier: getIdentifier(jid) | ||
591 | + }, function(data) { | ||
592 | + $.each(data, function(i, message) { | ||
593 | + var body = message['body']; | ||
594 | + var from = message['from']; | ||
595 | + var to = message['to']; | ||
596 | + | ||
597 | + if(from['id']!=getCurrentIdentifier()) { | ||
598 | + Jabber.show_message(from['id']+'@127.0.0.1', from['name'], body, 'other', from['id']); | ||
599 | + } else { | ||
600 | + Jabber.show_message(to['id']+'@127.0.0.1', $own_name, body, 'self', to['id']); | ||
601 | + } | ||
602 | + }); | ||
603 | + }); | ||
604 | + } | ||
605 | + | ||
573 | function count_unread_messages(jid_id, hide) { | 606 | function count_unread_messages(jid_id, hide) { |
574 | var unread = $('.buddy-list #'+jid_id+ ' .unread-messages'); | 607 | var unread = $('.buddy-list #'+jid_id+ ' .unread-messages'); |
575 | if (hide) { | 608 | if (hide) { |