diff --git a/src/app/model/volume-presets.model.ts b/src/app/model/volume-presets.model.ts index 4410388..392ecaa 100644 --- a/src/app/model/volume-presets.model.ts +++ b/src/app/model/volume-presets.model.ts @@ -6,6 +6,7 @@ export interface VolumePresetData { } export interface VolumePreset { + id: string; presetName: string; presetDescription?: string; data: VolumePresetData[]; diff --git a/src/app/pages/volume-preset-edit/volume-preset-edit.page.ts b/src/app/pages/volume-preset-edit/volume-preset-edit.page.ts index d9eedc4..a3da4e6 100644 --- a/src/app/pages/volume-preset-edit/volume-preset-edit.page.ts +++ b/src/app/pages/volume-preset-edit/volume-preset-edit.page.ts @@ -11,7 +11,7 @@ import { VolumePreset } from '../../model/volume-presets.model'; standalone: false }) export class VolumePresetEditPage implements OnInit { - caputredPreset: VolumePreset = { presetName: '', data: [] }; + caputredPreset: VolumePreset = { id: crypto.randomUUID(), presetName: '', data: [] }; isEditMode: boolean = false; originalPresetName: string = ''; @@ -65,11 +65,6 @@ export class VolumePresetEditPage implements OnInit { } this.caputredPreset.presetName = confirmState.presetName; this.caputredPreset.presetDescription = confirmState.presetDescription || ''; - - // If we renamed it, we should probably delete the old one first - if (this.originalPresetName !== this.caputredPreset.presetName) { - await this.volumePresetsService.deletePreset({ presetName: this.originalPresetName, data: [] }); - } } try { diff --git a/src/app/services/volume-presets.service.ts b/src/app/services/volume-presets.service.ts index e90dddc..eb88f76 100644 --- a/src/app/services/volume-presets.service.ts +++ b/src/app/services/volume-presets.service.ts @@ -24,15 +24,33 @@ export class VolumePresetsService { groupId: currentState.server.groups.find((group: any) => group.clients?.some((c: any) => c.id === client.id))?.id || '', groupName: currentState.server.groups.find((group: any) => group.clients?.some((c: any) => c.id === client.id))?.name || '', })); - return { presetName: 'Preset_' + new Date().toISOString().replace(/[:.]/g, '-'), data: preset }; + return { id: crypto.randomUUID(), presetName: 'Preset_' + new Date().toISOString().replace(/[:.]/g, '-'), data: preset }; } async loadPresetsFromPreferences(): Promise { try { const result = await Preferences.get({ key: UserPreference.VOLUME_PRESETS }); if (result.value) { - const preset = JSON.parse(result.value); - return Array.isArray(preset) ? preset : [preset]; + let presets = JSON.parse(result.value); + let presetArray = Array.isArray(presets) ? presets : [presets]; + let needsMigration = false; + + let migratedArray = presetArray.map((p: any) => { + if (!p.id) { + p.id = crypto.randomUUID(); + needsMigration = true; + } + return p as VolumePreset; + }); + + if (needsMigration) { + await Preferences.set({ + key: UserPreference.VOLUME_PRESETS, + value: JSON.stringify(migratedArray) + }); + } + + return migratedArray; } } catch (error) { console.error('VolumePresetsService: Failed to load preset from user preferences', error); @@ -42,7 +60,14 @@ export class VolumePresetsService { async savePreset(newPreset: VolumePreset): Promise { const existingPresets = await this.loadPresetsFromPreferences(); - existingPresets.push(newPreset); + const existingIndex = existingPresets.findIndex((p: VolumePreset) => p.id === newPreset.id); + + if (existingIndex >= 0) { + existingPresets[existingIndex] = newPreset; + } else { + existingPresets.push(newPreset); + } + try { await Preferences.set({ key: UserPreference.VOLUME_PRESETS, @@ -68,7 +93,7 @@ export class VolumePresetsService { async deletePreset(preset: VolumePreset): Promise { let existingPresets = await this.loadPresetsFromPreferences(); - existingPresets = existingPresets.filter((p: VolumePreset) => p.presetName !== preset.presetName); + existingPresets = existingPresets.filter((p: VolumePreset) => p.id !== preset.id); try { await Preferences.set({ key: UserPreference.VOLUME_PRESETS,