Update Error handling (#7007)

Co-authored-by: Bram Kragten <mail@bramkragten.nl>
This commit is contained in:
Zack Barett 2020-09-15 07:32:02 -05:00 committed by GitHub
parent 7d862d6f2a
commit 9659c97978
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 49 additions and 43 deletions

View File

@ -26,7 +26,7 @@ import type { MediaPlayerItem } from "../../data/media-player";
import { import {
browseLocalMediaPlayer, browseLocalMediaPlayer,
browseMediaPlayer, browseMediaPlayer,
BROWSER_SOURCE, BROWSER_PLAYER,
MediaClassBrowserSettings, MediaClassBrowserSettings,
MediaPickedEvent, MediaPickedEvent,
MediaPlayerBrowseAction, MediaPlayerBrowseAction,
@ -109,9 +109,11 @@ export class HaMediaPlayerBrowse extends LitElement {
text: this._renderError(this._error), text: this._renderError(this._error),
}); });
} else { } else {
return html`<div class="container"> return html`
${this._renderError(this._error)} <div class="container">
</div>`; ${this._renderError(this._error)}
</div>
`;
} }
} }
@ -236,7 +238,7 @@ export class HaMediaPlayerBrowse extends LitElement {
</div> </div>
${this._error ${this._error
? html` ? html`
<div class="container error"> <div class="container">
${this._renderError(this._error)} ${this._renderError(this._error)}
</div> </div>
` `
@ -457,7 +459,7 @@ export class HaMediaPlayerBrowse extends LitElement {
mediaContentType?: string mediaContentType?: string
): Promise<MediaPlayerItem> { ): Promise<MediaPlayerItem> {
const itemData = const itemData =
this.entityId !== BROWSER_SOURCE this.entityId !== BROWSER_PLAYER
? await browseMediaPlayer( ? await browseMediaPlayer(
this.hass, this.hass,
this.entityId, this.entityId,
@ -524,7 +526,7 @@ export class HaMediaPlayerBrowse extends LitElement {
</p> </p>
`; `;
} }
return html`<span class="error">err.message</span>`; return html`<span class="error">${err.message}</span>`;
} }
static get styles(): CSSResultArray { static get styles(): CSSResultArray {

View File

@ -1,23 +1,23 @@
import {
mdiAccountMusic,
mdiAccountMusicOutline,
mdiAlbum,
mdiApplication,
mdiDramaMasks,
mdiFileMusic,
mdiFolder,
mdiGamepadVariant,
mdiImage,
mdiMovie,
mdiMusic,
mdiPlaylistMusic,
mdiPodcast,
mdiTelevisionClassic,
mdiVideo,
mdiWeb,
} from "@mdi/js";
import type { HassEntity } from "home-assistant-js-websocket"; import type { HassEntity } from "home-assistant-js-websocket";
import type { HomeAssistant } from "../types"; import type { HomeAssistant } from "../types";
import {
mdiFolder,
mdiPlaylistMusic,
mdiFileMusic,
mdiAlbum,
mdiMusic,
mdiTelevisionClassic,
mdiMovie,
mdiVideo,
mdiImage,
mdiWeb,
mdiGamepadVariant,
mdiAccountMusic,
mdiPodcast,
mdiApplication,
mdiAccountMusicOutline,
mdiDramaMasks,
} from "@mdi/js";
export const SUPPORT_PAUSE = 1; export const SUPPORT_PAUSE = 1;
export const SUPPORT_SEEK = 2; export const SUPPORT_SEEK = 2;
@ -38,7 +38,7 @@ export const CONTRAST_RATIO = 4.5;
export type MediaPlayerBrowseAction = "pick" | "play"; export type MediaPlayerBrowseAction = "pick" | "play";
export const BROWSER_SOURCE = "browser"; export const BROWSER_PLAYER = "browser";
export type MediaClassBrowserSetting = { export type MediaClassBrowserSetting = {
icon: string; icon: string;

View File

@ -17,7 +17,7 @@ import { supportsFeature } from "../../common/entity/supports-feature";
import "../../components/ha-menu-button"; import "../../components/ha-menu-button";
import "../../components/media-player/ha-media-player-browse"; import "../../components/media-player/ha-media-player-browse";
import { import {
BROWSER_SOURCE, BROWSER_PLAYER,
MediaPickedEvent, MediaPickedEvent,
SUPPORT_BROWSE_MEDIA, SUPPORT_BROWSE_MEDIA,
} from "../../data/media-player"; } from "../../data/media-player";
@ -36,7 +36,7 @@ class PanelMediaBrowser extends LitElement {
// @ts-ignore // @ts-ignore
@LocalStorage("mediaBrowseEntityId", true) @LocalStorage("mediaBrowseEntityId", true)
private _entityId = BROWSER_SOURCE; private _entityId = BROWSER_PLAYER;
protected render(): TemplateResult { protected render(): TemplateResult {
const stateObj = this._entityId const stateObj = this._entityId
@ -44,7 +44,7 @@ class PanelMediaBrowser extends LitElement {
: undefined; : undefined;
const title = const title =
this._entityId === BROWSER_SOURCE this._entityId === BROWSER_PLAYER
? `${this.hass.localize("ui.components.media-browser.web-browser")}` ? `${this.hass.localize("ui.components.media-browser.web-browser")}`
: stateObj?.attributes.friendly_name : stateObj?.attributes.friendly_name
? `${stateObj?.attributes.friendly_name}` ? `${stateObj?.attributes.friendly_name}`
@ -95,7 +95,7 @@ class PanelMediaBrowser extends LitElement {
ev: HASSDomEvent<MediaPickedEvent> ev: HASSDomEvent<MediaPickedEvent>
): Promise<void> { ): Promise<void> {
const item = ev.detail.item; const item = ev.detail.item;
if (this._entityId === BROWSER_SOURCE) { if (this._entityId === BROWSER_PLAYER) {
const resolvedUrl: any = await this.hass.callWS({ const resolvedUrl: any = await this.hass.callWS({
type: "media_source/resolve_media", type: "media_source/resolve_media",
media_content_id: item.media_content_id, media_content_id: item.media_content_id,

View File

@ -1,3 +1,5 @@
import "@material/mwc-list/mwc-list";
import "@material/mwc-list/mwc-list-item";
import "@polymer/paper-item/paper-item"; import "@polymer/paper-item/paper-item";
import "@polymer/paper-listbox/paper-listbox"; import "@polymer/paper-listbox/paper-listbox";
import { import {
@ -13,7 +15,8 @@ import { fireEvent } from "../../common/dom/fire_event";
import { computeStateName } from "../../common/entity/compute_state_name"; import { computeStateName } from "../../common/entity/compute_state_name";
import { compare } from "../../common/string/compare"; import { compare } from "../../common/string/compare";
import { createCloseHeading } from "../../components/ha-dialog"; import { createCloseHeading } from "../../components/ha-dialog";
import { BROWSER_SOURCE } from "../../data/media-player"; import { UNAVAILABLE_STATES } from "../../data/entity";
import { BROWSER_PLAYER } from "../../data/media-player";
import { haStyleDialog } from "../../resources/styles"; import { haStyleDialog } from "../../resources/styles";
import type { HomeAssistant } from "../../types"; import type { HomeAssistant } from "../../types";
import type { SelectMediaPlayerDialogParams } from "./show-select-media-source-dialog"; import type { SelectMediaPlayerDialogParams } from "./show-select-media-source-dialog";
@ -49,30 +52,31 @@ export class HuiDialogSelectMediaPlayer extends LitElement {
)} )}
@closed=${this.closeDialog} @closed=${this.closeDialog}
> >
<paper-listbox <mwc-list>
attr-for-selected="itemName" <mwc-list-item .player=${BROWSER_PLAYER} @click=${this._selectPlayer}
@iron-select=${this._selectSource}
><paper-item .itemName=${BROWSER_SOURCE}
>${this.hass.localize( >${this.hass.localize(
"ui.components.media-browser.web-browser" "ui.components.media-browser.web-browser"
)}</paper-item )}</mwc-list-item
> >
${this._params.mediaSources ${this._params.mediaSources
.sort((a, b) => compare(computeStateName(a), computeStateName(b))) .sort((a, b) => compare(computeStateName(a), computeStateName(b)))
.map( .map(
(source) => html` (source) => html`
<paper-item .itemName=${source.entity_id} <mwc-list-item
>${computeStateName(source)}</paper-item .disabled=${UNAVAILABLE_STATES.includes(source.state)}
.player=${source.entity_id}
@click=${this._selectPlayer}
>${computeStateName(source)}</mwc-list-item
> >
` `
)} )}
</paper-listbox> </mwc-list>
</ha-dialog> </ha-dialog>
`; `;
} }
private _selectSource(ev: CustomEvent): void { private _selectPlayer(ev: CustomEvent): void {
const entityId = ev.detail.item.itemName; const entityId = (ev.currentTarget as any).player;
this._params!.sourceSelectedCallback(entityId); this._params!.sourceSelectedCallback(entityId);
this.closeDialog(); this.closeDialog();
} }
@ -84,8 +88,8 @@ export class HuiDialogSelectMediaPlayer extends LitElement {
ha-dialog { ha-dialog {
--dialog-content-padding: 0 24px 20px; --dialog-content-padding: 0 24px 20px;
} }
paper-item { mwc-list-item[disabled] {
cursor: pointer; --mdc-theme-text-primary-on-background: var(--disabled-text-color);
} }
`, `,
]; ];