@@ -145,6 +145,7 @@ def emit_via_redis(event, message, room): | |||||
try: | try: | ||||
r.publish('events', frappe.as_json({'event': event, 'message': message, 'room': room})) | r.publish('events', frappe.as_json({'event': event, 'message': message, 'room': room})) | ||||
except redis.exceptions.ConnectionError: | except redis.exceptions.ConnectionError: | ||||
# print frappe.get_traceback() | |||||
pass | pass | ||||
def put_log(line_no, line, task_id=None): | def put_log(line_no, line, task_id=None): | ||||
@@ -42,7 +42,8 @@ class Comment(Document): | |||||
message['broadcast'] = True | message['broadcast'] = True | ||||
frappe.publish_realtime('new_message', message) | frappe.publish_realtime('new_message', message) | ||||
else: | 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: | else: | ||||
frappe.publish_realtime('new_comment', self.as_dict(), doctype= self.comment_doctype, | frappe.publish_realtime('new_comment', self.as_dict(), doctype= self.comment_doctype, | ||||
docname = self.comment_docname) | docname = self.comment_docname) | ||||
@@ -41,6 +41,7 @@ frappe.desk.pages.Messages = Class.extend({ | |||||
}, | }, | ||||
setup_realtime: function() { | setup_realtime: function() { | ||||
var me = this; | |||||
frappe.realtime.on('new_message', function(comment) { | frappe.realtime.on('new_message', function(comment) { | ||||
if(comment.modified_by !== user) { | if(comment.modified_by !== user) { | ||||
frappe.utils.notify(__("Message from {0}", [comment.comment_by_fullname]), comment.comment); | 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') { | if (frappe.get_route()[0] === 'messages') { | ||||
var current_contact = $(cur_page.page).find('[data-contact]').data('contact'); | var current_contact = $(cur_page.page).find('[data-contact]').data('contact'); | ||||
var on_broadcast_page = current_contact === user; | var on_broadcast_page = current_contact === user; | ||||
if (current_contact == comment.owner || (on_broadcast_page && comment.broadcast)) { | |||||
var $row = $('<div class="list-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 = $('<div class="list-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() { | make_sidebar: function() { | ||||
var me = this; | var me = this; | ||||
return frappe.call({ | return frappe.call({ | ||||
@@ -124,7 +129,9 @@ frappe.desk.pages.Messages = Class.extend({ | |||||
}, | }, | ||||
callback:function(r,rt) { | callback:function(r,rt) { | ||||
textarea.val(''); | textarea.val(''); | ||||
me.list.run(); | |||||
if (!r.exc) { | |||||
me.prepend_comment(r.message); | |||||
} | |||||
}, | }, | ||||
btn: this | btn: this | ||||
}); | }); | ||||
@@ -89,6 +89,8 @@ def post(txt, contact, parenttype=None, notify=False, subject=None): | |||||
else: | else: | ||||
_notify(contact, txt, subject) | _notify(contact, txt, subject) | ||||
return d | |||||
@frappe.whitelist() | @frappe.whitelist() | ||||
def delete(arg=None): | def delete(arg=None): | ||||
frappe.get_doc("Comment", frappe.form_dict['name']).delete() | frappe.get_doc("Comment", frappe.form_dict['name']).delete() | ||||
@@ -25,10 +25,13 @@ io.on('connection', function(socket){ | |||||
if (get_hostname(socket.request.headers.host) != get_hostname(socket.request.headers.origin)) { | if (get_hostname(socket.request.headers.host) != get_hostname(socket.request.headers.origin)) { | ||||
return; | return; | ||||
} | } | ||||
// console.log("connection!"); | |||||
var sid = cookie.parse(socket.request.headers.cookie).sid | var sid = cookie.parse(socket.request.headers.cookie).sid | ||||
if(!sid) { | if(!sid) { | ||||
return; | return; | ||||
} | } | ||||
// console.log("firing get_user_info"); | |||||
request.post(get_url(socket, '/api/method/frappe.async.get_user_info')) | request.post(get_url(socket, '/api/method/frappe.async.get_user_info')) | ||||
.type('form') | .type('form') | ||||
.send({ | .send({ | ||||
@@ -45,16 +48,19 @@ io.on('connection', function(socket){ | |||||
socket.join(room); | socket.join(room); | ||||
socket.join(get_site_room(socket)); | socket.join(get_site_room(socket)); | ||||
} | } | ||||
}) | |||||
}); | |||||
socket.on('task_subscribe', function(task_id) { | socket.on('task_subscribe', function(task_id) { | ||||
var room = 'task:' + task_id; | var room = 'task:' + task_id; | ||||
socket.join(room); | socket.join(room); | ||||
}) | |||||
}); | |||||
socket.on('progress_subscribe', function(task_id) { | socket.on('progress_subscribe', function(task_id) { | ||||
var room = 'task_progress:' + task_id; | var room = 'task_progress:' + task_id; | ||||
socket.join(room); | socket.join(room); | ||||
send_existing_lines(task_id, socket); | send_existing_lines(task_id, socket); | ||||
}) | |||||
}); | |||||
socket.on('doc_subscribe', function(doctype, docname) { | socket.on('doc_subscribe', function(doctype, docname) { | ||||
// console.log('trying to subscribe', doctype, docname) | // console.log('trying to subscribe', doctype, docname) | ||||
request.post(get_url(socket, '/api/method/frappe.async.can_subscribe_doc')) | 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) { | socket.on('doc_unsubscribe', function(doctype, docname) { | ||||
var room = get_doc_room(socket, doctype, docname); | var room = get_doc_room(socket, doctype, docname); | ||||
socket.leave(room); | socket.leave(room); | ||||
}); | }); | ||||
// socket.on('disconnect', function (arguments) { | |||||
// console.log("user disconnected", arguments); | |||||
// }); | |||||
}); | }); | ||||
function send_existing_lines(task_id, socket) { | function send_existing_lines(task_id, socket) { | ||||