Add custom retention info to backup locations (#25318)

* Add retention messages to backup locations

* Fix mobile

* Use join
This commit is contained in:
Wendelin 2025-05-06 13:50:23 +02:00 committed by Bram Kragten
parent b7f866faff
commit 78b2d17f10
2 changed files with 62 additions and 17 deletions

View File

@ -1,5 +1,6 @@
import { mdiCog, mdiDelete, mdiHarddisk, mdiNas } from "@mdi/js"; import { mdiCog, mdiDelete, mdiHarddisk, mdiNas } from "@mdi/js";
import { css, html, LitElement, nothing } from "lit"; import { css, html, LitElement, nothing, type TemplateResult } from "lit";
import { join } from "lit/directives/join";
import { customElement, property, state } from "lit/decorators"; import { customElement, property, state } from "lit/decorators";
import memoizeOne from "memoize-one"; import memoizeOne from "memoize-one";
import { fireEvent } from "../../../../../common/dom/fire_event"; import { fireEvent } from "../../../../../common/dom/fire_event";
@ -57,26 +58,51 @@ class HaBackupConfigAgents extends LitElement {
); );
} }
const texts: (TemplateResult | string)[] = [];
if (isNetworkMountAgent(agentId)) {
texts.push(
this.hass.localize(
"ui.panel.config.backup.agents.network_mount_agent_description"
)
);
}
const encryptionTurnedOff = const encryptionTurnedOff =
this.agentsConfig?.[agentId]?.protected === false; this.agentsConfig?.[agentId]?.protected === false;
if (encryptionTurnedOff) { if (encryptionTurnedOff) {
return html` texts.push(
<span class="dot warning"></span> html`<div class="unencrypted-warning">
<span> <span class="dot warning"></span>
${this.hass.localize( <span>
"ui.panel.config.backup.agents.encryption_turned_off" ${this.hass.localize(
)} "ui.panel.config.backup.agents.encryption_turned_off"
</span> )}
`; </span>
} </div>`
if (isNetworkMountAgent(agentId)) {
return this.hass.localize(
"ui.panel.config.backup.agents.network_mount_agent_description"
); );
} }
return "";
const retention = this.agentsConfig?.[agentId]?.retention;
if (retention) {
if (retention.copies === null && retention.days === null) {
texts.push(
this.hass.localize("ui.panel.config.backup.agents.retention_all")
);
} else {
texts.push(
this.hass.localize(
`ui.panel.config.backup.agents.retention_${retention.copies ? "backups" : "days"}`,
{
count: retention.copies || retention.days,
}
)
);
}
}
return join(texts, html`<span class="separator"> ⸱ </span>`);
} }
private _availableAgents = memoizeOne( private _availableAgents = memoizeOne(
@ -287,6 +313,11 @@ class HaBackupConfigAgents extends LitElement {
gap: 8px; gap: 8px;
line-height: normal; line-height: normal;
} }
.unencrypted-warning {
display: flex;
align-items: center;
gap: 4px;
}
.dot { .dot {
display: block; display: block;
position: relative; position: relative;
@ -294,11 +325,22 @@ class HaBackupConfigAgents extends LitElement {
height: 8px; height: 8px;
background-color: var(--disabled-color); background-color: var(--disabled-color);
border-radius: 50%; border-radius: 50%;
flex: none;
} }
.dot.warning { .dot.warning {
background-color: var(--warning-color); background-color: var(--warning-color);
} }
@media all and (max-width: 500px) {
.separator {
display: none;
}
ha-md-list-item [slot="supporting-text"] {
display: flex;
align-items: flex-start;
flex-direction: column;
justify-content: flex-start;
gap: 4px;
}
}
`; `;
} }

View File

@ -2489,7 +2489,10 @@
"unavailable_agents": "Unavailable locations", "unavailable_agents": "Unavailable locations",
"no_agents": "No locations configured", "no_agents": "No locations configured",
"encryption_turned_off": "Encryption turned off", "encryption_turned_off": "Encryption turned off",
"local_agent": "This system" "local_agent": "This system",
"retention_all": "Keep all backups",
"retention_backups": "Keep {count} {count, plural,\n one {backup}\n other {backups}\n}",
"retention_days": "Keep {count} {count, plural,\n one {day}\n other {days}\n}"
}, },
"data": { "data": {
"ha_settings": "Home Assistant settings", "ha_settings": "Home Assistant settings",