forked from noxious/client
73 lines
1.7 KiB
TypeScript
73 lines
1.7 KiB
TypeScript
import config from '@/config'
|
|
import Dexie from 'dexie'
|
|
|
|
class AssetManager extends Dexie {
|
|
assets!: Dexie.Table<
|
|
{
|
|
key: string
|
|
data: Blob
|
|
group: string
|
|
updatedAt: Date
|
|
frameCount?: number
|
|
frameWidth?: number
|
|
frameHeight?: number
|
|
},
|
|
string
|
|
>
|
|
|
|
constructor() {
|
|
super('Assets')
|
|
this.version(1).stores({
|
|
assets: 'key, group'
|
|
})
|
|
}
|
|
|
|
async downloadAsset(key: string, url: string, group: string, updatedAt: Date, frameCount?: number, frameWidth?: number, frameHeight?: number) {
|
|
try {
|
|
const response = await fetch(config.server_endpoint + url)
|
|
const blob = await response.blob()
|
|
await this.assets.put({ key, data: blob, group, updatedAt, frameCount, frameWidth, frameHeight })
|
|
} catch (error) {
|
|
console.error(`Failed to add asset ${key}:`, error)
|
|
}
|
|
}
|
|
|
|
async getAsset(key: string) {
|
|
try {
|
|
const asset = await this.assets.get(key)
|
|
if (asset) {
|
|
return {
|
|
...asset,
|
|
data: URL.createObjectURL(asset.data)
|
|
}
|
|
}
|
|
} catch (error) {
|
|
console.error(`Failed to retrieve asset ${key}:`, error)
|
|
}
|
|
return null
|
|
}
|
|
|
|
async getAssetsByGroup(group: string) {
|
|
try {
|
|
const assets = await this.assets.where('group').equals(group).toArray()
|
|
return assets.map((asset) => ({
|
|
...asset,
|
|
data: URL.createObjectURL(asset.data)
|
|
}))
|
|
} catch (error) {
|
|
console.error(`Failed to retrieve assets for group ${group}:`, error)
|
|
return []
|
|
}
|
|
}
|
|
|
|
async deleteAsset(key: string) {
|
|
try {
|
|
await this.assets.delete(key)
|
|
} catch (error) {
|
|
console.error(`Failed to delete asset ${key}:`, error)
|
|
}
|
|
}
|
|
}
|
|
|
|
export const useAssetManager = new AssetManager()
|