From dd68c0c9b51961421d95ba70b750425c224cfd54 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=D0=A1=D0=B0=D0=B2=D0=B5=D0=BB=D0=B8=D0=B9=20=D0=A1=D0=B0?=
 =?UTF-8?q?=D0=B2=D0=B5=D0=BD=D0=BE=D0=BA?= <pavel_sa@holdingbp.ru>
Date: Tue, 19 Nov 2024 20:30:24 +0300
Subject: [PATCH] refactor: refactored and optimized render logic

---
 app.js                        | 14 +++----------
 lib/totp-quickjs/index.js     |  1 -
 page/index.js                 | 12 ++++-------
 page/render/index/renderer.js | 38 +++++++++++++++++++++++++++++++++++
 4 files changed, 45 insertions(+), 20 deletions(-)
 create mode 100644 page/render/index/renderer.js

diff --git a/app.js b/app.js
index 7b3afc2..32b5684 100644
--- a/app.js
+++ b/app.js
@@ -7,17 +7,9 @@ App({
     TOTPS: localStorage.getItem('TOTPs') || []
   },
   onCreate(options) {
-    //  localStorage.setItem('TOTPs', [
-    //   new TOTP('JBSWY3DPEHPK3PXPQ', 'totp.danhersam.com', 'Iasd', 6, 30, 0, 'SHA-1'),
-    //   new TOTP('JBSWY3DPEHPK3PXPQ', 'totp.danhersam.com', 'Isgfsd', 6, 30, 0, 'SHA-1'),
-    //   new TOTP('JBSWY3DPEHPK3PXPQ', 'totp.danhersam.com', 'Idfklgj', 6, 30, 0, 'SHA-1'),
-    //   new TOTP('JBSWY3DPEHPK3PXPQ', 'totp.danhersam.com', 'Ibcopiu', 6, 30, 0, 'SHA-1'),
-    //   new TOTP('JBSWY3DPEHPK3PXPQ', 'totp.danhersam.com', 'Ioprfhujoidkfmv', 6, 30, 0, 'SHA-1'),
-    //   new TOTP('JBSWY3DPEHPK3PXPQ', 'totp.danhersam.com', 'If', 6, 30, 0, 'SHA-1'),
-    //   new TOTP('JBSWY3DPEHPK3PXPQ', 'totp.danhersam.com', 'I2', 6, 30, 0, 'SHA-1'),
-    //   new TOTP('JBSWY3DPEHPK3PXPQ', 'totp.danhersam.com', 'I3', 6, 30, 0, 'SHA-1'),
-    //   new TOTP('JBSWY3DPEHPK3PXPQ', 'totp.danhersam.com', 'I4', 6, 30, 0, 'SHA-1')
-    // ])
+     localStorage.setItem('TOTPs', [
+      new TOTP('JBSWY3DPEHPK3PXPQ', 'totp.danhersam.com', 'Iasd')
+    ])
   },
 
   onDestroy(options) {
diff --git a/lib/totp-quickjs/index.js b/lib/totp-quickjs/index.js
index 4fd694f..f2453b8 100644
--- a/lib/totp-quickjs/index.js
+++ b/lib/totp-quickjs/index.js
@@ -54,7 +54,6 @@ export class TOTP {
         const createdTime = time - (((time / 1000 + this.timeOffset) % 
         this.fetchTime) * 1000)
         
-        
         return new OTP(otp, createdTime, expireTime)
     }
 }
diff --git a/page/index.js b/page/index.js
index 8fb015d..02c0fc3 100644
--- a/page/index.js
+++ b/page/index.js
@@ -2,6 +2,7 @@ import { getDeviceInfo } from '@zos/device'
 import { TOTP } from '../lib/totp-quickjs'
 import { setStatusBarVisible, createWidget, widget, align, prop, text_style, event, deleteWidget } from '@zos/ui'
 import { RenderAddButton, RenderExpireBar, RenderOTPValue, RenderTOTPContainer } from './render/totpRenderer'
+import { initLoop } from './render/index/renderer'
 
 const app = getApp()
 const { width, height } = getDeviceInfo()
@@ -18,15 +19,10 @@ Page({
 	},
 	build() {
 		const buffer = app._options.globalData.TOTPS
-		if (buffer.length < 1) {
+		if (buffer.length < 1)
 			RenderAddButton('page/tip')
-		} else {
-			renderContainers(buffer)
-			renderTOTPs(buffer)
-			setInterval(() => {
-				renderWidgets.forEach(x => deleteWidget(x))
-				renderTOTPs(buffer)
-			}, 500)
+		else{
+			initLoop(buffer)
 		}
 	}
 })
diff --git a/page/render/index/renderer.js b/page/render/index/renderer.js
new file mode 100644
index 0000000..61f3d5f
--- /dev/null
+++ b/page/render/index/renderer.js
@@ -0,0 +1,38 @@
+import { deleteWidget } from "@zos/ui";
+import { TOTP } from "../../../lib/totp-quickjs";
+import { RenderAddButton, RenderExpireBar, RenderOTPValue, RenderTOTPContainer } from '../totpRenderer'
+
+/**
+ * 
+ * @param {Array<TOTP>} buffer 
+ */
+export function initLoop(buffer) {
+    renderContainers(buffer)
+    renderTOTPs(buffer)
+}
+
+function renderContainers(buffer) {
+    for (let i = 0; i < buffer.length; i++) {
+        RenderTOTPContainer(i, buffer[i].issuer, buffer[i].client)
+    }
+}
+const renderData = []
+
+function renderTOTPs(buffer) {
+    for (let i = 0; i < buffer.length; i++) {
+        let otpData = TOTP.copy(buffer[i]).getOTP(Date.now())
+        console.log(otpData.otp)
+        renderData[i] = {}
+        renderData[i].OTP = RenderOTPValue(i, otpData.otp),
+        renderData[i].expireBar = RenderExpireBar(i, otpData.createdTime, buffer[i].fetchTime)
+        setInterval(() => {
+            deleteWidget(renderData[i].expireBar)
+            renderData[i].expireBar = RenderExpireBar(i, otpData.createdTime, buffer[i].fetchTime)
+            if(otpData.expireTime < Date.now()){
+                otpData = TOTP.copy(buffer[i]).getOTP(Date.now())
+                deleteWidget(renderData[i].OTP)
+                renderData[i].OTP = RenderOTPValue(i, otpData.otp)
+            }
+        }, 500)
+    }
+}
\ No newline at end of file