diff --git a/packages/loot-core/src/platform/server/sqlite/index.d.ts b/packages/loot-core/src/platform/server/sqlite/index.d.ts index 3c5821903aa02bc5a858c22d46bfb88d073e38fb..97b997625a6b570b58642cbcea8161981155a30b 100644 --- a/packages/loot-core/src/platform/server/sqlite/index.d.ts +++ b/packages/loot-core/src/platform/server/sqlite/index.d.ts @@ -29,4 +29,4 @@ export async function openDatabase(pathOrBuffer?: string | Buffer): Database; export function closeDatabase(db): void; -export function exportDatabase(db): void; +export async function exportDatabase(db): Buffer; diff --git a/packages/loot-core/src/platform/server/sqlite/index.electron.ts b/packages/loot-core/src/platform/server/sqlite/index.electron.ts index 7f03188dc3f4565ebed2c0ace41303c706662b94..27e0ad828969c1591471095eb5f92feb988e059a 100644 --- a/packages/loot-core/src/platform/server/sqlite/index.electron.ts +++ b/packages/loot-core/src/platform/server/sqlite/index.electron.ts @@ -1,4 +1,7 @@ import Database from 'better-sqlite3'; +import { v4 as uuidv4 } from 'uuid'; + +import { removeFile, readFile } from '../fs'; function verifyParamTypes(sql, arr) { arr.forEach(val => { @@ -100,6 +103,15 @@ export function closeDatabase(db) { return db.close(); } -export function exportDatabase(db) { - return db.serialize(); +export async function exportDatabase(db) { + // electron does not support better-sqlite serialize since v21 + // save to file and read in the raw data. + let name = `backup-for-export-${uuidv4()}.db`; + + await db.backup(name); + + let data = await readFile(name); + await removeFile(name); + + return data; } diff --git a/packages/loot-core/src/platform/server/sqlite/index.web.ts b/packages/loot-core/src/platform/server/sqlite/index.web.ts index 8a2b3c4a79f0793d2fcb37b03cf3a657267dee18..3f6895b07719ec160d4b37b86ba068325afdf4ef 100644 --- a/packages/loot-core/src/platform/server/sqlite/index.web.ts +++ b/packages/loot-core/src/platform/server/sqlite/index.web.ts @@ -199,6 +199,6 @@ export function closeDatabase(db) { db.close(); } -export function exportDatabase(db) { +export async function exportDatabase(db) { return db.export(); } diff --git a/packages/loot-core/src/server/cloud-storage.ts b/packages/loot-core/src/server/cloud-storage.ts index cf6deab1f2b98265a9af6df8c1b68f660ba57145..88173e7c5184174f0347028529db4c2d95022499 100644 --- a/packages/loot-core/src/server/cloud-storage.ts +++ b/packages/loot-core/src/server/cloud-storage.ts @@ -148,7 +148,8 @@ export async function exportBuffer() { `, ); - let dbContent = sqlite.exportDatabase(memDb); + let dbContent = await sqlite.exportDatabase(memDb); + sqlite.closeDatabase(memDb); // mark it as a file that needs a new clock so when a new client diff --git a/upcoming-release-notes/1242.md b/upcoming-release-notes/1242.md new file mode 100644 index 0000000000000000000000000000000000000000..67add47b26b64d969434a16cd5a20c6ee2674bf9 --- /dev/null +++ b/upcoming-release-notes/1242.md @@ -0,0 +1,6 @@ +--- +category: Bugfix +authors: [Shazib] +--- + +Fixed exporting data from Desktop (Electon) app.