fix(core): find lost data (#4035)
This commit is contained in:
@@ -1,5 +1,10 @@
|
|||||||
import { type InsertRow, SqliteConnection } from '@affine/native';
|
import {
|
||||||
|
type InsertRow,
|
||||||
|
SqliteConnection,
|
||||||
|
ValidationResult,
|
||||||
|
} from '@affine/native';
|
||||||
|
|
||||||
|
import { migrateToLatestDatabase } from '../db/migration';
|
||||||
import { logger } from '../logger';
|
import { logger } from '../logger';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13,6 +18,10 @@ export abstract class BaseSQLiteAdapter {
|
|||||||
|
|
||||||
async connectIfNeeded() {
|
async connectIfNeeded() {
|
||||||
if (!this.db) {
|
if (!this.db) {
|
||||||
|
const validation = await SqliteConnection.validate(this.path);
|
||||||
|
if (validation === ValidationResult.MissingVersionColumn) {
|
||||||
|
await migrateToLatestDatabase(this.path);
|
||||||
|
}
|
||||||
this.db = new SqliteConnection(this.path);
|
this.db = new SqliteConnection(this.path);
|
||||||
await this.db.connect();
|
await this.db.connect();
|
||||||
logger.info(`[SQLiteAdapter:${this.role}]`, 'connected:', this.path);
|
logger.info(`[SQLiteAdapter:${this.role}]`, 'connected:', this.path);
|
||||||
|
|||||||
@@ -98,10 +98,17 @@ export const CRUD: WorkspaceCRUD<WorkspaceFlavour.LOCAL> = {
|
|||||||
list: async () => {
|
list: async () => {
|
||||||
logger.debug('list');
|
logger.debug('list');
|
||||||
const storage = getStorage();
|
const storage = getStorage();
|
||||||
const allWorkspaceIDs: string[] = storage.getItem(kStoreKey, []) as z.infer<
|
let allWorkspaceIDs: string[] = storage.getItem(kStoreKey, []) as z.infer<
|
||||||
typeof schema
|
typeof schema
|
||||||
>;
|
>;
|
||||||
|
|
||||||
|
// fixme: remove this once desktop data migration is done
|
||||||
|
if (window.apis && environment.isDesktop) {
|
||||||
|
const desktopIds = (await window.apis.workspace.list()).map(v => v[0]);
|
||||||
|
allWorkspaceIDs = [...new Set([...allWorkspaceIDs, ...desktopIds])];
|
||||||
|
storage.setItem(kStoreKey, allWorkspaceIDs);
|
||||||
|
}
|
||||||
|
|
||||||
const workspaces = (
|
const workspaces = (
|
||||||
await Promise.all(allWorkspaceIDs.map(id => CRUD.get(id)))
|
await Promise.all(allWorkspaceIDs.map(id => CRUD.get(id)))
|
||||||
).filter(item => item !== null) as LocalWorkspace[];
|
).filter(item => item !== null) as LocalWorkspace[];
|
||||||
|
|||||||
Reference in New Issue
Block a user