Browse Source

Join and leave doc room on form-load and form-unload

version-14
Pratik Vyas 10 years ago
parent
commit
b0d333d85b
3 changed files with 37 additions and 2 deletions
  1. +20
    -0
      frappe/public/js/frappe/socket.js
  2. +6
    -0
      frappe/public/js/legacy/form.js
  3. +11
    -2
      socketio.js

+ 20
- 0
frappe/public/js/frappe/socket.js View File

@@ -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);


+ 6
- 0
frappe/public/js/legacy/form.js View File

@@ -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)
} }


+ 11
- 2
socketio.js View File

@@ -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;
}

Loading…
Cancel
Save