From addb010dec06cffe8929cd68dee94d8f224a4dda Mon Sep 17 00:00:00 2001 From: Anton Reshetov Date: Tue, 30 Sep 2025 06:51:26 +0300 Subject: [PATCH] fix(db): add SQLite file validation and backup for non-SQLite file --- src/main/db/index.ts | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/main/db/index.ts b/src/main/db/index.ts index daca3a96..25347c8f 100644 --- a/src/main/db/index.ts +++ b/src/main/db/index.ts @@ -7,13 +7,24 @@ import fs from 'fs-extra' import { store } from '../store' const DB_NAME = 'massCode.db' -// const BACKUP_DB_NAME = 'massCode-backup.db' -// const MANUAL_BACKUP_DB_NAME = 'massCode-manual-backup.db' const isDev = process.env.NODE_ENV === 'development' let db: Database.Database | null = null let backupTimer: NodeJS.Timeout | null = null +function isSqliteFile(dbPath: string): boolean { + try { + if (!fs.existsSync(dbPath)) + return false + + const buffer = fs.readFileSync(dbPath).subarray(0, 16) + return buffer.toString('ascii') === 'SQLite format 3\x00' + } + catch { + return false + } +} + function tableExists(db: Database.Database, table: string): boolean { const row = db .prepare( @@ -33,6 +44,14 @@ export function useDB() { const dbPath = `${store.preferences.get('storagePath')}/${DB_NAME}` + if (fs.existsSync(dbPath) && !isSqliteFile(dbPath)) { + const backupPath = `${dbPath}.old` + try { + fs.moveSync(dbPath, backupPath) + } + catch {} + } + try { db = new Database(dbPath, { // eslint-disable-next-line no-console