mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
use shared playerselection
This commit is contained in:
parent
db9eb799d9
commit
bd5d600bd8
7 changed files with 44 additions and 35 deletions
|
@ -14,12 +14,12 @@
|
|||
},
|
||||
"devDependencies": {},
|
||||
"ignore": [],
|
||||
"version": "1.4.476",
|
||||
"_release": "1.4.476",
|
||||
"version": "1.4.477",
|
||||
"_release": "1.4.477",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "1.4.476",
|
||||
"commit": "802991db23eeaba201548ad9987282a2cab2671a"
|
||||
"tag": "1.4.477",
|
||||
"commit": "15c8b92f1398ccfe25f1d820994c162453f529cf"
|
||||
},
|
||||
"_source": "https://github.com/MediaBrowser/emby-webcomponents.git",
|
||||
"_target": "^1.2.1",
|
||||
|
|
|
@ -845,10 +845,6 @@ define(['events', 'datetime', 'appSettings', 'pluginManager', 'userSettings', 'g
|
|||
|
||||
var val = enabled ? '1' : '0';
|
||||
appSettings.set('displaymirror', val);
|
||||
|
||||
if (enabled) {
|
||||
mirrorIfEnabled();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
232
dashboard-ui/bower_components/emby-webcomponents/playback/playerselection.js
vendored
Normal file
232
dashboard-ui/bower_components/emby-webcomponents/playback/playerselection.js
vendored
Normal file
|
@ -0,0 +1,232 @@
|
|||
define(['appSettings', 'events', 'browser', 'libraryMenu', 'loading', 'playbackManager', 'embyRouter', 'globalize'], function (appSettings, events, browser, libraryMenu, loading, playbackManager, embyRouter, globalize) {
|
||||
'use strict';
|
||||
|
||||
var currentDisplayInfo;
|
||||
|
||||
function mirrorItem(info, player) {
|
||||
|
||||
var item = info.item;
|
||||
|
||||
playbackManager.displayContent({
|
||||
|
||||
ItemName: item.Name,
|
||||
ItemId: item.Id,
|
||||
ItemType: item.Type,
|
||||
Context: info.context
|
||||
}, player);
|
||||
}
|
||||
|
||||
function mirrorIfEnabled(info) {
|
||||
|
||||
info = info || currentDisplayInfo;
|
||||
|
||||
if (info && playbackManager.enableDisplayMirroring()) {
|
||||
|
||||
var player = playbackManager.getPlayerInfo();
|
||||
|
||||
if (player) {
|
||||
if (!player.isLocalPlayer && player.supportedCommands.indexOf('DisplayContent') !== -1) {
|
||||
mirrorItem(info, player);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function showPlayerSelection(button) {
|
||||
|
||||
var currentPlayerInfo = playbackManager.getPlayerInfo();
|
||||
|
||||
if (currentPlayerInfo) {
|
||||
if (!currentPlayerInfo.isLocalPlayer) {
|
||||
showActivePlayerMenu(currentPlayerInfo);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
var currentPlayerId = currentPlayerInfo ? currentPlayerInfo.id : null;
|
||||
|
||||
loading.show();
|
||||
|
||||
playbackManager.getTargets().then(function (targets) {
|
||||
|
||||
var menuItems = targets.map(function (t) {
|
||||
|
||||
var name = t.name;
|
||||
|
||||
if (t.appName && t.appName !== t.name) {
|
||||
name += " - " + t.appName;
|
||||
}
|
||||
|
||||
return {
|
||||
name: name,
|
||||
id: t.id,
|
||||
selected: currentPlayerId === t.id
|
||||
};
|
||||
|
||||
});
|
||||
|
||||
require(['actionsheet'], function (actionsheet) {
|
||||
|
||||
loading.hide();
|
||||
|
||||
var menuOptions = {
|
||||
title: globalize.translate('sharedcomponents#HeaderSelectPlayer'),
|
||||
items: menuItems,
|
||||
positionTo: button,
|
||||
|
||||
resolveOnClick: true
|
||||
};
|
||||
|
||||
// Unfortunately we can't allow the url to change or chromecast will throw a security error
|
||||
// Might be able to solve this in the future by moving the dialogs to hashbangs
|
||||
if (!((!browser.chrome) || AppInfo.isNativeApp)) {
|
||||
menuOptions.enableHistory = false;
|
||||
}
|
||||
|
||||
actionsheet.show(menuOptions).then(function (id) {
|
||||
|
||||
var target = targets.filter(function (t) {
|
||||
return t.id === id;
|
||||
})[0];
|
||||
|
||||
playbackManager.trySetActivePlayer(target.playerName, target);
|
||||
|
||||
mirrorIfEnabled();
|
||||
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function showActivePlayerMenu(playerInfo) {
|
||||
|
||||
require(['dialogHelper', 'dialog', 'emby-checkbox', 'emby-button'], function (dialogHelper) {
|
||||
showActivePlayerMenuInternal(dialogHelper, playerInfo);
|
||||
});
|
||||
}
|
||||
|
||||
function showActivePlayerMenuInternal(dialogHelper, playerInfo) {
|
||||
|
||||
var html = '';
|
||||
|
||||
var dialogOptions = {
|
||||
removeOnClose: true
|
||||
};
|
||||
|
||||
dialogOptions.modal = false;
|
||||
dialogOptions.entryAnimationDuration = 160;
|
||||
dialogOptions.exitAnimationDuration = 160;
|
||||
dialogOptions.autoFocus = false;
|
||||
|
||||
var dlg = dialogHelper.createDialog(dialogOptions);
|
||||
|
||||
dlg.classList.add('promptDialog');
|
||||
|
||||
html += '<div class="promptDialogContent" style="padding:1.5em;">';
|
||||
html += '<h2 style="margin-top:.5em;">';
|
||||
html += (playerInfo.deviceName || playerInfo.name);
|
||||
html += '</h2>';
|
||||
|
||||
html += '<div>';
|
||||
|
||||
if (playerInfo.supportedCommands.indexOf('DisplayContent') !== -1) {
|
||||
|
||||
html += '<label class="checkboxContainer">';
|
||||
var checkedHtml = playbackManager.enableDisplayMirroring() ? ' checked' : '';
|
||||
html += '<input type="checkbox" is="emby-checkbox" class="chkMirror"' + checkedHtml + '/>';
|
||||
html += '<span>' + globalize.translate('sharedcomponents#EnableDisplayMirroring') + '</span>';
|
||||
html += '</label>';
|
||||
}
|
||||
|
||||
html += '</div>';
|
||||
|
||||
html += '<div style="margin-top:1em;display:flex;justify-content: flex-end;">';
|
||||
|
||||
html += '<button is="emby-button" type="button" class="button-flat button-accent-flat btnRemoteControl promptDialogButton">' + globalize.translate('sharedcomponents#HeaderRemoteControl') + '</button>';
|
||||
html += '<button is="emby-button" type="button" class="button-flat button-accent-flat btnDisconnect promptDialogButton ">' + globalize.translate('sharedcomponents#Disconnect') + '</button>';
|
||||
html += '<button is="emby-button" type="button" class="button-flat button-accent-flat btnCancel promptDialogButton">' + globalize.translate('sharedcomponents#ButtonCancel') + '</button>';
|
||||
html += '</div>';
|
||||
|
||||
html += '</div>';
|
||||
dlg.innerHTML = html;
|
||||
|
||||
var chkMirror = dlg.querySelector('.chkMirror');
|
||||
|
||||
if (chkMirror) {
|
||||
chkMirror.addEventListener('change', onMirrorChange);
|
||||
}
|
||||
|
||||
var destination = '';
|
||||
|
||||
var btnRemoteControl = dlg.querySelector('.btnRemoteControl');
|
||||
if (btnRemoteControl) {
|
||||
btnRemoteControl.addEventListener('click', function () {
|
||||
destination = 'nowplaying.html';
|
||||
dialogHelper.close(dlg);
|
||||
});
|
||||
}
|
||||
|
||||
dlg.querySelector('.btnDisconnect').addEventListener('click', function () {
|
||||
playbackManager.disconnectFromPlayer();
|
||||
dialogHelper.close(dlg);
|
||||
});
|
||||
|
||||
dlg.querySelector('.btnCancel').addEventListener('click', function () {
|
||||
dialogHelper.close(dlg);
|
||||
});
|
||||
|
||||
dialogHelper.open(dlg).then(function () {
|
||||
if (destination) {
|
||||
embyRouter.show(destination);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function onMirrorChange() {
|
||||
playbackManager.enableDisplayMirroring(this.checked);
|
||||
}
|
||||
|
||||
function onCastButtonClicked() {
|
||||
|
||||
showPlayerSelection(this);
|
||||
}
|
||||
|
||||
function bindCastButton() {
|
||||
var btnCast = document.querySelector('.headerButton-btnCast');
|
||||
|
||||
if (btnCast) {
|
||||
btnCast.removeEventListener('click', onCastButtonClicked);
|
||||
btnCast.addEventListener('click', onCastButtonClicked);
|
||||
}
|
||||
}
|
||||
|
||||
document.addEventListener('headercreated', bindCastButton);
|
||||
bindCastButton();
|
||||
|
||||
document.addEventListener('viewbeforeshow', function () {
|
||||
currentDisplayInfo = null;
|
||||
});
|
||||
|
||||
document.addEventListener('viewshow', function (e) {
|
||||
|
||||
var state = e.detail.state || {};
|
||||
var item = state.item;
|
||||
|
||||
if (item && item.ServerId) {
|
||||
mirrorIfEnabled({
|
||||
item: item
|
||||
});
|
||||
return;
|
||||
}
|
||||
});
|
||||
|
||||
events.on(appSettings, 'change', function (e, name) {
|
||||
if (name === 'displaymirror') {
|
||||
mirrorIfEnabled();
|
||||
}
|
||||
});
|
||||
|
||||
return {
|
||||
show: showPlayerSelection
|
||||
};
|
||||
});
|
|
@ -115,7 +115,7 @@
|
|||
"RefreshDialogHelp": "Metadata opdateres alt efter hvilke indstillinger og internet-servicer der er aktiveret i Emby Server-kontrolpanelet.",
|
||||
"Open": "\u00c5ben",
|
||||
"Play": "Afspil",
|
||||
"AddToPlayQueue": "Add to play queue",
|
||||
"AddToPlayQueue": "Tilf\u00f8j til afspilningsk\u00f8",
|
||||
"Shuffle": "Bland",
|
||||
"Identify": "Identificer",
|
||||
"EditImages": "Rediger billeder",
|
||||
|
@ -378,6 +378,6 @@
|
|||
"SyncJobItemStatusCancelled": "Annulleret",
|
||||
"Retry": "Pr\u00f8v igen",
|
||||
"HeaderMyDevice": "Min Enhed",
|
||||
"Continue": "Continue",
|
||||
"ContinueInSecondsValue": "Continue in {0} seconds."
|
||||
"Continue": "Forts\u00e6t",
|
||||
"ContinueInSecondsValue": "Forts\u00e6t om {0} sekunder."
|
||||
}
|
|
@ -379,5 +379,9 @@
|
|||
"Retry": "Retry",
|
||||
"HeaderMyDevice": "My Device",
|
||||
"Continue": "Continue",
|
||||
"ContinueInSecondsValue": "Continue in {0} seconds."
|
||||
"ContinueInSecondsValue": "Continue in {0} seconds.",
|
||||
"HeaderRemoteControl": "Remote Control",
|
||||
"Disconnect": "Disconnect",
|
||||
"EnableDisplayMirroring": "Enable display mirroring",
|
||||
"HeaderSelectPlayer": "Select Player"
|
||||
}
|
|
@ -115,7 +115,7 @@
|
|||
"RefreshDialogHelp": "Los metadatos son actualizados bas\u00e1ndose en las configuraciones y servicios de internet que que est\u00e9n activados en el panel de control de su Servidor de Emby.",
|
||||
"Open": "Abrir",
|
||||
"Play": "Reproducir",
|
||||
"AddToPlayQueue": "Add to play queue",
|
||||
"AddToPlayQueue": "Agregar a la cola de reproduccion",
|
||||
"Shuffle": "Aleatorio",
|
||||
"Identify": "Identificar",
|
||||
"EditImages": "Editar im\u00e1genes",
|
||||
|
@ -378,6 +378,6 @@
|
|||
"SyncJobItemStatusCancelled": "Cancelado",
|
||||
"Retry": "Volver a intentar",
|
||||
"HeaderMyDevice": "Mi Dispositivo",
|
||||
"Continue": "Continue",
|
||||
"ContinueInSecondsValue": "Continue in {0} seconds."
|
||||
"Continue": "Continuar",
|
||||
"ContinueInSecondsValue": "Continua en {0} segundos."
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue