From 7d316dcfdc4334d6693bfacfa2b581dae9d14dd8 Mon Sep 17 00:00:00 2001
From: Eugen Ciur <eugen@papermerge.com>
Date: Sat, 26 Feb 2022 07:54:59 +0100
Subject: [PATCH] service to trigger inbox refresh

---
 app/controllers/authenticated.js | 12 ++++++++++++
 app/services/ws_inbox_refresh.js | 33 ++++++++++++++++++++++++++++++++
 2 files changed, 45 insertions(+)
 create mode 100644 app/services/ws_inbox_refresh.js

diff --git a/app/controllers/authenticated.js b/app/controllers/authenticated.js
index 4c174d1..f7c6959 100644
--- a/app/controllers/authenticated.js
+++ b/app/controllers/authenticated.js
@@ -1,12 +1,24 @@
 import { action } from '@ember/object';
 import Controller from '@ember/controller';
 import { tracked } from '@glimmer/tracking';
+import { service } from '@ember/service';
 
 
 export default class AuthenticatedController extends Controller {
 
   // sidebar expanded ?
   @tracked expanded = true;
+  @service ws_inbox_refresh;
+  @service router;
+
+  constructor() {
+    super(...arguments);
+    this.ws_inbox_refresh.addHandler(this.wsInboxRefreshHandler, this);
+  }
+
+  wsInboxRefreshHandler() {
+    this.router.refresh();
+  }
 
   @action
   onSidebarToggle() {
diff --git a/app/services/ws_inbox_refresh.js b/app/services/ws_inbox_refresh.js
new file mode 100644
index 0000000..707bf5c
--- /dev/null
+++ b/app/services/ws_inbox_refresh.js
@@ -0,0 +1,33 @@
+import { ws_base_url } from 'papermerge/utils/host';
+import Service from '@ember/service';
+
+
+export default class WSInboxRefresh extends Service {
+
+
+  constructor(owner, args) {
+    super(owner, args);
+
+    let that = this;
+
+    this._socket = new WebSocket(`${ws_base_url()}/nodes/inbox-refresh/`);
+    this._handlers = [];
+
+    this._socket.onmessage = function(event) {
+      that._handlers.forEach((item) => {
+        let json_data;
+
+        try {
+          json_data = JSON.parse(event.data);
+          item.handler.apply(item.context, [json_data, event]);
+        } catch (err) {
+          console.log(`Error ${err} while parsing incoming data: ${event.data}`);
+        }
+      });
+    }
+  }
+
+  addHandler(handler, context) {
+    this._handlers.push({handler, context});
+  }
+}
\ No newline at end of file
-- 
GitLab