chore: bump version to 0.3.8
Code audit fixes: - CRITICAL: reorder Markdown pipeline (fixImages before sanitize) - CRITICAL: fix path prefix separator check - BLOCKING: remove duplicate useEffect in Editor - BLOCKING: skip onChange when content unchanged - BLOCKING: optimize Sidebar re-render with useMemo - HIGH: cleanup FileWatcher polling intervals - HIGH: improve validatePath segment check - HIGH: fix isExternalUpdate race with counter - HIGH: add will-navigate / setWindowOpenHandler - HIGH: explicit strip in sanitize schema - MEDIUM: random temp file suffix instead of Date.now() - MEDIUM/LOW: add IndexedDB error boundaries - LOW: support UTF-16 BOM detection
This commit is contained in:
@@ -1,27 +1,50 @@
|
||||
import { db, type TabSnapshot } from './schema'
|
||||
import { logError } from '../lib/errorHandler'
|
||||
|
||||
export const tabRepository = {
|
||||
async saveAll(tabs: TabSnapshot[]): Promise<void> {
|
||||
await db.transaction('rw', db.tabSnapshots, async () => {
|
||||
await db.tabSnapshots.clear()
|
||||
await db.tabSnapshots.bulkAdd(tabs)
|
||||
})
|
||||
try {
|
||||
await db.transaction('rw', db.tabSnapshots, async () => {
|
||||
await db.tabSnapshots.clear()
|
||||
await db.tabSnapshots.bulkAdd(tabs)
|
||||
})
|
||||
} catch (error) {
|
||||
logError('保存标签快照失败', error)
|
||||
}
|
||||
},
|
||||
|
||||
async loadAll(): Promise<TabSnapshot[]> {
|
||||
return db.tabSnapshots.orderBy('updatedAt').toArray()
|
||||
try {
|
||||
return await db.tabSnapshots.orderBy('updatedAt').toArray()
|
||||
} catch (error) {
|
||||
logError('加载标签快照失败', error)
|
||||
return []
|
||||
}
|
||||
},
|
||||
|
||||
async clearAll(): Promise<void> {
|
||||
await db.tabSnapshots.clear()
|
||||
try {
|
||||
await db.tabSnapshots.clear()
|
||||
} catch (error) {
|
||||
logError('清空标签快照失败', error)
|
||||
}
|
||||
},
|
||||
|
||||
async saveActiveTabId(tabId: string | null): Promise<void> {
|
||||
await db.activeTab.put({ id: 'current', activeTabId: tabId })
|
||||
try {
|
||||
await db.activeTab.put({ id: 'current', activeTabId: tabId })
|
||||
} catch (error) {
|
||||
logError('保存活动标签ID失败', error)
|
||||
}
|
||||
},
|
||||
|
||||
async loadActiveTabId(): Promise<string | null> {
|
||||
const record = await db.activeTab.get('current')
|
||||
return record?.activeTabId ?? null
|
||||
try {
|
||||
const record = await db.activeTab.get('current')
|
||||
return record?.activeTabId ?? null
|
||||
} catch (error) {
|
||||
logError('加载活动标签ID失败', error)
|
||||
return null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user