summaryrefslogtreecommitdiff
path: root/addons/im_chat/static/src/js/im_chat.js
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2014-10-01 19:18:14 +0200
committerChristophe Simonis <chs@odoo.com>2014-10-01 19:18:14 +0200
commit709c9868de7c4ac4985ed4e0055ae3e3e49742ad (patch)
treee90227a947bddf47b3043fcbe8b99529a22aa7dd /addons/im_chat/static/src/js/im_chat.js
parent85f26244a71a0b9a7faa283d6d24fdde6bae899a (diff)
parente8831932464814ed5f9e3a0af33f98891a466417 (diff)
[MERGE] forward port of branch 8.0 up to e883193
Diffstat (limited to 'addons/im_chat/static/src/js/im_chat.js')
-rw-r--r--addons/im_chat/static/src/js/im_chat.js34
1 files changed, 21 insertions, 13 deletions
diff --git a/addons/im_chat/static/src/js/im_chat.js b/addons/im_chat/static/src/js/im_chat.js
index ef0656f7814..9962fdfebf9 100644
--- a/addons/im_chat/static/src/js/im_chat.js
+++ b/addons/im_chat/static/src/js/im_chat.js
@@ -1,6 +1,7 @@
(function(){
"use strict";
+
var _t = openerp._t;
var _lt = openerp._lt;
var QWeb = openerp.qweb;
@@ -99,10 +100,7 @@
if(session.state !== 'closed'){
conv = new im_chat.Conversation(this, this, session, this.options);
conv.appendTo($("body"));
- conv.on("destroyed", this, function() {
- delete this.sessions[session.uuid];
- this.calc_positions();
- });
+ conv.on("destroyed", this, _.bind(this.delete_session, this));
this.sessions[session.uuid] = conv;
this.calc_positions();
}
@@ -124,6 +122,10 @@
}
return conv;
},
+ delete_session: function(uuid){
+ delete this.sessions[uuid];
+ this.calc_positions();
+ },
received_message: function(message) {
var self = this;
var session_id = message.to_id[0];
@@ -250,11 +252,18 @@
load_history: function(){
var self = this;
if(this.loading_history){
- var domain = [["to_id.uuid", "=", this.get("session").uuid]];
- _.first(this.get("messages")) && domain.push(['id','<', _.first(this.get("messages")).id]);
- new openerp.Model("im_chat.message").call("search_read", [domain, ['id', 'create_date','to_id','from_id', 'type', 'message'], 0, NBR_LIMIT_HISTORY]).then(function(messages){
- self.insert_messages(messages);
- if(messages.length != NBR_LIMIT_HISTORY){
+ var data = {uuid: self.get("session").uuid, limit: NBR_LIMIT_HISTORY};
+ var lastid = _.first(this.get("messages")) ? _.first(this.get("messages")).id : false;
+ if(lastid){
+ data["last_id"] = lastid;
+ }
+ openerp.session.rpc("/im_chat/history", data).then(function(messages){
+ if(messages){
+ self.insert_messages(messages);
+ if(messages.length != NBR_LIMIT_HISTORY){
+ self.loading_history = false;
+ }
+ }else{
self.loading_history = false;
}
});
@@ -419,7 +428,7 @@
this.update_fold_state('closed');
},
destroy: function() {
- this.trigger("destroyed");
+ this.trigger("destroyed", this.get('session').uuid);
return this._super();
}
});
@@ -445,7 +454,7 @@
update_status: function(){
this.$(".oe_im_user_online").toggle(this.get('im_status') !== 'offline');
var img_src = (this.get('im_status') == 'away' ? '/im_chat/static/src/img/yellow.png' : '/im_chat/static/src/img/green.png');
- this.$(".oe_im_user_online").attr('src', openerp.session.server + img_src);
+ this.$(".oe_im_user_online").attr('src', img_src);
},
activate_user: function() {
this.trigger("activate_user", this.get("id"));
@@ -481,7 +490,6 @@
this.calc_box();
this.on("change:current_search", this, this.search_users_status);
- this.search_users_status();
// add a drag & drop listener
self.c_manager.on("im_session_activated", self, function(conv) {
@@ -566,7 +574,7 @@
var self = this;
var sessions = new openerp.web.Model("im_chat.session");
return sessions.call("session_get", [user_id]).then(function(session) {
- self.c_manager.activate_session(session, true);
+ self.c_manager.activate_session(session, true);
});
},
update_users_status: function(users_list){