Fix backup forever retention settings (#24299)

Fix forever retention settings
This commit is contained in:
Wendelin 2025-02-18 14:05:04 +01:00 committed by GitHub
parent d387f19a31
commit 24211d5f25
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -46,7 +46,7 @@ enum BackupScheduleTime {
} }
interface RetentionData { interface RetentionData {
type: "copies" | "days"; type: "copies" | "days" | "forever";
value: number; value: number;
} }
@ -55,7 +55,7 @@ const RETENTION_PRESETS: Record<
RetentionData RetentionData
> = { > = {
copies_3: { type: "copies", value: 3 }, copies_3: { type: "copies", value: 3 },
forever: { type: "days", value: 0 }, forever: { type: "forever", value: 0 },
}; };
const SCHEDULE_OPTIONS = [ const SCHEDULE_OPTIONS = [
@ -79,7 +79,10 @@ const computeRetentionPreset = (
data: RetentionData data: RetentionData
): RetentionPreset | undefined => { ): RetentionPreset | undefined => {
for (const [key, value] of Object.entries(RETENTION_PRESETS)) { for (const [key, value] of Object.entries(RETENTION_PRESETS)) {
if (value.type === data.type && value.value === data.value) { if (
value.type === data.type &&
(value.type === RetentionPreset.FOREVER || value.value === data.value)
) {
return key as RetentionPreset; return key as RetentionPreset;
} }
} }
@ -92,7 +95,7 @@ interface FormData {
time?: string | null; time?: string | null;
days: BackupDay[]; days: BackupDay[];
retention: { retention: {
type: "copies" | "days"; type: "copies" | "days" | "forever";
value: number; value: number;
}; };
} }
@ -142,7 +145,12 @@ class HaBackupConfigSchedule extends LitElement {
? config.schedule.days ? config.schedule.days
: [], : [],
retention: { retention: {
type: config.retention.days != null ? "days" : "copies", type:
config.retention.days === null && config.retention.copies === null
? "forever"
: config.retention.days != null
? "days"
: "copies",
value: config.retention.days ?? config.retention.copies ?? 3, value: config.retention.days ?? config.retention.copies ?? 3,
}, },
}; };
@ -160,9 +168,11 @@ class HaBackupConfigSchedule extends LitElement {
: [], : [],
}, },
retention: retention:
data.retention.type === "days" data.retention.type === "forever"
? { days: data.retention.value, copies: null } ? { days: null, copies: null }
: { copies: data.retention.value, days: null }, : data.retention.type === "days"
? { days: data.retention.value, copies: null }
: { copies: data.retention.value, days: null },
}; };
fireEvent(this, "value-changed", { value: this.value }); fireEvent(this, "value-changed", { value: this.value });
@ -481,9 +491,19 @@ class HaBackupConfigSchedule extends LitElement {
private _retentionPresetChanged(ev) { private _retentionPresetChanged(ev) {
ev.stopPropagation(); ev.stopPropagation();
const target = ev.currentTarget as HaMdSelect; const target = ev.currentTarget as HaMdSelect;
const value = target.value as RetentionPreset; let value = target.value as RetentionPreset;
// custom needs to have a type of days or copies, set it to default copies 3
if (
value === RetentionPreset.CUSTOM &&
this._retentionPreset === RetentionPreset.FOREVER
) {
this._retentionPreset = value;
value = RetentionPreset.COPIES_3;
} else {
this._retentionPreset = value;
}
this._retentionPreset = value;
if (value !== RetentionPreset.CUSTOM) { if (value !== RetentionPreset.CUSTOM) {
const data = this._getData(this.value); const data = this._getData(this.value);
const retention = RETENTION_PRESETS[value]; const retention = RETENTION_PRESETS[value];
@ -493,7 +513,7 @@ class HaBackupConfigSchedule extends LitElement {
} }
this._setData({ this._setData({
...data, ...data,
retention: RETENTION_PRESETS[value], retention,
}); });
} }
} }
@ -504,6 +524,7 @@ class HaBackupConfigSchedule extends LitElement {
const value = parseInt(target.value); const value = parseInt(target.value);
const clamped = clamp(value, MIN_VALUE, MAX_VALUE); const clamped = clamp(value, MIN_VALUE, MAX_VALUE);
const data = this._getData(this.value); const data = this._getData(this.value);
target.value = clamped.toString();
this._setData({ this._setData({
...data, ...data,
retention: { retention: {