diff --git a/frappe/async.py b/frappe/async.py index 764c7d4dfe..f4539ecb48 100644 --- a/frappe/async.py +++ b/frappe/async.py @@ -145,6 +145,7 @@ def emit_via_redis(event, message, room): try: r.publish('events', frappe.as_json({'event': event, 'message': message, 'room': room})) except redis.exceptions.ConnectionError: + # print frappe.get_traceback() pass def put_log(line_no, line, task_id=None): diff --git a/frappe/core/doctype/comment/comment.py b/frappe/core/doctype/comment/comment.py index cca70fc6b4..6d798de258 100644 --- a/frappe/core/doctype/comment/comment.py +++ b/frappe/core/doctype/comment/comment.py @@ -42,7 +42,8 @@ class Comment(Document): message['broadcast'] = True frappe.publish_realtime('new_message', message) else: - frappe.publish_realtime('new_message', self.as_dict(), user=frappe.session.user) + # comment_docname contains the user who is addressed in the messages' page comment + frappe.publish_realtime('new_message', self.as_dict(), user=self.comment_docname) else: frappe.publish_realtime('new_comment', self.as_dict(), doctype= self.comment_doctype, docname = self.comment_docname) diff --git a/frappe/desk/page/messages/messages.js b/frappe/desk/page/messages/messages.js index 5142cde7ac..5d5a2911dd 100644 --- a/frappe/desk/page/messages/messages.js +++ b/frappe/desk/page/messages/messages.js @@ -41,6 +41,7 @@ frappe.desk.pages.Messages = Class.extend({ }, setup_realtime: function() { + var me = this; frappe.realtime.on('new_message', function(comment) { if(comment.modified_by !== user) { frappe.utils.notify(__("Message from {0}", [comment.comment_by_fullname]), comment.comment); @@ -48,16 +49,20 @@ frappe.desk.pages.Messages = Class.extend({ if (frappe.get_route()[0] === 'messages') { var current_contact = $(cur_page.page).find('[data-contact]').data('contact'); var on_broadcast_page = current_contact === user; - if (current_contact == comment.owner || (on_broadcast_page && comment.broadcast)) { - var $row = $('
'); - frappe.desk.pages.messages.list.data.unshift(comment); - frappe.desk.pages.messages.list.render_row($row, comment); - frappe.desk.pages.messages.list.parent.prepend($row); + if ((current_contact == comment.owner) || (on_broadcast_page && comment.broadcast)) { + me.prepend_comment(comment); } } }); }, + prepend_comment: function(comment) { + var $row = $('
'); + frappe.desk.pages.messages.list.data.unshift(comment); + frappe.desk.pages.messages.list.render_row($row, comment); + frappe.desk.pages.messages.list.$w.prepend($row); + }, + make_sidebar: function() { var me = this; return frappe.call({ @@ -124,7 +129,9 @@ frappe.desk.pages.Messages = Class.extend({ }, callback:function(r,rt) { textarea.val(''); - me.list.run(); + if (!r.exc) { + me.prepend_comment(r.message); + } }, btn: this }); diff --git a/frappe/desk/page/messages/messages.py b/frappe/desk/page/messages/messages.py index 9c050d8390..6fb86fd64a 100644 --- a/frappe/desk/page/messages/messages.py +++ b/frappe/desk/page/messages/messages.py @@ -89,6 +89,8 @@ def post(txt, contact, parenttype=None, notify=False, subject=None): else: _notify(contact, txt, subject) + return d + @frappe.whitelist() def delete(arg=None): frappe.get_doc("Comment", frappe.form_dict['name']).delete() diff --git a/socketio.js b/socketio.js index da672ad14b..970b8f7c34 100644 --- a/socketio.js +++ b/socketio.js @@ -25,10 +25,13 @@ io.on('connection', function(socket){ if (get_hostname(socket.request.headers.host) != get_hostname(socket.request.headers.origin)) { return; } + + // console.log("connection!"); var sid = cookie.parse(socket.request.headers.cookie).sid if(!sid) { return; } + // console.log("firing get_user_info"); request.post(get_url(socket, '/api/method/frappe.async.get_user_info')) .type('form') .send({ @@ -45,16 +48,19 @@ io.on('connection', function(socket){ socket.join(room); socket.join(get_site_room(socket)); } - }) + }); + socket.on('task_subscribe', function(task_id) { var room = 'task:' + task_id; socket.join(room); - }) + }); + socket.on('progress_subscribe', function(task_id) { var room = 'task_progress:' + task_id; socket.join(room); send_existing_lines(task_id, socket); - }) + }); + socket.on('doc_subscribe', function(doctype, docname) { // console.log('trying to subscribe', doctype, docname) request.post(get_url(socket, '/api/method/frappe.async.can_subscribe_doc')) @@ -73,10 +79,15 @@ io.on('connection', function(socket){ } }) }); + socket.on('doc_unsubscribe', function(doctype, docname) { var room = get_doc_room(socket, doctype, docname); socket.leave(room); }); + + // socket.on('disconnect', function (arguments) { + // console.log("user disconnected", arguments); + // }); }); function send_existing_lines(task_id, socket) {