Parcourir la source

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

version-14
Pratik Vyas il y a 10 ans
Parent
révision
b0d333d85b
3 fichiers modifiés avec 37 ajouts et 2 suppressions
  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 Voir le fichier

@@ -8,12 +8,27 @@ frappe.socket = {

frappe.socket.setup_listeners();
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) {
frappe.socket.socket.emit('task_subscribe', task_id);
frappe.socket.socket.emit('progress_subscribe', task_id);

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() {
frappe.socket.socket.on('task_status_change', function(data) {
@@ -37,6 +52,10 @@ frappe.socket = {
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) {
if(!data) {
@@ -58,3 +77,4 @@ frappe.socket = {
}

$(frappe.socket.init);


+ 6
- 0
frappe/public/js/legacy/form.js Voir le fichier

@@ -391,8 +391,13 @@ _f.Frm.prototype.refresh = function(docname) {
// load the record for the first time, if not loaded (call 'onload')
cur_frm.cscript.is_onload = false;
if(!this.opendocs[this.docname]) {
var me = this;
cur_frm.cscript.is_onload = true;
this.setnewdoc();
$(document).trigger("form-load", [this]);
$(this.page.wrapper).on('hide', function(e) {
$(document).trigger("form-unload", [me]);
})
} else {
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) {
return this.script_manager.get_handlers(fieldname, doctype || this.doctype, docname || this.docname)
}


+ 11
- 2
socketio.js Voir le fichier

@@ -37,10 +37,15 @@ io.on('connection', function(socket){
})
.end(function(err, res) {
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) {
@@ -65,3 +70,7 @@ subscriber.subscribe("events");
http.listen(3000, function(){
console.log('listening on *:3000');
});

function get_doc_room(doctype, docname) {
return 'doc:'+ doctype + '/' + docname;
}

Chargement…
Annuler
Enregistrer