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()