Skip to content

Commit c592c89

Browse files
committed
added ability to overwrite existing presets
1 parent 21d4c4c commit c592c89

6 files changed

Lines changed: 61 additions & 16 deletions

File tree

native/app/Source/Audio/Effects/Equalizers/Basic/BasicEqualizerDataBus.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ class BasicEqualizerDataBus: DataBus {
2424

2525
self.on(.GET, "/presets/selected") { data, _ in
2626
let preset = BasicEqualizer.getPreset(id: self.state.selectedPresetId)
27-
Console.log(preset)
2827
return JSON(preset!.dictionary)
2928
}
3029

ui/src/app/components/confirm-dialog/confirm-dialog.component.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44
</eqm-label>
55
<ng-content></ng-content>
66
<div fxLayout="row" fxLayoutGap="10px">
7-
<eqm-button type="narrow" fxFlex (pressed)="cancel()">
8-
<eqm-label>{{cancelText}}</eqm-label>
9-
</eqm-button>
107
<eqm-button type="narrow" fxFlex (pressed)="confirm()">
118
<eqm-label>{{confirmText}}</eqm-label>
129
</eqm-button>
10+
<eqm-button type="narrow" fxFlex (pressed)="cancel()">
11+
<eqm-label>{{cancelText}}</eqm-label>
12+
</eqm-button>
1313
</div>
1414
</div>

ui/src/app/sections/effects/equalizers/advanced-equalizer/advanced-equalizer.component.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,18 @@ export class AdvancedEqualizerComponent extends EqualizerComponent implements On
211211

212212
async savePreset (name: string) {
213213
const { gains } = this.selectedPreset
214-
this.selectedPreset = await this.service.createPreset({ name, gains }, true)
214+
const existingUserPreset = this.presets.filter(p => !p.isDefault).find(p => p.name === name)
215+
if (existingUserPreset) {
216+
// Overwrite
217+
await this.service.updatePreset({ id: existingUserPreset.id, name, gains }, {
218+
select: true
219+
})
220+
this.selectedPreset = existingUserPreset
221+
} else {
222+
// Create
223+
this.selectedPreset = await this.service.createPreset({ name, gains }, true)
224+
}
225+
await this.syncPresets()
215226
}
216227

217228
async deletePreset () {

ui/src/app/sections/effects/equalizers/basic-equalizer/basic-equalizer.component.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,16 @@ export class BasicEqualizerComponent extends EqualizerComponent implements OnIni
134134

135135
async savePreset (name: string) {
136136
const { gains, peakLimiter } = this.selectedPreset
137-
await this.service.createPreset({ name, gains, peakLimiter }, true)
137+
const existingUserPreset = this.presets.filter(p => !p.isDefault).find(p => p.name === name)
138+
if (existingUserPreset) {
139+
// Overwrite
140+
await this.service.updatePreset({ id: existingUserPreset.id, name, gains, peakLimiter }, {
141+
select: true
142+
})
143+
} else {
144+
// Create
145+
await this.service.createPreset({ name, gains, peakLimiter }, true)
146+
}
138147
await this.syncPresets()
139148
}
140149

ui/src/app/sections/effects/equalizers/equalizer.component.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ export abstract class EqualizerComponent {
99
@Input() animationFps = 30
1010
@Input() settingsDialog: MatDialogRef<OptionsDialogComponent, any>
1111
abstract settings: Options
12-
abstract async sync ()
12+
abstract sync (): Promise<any>
1313
async selected () {
1414
await this.sync()
1515
}

ui/src/app/sections/effects/equalizers/presets/equalizer-presets.component.ts

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,36 +29,62 @@ export class EqualizerPresetsComponent implements OnInit {
2929
ngOnInit () {
3030
}
3131

32-
async savePreset () {
33-
const dialog = this.dialog.open(PromptDialogComponent, {
32+
async savePreset (presetName?: string) {
33+
presetName = await this.dialog.open(PromptDialogComponent, {
3434
hasBackdrop: true,
3535
disableClose: true,
3636
data: {
3737
confirmText: 'Save',
3838
cancelText: 'Cancel',
3939
text: 'Please enter a name',
40-
placeholder: 'New Preset name'
40+
placeholder: 'New Preset name',
41+
prompt: presetName
4142
}
42-
})
43+
}).afterClosed().toPromise()
4344

44-
const presetName = await dialog.afterClosed().toPromise()
4545
if (presetName) {
46+
const existingPreset = this.presets.find(preset => preset.name === presetName)
47+
if (existingPreset) {
48+
if (existingPreset.isDefault) {
49+
const saveAnyway: boolean = await this.dialog.open(ConfirmDialogComponent, {
50+
hasBackdrop: true,
51+
disableClose: true,
52+
data: {
53+
confirmText: 'Yes, save',
54+
cancelText: 'No, cancel',
55+
text: `A Default preset with this name already exists. Would you like to use this name anyway? You might see Duplicate names in the Preset list.`
56+
}
57+
}).afterClosed().toPromise()
58+
if (!saveAnyway) return this.savePreset(presetName)
59+
} else {
60+
const overwrite: boolean = await this.dialog.open(ConfirmDialogComponent, {
61+
hasBackdrop: true,
62+
disableClose: true,
63+
data: {
64+
confirmText: 'Yes, overwrite',
65+
cancelText: 'No, cancel',
66+
text: `A preset with this name already exists. Would you like to overwrite it?`
67+
}
68+
}).afterClosed().toPromise()
69+
if (!overwrite) return this.savePreset(presetName)
70+
}
71+
}
4672
this.presetSaved.emit(presetName)
4773
}
4874
}
4975

5076
async deletePreset () {
51-
const dialog = this.dialog.open(ConfirmDialogComponent, {
77+
const shouldDelete = await this.dialog.open(ConfirmDialogComponent, {
5278
hasBackdrop: true,
5379
disableClose: true,
5480
data: {
5581
confirmText: 'Yes, remove',
5682
cancelText: 'No, cancel',
57-
text: `Are you sure you want to delete this Preset?`
83+
text: `Are you sure you want to remove this Preset?`
5884
}
59-
})
85+
}).afterClosed().toPromise()
6086

61-
if (await dialog.afterClosed().toPromise()) {
87+
if (shouldDelete) {
6288
this.presetDeleted.emit()
6389
}
6490
}

0 commit comments

Comments
 (0)