fix: old version of the backup file cannot be restored.
This commit is contained in:
parent
8bb5fb9811
commit
26e48f07fd
@ -4,6 +4,7 @@ import { appConfig, titleBarOverlayDark, titleBarOverlayLight } from './config'
|
|||||||
import AppUpdater from './services/AppUpdater'
|
import AppUpdater from './services/AppUpdater'
|
||||||
import BackupManager from './services/BackupManager'
|
import BackupManager from './services/BackupManager'
|
||||||
import FileManager from './services/FileManager'
|
import FileManager from './services/FileManager'
|
||||||
|
import { compress, decompress } from './utils/zip'
|
||||||
import { createMinappWindow } from './window'
|
import { createMinappWindow } from './window'
|
||||||
|
|
||||||
const fileManager = new FileManager()
|
const fileManager = new FileManager()
|
||||||
@ -29,6 +30,8 @@ export function registerIpc(mainWindow: BrowserWindow, app: Electron.App) {
|
|||||||
|
|
||||||
ipcMain.handle('reload', () => mainWindow.reload())
|
ipcMain.handle('reload', () => mainWindow.reload())
|
||||||
|
|
||||||
|
ipcMain.handle('zip:compress', (_, text: string) => compress(text))
|
||||||
|
ipcMain.handle('zip:decompress', (_, text: Buffer) => decompress(text))
|
||||||
ipcMain.handle('backup:backup', backupManager.backup)
|
ipcMain.handle('backup:backup', backupManager.backup)
|
||||||
ipcMain.handle('backup:restore', backupManager.restore)
|
ipcMain.handle('backup:restore', backupManager.restore)
|
||||||
ipcMain.handle('backup:backupToWebdav', backupManager.backupToWebdav)
|
ipcMain.handle('backup:backupToWebdav', backupManager.backupToWebdav)
|
||||||
|
|||||||
39
src/main/utils/zip.ts
Normal file
39
src/main/utils/zip.ts
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
import util from 'node:util'
|
||||||
|
import zlib from 'node:zlib'
|
||||||
|
|
||||||
|
import logger from 'electron-log'
|
||||||
|
|
||||||
|
// 将 zlib 的 gzip 和 gunzip 方法转换为 Promise 版本
|
||||||
|
const gzipPromise = util.promisify(zlib.gzip)
|
||||||
|
const gunzipPromise = util.promisify(zlib.gunzip)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 压缩字符串
|
||||||
|
* @param {string} string - 要压缩的 JSON 字符串
|
||||||
|
* @returns {Promise<Buffer>} 压缩后的 Buffer
|
||||||
|
*/
|
||||||
|
export async function compress(str) {
|
||||||
|
try {
|
||||||
|
const buffer = Buffer.from(str, 'utf-8')
|
||||||
|
const compressedBuffer = await gzipPromise(buffer)
|
||||||
|
return compressedBuffer
|
||||||
|
} catch (error) {
|
||||||
|
logger.error('Compression failed:', error)
|
||||||
|
throw error
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 解压缩 Buffer 到 JSON 字符串
|
||||||
|
* @param {Buffer} compressedBuffer - 压缩的 Buffer
|
||||||
|
* @returns {Promise<string>} 解压缩后的 JSON 字符串
|
||||||
|
*/
|
||||||
|
export async function decompress(compressedBuffer) {
|
||||||
|
try {
|
||||||
|
const buffer = await gunzipPromise(compressedBuffer)
|
||||||
|
return buffer.toString('utf-8')
|
||||||
|
} catch (error) {
|
||||||
|
logger.error('Decompression failed:', error)
|
||||||
|
throw error
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -11,6 +11,8 @@ const api = {
|
|||||||
setTheme: (theme: 'light' | 'dark') => ipcRenderer.invoke('set-theme', theme),
|
setTheme: (theme: 'light' | 'dark') => ipcRenderer.invoke('set-theme', theme),
|
||||||
minApp: (url: string) => ipcRenderer.invoke('minapp', url),
|
minApp: (url: string) => ipcRenderer.invoke('minapp', url),
|
||||||
reload: () => ipcRenderer.invoke('reload'),
|
reload: () => ipcRenderer.invoke('reload'),
|
||||||
|
compress: (text: string) => ipcRenderer.invoke('zip:compress', text),
|
||||||
|
decompress: (text: Buffer) => ipcRenderer.invoke('zip:decompress', text),
|
||||||
backup: {
|
backup: {
|
||||||
backup: (fileName: string, data: string, destinationPath?: string) =>
|
backup: (fileName: string, data: string, destinationPath?: string) =>
|
||||||
ipcRenderer.invoke('backup:backup', fileName, data, destinationPath),
|
ipcRenderer.invoke('backup:backup', fileName, data, destinationPath),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user