refactor(socketio): docinfo_update
- Rename event from `update_docinfo_for_{}_{}` to docinfo_update
- Separate rooms for separate documents generated on requirement
- Check if user has access to doc before sharing docinfo
This commit is contained in:
parent
9931c3af04
commit
97d2eab3e2
6 changed files with 34 additions and 6 deletions
|
|
@ -44,8 +44,10 @@ class Comment(Document):
|
|||
return
|
||||
|
||||
frappe.publish_realtime(
|
||||
f"update_docinfo_for_{self.reference_doctype}_{self.reference_name}",
|
||||
"docinfo_update",
|
||||
{"doc": self.as_dict(), "key": key, "action": action},
|
||||
doctype=self.reference_doctype,
|
||||
docname=self.reference_name,
|
||||
after_commit=True,
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -233,8 +233,10 @@ class Communication(Document, CommunicationEmailMixin):
|
|||
|
||||
def notify_change(self, action):
|
||||
frappe.publish_realtime(
|
||||
f"update_docinfo_for_{self.reference_doctype}_{self.reference_name}",
|
||||
"docinfo_update",
|
||||
{"doc": self.as_dict(), "key": "communications", "action": action},
|
||||
doctype=self.reference_doctype,
|
||||
docname=self.reference_name,
|
||||
after_commit=True,
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -1942,10 +1942,9 @@ frappe.ui.form.Form = class FrappeForm {
|
|||
setup_docinfo_change_listener() {
|
||||
let doctype = this.doctype;
|
||||
let docname = this.docname;
|
||||
let listener_name = `update_docinfo_for_${doctype}_${docname}`;
|
||||
// to avoid duplicates
|
||||
frappe.realtime.off(listener_name);
|
||||
frappe.realtime.on(listener_name, ({ doc, key, action = "update" }) => {
|
||||
|
||||
frappe.socketio.docinfo_subscribe(doctype, docname);
|
||||
frappe.realtime.on("docinfo_update", ({ doc, key, action = "update" }) => {
|
||||
let doc_list = frappe.model.docinfo[doctype][docname][key] || [];
|
||||
if (action === "add") {
|
||||
frappe.model.docinfo[doctype][docname][key].push(doc);
|
||||
|
|
|
|||
|
|
@ -152,6 +152,9 @@ frappe.socketio = {
|
|||
frappe.socketio.socket.emit("doc_subscribe", doctype, docname);
|
||||
frappe.socketio.open_docs.push({ doctype: doctype, docname: docname });
|
||||
},
|
||||
docinfo_subscribe: function (doctype, docname) {
|
||||
frappe.socketio.socket.emit("docinfo_update", doctype, docname);
|
||||
},
|
||||
doc_unsubscribe: function (doctype, docname) {
|
||||
frappe.socketio.socket.emit("doc_unsubscribe", doctype, docname);
|
||||
frappe.socketio.open_docs = $.filter(frappe.socketio.open_docs, function (d) {
|
||||
|
|
|
|||
|
|
@ -51,6 +51,8 @@ def publish_realtime(
|
|||
elif event == "list_update":
|
||||
doctype = doctype or message.get("doctype")
|
||||
room = get_list_room(doctype)
|
||||
elif event == "docinfo_update":
|
||||
room = get_docinfo_room(doctype, docname)
|
||||
|
||||
if not task_id and hasattr(frappe.local, "task_id"):
|
||||
task_id = frappe.local.task_id
|
||||
|
|
@ -148,6 +150,10 @@ def get_doc_room(doctype, docname):
|
|||
return f"{frappe.local.site}:doc:{doctype}/{cstr(docname)}"
|
||||
|
||||
|
||||
def get_docinfo_room(doctype, docname):
|
||||
return f"{frappe.local.site}:doc:{doctype}/{cstr(docname)}"
|
||||
|
||||
|
||||
def get_user_room(user):
|
||||
return f"{frappe.local.site}:user:{user}"
|
||||
|
||||
|
|
|
|||
16
socketio.js
16
socketio.js
|
|
@ -87,6 +87,18 @@ io.on("connection", function (socket) {
|
|||
send_existing_lines(task_id, socket);
|
||||
});
|
||||
|
||||
socket.on("docinfo_update", function (doctype, docname) {
|
||||
can_subscribe_doc({
|
||||
socket,
|
||||
doctype,
|
||||
docname,
|
||||
callback: () => {
|
||||
var room = get_docinfo_room(socket, doctype, docname);
|
||||
socket.join(room);
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
socket.on("doc_subscribe", function (doctype, docname) {
|
||||
can_subscribe_doc({
|
||||
socket,
|
||||
|
|
@ -214,6 +226,10 @@ function get_doc_room(socket, doctype, docname) {
|
|||
return get_site_name(socket) + ":doc:" + doctype + "/" + docname;
|
||||
}
|
||||
|
||||
function get_docinfo_room(socket, doctype, docname) {
|
||||
return get_site_name(socket) + ":docinfo:" + doctype + "/" + docname;
|
||||
}
|
||||
|
||||
function get_open_doc_room(socket, doctype, docname) {
|
||||
return get_site_name(socket) + ":open_doc:" + doctype + "/" + docname;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue