refactor: refactored and optimized render logic

This commit is contained in:
Савелий Савенок 2024-11-19 20:30:24 +03:00
parent 50de1c0b57
commit dd68c0c9b5
4 changed files with 45 additions and 20 deletions

14
app.js
View File

@ -7,17 +7,9 @@ App({
TOTPS: localStorage.getItem('TOTPs') || [] TOTPS: localStorage.getItem('TOTPs') || []
}, },
onCreate(options) { onCreate(options) {
// localStorage.setItem('TOTPs', [ localStorage.setItem('TOTPs', [
// new TOTP('JBSWY3DPEHPK3PXPQ', 'totp.danhersam.com', 'Iasd', 6, 30, 0, 'SHA-1'), new TOTP('JBSWY3DPEHPK3PXPQ', 'totp.danhersam.com', 'Iasd')
// 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')
// ])
}, },
onDestroy(options) { onDestroy(options) {

View File

@ -54,7 +54,6 @@ export class TOTP {
const createdTime = time - (((time / 1000 + this.timeOffset) % const createdTime = time - (((time / 1000 + this.timeOffset) %
this.fetchTime) * 1000) this.fetchTime) * 1000)
return new OTP(otp, createdTime, expireTime) return new OTP(otp, createdTime, expireTime)
} }
} }

View File

@ -2,6 +2,7 @@ import { getDeviceInfo } from '@zos/device'
import { TOTP } from '../lib/totp-quickjs' import { TOTP } from '../lib/totp-quickjs'
import { setStatusBarVisible, createWidget, widget, align, prop, text_style, event, deleteWidget } from '@zos/ui' import { setStatusBarVisible, createWidget, widget, align, prop, text_style, event, deleteWidget } from '@zos/ui'
import { RenderAddButton, RenderExpireBar, RenderOTPValue, RenderTOTPContainer } from './render/totpRenderer' import { RenderAddButton, RenderExpireBar, RenderOTPValue, RenderTOTPContainer } from './render/totpRenderer'
import { initLoop } from './render/index/renderer'
const app = getApp() const app = getApp()
const { width, height } = getDeviceInfo() const { width, height } = getDeviceInfo()
@ -18,15 +19,10 @@ Page({
}, },
build() { build() {
const buffer = app._options.globalData.TOTPS const buffer = app._options.globalData.TOTPS
if (buffer.length < 1) { if (buffer.length < 1)
RenderAddButton('page/tip') RenderAddButton('page/tip')
} else { else{
renderContainers(buffer) initLoop(buffer)
renderTOTPs(buffer)
setInterval(() => {
renderWidgets.forEach(x => deleteWidget(x))
renderTOTPs(buffer)
}, 500)
} }
} }
}) })

View File

@ -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)
}
}