From be04bba0734cc56727314044737ce995088ead81 Mon Sep 17 00:00:00 2001
From: Alexey Lunin <alexey.lunin@vereign.com>
Date: Thu, 7 Mar 2019 18:18:39 +0400
Subject: [PATCH] continue cheking new events after the error (e.g. unavailable
 network)

---
 javascript/src/iframe/viamapi-iframe.js | 204 +++++++++++++-----------
 1 file changed, 108 insertions(+), 96 deletions(-)

diff --git a/javascript/src/iframe/viamapi-iframe.js b/javascript/src/iframe/viamapi-iframe.js
index 3a92c7d..de04abf 100644
--- a/javascript/src/iframe/viamapi-iframe.js
+++ b/javascript/src/iframe/viamapi-iframe.js
@@ -1162,134 +1162,146 @@ connection.promise.then(parent => {
     }
   }, 50);
 
-  setInterval(async function() {
+  setInterval(async () => {
     if (window.currentlyLoadedIdentity && !anynomousDeviceKeyEventsProcessing && !window.currentlyAuthenticatedIdentity) {
       anynomousDeviceKeyEventsProcessing = true;
-      const executeResult = await executeRestfulFunction("public", viamAnonymousApi, viamAnonymousApi.eventGetNewEventsWithoutSession, "devicekey");
-      if(executeResult.code === "200") {
-        const eventsLen = executeResult.data.length;
-        let changedMaxDeviceKeyAnonymousEventTime = false;
-        for (let i = 0; i < eventsLen; i++) {
-          const event = executeResult.data[i];
-          switch (event.type) {
-            case "Authenticated" : {
-              const uuid = event.payloads[0];
-              const token = event.payloads[1];
-              handleIdentityLogin(window.currentlyLoadedIdentity, uuid, token);
-              const identityToStore = window.currentlyAuthenticatedIdentity;
-              event.payloads = [{fromQRCode: true}];
-              await setIdentityInLocalStorage(identityToStore);
-              await getProfileData(identityToStore);
-              parent.onEvent(event);
-              break;
-            }
+      try {
+        const executeResult = await executeRestfulFunction("public", viamAnonymousApi, viamAnonymousApi.eventGetNewEventsWithoutSession, "devicekey");
+        if(executeResult.code === "200") {
+          const eventsLen = executeResult.data.length;
+          let changedMaxDeviceKeyAnonymousEventTime = false;
+          for (let i = 0; i < eventsLen; i++) {
+            const event = executeResult.data[i];
+            switch (event.type) {
+              case "Authenticated" : {
+                const uuid = event.payloads[0];
+                const token = event.payloads[1];
+                handleIdentityLogin(window.currentlyLoadedIdentity, uuid, token);
+                const identityToStore = window.currentlyAuthenticatedIdentity;
+                event.payloads = [{fromQRCode: true}];
+                await setIdentityInLocalStorage(identityToStore);
+                await getProfileData(identityToStore);
+                parent.onEvent(event);
+                break;
+              }
 
-            case "QRCodeUpdated" : {
-              const actionID = event["actionID"];
-              const QrCode = event["payloads"][1];
+              case "QRCodeUpdated" : {
+                const actionID = event["actionID"];
+                const QrCode = event["payloads"][1];
 
-              const eventCopy = JSON.parse(JSON.stringify(event));
+                const eventCopy = JSON.parse(JSON.stringify(event));
 
-              QRCode.toDataURL(actionID + "," + QrCode, function (err, url) {
-                eventCopy["payloads"].push(url);
-                parent.onEvent(eventCopy);
-              });
-              break;
-            }
+                QRCode.toDataURL(actionID + "," + QrCode, function (err, url) {
+                  eventCopy["payloads"].push(url);
+                  parent.onEvent(eventCopy);
+                });
+                break;
+              }
 
-            case "KeyDeleted" : {
-              const authenticationPublicKey = localStorage.getItem("authenticatedIdentity");
-              clearPinCodeTtl(authenticationPublicKey);
-              localStorage.removeItem("uuid");
-              localStorage.removeItem("token");
-              localStorage.removeItem("authenticatedIdentity");
-              delete window.loadedIdentities[authenticationPublicKey];
-              window.currentlyLoadedIdentity = null;
-              window.currentlyAuthenticatedIdentity = null;
-              window.lastTimeGetProfile = 0;
-
-              destroyIdentityFromLocalStorage(authenticationPublicKey);
-              break;
-            }
+              case "KeyDeleted" : {
+                const authenticationPublicKey = localStorage.getItem("authenticatedIdentity");
+                clearPinCodeTtl(authenticationPublicKey);
+                localStorage.removeItem("uuid");
+                localStorage.removeItem("token");
+                localStorage.removeItem("authenticatedIdentity");
+                delete window.loadedIdentities[authenticationPublicKey];
+                window.currentlyLoadedIdentity = null;
+                window.currentlyAuthenticatedIdentity = null;
+                window.lastTimeGetProfile = 0;
 
-            default : {
-              parent.onEvent(event);
+                destroyIdentityFromLocalStorage(authenticationPublicKey);
+                break;
+              }
+
+              default : {
+                parent.onEvent(event);
+              }
             }
+            changedMaxDeviceKeyAnonymousEventTime = true;
+            maxDeviceKeyAnonymousEventTime = Math.max(maxDeviceKeyAnonymousEventTime, event.stamp);
           }
-          changedMaxDeviceKeyAnonymousEventTime = true;
-          maxDeviceKeyAnonymousEventTime = Math.max(maxDeviceKeyAnonymousEventTime, event.stamp);
-        }
 
-        if(changedMaxDeviceKeyAnonymousEventTime) {
-          await executeRestfulFunction("public", viamAnonymousApi, viamAnonymousApi.eventUpdateLastViewedWithoutSession,
-            "devicekey", maxDeviceKeyAnonymousEventTime.toString());
+          if(changedMaxDeviceKeyAnonymousEventTime) {
+            await executeRestfulFunction("public", viamAnonymousApi, viamAnonymousApi.eventUpdateLastViewedWithoutSession,
+              "devicekey", maxDeviceKeyAnonymousEventTime.toString());
+          }
         }
+      } catch (e) {
+        console.warn(e);
       }
       anynomousDeviceKeyEventsProcessing = false;
     }
 
     if (window.currentlyAuthenticatedIdentity != null && eventsDeviceEventsProcessing === false) {
       eventsDeviceEventsProcessing = true;
-      const executeResult = await executeRestfulFunction("private", viamApi, viamApi.eventGetNewEvents, "devicekey");
-      if (executeResult.code === "200") {
-        const eventsLen = executeResult.data.length;
-        const changedMaxDeviceKeyEventTime = false;
-        for (let i = 0; i < eventsLen; i++) {
-          const event = executeResult.data[i];
-          if (event.type === "QRCodeUpdated") {
-            const actionID = event["actionID"];
-            const QrCode = event["payloads"][1];
-
-            const eventCopy = JSON.parse(JSON.stringify(event));
+      try {
+        const executeResult = await executeRestfulFunction("private", viamApi, viamApi.eventGetNewEvents, "devicekey");
+        if (executeResult.code === "200") {
+          const eventsLen = executeResult.data.length;
+          const changedMaxDeviceKeyEventTime = false;
+          for (let i = 0; i < eventsLen; i++) {
+            const event = executeResult.data[i];
+            if (event.type === "QRCodeUpdated") {
+              const actionID = event["actionID"];
+              const QrCode = event["payloads"][1];
 
-            QRCode.toDataURL(actionID + "," + QrCode, function (err, url) {
-              eventCopy["payloads"].push(url);
-              parent.onEvent(eventCopy);
-            });
-          } else {
-            parent.onEvent(event);
+              const eventCopy = JSON.parse(JSON.stringify(event));
+
+              QRCode.toDataURL(actionID + "," + QrCode, function (err, url) {
+                eventCopy["payloads"].push(url);
+                parent.onEvent(eventCopy);
+              });
+            } else {
+              parent.onEvent(event);
+            }
+            maxDeviceKeyEventTime = Math.max(maxDeviceKeyEventTime, event.stamp);
+          }
+          if(changedMaxDeviceKeyEventTime) {
+            await executeRestfulFunction("private", viamApi, viamApi.eventUpdateLastViewed, "devicekey",
+              maxDeviceKeyEventTime.toString());
           }
-          maxDeviceKeyEventTime = Math.max(maxDeviceKeyEventTime, event.stamp);
-        }
-        if(changedMaxDeviceKeyEventTime) {
-          await executeRestfulFunction("private", viamApi, viamApi.eventUpdateLastViewed, "devicekey",
-            maxDeviceKeyEventTime.toString());
         }
+      } catch (e) {
+        console.warn(e);
       }
       eventsDeviceEventsProcessing = false;
     }
 
     if (window.currentlyAuthenticatedIdentity != null && eventsEntityEventsProcessing === false) {
       eventsEntityEventsProcessing = true;
-      const executeResult = await executeRestfulFunction("private", viamApi, viamApi.eventGetNewEvents, "entity");
+      try {
+        const executeResult = await executeRestfulFunction("private", viamApi, viamApi.eventGetNewEvents, "entity");
+
+        if (executeResult.code === "200") {
+          const eventsLen = executeResult.data.length;
+          let changedMaxEntityEventTime = false;
+          for (let i = 0; i < eventsLen; i++) {
+            const event = executeResult.data[i];
+            if (event.type === "QRCodeUpdated") {
+              const actionID = event["actionID"];
+              const QrCode = event["payloads"][1];
 
-      if (executeResult.code === "200") {
-        const eventsLen = executeResult.data.length;
-        let changedMaxEntityEventTime = false;
-        for (let i = 0; i < eventsLen; i++) {
-          const event = executeResult.data[i];
-          if (event.type === "QRCodeUpdated") {
-            const actionID = event["actionID"];
-            const QrCode = event["payloads"][1];
+              const eventCopy = JSON.parse(JSON.stringify(event));
 
-            const eventCopy = JSON.parse(JSON.stringify(event));
+              QRCode.toDataURL(actionID + "," + QrCode, function (err, url) {
+                eventCopy["payloads"].push(url);
+                parent.onEvent(eventCopy);
+              });
 
-            QRCode.toDataURL(actionID + "," + QrCode, function (err, url) {
-              eventCopy["payloads"].push(url);
-              parent.onEvent(eventCopy);
-            });
+              continue;
+            }
 
-            continue;
+            parent.onEvent(event);
+            changedMaxEntityEventTime = true;
+            maxEntityEventTime = Math.max(maxEntityEventTime, event.stamp);
+          }
+          if(changedMaxEntityEventTime) {
+            await executeRestfulFunction("private", viamApi, viamApi.eventUpdateLastViewed, "entity",
+              maxEntityEventTime.toString());
           }
-
-          parent.onEvent(event);
-          changedMaxEntityEventTime = true;
-          maxEntityEventTime = Math.max(maxEntityEventTime, event.stamp);
-        }
-        if(changedMaxEntityEventTime) {
-          await executeRestfulFunction("private", viamApi, viamApi.eventUpdateLastViewed, "entity",
-            maxEntityEventTime.toString());
         }
+      } catch (e) {
+        console.warn(e);
       }
       eventsEntityEventsProcessing = false;
     }
-- 
GitLab