mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-27 03:06:41 +00:00
Handle resolve media and cannot play errors (#11878)
This commit is contained in:
parent
89e0bb3f16
commit
437de42c55
@ -9,6 +9,8 @@ import {
|
|||||||
import { ResolvedMediaSource } from "../../data/media_source";
|
import { ResolvedMediaSource } from "../../data/media_source";
|
||||||
import { HomeAssistant } from "../../types";
|
import { HomeAssistant } from "../../types";
|
||||||
|
|
||||||
|
export const ERR_UNSUPPORTED_MEDIA = "Unsupported Media";
|
||||||
|
|
||||||
export class BrowserMediaPlayer {
|
export class BrowserMediaPlayer {
|
||||||
private player: HTMLAudioElement;
|
private player: HTMLAudioElement;
|
||||||
|
|
||||||
@ -25,6 +27,9 @@ export class BrowserMediaPlayer {
|
|||||||
private onChange: () => void
|
private onChange: () => void
|
||||||
) {
|
) {
|
||||||
const player = new Audio(this.resolved.url);
|
const player = new Audio(this.resolved.url);
|
||||||
|
if (player.canPlayType(resolved.mime_type) === "") {
|
||||||
|
throw new Error(ERR_UNSUPPORTED_MEDIA);
|
||||||
|
}
|
||||||
player.autoplay = true;
|
player.autoplay = true;
|
||||||
player.volume = volume;
|
player.volume = volume;
|
||||||
player.addEventListener("play", this._handleChange);
|
player.addEventListener("play", this._handleChange);
|
||||||
|
@ -49,9 +49,13 @@ import {
|
|||||||
SUPPORT_VOLUME_SET,
|
SUPPORT_VOLUME_SET,
|
||||||
} from "../../data/media-player";
|
} from "../../data/media-player";
|
||||||
import { ResolvedMediaSource } from "../../data/media_source";
|
import { ResolvedMediaSource } from "../../data/media_source";
|
||||||
|
import { showAlertDialog } from "../../dialogs/generic/show-dialog-box";
|
||||||
import type { HomeAssistant } from "../../types";
|
import type { HomeAssistant } from "../../types";
|
||||||
import "../lovelace/components/hui-marquee";
|
import "../lovelace/components/hui-marquee";
|
||||||
import { BrowserMediaPlayer } from "./browser-media-player";
|
import {
|
||||||
|
BrowserMediaPlayer,
|
||||||
|
ERR_UNSUPPORTED_MEDIA,
|
||||||
|
} from "./browser-media-player";
|
||||||
|
|
||||||
declare global {
|
declare global {
|
||||||
interface HASSDomEvents {
|
interface HASSDomEvents {
|
||||||
@ -125,6 +129,7 @@ export class BarMediaPlayer extends LitElement {
|
|||||||
throw Error("Only browser supported");
|
throw Error("Only browser supported");
|
||||||
}
|
}
|
||||||
this._tearDownBrowserPlayer();
|
this._tearDownBrowserPlayer();
|
||||||
|
try {
|
||||||
this._browserPlayer = new BrowserMediaPlayer(
|
this._browserPlayer = new BrowserMediaPlayer(
|
||||||
this.hass,
|
this.hass,
|
||||||
item,
|
item,
|
||||||
@ -132,6 +137,17 @@ export class BarMediaPlayer extends LitElement {
|
|||||||
this._browserPlayerVolume,
|
this._browserPlayerVolume,
|
||||||
() => this.requestUpdate("_browserPlayer")
|
() => this.requestUpdate("_browserPlayer")
|
||||||
);
|
);
|
||||||
|
} catch (err: any) {
|
||||||
|
if (err.message === ERR_UNSUPPORTED_MEDIA) {
|
||||||
|
showAlertDialog(this, {
|
||||||
|
text: this.hass.localize(
|
||||||
|
"ui.components.media-browser.media_not_supported"
|
||||||
|
),
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}
|
||||||
this._newMediaExpected = false;
|
this._newMediaExpected = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,7 +27,10 @@ import {
|
|||||||
MediaPickedEvent,
|
MediaPickedEvent,
|
||||||
MediaPlayerItem,
|
MediaPlayerItem,
|
||||||
} from "../../data/media-player";
|
} from "../../data/media-player";
|
||||||
import { resolveMediaSource } from "../../data/media_source";
|
import {
|
||||||
|
ResolvedMediaSource,
|
||||||
|
resolveMediaSource,
|
||||||
|
} from "../../data/media_source";
|
||||||
import "../../layouts/ha-app-layout";
|
import "../../layouts/ha-app-layout";
|
||||||
import { haStyle } from "../../resources/styles";
|
import { haStyle } from "../../resources/styles";
|
||||||
import type { HomeAssistant, Route } from "../../types";
|
import type { HomeAssistant, Route } from "../../types";
|
||||||
@ -224,11 +227,19 @@ class PanelMediaBrowser extends LitElement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this._player.showResolvingNewMediaPicked();
|
this._player.showResolvingNewMediaPicked();
|
||||||
|
let resolvedUrl: ResolvedMediaSource;
|
||||||
const resolvedUrl = await resolveMediaSource(
|
try {
|
||||||
this.hass,
|
resolvedUrl = await resolveMediaSource(this.hass, item.media_content_id);
|
||||||
item.media_content_id
|
} catch (err: any) {
|
||||||
);
|
showAlertDialog(this, {
|
||||||
|
title: this.hass.localize(
|
||||||
|
"ui.components.media-browser.media_browsing_error"
|
||||||
|
),
|
||||||
|
text: err.message,
|
||||||
|
});
|
||||||
|
this._player.hideResolvingNewMediaPicked();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (resolvedUrl.mime_type.startsWith("audio/")) {
|
if (resolvedUrl.mime_type.startsWith("audio/")) {
|
||||||
this._player.playItem(item, resolvedUrl);
|
this._player.playItem(item, resolvedUrl);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user