@@ -8,12 +8,27 @@ frappe.socket = { | |||||
frappe.socket.setup_listeners(); | frappe.socket.setup_listeners(); | ||||
frappe.socket.setup_reconnect(); | frappe.socket.setup_reconnect(); | ||||
$(document).on('form-load', function(e, frm) { | |||||
frappe.socket.doc_subscribe(frm.doctype, frm.docname); | |||||
}); | |||||
$(document).on('form-unload', function(e, frm) { | |||||
frappe.socket.doc_unsubscribe(frm.doctype, frm.docname); | |||||
}); | |||||
}, | }, | ||||
subscribe: function(task_id, opts) { | subscribe: function(task_id, opts) { | ||||
frappe.socket.socket.emit('task_subscribe', task_id); | frappe.socket.socket.emit('task_subscribe', task_id); | ||||
frappe.socket.socket.emit('progress_subscribe', task_id); | frappe.socket.socket.emit('progress_subscribe', task_id); | ||||
frappe.socket.open_tasks[task_id] = opts; | frappe.socket.open_tasks[task_id] = opts; | ||||
}, | |||||
doc_subscribe: function(doctype, docname) { | |||||
frappe.socket.socket.emit('doc_subscribe', doctype, docname); | |||||
frappe.socket.open_doc = {doctype: doctype, docname: docname}; | |||||
}, | |||||
doc_unsubscribe: function(doctype, docname) { | |||||
frappe.socket.socket.emit('doc_unsubscribe', doctype, docname); | |||||
frappe.socket.open_doc = null; | |||||
}, | }, | ||||
setup_listeners: function() { | setup_listeners: function() { | ||||
frappe.socket.socket.on('task_status_change', function(data) { | frappe.socket.socket.on('task_status_change', function(data) { | ||||
@@ -37,6 +52,10 @@ frappe.socket = { | |||||
frappe.socket.subscribe(task_id, opts); | frappe.socket.subscribe(task_id, opts); | ||||
}); | }); | ||||
}); | }); | ||||
if(frappe.socket.open_doc) { | |||||
frappe.socket.doc_subscribe(frappe.socket.open_doc.doctype, frappe.socket.open_doc.docname); | |||||
} | |||||
}, | }, | ||||
process_response: function(data, method) { | process_response: function(data, method) { | ||||
if(!data) { | if(!data) { | ||||
@@ -58,3 +77,4 @@ frappe.socket = { | |||||
} | } | ||||
$(frappe.socket.init); | $(frappe.socket.init); | ||||
@@ -391,8 +391,13 @@ _f.Frm.prototype.refresh = function(docname) { | |||||
// load the record for the first time, if not loaded (call 'onload') | // load the record for the first time, if not loaded (call 'onload') | ||||
cur_frm.cscript.is_onload = false; | cur_frm.cscript.is_onload = false; | ||||
if(!this.opendocs[this.docname]) { | if(!this.opendocs[this.docname]) { | ||||
var me = this; | |||||
cur_frm.cscript.is_onload = true; | cur_frm.cscript.is_onload = true; | ||||
this.setnewdoc(); | this.setnewdoc(); | ||||
$(document).trigger("form-load", [this]); | |||||
$(this.page.wrapper).on('hide', function(e) { | |||||
$(document).trigger("form-unload", [me]); | |||||
}) | |||||
} else { | } else { | ||||
this.render_form(is_a_different_doc); | this.render_form(is_a_different_doc); | ||||
} | } | ||||
@@ -815,3 +820,4 @@ _f.Frm.prototype.validate_form_action = function(action) { | |||||
_f.Frm.prototype.get_handlers = function(fieldname, doctype, docname) { | _f.Frm.prototype.get_handlers = function(fieldname, doctype, docname) { | ||||
return this.script_manager.get_handlers(fieldname, doctype || this.doctype, docname || this.docname) | return this.script_manager.get_handlers(fieldname, doctype || this.doctype, docname || this.docname) | ||||
} | } | ||||
@@ -37,10 +37,15 @@ io.on('connection', function(socket){ | |||||
}) | }) | ||||
.end(function(err, res) { | .end(function(err, res) { | ||||
if(res.status == 200) { | if(res.status == 200) { | ||||
socket.join('doc:'+ doctype + '/' + docname); | |||||
var room = get_doc_room(doctype, docname); | |||||
socket.join(room); | |||||
} | } | ||||
}) | }) | ||||
}) | |||||
}); | |||||
socket.on('doc_unsubscribe', function(doctype, docname) { | |||||
var room = get_doc_room(doctype, docname); | |||||
socket.leave(room); | |||||
}); | |||||
}); | }); | ||||
function send_existing_lines(task_id, socket) { | function send_existing_lines(task_id, socket) { | ||||
@@ -65,3 +70,7 @@ subscriber.subscribe("events"); | |||||
http.listen(3000, function(){ | http.listen(3000, function(){ | ||||
console.log('listening on *:3000'); | console.log('listening on *:3000'); | ||||
}); | }); | ||||
function get_doc_room(doctype, docname) { | |||||
return 'doc:'+ doctype + '/' + docname; | |||||
} |