Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/app/model/volume-presets.model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ export interface VolumePresetData {
}

export interface VolumePreset {
id: string;
presetName: string;
presetDescription?: string;
data: VolumePresetData[];
Expand Down
7 changes: 1 addition & 6 deletions src/app/pages/volume-preset-edit/volume-preset-edit.page.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 = '';

Expand Down Expand Up @@ -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 {
Expand Down
35 changes: 30 additions & 5 deletions src/app/services/volume-presets.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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<VolumePreset[]> {
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);
Expand All @@ -42,7 +60,14 @@ export class VolumePresetsService {

async savePreset(newPreset: VolumePreset): Promise<VolumePreset[]> {
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,
Expand All @@ -68,7 +93,7 @@ export class VolumePresetsService {

async deletePreset(preset: VolumePreset): Promise<VolumePreset[]> {
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,
Expand Down
Loading