Files
PicList/src/renderer/manage/store/bucketFileDb.ts
2025-08-15 13:29:09 +08:00

72 lines
1.7 KiB
TypeScript

import Dexie, { Table } from 'dexie'
import type { IStringKeyMap } from '#/types/types'
/*
* create a database for bucket file cache
*database name: bucketFileDb
*structure:
* - table: picBedName
* - key: alias-bucketName-prefix
* - value: from fullList
* - primaryKey: key
*/
export interface IFileCache {
key: string
value: any
}
/**
* new picbed will add a plist suffix to distinguish from picgo
*/
export class FileCacheDb extends Dexie {
aliyun: Table<IFileCache, string>
github: Table<IFileCache, string>
imgur: Table<IFileCache, string>
local: Table<IFileCache, string>
tcyun: Table<IFileCache, string>
qiniu: Table<IFileCache, string>
smms: Table<IFileCache, string>
s3plist: Table<IFileCache, string>
sftp: Table<IFileCache, string>
upyun: Table<IFileCache, string>
webdavplist: Table<IFileCache, string>
constructor() {
super('bucketFileDb')
const tableNames = [
'aliyun',
'github',
'imgur',
'local',
'qiniu',
's3plist',
'sftp',
'smms',
'tcyun',
'upyun',
'webdavplist'
]
const tableNamesMap = tableNames.reduce((acc, cur) => {
acc[cur] = '&key, value'
return acc
}, {} as IStringKeyMap)
this.version(5).stores(tableNamesMap)
this.aliyun = this.table('aliyun')
this.github = this.table('github')
this.imgur = this.table('imgur')
this.local = this.table('local')
this.qiniu = this.table('qiniu')
this.tcyun = this.table('tcyun')
this.s3plist = this.table('s3plist')
this.sftp = this.table('sftp')
this.smms = this.table('smms')
this.upyun = this.table('upyun')
this.webdavplist = this.table('webdavplist')
}
}
export const fileCacheDbInstance = new FileCacheDb()