diff --git a/app/controllers/authenticated.js b/app/controllers/authenticated.js index 4c174d1b87c2d3bd043cf74f2a1e005a9ae60ce3..f7c6959d3038ac58dab8bc23e06d9a8960baf981 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 0000000000000000000000000000000000000000..707bf5c25b0109e90c8fef3b2c40efcdeab5324a --- /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