diff --git a/package.json b/package.json index 306312cda3..2b3483a952 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,6 @@ "@strongtz/win32-arm64-msvc": "^0.4.7", "@tanstack/react-query": "^5.27.0", "@types/react-infinite-scroll-component": "^5.0.0", - "adm-zip": "^0.5.16", "archiver": "^7.0.1", "async-mutex": "^0.5.0", "color": "^5.0.0", @@ -84,7 +83,6 @@ "electron-updater": "6.6.4", "electron-window-state": "^5.0.3", "epub": "patch:epub@npm%3A1.3.0#~/.yarn/patches/epub-npm-1.3.0-8325494ffe.patch", - "extract-zip": "^2.0.1", "fast-xml-parser": "^5.2.0", "fetch-socks": "^1.3.2", "fs-extra": "^11.2.0", diff --git a/src/main/services/BackupManager.ts b/src/main/services/BackupManager.ts index ef96529903..6be19d035b 100644 --- a/src/main/services/BackupManager.ts +++ b/src/main/services/BackupManager.ts @@ -4,7 +4,7 @@ import archiver from 'archiver' import { exec } from 'child_process' import { app } from 'electron' import Logger from 'electron-log' -import extract from 'extract-zip' +import StreamZip from 'node-stream-zip' import * as fs from 'fs-extra' import * as path from 'path' import { createClient, CreateDirectoryOptions, FileStat } from 'webdav' @@ -231,15 +231,10 @@ class BackupManager { Logger.log('[backup] step 1: unzip backup file', this.tempDir) - // 使用 extract-zip 解压 - await extract(backupPath, { - dir: this.tempDir, - onEntry: () => { - // 这里可以处理进度,但 extract-zip 不提供总条目数信息 - onProgress({ stage: 'extracting', progress: 15, total: 100 }) - } - }) - onProgress({ stage: 'extracting', progress: 25, total: 100 }) + const zip = new StreamZip.async({ file: backupPath }) + onProgress({ stage: 'extracting', progress: 15, total: 100 }) + await zip.extract(null, this.tempDir) + onProgress({ stage: 'extracted', progress: 25, total: 100 }) Logger.log('[backup] step 2: read data.json') // 读取 data.json diff --git a/yarn.lock b/yarn.lock index 05068932fd..4d7e8ea9f7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4392,7 +4392,6 @@ __metadata: "@vitest/coverage-v8": "npm:^3.1.1" "@vitest/ui": "npm:^3.1.1" "@xyflow/react": "npm:^12.4.4" - adm-zip: "npm:^0.5.16" antd: "npm:^5.22.5" applescript: "npm:^1.0.0" archiver: "npm:^7.0.1" @@ -4423,7 +4422,6 @@ __metadata: eslint-plugin-react-hooks: "npm:^5.2.0" eslint-plugin-simple-import-sort: "npm:^12.1.1" eslint-plugin-unused-imports: "npm:^4.1.4" - extract-zip: "npm:^2.0.1" fast-xml-parser: "npm:^5.2.0" fetch-socks: "npm:^1.3.2" fs-extra: "npm:^11.2.0" @@ -4540,7 +4538,7 @@ __metadata: languageName: node linkType: hard -"adm-zip@npm:^0.5.16, adm-zip@npm:^0.5.9": +"adm-zip@npm:^0.5.9": version: 0.5.16 resolution: "adm-zip@npm:0.5.16" checksum: 10c0/6f10119d4570c7ba76dcf428abb8d3f69e63f92e51f700a542b43d4c0130373dd2ddfc8f85059f12d4a843703a90c3970cfd17876844b4f3f48bf042bfa6b49f