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
51 lines
1.3 KiB
TypeScript
51 lines
1.3 KiB
TypeScript
import { db, type TabSnapshot } from './schema'
|
|
import { logError } from '../lib/errorHandler'
|
|
|
|
export const tabRepository = {
|
|
async saveAll(tabs: TabSnapshot[]): Promise<void> {
|
|
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[]> {
|
|
try {
|
|
return await db.tabSnapshots.orderBy('updatedAt').toArray()
|
|
} catch (error) {
|
|
logError('加载标签快照失败', error)
|
|
return []
|
|
}
|
|
},
|
|
|
|
async clearAll(): Promise<void> {
|
|
try {
|
|
await db.tabSnapshots.clear()
|
|
} catch (error) {
|
|
logError('清空标签快照失败', error)
|
|
}
|
|
},
|
|
|
|
async saveActiveTabId(tabId: string | null): Promise<void> {
|
|
try {
|
|
await db.activeTab.put({ id: 'current', activeTabId: tabId })
|
|
} catch (error) {
|
|
logError('保存活动标签ID失败', error)
|
|
}
|
|
},
|
|
|
|
async loadActiveTabId(): Promise<string | null> {
|
|
try {
|
|
const record = await db.activeTab.get('current')
|
|
return record?.activeTabId ?? null
|
|
} catch (error) {
|
|
logError('加载活动标签ID失败', error)
|
|
return null
|
|
}
|
|
}
|
|
}
|