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 | 35 | render :nothing => true |
| 36 | 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 | 61 | protected |
| 39 | 62 | |
| 40 | 63 | def check_environment_feature | ... | ... |
public/javascripts/chat.js
| ... | ... | @@ -467,7 +467,7 @@ jQuery(function($) { |
| 467 | 467 | |
| 468 | 468 | // save presence_status as offline in Noosfero database when close or reload chat window |
| 469 | 469 | $(window).unload(function() { |
| 470 | - disconnect(); | |
| 470 | + //disconnect(); | |
| 471 | 471 | }); |
| 472 | 472 | |
| 473 | 473 | $('#chat-busy').click(function() { |
| ... | ... | @@ -508,12 +508,20 @@ jQuery(function($) { |
| 508 | 508 | var jid = $(this).attr('data-to'); |
| 509 | 509 | var body = $(this).val(); |
| 510 | 510 | body = body.stripScripts(); |
| 511 | + save_message(jid, body); | |
| 511 | 512 | Jabber.deliver_message(jid, body); |
| 512 | 513 | $(this).val(''); |
| 513 | 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 | 525 | // open new conversation or change to already opened tab |
| 518 | 526 | $('#buddy-list .buddy-list li a').live('click', function() { |
| 519 | 527 | var jid_id = $(this).attr('id'); |
| ... | ... | @@ -534,14 +542,18 @@ jQuery(function($) { |
| 534 | 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 | 546 | $('.conversation textarea:visible').focus(); |
| 539 | 547 | }); |
| 540 | 548 | |
| 541 | - $('.conversation .back').live('click', function() { | |
| 549 | + $('#chat .conversation .back').live('click', function() { | |
| 542 | 550 | $('#chat #chat-window .conversation').hide(); |
| 543 | 551 | }); |
| 544 | 552 | |
| 553 | + $('#chat .toolbar .back').live('click', function() { | |
| 554 | + $('#chat').hide('fast'); | |
| 555 | + }); | |
| 556 | + | |
| 545 | 557 | function create_conversation_tab(title, jid_id) { |
| 546 | 558 | var conversation_id = Jabber.conversation_prefix + jid_id; |
| 547 | 559 | var conversation = $('#' + conversation_id); |
| ... | ... | @@ -567,9 +579,30 @@ jQuery(function($) { |
| 567 | 579 | panel.find('.history').addClass('room'); |
| 568 | 580 | } |
| 569 | 581 | textarea.attr('data-to', jid); |
| 582 | + | |
| 583 | + recent_messages(jid); | |
| 584 | + | |
| 570 | 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 | 606 | function count_unread_messages(jid_id, hide) { |
| 574 | 607 | var unread = $('.buddy-list #'+jid_id+ ' .unread-messages'); |
| 575 | 608 | if (hide) { | ... | ... |