@@ -24,15 +24,33 @@ export class VolumePresetsService {
2424 groupId : currentState . server . groups . find ( ( group : any ) => group . clients ?. some ( ( c : any ) => c . id === client . id ) ) ?. id || '' ,
2525 groupName : currentState . server . groups . find ( ( group : any ) => group . clients ?. some ( ( c : any ) => c . id === client . id ) ) ?. name || '' ,
2626 } ) ) ;
27- return { presetName : 'Preset_' + new Date ( ) . toISOString ( ) . replace ( / [: .] / g, '-' ) , data : preset } ;
27+ return { id : crypto . randomUUID ( ) , presetName : 'Preset_' + new Date ( ) . toISOString ( ) . replace ( / [: .] / g, '-' ) , data : preset } ;
2828 }
2929
3030 async loadPresetsFromPreferences ( ) : Promise < VolumePreset [ ] > {
3131 try {
3232 const result = await Preferences . get ( { key : UserPreference . VOLUME_PRESETS } ) ;
3333 if ( result . value ) {
34- const preset = JSON . parse ( result . value ) ;
35- return Array . isArray ( preset ) ? preset : [ preset ] ;
34+ let presets = JSON . parse ( result . value ) ;
35+ let presetArray = Array . isArray ( presets ) ? presets : [ presets ] ;
36+ let needsMigration = false ;
37+
38+ let migratedArray = presetArray . map ( ( p : any ) => {
39+ if ( ! p . id ) {
40+ p . id = crypto . randomUUID ( ) ;
41+ needsMigration = true ;
42+ }
43+ return p as VolumePreset ;
44+ } ) ;
45+
46+ if ( needsMigration ) {
47+ await Preferences . set ( {
48+ key : UserPreference . VOLUME_PRESETS ,
49+ value : JSON . stringify ( migratedArray )
50+ } ) ;
51+ }
52+
53+ return migratedArray ;
3654 }
3755 } catch ( error ) {
3856 console . error ( 'VolumePresetsService: Failed to load preset from user preferences' , error ) ;
@@ -42,7 +60,14 @@ export class VolumePresetsService {
4260
4361 async savePreset ( newPreset : VolumePreset ) : Promise < VolumePreset [ ] > {
4462 const existingPresets = await this . loadPresetsFromPreferences ( ) ;
45- existingPresets . push ( newPreset ) ;
63+ const existingIndex = existingPresets . findIndex ( ( p : VolumePreset ) => p . id === newPreset . id ) ;
64+
65+ if ( existingIndex >= 0 ) {
66+ existingPresets [ existingIndex ] = newPreset ;
67+ } else {
68+ existingPresets . push ( newPreset ) ;
69+ }
70+
4671 try {
4772 await Preferences . set ( {
4873 key : UserPreference . VOLUME_PRESETS ,
@@ -68,7 +93,7 @@ export class VolumePresetsService {
6893
6994 async deletePreset ( preset : VolumePreset ) : Promise < VolumePreset [ ] > {
7095 let existingPresets = await this . loadPresetsFromPreferences ( ) ;
71- existingPresets = existingPresets . filter ( ( p : VolumePreset ) => p . presetName !== preset . presetName ) ;
96+ existingPresets = existingPresets . filter ( ( p : VolumePreset ) => p . id !== preset . id ) ;
7297 try {
7398 await Preferences . set ( {
7499 key : UserPreference . VOLUME_PRESETS ,
0 commit comments