From a371b842da4de41fa6a9637424162c8ef7765d88 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Thu, 2 Jan 2025 15:13:42 +0100 Subject: [PATCH 1/4] Add warning when no backup location is selected (#23550) * Add warning when no backup location is selected * Move to bottom --- src/panels/config/backup/ha-config-backup-settings.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/panels/config/backup/ha-config-backup-settings.ts b/src/panels/config/backup/ha-config-backup-settings.ts index e4b7326adaa7..3387f6e1f8dc 100644 --- a/src/panels/config/backup/ha-config-backup-settings.ts +++ b/src/panels/config/backup/ha-config-backup-settings.ts @@ -8,6 +8,7 @@ import { nextRender } from "../../../common/util/render-status"; import "../../../components/ha-button"; import "../../../components/ha-card"; import "../../../components/ha-icon-next"; +import "../../../components/ha-alert"; import "../../../components/ha-password-field"; import type { BackupConfig } from "../../../data/backup"; import { updateBackupConfig } from "../../../data/backup"; @@ -134,6 +135,14 @@ class HaConfigBackupSettings extends LitElement { .cloudStatus=${this.cloudStatus} @value-changed=${this._agentsConfigChanged} > + ${!this._config.create_backup.agent_ids.length + ? html`You have to select at least one location to create a + backup.
` + : nothing} From 73854efa57a4b5577588d6fe57930b65d64cbfb7 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Thu, 2 Jan 2025 15:13:53 +0100 Subject: [PATCH 2/4] Update change encryption key dialog (#23551) --- .../dialog-change-backup-encryption-key.ts | 42 +++++++++---------- 1 file changed, 19 insertions(+), 23 deletions(-) diff --git a/src/panels/config/backup/dialogs/dialog-change-backup-encryption-key.ts b/src/panels/config/backup/dialogs/dialog-change-backup-encryption-key.ts index 3e140c60f72d..c95fc077c15b 100644 --- a/src/panels/config/backup/dialogs/dialog-change-backup-encryption-key.ts +++ b/src/panels/config/backup/dialogs/dialog-change-backup-encryption-key.ts @@ -92,7 +92,9 @@ class DialogChangeBackupEncryptionKey extends LitElement implements HassDialog { ? "Save current encryption key" : this._step === "new" ? "New encryption key" - : ""; + : this._step === "done" + ? "Save new encryption key" + : ""; return html` @@ -166,10 +168,22 @@ class DialogChangeBackupEncryptionKey extends LitElement implements HassDialog { case "new": return html`

- Keep this encryption key in a safe place, as you will need it to - access your backup, allowing it to be restored. Either record the + All next backups will use the new encryption key. Encryption keeps + your backups private and secure. +

+
+

${this._newEncryptionKey}

+ +
+ `; + case "done": + return html`

+ Keep this new encryption key in a safe place, as you will need it to + access your backups, allowing it to be restored. Either record the characters below or download them as an emergency kit file. - Encryption keeps your backups private and secure.

${this._newEncryptionKey}

@@ -189,18 +203,7 @@ class DialogChangeBackupEncryptionKey extends LitElement implements HassDialog { Download - - `; - case "done": - return html` -
- Casita Home Assistant logo -

Encryption key changed

-
- `; + `; } return nothing; } @@ -303,13 +306,6 @@ class DialogChangeBackupEncryptionKey extends LitElement implements HassDialog { p { margin-top: 0; } - .done { - text-align: center; - font-size: 22px; - font-style: normal; - font-weight: 400; - line-height: 28px; - } `, ]; } From 34bcd5e71ced12f3f354e067d739ebba41c7779d Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Thu, 2 Jan 2025 15:35:22 +0100 Subject: [PATCH 3/4] Backup text updates (#23547) --- .../components/overview/ha-backup-overview-onboarding.ts | 5 +---- .../components/overview/ha-backup-overview-settings.ts | 8 ++++---- .../config/backup/dialogs/dialog-backup-onboarding.ts | 2 +- .../backup/dialogs/show-dialog-backup_onboarding.ts | 1 + src/panels/config/backup/ha-config-backup-backups.ts | 2 +- src/panels/config/backup/ha-config-backup-details.ts | 8 ++++++++ src/panels/config/backup/ha-config-backup-overview.ts | 5 +++-- src/panels/config/backup/ha-config-backup-settings.ts | 2 +- 8 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/panels/config/backup/components/overview/ha-backup-overview-onboarding.ts b/src/panels/config/backup/components/overview/ha-backup-overview-onboarding.ts index ebce3ea554e9..a094cad22d45 100644 --- a/src/panels/config/backup/components/overview/ha-backup-overview-onboarding.ts +++ b/src/panels/config/backup/components/overview/ha-backup-overview-onboarding.ts @@ -37,10 +37,7 @@ class HaBackupOverviewBackups extends LitElement {

Backups are essential for a reliable smart home. They help protect the work you've put into setting up your smart home, and if the - worst happens, you can get back up and running quickly. It is - recommended that you create a backup every day. You should keep - three backups in at least two different locations, one of which - should be off-site. + worst happens, you can get back up and running quickly.

diff --git a/src/panels/config/backup/components/overview/ha-backup-overview-settings.ts b/src/panels/config/backup/components/overview/ha-backup-overview-settings.ts index 5936937b19d5..3b3f56cdfb4f 100644 --- a/src/panels/config/backup/components/overview/ha-backup-overview-settings.ts +++ b/src/panels/config/backup/components/overview/ha-backup-overview-settings.ts @@ -34,7 +34,7 @@ class HaBackupBackupsSummary extends LitElement { const { state: schedule } = config.schedule; if (schedule === BackupScheduleState.NEVER) { - return "Automatic backups are disabled"; + return "Automatic backups are not scheduled"; } let copiesText = "and keep all backups"; @@ -116,7 +116,7 @@ class HaBackupBackupsSummary extends LitElement { return html` -
Automatic backups
+
Backup settings
- Schedule and number of backups to keep + Automatic backup schedule and retention
@@ -174,7 +174,7 @@ class HaBackupBackupsSummary extends LitElement {
- Configure automatic backups + Configure backup settings
diff --git a/src/panels/config/backup/dialogs/dialog-backup-onboarding.ts b/src/panels/config/backup/dialogs/dialog-backup-onboarding.ts index cb5b798c50fa..01f881de5818 100644 --- a/src/panels/config/backup/dialogs/dialog-backup-onboarding.ts +++ b/src/panels/config/backup/dialogs/dialog-backup-onboarding.ts @@ -90,7 +90,7 @@ class DialogBackupOnboarding extends LitElement implements HassDialog { public showDialog(params: BackupOnboardingDialogParams): void { this._params = params; - this._step = STEPS[0]; + this._step = params.skipWelcome ? STEPS[1] : STEPS[0]; this._config = RECOMMENDED_CONFIG; const agents: string[] = []; diff --git a/src/panels/config/backup/dialogs/show-dialog-backup_onboarding.ts b/src/panels/config/backup/dialogs/show-dialog-backup_onboarding.ts index c411d6f0d7bd..0602077fc13d 100644 --- a/src/panels/config/backup/dialogs/show-dialog-backup_onboarding.ts +++ b/src/panels/config/backup/dialogs/show-dialog-backup_onboarding.ts @@ -5,6 +5,7 @@ export interface BackupOnboardingDialogParams { submit?: (value: boolean) => void; cancel?: () => void; cloudStatus?: CloudStatus; + skipWelcome?: boolean; } const loadDialog = () => import("./dialog-backup-onboarding"); diff --git a/src/panels/config/backup/ha-config-backup-backups.ts b/src/panels/config/backup/ha-config-backup-backups.ts index a0675e70b892..18d65557f002 100644 --- a/src/panels/config/backup/ha-config-backup-backups.ts +++ b/src/panels/config/backup/ha-config-backup-backups.ts @@ -304,7 +304,7 @@ class HaConfigBackupBackups extends SubscribeMixin(LitElement) { has-fab .tabs=${[ { - translationKey: "ui.panel.config.backup.caption", + name: "My backups", path: `/config/backup/list`, }, ]} diff --git a/src/panels/config/backup/ha-config-backup-details.ts b/src/panels/config/backup/ha-config-backup-details.ts index 248913fe5e81..8c42bfe69f40 100644 --- a/src/panels/config/backup/ha-config-backup-details.ts +++ b/src/panels/config/backup/ha-config-backup-details.ts @@ -143,6 +143,14 @@ class HaConfigBackupDetails extends LitElement { )} Created + + + ${this._backup.protected + ? "Encrypted AES-128" + : "Not encrypted"} + + Protected +
diff --git a/src/panels/config/backup/ha-config-backup-overview.ts b/src/panels/config/backup/ha-config-backup-overview.ts index bc86bc8cc229..8080aef77bc3 100644 --- a/src/panels/config/backup/ha-config-backup-overview.ts +++ b/src/panels/config/backup/ha-config-backup-overview.ts @@ -73,12 +73,13 @@ class HaConfigBackupOverview extends LitElement { private _handleOnboardingButtonClick(ev) { ev.stopPropagation(); - this._setupAutomaticBackup(); + this._setupAutomaticBackup(true); } - private async _setupAutomaticBackup() { + private async _setupAutomaticBackup(skipWelcome = false) { const success = await showBackupOnboardingDialog(this, { cloudStatus: this.cloudStatus, + skipWelcome, }); if (!success) { return; diff --git a/src/panels/config/backup/ha-config-backup-settings.ts b/src/panels/config/backup/ha-config-backup-settings.ts index 3387f6e1f8dc..8ec6ff125788 100644 --- a/src/panels/config/backup/ha-config-backup-settings.ts +++ b/src/panels/config/backup/ha-config-backup-settings.ts @@ -92,7 +92,7 @@ class HaConfigBackupSettings extends LitElement { back-path="/config/backup" .hass=${this.hass} .narrow=${this.narrow} - .header=${"Automatic backups"} + .header=${"Backup settings"} >
From fa672ffbbae01ec054e4933a4f2af0a83807403c Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Thu, 2 Jan 2025 15:38:11 +0100 Subject: [PATCH 4/4] Backup with db requires config, disabled next if no data is selected (#23549) --- .../config/ha-backup-config-data.ts | 8 +++---- .../backup/dialogs/dialog-generate-backup.ts | 20 ++++++++++++++++- .../backup/ha-config-backup-overview.ts | 22 ++++++++++--------- 3 files changed, 34 insertions(+), 16 deletions(-) diff --git a/src/panels/config/backup/components/config/ha-backup-config-data.ts b/src/panels/config/backup/components/config/ha-backup-config-data.ts index be462ff3e50d..5c3dce968b95 100644 --- a/src/panels/config/backup/components/config/ha-backup-config-data.ts +++ b/src/panels/config/backup/components/config/ha-backup-config-data.ts @@ -138,7 +138,8 @@ class HaBackupConfigData extends LitElement { const include_addons = data.addons_mode === "custom" ? data.addons : []; this.value = { - include_homeassistant: data.homeassistant || this.forceHomeAssistant, + include_homeassistant: + data.homeassistant || data.database || this.forceHomeAssistant, include_addons: include_addons.length ? include_addons : undefined, include_all_addons: data.addons_mode === "all", include_database: data.database, @@ -168,7 +169,7 @@ class HaBackupConfigData extends LitElement { slot="end" @change=${this._switchChanged} .checked=${data.homeassistant} - .disabled=${this.forceHomeAssistant} + .disabled=${this.forceHomeAssistant || data.database} > @@ -296,7 +297,6 @@ class HaBackupConfigData extends LitElement { ...data, [target.id]: target.checked, }); - fireEvent(this, "value-changed", { value: this.value }); } private _selectChanged(ev: Event) { @@ -309,7 +309,6 @@ class HaBackupConfigData extends LitElement { if (target.id === "addons_mode") { this._showAddons = target.value === "custom"; } - fireEvent(this, "value-changed", { value: this.value }); } private _addonsChanged(ev: CustomEvent) { @@ -320,7 +319,6 @@ class HaBackupConfigData extends LitElement { ...data, addons, }); - fireEvent(this, "value-changed", { value: this.value }); } static styles = css` diff --git a/src/panels/config/backup/dialogs/dialog-generate-backup.ts b/src/panels/config/backup/dialogs/dialog-generate-backup.ts index e6185d485883..b8c64c12555a 100644 --- a/src/panels/config/backup/dialogs/dialog-generate-backup.ts +++ b/src/panels/config/backup/dialogs/dialog-generate-backup.ts @@ -209,12 +209,30 @@ class DialogGenerateBackup extends LitElement implements HassDialog { Create backup ` - : html`Next`} + : html`Next`}
`; } + private get _noDataSelected() { + const hassio = isComponentLoaded(this.hass, "hassio"); + if ( + this._formData?.data.include_homeassistant || + this._formData?.data.include_database || + (hassio && this._formData?.data.include_folders?.length) || + (hassio && this._formData?.data.include_all_addons) || + (hassio && this._formData?.data.include_addons?.length) + ) { + return false; + } + return true; + } + private _renderData() { if (!this._formData) { return nothing; diff --git a/src/panels/config/backup/ha-config-backup-overview.ts b/src/panels/config/backup/ha-config-backup-overview.ts index 8080aef77bc3..e039f62eed05 100644 --- a/src/panels/config/backup/ha-config-backup-overview.ts +++ b/src/panels/config/backup/ha-config-backup-overview.ts @@ -189,22 +189,24 @@ class HaConfigBackupOverview extends LitElement { > ` - : html` - - - `} + : this.config + ? html` + + + ` + : nothing} - ${!this._needsOnboarding + ${!this._needsOnboarding && this.config ? html`