From 8ae314bead56c963052f5c722926397f72537f87 Mon Sep 17 00:00:00 2001
From: eikek <eike.kettner@posteo.de>
Date: Sun, 7 Nov 2021 00:40:43 +0100
Subject: [PATCH] Fix websocket initialization

---
 modules/webapp/src/main/webjar/docspell.js | 38 +++++++++++++++++-----
 1 file changed, 29 insertions(+), 9 deletions(-)

diff --git a/modules/webapp/src/main/webjar/docspell.js b/modules/webapp/src/main/webjar/docspell.js
index e70a00bd..08aa6aed 100644
--- a/modules/webapp/src/main/webjar/docspell.js
+++ b/modules/webapp/src/main/webjar/docspell.js
@@ -12,9 +12,9 @@ function extend() {
     var result = {};
     for (var i = 0; i < arguments.length; i++) {
         forEachIn(arguments[i],
-            function(obj, key) {
-                result[key] = obj;
-            });
+                  function(obj, key) {
+                      result[key] = obj;
+                  });
     }
     return result;
 }
@@ -41,13 +41,18 @@ elmApp.ports.internalSetUiTheme.subscribe(function(themeName) {
 });
 
 elmApp.ports.setAccount.subscribe(function(authResult) {
-    console.log("Add account from local storage");
+    console.log("Add account to local storage");
     localStorage.setItem("account", JSON.stringify(authResult));
+
+    if (!dsWebSocket) {
+        initWS();
+    }
 });
 
 elmApp.ports.removeAccount.subscribe(function() {
     console.log("Remove account from local storage");
     localStorage.removeItem("account");
+    closeWS();
 });
 
 elmApp.ports.requestUiSettings.subscribe(function(args) {
@@ -136,12 +141,27 @@ elmApp.ports.printElement.subscribe(function(id) {
     }
 });
 
-var socket = new WebSocket('ws://localhost:7880/api/v1/sec/ws');
-socket.addEventListener("message", function(event) {
-    if (event.data != "keep-alive" && event.data) {
-        elmApp.ports.receiveWsMessage.send(event.data);
+
+var dsWebSocket = null;
+function closeWS() {
+    if (dsWebSocket) {
+        console.log("Closing websocket connection");
+        dsWebSocket.close(1000, "Done");
+        dsWebSocket = null;
     }
-});
+}
+function initWS() {
+    closeWS();
+    var protocol = (window.location.protocol === 'https:') ? 'wss:' : 'ws:';
+    var url = protocol + '//' + window.location.host + '/api/v1/sec/ws';
+    console.log("Initialize websocket at " + url);
+    dsWebSocket = new WebSocket(url);
+    dsWebSocket.addEventListener("message", function(event) {
+        if (event.data != "keep-alive" && event.data) {
+            elmApp.ports.receiveWsMessage.send(event.data);
+        }
+    });
+}
 // elmApp.ports.sendWsMessage.subscribe(function(msg) {
 //     socket.send(msg);
 // });