Commit 8a1382428dd80ffb3f261a018c27b07020c1ec3c
Committed by
Rodrigo Souto
1 parent
e69496e7
Exists in
master
and in
21 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) { |