From b50c08eefeaa8a89b738dfdbca075034f3b06f16 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Wed, 16 Jan 2013 17:16:24 +0100 Subject: [PATCH] wip bzr revid: nicolas.vanhoren@openerp.com-20130116161624-k2at3y08kfeklrjb --- .../static/ext/static/audio/Ting.mp3 | Bin 0 -> 17087 bytes .../static/ext/static/audio/Ting.ogg | Bin 0 -> 12568 bytes .../static/ext/static/js/livesupport.js | 215 +++++++++++++++++- .../ext/static/js/livesupport_templates.html | 33 +++ 4 files changed, 242 insertions(+), 6 deletions(-) create mode 100644 addons/live_support/static/ext/static/audio/Ting.mp3 create mode 100644 addons/live_support/static/ext/static/audio/Ting.ogg create mode 100644 addons/live_support/static/ext/static/js/livesupport_templates.html diff --git a/addons/live_support/static/ext/static/audio/Ting.mp3 b/addons/live_support/static/ext/static/audio/Ting.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..6fd090a89ce6c3391a36b3f1fb94d3679a0dd7fa GIT binary patch literal 17087 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 literal 0 HcmV?d00001 diff --git a/addons/live_support/static/ext/static/js/livesupport.js b/addons/live_support/static/ext/static/js/livesupport.js index 658b9980aa6..988bb05a363 100644 --- a/addons/live_support/static/ext/static/js/livesupport.js +++ b/addons/live_support/static/ext/static/js/livesupport.js @@ -1,15 +1,218 @@ -define(["nova", "jquery", "underscore", "oeclient"], function(nova, $, _, oeclient) { +define(["nova", "jquery", "underscore", "oeclient", "require"], function(nova, $, _, oeclient, require) { var livesupport = {}; + var te = new nova.TemplateEngine(); + var connection; + livesupport.main = function(server_url, db, login, password) { - console.log("hello"); - var connection = new oeclient.Connection(new oeclient.JsonpRPCConnector(server_url), db, login, password); - var userModel = connection.getModel("res.users"); - userModel.call("search", [[["login", "=", "admin"]]]).then(function(result) { - console.log(result); + te.loadFile(require.toUrl("./livesupport_templates.html")).then(function() { + connection = new oeclient.Connection(new oeclient.JsonpRPCConnector(server_url), db, login, password); + // don't know }); }; + var ERROR_DELAY = 5000; + + livesupport.ImUser = nova.Class.$extend({ + __include__: [nova.DynamicProperties], + __init__: function(parent, user_rec) { + nova.DynamicProperties.__init__.call(this, parent); + //user_rec.image_url = instance.session.url('/web/binary/image', {model:'res.users', field: 'image_small', id: user_rec.id}); + this.set(user_rec); + this.set("watcher_count", 0); + this.on("change:watcher_count", this, function() { + if (this.get("watcher_count") === 0) + this.destroy(); + }); + }, + destroy: function() { + this.trigger("destroyed"); + nova.DynamicProperties.destroy.call(this); + }, + add_watcher: function() { + this.set("watcher_count", this.get("watcher_count") + 1); + }, + remove_watcher: function() { + this.set("watcher_count", this.get("watcher_count") - 1); + }, + }); + + livesupport.ConversationManager = nova.Class.$extend({ + __include__: [nova.DynamicProperties], + init: function(parent) { + nova.DynamicProperties.__init__.call(this, parent); + this.set("right_offset", 0); + this.conversations = []; + this.users = {}; + this.on("change:right_offset", this, this.calc_positions); + this.set("window_focus", true); + this.set("waiting_messages", 0); + this.focus_hdl = _.bind(function() { + this.set("window_focus", true); + }, this); + $(window).bind("focus", this.focus_hdl); + this.blur_hdl = _.bind(function() { + this.set("window_focus", false); + }, this); + $(window).bind("blur", this.blur_hdl); + this.on("change:window_focus", this, this.window_focus_change); + this.window_focus_change(); + this.on("change:waiting_messages", this, this.messages_change); + this.messages_change(); + this.create_ting(); + }, + create_ting: function() { + this.ting = new Audio(new Audio().canPlayType("audio/ogg; codecs=vorbis") ? + require.toUrl("../audio/Ting.ogg") : + require.toUrl("../audio/Ting.mp3") + )); + }, + window_focus_change: function() { + if (this.get("window_focus")) { + this.set("waiting_messages", 0); + } + }, + messages_change: function() { + /*if (! instance.webclient.set_title_part) + return; + instance.webclient.set_title_part("im_messages", this.get("waiting_messages") === 0 ? undefined : + _.str.sprintf(_t("%d Messages"), this.get("waiting_messages")));*/ + }, + set_me: function(me) { + this.me = me; + }, + activate_user: function(user) { + if (this.users[user.get('id')]) { + return this.users[user.get('id')]; + } + var conv = new livesupport.Conversation(this, user, this.me); + conv.appendTo($("body")); + conv.on("destroyed", this, function() { + this.conversations = _.without(this.conversations, conv); + delete this.users[conv.user.get('id')]; + this.calc_positions(); + }); + this.conversations.push(conv); + this.users[user.get('id')] = conv; + this.calc_positions(); + return conv; + }, + received_message: function(message, user) { + if (! this.get("window_focus")) { + this.set("waiting_messages", this.get("waiting_messages") + 1); + this.ting.play(); + this.create_ting(); + } + var conv = this.activate_user(user); + conv.received_message(message); + }, + calc_positions: function() { + var current = this.get("right_offset"); + _.each(_.range(this.conversations.length), function(i) { + this.conversations[i].set("right_position", current); + current += this.conversations[i].$().outerWidth(true); + }, this); + }, + destroy: function() { + $(window).unbind("blur", this.blur_hdl); + $(window).unbind("focus", this.focus_hdl); + nova.DynamicProperties.destroy.call(this); + }, + }); + + livesupport.Conversation = instance.web.Widget.extend({ + tagClass: "oe_im_chatview", + events: { + "keydown input": "send_message", + "click .oe_im_chatview_close": "destroy", + "click .oe_im_chatview_header": "show_hide", + }, + init: function(parent, user, me) { + this._super(parent); + this.me = me; + this.user = user; + this.user.add_watcher(); + this.set("right_position", 0); + this.shown = true; + }, + render: function() { + this.$().append(te.conversation({widget: this})); + var change_status = function() { + this.$().toggleClass("oe_im_chatview_disconnected_status", this.user.get("im_status") === false); + this.$(".oe_im_chatview_online").toggle(this.user.get("im_status") === true); + this._go_bottom(); + }; + this.user.on("change:im_status", this, change_status); + change_status.call(this); + + this.on("change:right_position", this, this.calc_pos); + this.full_height = this.$().height(); + this.calc_pos(); + }, + show_hide: function() { + if (this.shown) { + this.$().animate({ + height: this.$(".oe_im_chatview_header").outerHeight(), + }); + } else { + this.$().animate({ + height: this.full_height, + }); + } + this.shown = ! this.shown; + }, + calc_pos: function() { + this.$().css("right", this.get("right_position")); + }, + received_message: function(message) { + this._add_bubble(this.user, message.message, message.date); + }, + send_message: function(e) { + if(e && e.which !== 13) { + return; + } + var mes = this.$("input").val(); + this.$("input").val(""); + var send_it = _.bind(function() { + var model = new connection.getModel("im.message"); + return model.call("post", [mes, this.user.get('id')], {context: {}}); + }, this); + var tries = 0; + send_it().then(_.bind(function() { + this._add_bubble(this.me, mes, new Date()); + }, this), function(error, e) { + e.preventDefault(); + tries += 1; + if (tries < 3) + return send_it(); + }); + }, + _add_bubble: function(user, item, date) { + var items = [item]; + if (user === this.last_user) { + this.last_bubble.remove(); + items = this.last_items.concat(items); + } + this.last_user = user; + this.last_items = items; + date = "" + date; // TODO + + this.last_bubble = $(te.conversation_bubble({"items": items, "user": user, "time": date})); + $(this.$(".oe_im_chatview_content").children()[0]).append(this.last_bubble); + this._go_bottom(); + }, + _go_bottom: function() { + this.$(".oe_im_chatview_content").scrollTop($(this.$(".oe_im_chatview_content").children()[0]).height()); + }, + destroy: function() { + this.user.remove_watcher(); + this.trigger("destroyed"); + return this._super(); + }, + }); + + + return livesupport; }); diff --git a/addons/live_support/static/ext/static/js/livesupport_templates.html b/addons/live_support/static/ext/static/js/livesupport_templates.html new file mode 100644 index 00000000000..8fa0b1a2170 --- /dev/null +++ b/addons/live_support/static/ext/static/js/livesupport_templates.html @@ -0,0 +1,33 @@ + + +
+
+ + + +
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+
+ +
+
+
+
+
+
\ No newline at end of file