mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-21 08:16:36 +00:00
Fixes for snapshot upload during onboarding (#7390)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
This commit is contained in:
parent
7c51001c3c
commit
eec4a91ad8
@ -1,4 +1,3 @@
|
|||||||
import "../../../src/components/ha-file-upload";
|
|
||||||
import "@material/mwc-icon-button/mwc-icon-button";
|
import "@material/mwc-icon-button/mwc-icon-button";
|
||||||
import { mdiFolderUpload } from "@mdi/js";
|
import { mdiFolderUpload } from "@mdi/js";
|
||||||
import "@polymer/iron-input/iron-input";
|
import "@polymer/iron-input/iron-input";
|
||||||
@ -12,13 +11,15 @@ import {
|
|||||||
} from "lit-element";
|
} from "lit-element";
|
||||||
import { fireEvent } from "../../../src/common/dom/fire_event";
|
import { fireEvent } from "../../../src/common/dom/fire_event";
|
||||||
import "../../../src/components/ha-circular-progress";
|
import "../../../src/components/ha-circular-progress";
|
||||||
|
import "../../../src/components/ha-file-upload";
|
||||||
import "../../../src/components/ha-svg-icon";
|
import "../../../src/components/ha-svg-icon";
|
||||||
|
import { extractApiErrorMessage } from "../../../src/data/hassio/common";
|
||||||
import {
|
import {
|
||||||
HassioSnapshot,
|
HassioSnapshot,
|
||||||
uploadSnapshot,
|
uploadSnapshot,
|
||||||
} from "../../../src/data/hassio/snapshot";
|
} from "../../../src/data/hassio/snapshot";
|
||||||
import { HomeAssistant } from "../../../src/types";
|
|
||||||
import { showAlertDialog } from "../../../src/dialogs/generic/show-dialog-box";
|
import { showAlertDialog } from "../../../src/dialogs/generic/show-dialog-box";
|
||||||
|
import { HomeAssistant } from "../../../src/types";
|
||||||
|
|
||||||
declare global {
|
declare global {
|
||||||
interface HASSDomEvents {
|
interface HASSDomEvents {
|
||||||
@ -65,7 +66,7 @@ export class HassioUploadSnapshot extends LitElement {
|
|||||||
} catch (err) {
|
} catch (err) {
|
||||||
showAlertDialog(this, {
|
showAlertDialog(this, {
|
||||||
title: "Upload failed",
|
title: "Upload failed",
|
||||||
text: err.toString(),
|
text: extractApiErrorMessage(err),
|
||||||
confirmText: "ok",
|
confirmText: "ok",
|
||||||
});
|
});
|
||||||
} finally {
|
} finally {
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import "@material/mwc-button";
|
import "@material/mwc-button";
|
||||||
import { mdiClose, mdiDelete, mdiDownload, mdiHistory } from "@mdi/js";
|
import { mdiClose, mdiDelete, mdiDownload, mdiHistory } from "@mdi/js";
|
||||||
import { PaperCheckboxElement } from "@polymer/paper-checkbox/paper-checkbox";
|
import "@polymer/paper-checkbox/paper-checkbox";
|
||||||
|
import type { PaperCheckboxElement } from "@polymer/paper-checkbox/paper-checkbox";
|
||||||
import "@polymer/paper-input/paper-input";
|
import "@polymer/paper-input/paper-input";
|
||||||
import {
|
import {
|
||||||
css,
|
css,
|
||||||
|
@ -22,8 +22,8 @@ export const hassioApiResultExtractor = <T>(response: HassioResponse<T>) =>
|
|||||||
export const extractApiErrorMessage = (error: any): string => {
|
export const extractApiErrorMessage = (error: any): string => {
|
||||||
return typeof error === "object"
|
return typeof error === "object"
|
||||||
? typeof error.body === "object"
|
? typeof error.body === "object"
|
||||||
? error.body.message || "Unknown error, see logs"
|
? error.body.message || "Unknown error, see supervisor logs"
|
||||||
: error.body || "Unknown error, see logs"
|
: error.body || error.message || "Unknown error, see supervisor logs"
|
||||||
: error;
|
: error;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -15,6 +15,10 @@ import { showSnapshotUploadDialog } from "../../hassio/src/dialogs/snapshot/show
|
|||||||
import { navigate } from "../common/navigate";
|
import { navigate } from "../common/navigate";
|
||||||
import type { LocalizeFunc } from "../common/translations/localize";
|
import type { LocalizeFunc } from "../common/translations/localize";
|
||||||
import "../components/ha-card";
|
import "../components/ha-card";
|
||||||
|
import {
|
||||||
|
extractApiErrorMessage,
|
||||||
|
ignoredStatusCodes,
|
||||||
|
} from "../data/hassio/common";
|
||||||
import { makeDialogManager } from "../dialogs/make-dialog-manager";
|
import { makeDialogManager } from "../dialogs/make-dialog-manager";
|
||||||
import { ProvideHassLitMixin } from "../mixins/provide-hass-lit-mixin";
|
import { ProvideHassLitMixin } from "../mixins/provide-hass-lit-mixin";
|
||||||
import { haStyle } from "../resources/styles";
|
import { haStyle } from "../resources/styles";
|
||||||
@ -32,9 +36,9 @@ class OnboardingRestoreSnapshot extends ProvideHassLitMixin(LitElement) {
|
|||||||
|
|
||||||
@property() public language!: string;
|
@property() public language!: string;
|
||||||
|
|
||||||
@property({ type: Boolean }) private restoring = false;
|
@property({ type: Boolean }) public restoring = false;
|
||||||
|
|
||||||
@internalProperty() private _log?: string;
|
@internalProperty() private _log = "";
|
||||||
|
|
||||||
@internalProperty() private _showFullLog = false;
|
@internalProperty() private _showFullLog = false;
|
||||||
|
|
||||||
@ -45,17 +49,15 @@ class OnboardingRestoreSnapshot extends ProvideHassLitMixin(LitElement) {
|
|||||||
"ui.panel.page-onboarding.restore.in_progress"
|
"ui.panel.page-onboarding.restore.in_progress"
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
${this._log
|
${this._showFullLog
|
||||||
? this._showFullLog
|
? html`<hassio-ansi-to-html .content=${this._log}>
|
||||||
? html`<hassio-ansi-to-html .content=${this._log}>
|
</hassio-ansi-to-html>`
|
||||||
</hassio-ansi-to-html>`
|
: html`<onboarding-loading></onboarding-loading>
|
||||||
: html`<onboarding-loading></onboarding-loading>
|
<hassio-ansi-to-html
|
||||||
<hassio-ansi-to-html
|
class="logentry"
|
||||||
class="logentry"
|
.content=${this._lastLogEntry(this._log)}
|
||||||
.content=${this._lastLogEntry(this._log)}
|
>
|
||||||
>
|
</hassio-ansi-to-html>`}
|
||||||
</hassio-ansi-to-html>`
|
|
||||||
: ""}
|
|
||||||
<div class="card-actions">
|
<div class="card-actions">
|
||||||
<mwc-button @click=${this._toggeFullLog}>
|
<mwc-button @click=${this._toggeFullLog}>
|
||||||
${this._showFullLog
|
${this._showFullLog
|
||||||
@ -83,7 +85,8 @@ class OnboardingRestoreSnapshot extends ProvideHassLitMixin(LitElement) {
|
|||||||
(entry) =>
|
(entry) =>
|
||||||
!entry.includes("/supervisor/logs") &&
|
!entry.includes("/supervisor/logs") &&
|
||||||
!entry.includes("/supervisor/ping") &&
|
!entry.includes("/supervisor/ping") &&
|
||||||
!entry.includes("DEBUG")
|
!entry.includes("DEBUG") &&
|
||||||
|
!entry.includes("TypeError: Failed to fetch")
|
||||||
)
|
)
|
||||||
.join("\n")
|
.join("\n")
|
||||||
.replace(/\s[A-Z]+\s\(\w+\)\s\[[\w.]+\]/gi, "")
|
.replace(/\s[A-Z]+\s\(\w+\)\s\[[\w.]+\]/gi, "")
|
||||||
@ -116,19 +119,33 @@ class OnboardingRestoreSnapshot extends ProvideHassLitMixin(LitElement) {
|
|||||||
const response = await fetch("/api/hassio/supervisor/logs", {
|
const response = await fetch("/api/hassio/supervisor/logs", {
|
||||||
method: "GET",
|
method: "GET",
|
||||||
});
|
});
|
||||||
|
if (response.status === 401) {
|
||||||
|
// If we get a unauthorized response, the restore is done
|
||||||
|
this._restoreDone();
|
||||||
|
} else if (
|
||||||
|
response.status &&
|
||||||
|
!ignoredStatusCodes.has(response.status)
|
||||||
|
) {
|
||||||
|
// Handle error responses
|
||||||
|
this._log += this._filterLogs(extractApiErrorMessage(response));
|
||||||
|
}
|
||||||
const logs = await response.text();
|
const logs = await response.text();
|
||||||
this._log = this._filterLogs(logs);
|
this._log = this._filterLogs(logs);
|
||||||
if (this._log.match(/\d{2}:\d{2}:\d{2}\s.*Restore\s\w+\sdone/)) {
|
if (this._log.match(/\d{2}:\d{2}:\d{2}\s.*Restore\s\w+\sdone/)) {
|
||||||
// The log indicates that the restore done, navigate the user back to base
|
// The log indicates that the restore done, navigate the user back to base
|
||||||
navigate(this, "/", true);
|
this._restoreDone();
|
||||||
location.reload();
|
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
this._log = err.toString();
|
this._log += this._filterLogs(err.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private _restoreDone(): void {
|
||||||
|
navigate(this, "/", true);
|
||||||
|
location.reload();
|
||||||
|
}
|
||||||
|
|
||||||
private _showSnapshotDialog(slug: string): void {
|
private _showSnapshotDialog(slug: string): void {
|
||||||
showHassioSnapshotDialog(this, {
|
showHassioSnapshotDialog(this, {
|
||||||
slug,
|
slug,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user