mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-10 10:56:34 +00:00
Handle missing hass with backup upload during onboarding (#10523)
This commit is contained in:
parent
2bbb4acf3d
commit
12ef191a0f
@ -16,11 +16,9 @@ declare global {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const MAX_FILE_SIZE = 1 * 1024 * 1024 * 1024; // 1GB
|
|
||||||
|
|
||||||
@customElement("hassio-upload-backup")
|
@customElement("hassio-upload-backup")
|
||||||
export class HassioUploadBackup extends LitElement {
|
export class HassioUploadBackup extends LitElement {
|
||||||
public hass!: HomeAssistant;
|
public hass?: HomeAssistant;
|
||||||
|
|
||||||
@state() public value: string | null = null;
|
@state() public value: string | null = null;
|
||||||
|
|
||||||
@ -43,20 +41,6 @@ export class HassioUploadBackup extends LitElement {
|
|||||||
private async _uploadFile(ev) {
|
private async _uploadFile(ev) {
|
||||||
const file = ev.detail.files[0];
|
const file = ev.detail.files[0];
|
||||||
|
|
||||||
if (file.size > MAX_FILE_SIZE) {
|
|
||||||
showAlertDialog(this, {
|
|
||||||
title: "Backup file is too big",
|
|
||||||
text: html`The maximum allowed filesize is 1GB.<br />
|
|
||||||
<a
|
|
||||||
href="https://www.home-assistant.io/hassio/haos_common_tasks/#restoring-a-backup-on-a-new-install"
|
|
||||||
target="_blank"
|
|
||||||
>Have a look here on how to restore it.</a
|
|
||||||
>`,
|
|
||||||
confirmText: "ok",
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!["application/x-tar"].includes(file.type)) {
|
if (!["application/x-tar"].includes(file.type)) {
|
||||||
showAlertDialog(this, {
|
showAlertDialog(this, {
|
||||||
title: "Unsupported file format",
|
title: "Unsupported file format",
|
||||||
|
@ -15,7 +15,7 @@ export class DialogHassioBackupUpload
|
|||||||
extends LitElement
|
extends LitElement
|
||||||
implements HassDialog<HassioBackupUploadDialogParams>
|
implements HassDialog<HassioBackupUploadDialogParams>
|
||||||
{
|
{
|
||||||
@property({ attribute: false }) public hass!: HomeAssistant;
|
@property({ attribute: false }) public hass?: HomeAssistant;
|
||||||
|
|
||||||
@state() private _params?: HassioBackupUploadDialogParams;
|
@state() private _params?: HassioBackupUploadDialogParams;
|
||||||
|
|
||||||
@ -54,7 +54,7 @@ export class DialogHassioBackupUpload
|
|||||||
<ha-header-bar>
|
<ha-header-bar>
|
||||||
<span slot="title"> Upload backup </span>
|
<span slot="title"> Upload backup </span>
|
||||||
<ha-icon-button
|
<ha-icon-button
|
||||||
.label=${this.hass.localize("common.close")}
|
.label=${this.hass?.localize("common.close") || "close"}
|
||||||
.path=${mdiClose}
|
.path=${mdiClose}
|
||||||
slot="actionItems"
|
slot="actionItems"
|
||||||
dialogAction="cancel"
|
dialogAction="cancel"
|
||||||
|
@ -35,7 +35,7 @@ class HassioBackupDialog
|
|||||||
extends LitElement
|
extends LitElement
|
||||||
implements HassDialog<HassioBackupDialogParams>
|
implements HassDialog<HassioBackupDialogParams>
|
||||||
{
|
{
|
||||||
@property({ attribute: false }) public hass!: HomeAssistant;
|
@property({ attribute: false }) public hass?: HomeAssistant;
|
||||||
|
|
||||||
@state() private _error?: string;
|
@state() private _error?: string;
|
||||||
|
|
||||||
@ -77,7 +77,7 @@ class HassioBackupDialog
|
|||||||
<ha-header-bar>
|
<ha-header-bar>
|
||||||
<span slot="title">${this._backup.name}</span>
|
<span slot="title">${this._backup.name}</span>
|
||||||
<ha-icon-button
|
<ha-icon-button
|
||||||
.label=${this.hass.localize("common.close")}
|
.label=${this.hass?.localize("common.close") || "close"}
|
||||||
.path=${mdiClose}
|
.path=${mdiClose}
|
||||||
slot="actionItems"
|
slot="actionItems"
|
||||||
dialogAction="cancel"
|
dialogAction="cancel"
|
||||||
@ -114,7 +114,7 @@ class HassioBackupDialog
|
|||||||
@closed=${stopPropagation}
|
@closed=${stopPropagation}
|
||||||
>
|
>
|
||||||
<ha-icon-button
|
<ha-icon-button
|
||||||
.label=${this.hass.localize("common.menu")}
|
.label=${this.hass!.localize("common.menu")}
|
||||||
.path=${mdiDotsVertical}
|
.path=${mdiDotsVertical}
|
||||||
slot="trigger"
|
slot="trigger"
|
||||||
></ha-icon-button>
|
></ha-icon-button>
|
||||||
@ -192,18 +192,16 @@ class HassioBackupDialog
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!this._dialogParams?.onboarding) {
|
if (!this._dialogParams?.onboarding) {
|
||||||
this.hass
|
this.hass!.callApi(
|
||||||
.callApi(
|
|
||||||
"POST",
|
"POST",
|
||||||
|
|
||||||
`hassio/${
|
`hassio/${
|
||||||
atLeastVersion(this.hass.config.version, 2021, 9)
|
atLeastVersion(this.hass!.config.version, 2021, 9)
|
||||||
? "backups"
|
? "backups"
|
||||||
: "snapshots"
|
: "snapshots"
|
||||||
}/${this._backup!.slug}/restore/partial`,
|
}/${this._backup!.slug}/restore/partial`,
|
||||||
backupDetails
|
backupDetails
|
||||||
)
|
).then(
|
||||||
.then(
|
|
||||||
() => {
|
() => {
|
||||||
this.closeDialog();
|
this.closeDialog();
|
||||||
},
|
},
|
||||||
@ -244,17 +242,15 @@ class HassioBackupDialog
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!this._dialogParams?.onboarding) {
|
if (!this._dialogParams?.onboarding) {
|
||||||
this.hass
|
this.hass!.callApi(
|
||||||
.callApi(
|
|
||||||
"POST",
|
"POST",
|
||||||
`hassio/${
|
`hassio/${
|
||||||
atLeastVersion(this.hass.config.version, 2021, 9)
|
atLeastVersion(this.hass!.config.version, 2021, 9)
|
||||||
? "backups"
|
? "backups"
|
||||||
: "snapshots"
|
: "snapshots"
|
||||||
}/${this._backup!.slug}/restore/full`,
|
}/${this._backup!.slug}/restore/full`,
|
||||||
backupDetails
|
backupDetails
|
||||||
)
|
).then(
|
||||||
.then(
|
|
||||||
() => {
|
() => {
|
||||||
this.closeDialog();
|
this.closeDialog();
|
||||||
},
|
},
|
||||||
@ -283,17 +279,14 @@ class HassioBackupDialog
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.hass
|
this.hass!.callApi(
|
||||||
|
atLeastVersion(this.hass!.config.version, 2021, 9) ? "DELETE" : "POST",
|
||||||
.callApi(
|
|
||||||
atLeastVersion(this.hass.config.version, 2021, 9) ? "DELETE" : "POST",
|
|
||||||
`hassio/${
|
`hassio/${
|
||||||
atLeastVersion(this.hass.config.version, 2021, 9)
|
atLeastVersion(this.hass!.config.version, 2021, 9)
|
||||||
? `backups/${this._backup!.slug}`
|
? `backups/${this._backup!.slug}`
|
||||||
: `snapshots/${this._backup!.slug}/remove`
|
: `snapshots/${this._backup!.slug}/remove`
|
||||||
}`
|
}`
|
||||||
)
|
).then(
|
||||||
.then(
|
|
||||||
() => {
|
() => {
|
||||||
if (this._dialogParams!.onDelete) {
|
if (this._dialogParams!.onDelete) {
|
||||||
this._dialogParams!.onDelete();
|
this._dialogParams!.onDelete();
|
||||||
@ -310,9 +303,9 @@ class HassioBackupDialog
|
|||||||
let signedPath: { path: string };
|
let signedPath: { path: string };
|
||||||
try {
|
try {
|
||||||
signedPath = await getSignedPath(
|
signedPath = await getSignedPath(
|
||||||
this.hass,
|
this.hass!,
|
||||||
`/api/hassio/${
|
`/api/hassio/${
|
||||||
atLeastVersion(this.hass.config.version, 2021, 9)
|
atLeastVersion(this.hass!.config.version, 2021, 9)
|
||||||
? "backups"
|
? "backups"
|
||||||
: "snapshots"
|
: "snapshots"
|
||||||
}/${this._backup!.slug}/download`
|
}/${this._backup!.slug}/download`
|
||||||
|
@ -17,7 +17,7 @@ declare global {
|
|||||||
|
|
||||||
@customElement("ha-file-upload")
|
@customElement("ha-file-upload")
|
||||||
export class HaFileUpload extends LitElement {
|
export class HaFileUpload extends LitElement {
|
||||||
@property({ attribute: false }) public hass!: HomeAssistant;
|
@property({ attribute: false }) public hass?: HomeAssistant;
|
||||||
|
|
||||||
@property() public accept!: string;
|
@property() public accept!: string;
|
||||||
|
|
||||||
@ -88,7 +88,8 @@ export class HaFileUpload extends LitElement {
|
|||||||
<ha-icon-button
|
<ha-icon-button
|
||||||
slot="suffix"
|
slot="suffix"
|
||||||
@click=${this._clearValue}
|
@click=${this._clearValue}
|
||||||
.label=${this.hass.localize("ui.common.close")}
|
.label=${this.hass?.localize("ui.common.close") ||
|
||||||
|
"close"}
|
||||||
.path=${mdiClose}
|
.path=${mdiClose}
|
||||||
></ha-icon-button>
|
></ha-icon-button>
|
||||||
`
|
`
|
||||||
|
@ -79,7 +79,7 @@ export const fetchHassioBackups = async (
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const fetchHassioBackupInfo = async (
|
export const fetchHassioBackupInfo = async (
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant | undefined,
|
||||||
backup: string
|
backup: string
|
||||||
): Promise<HassioBackupDetail> => {
|
): Promise<HassioBackupDetail> => {
|
||||||
if (hass) {
|
if (hass) {
|
||||||
@ -202,7 +202,7 @@ export const createHassioPartialBackup = async (
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const uploadBackup = async (
|
export const uploadBackup = async (
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant | undefined,
|
||||||
file: File
|
file: File
|
||||||
): Promise<HassioResponse<HassioBackup>> => {
|
): Promise<HassioResponse<HassioBackup>> => {
|
||||||
const fd = new FormData();
|
const fd = new FormData();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user