2020-04-10 15:51:12 -04:00
|
|
|
define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageLoader", "playbackManager", "nowPlayingHelper", "events", "connectionManager", "apphost", "globalize", "layoutManager", "userSettings", "cardBuilder", "cardStyle", "emby-itemscontainer", "css!./remotecontrol.css", "emby-ratingbutton"], function (browser, datetime, backdrop, libraryBrowser, listView, imageLoader, playbackManager, nowPlayingHelper, events, connectionManager, appHost, globalize, layoutManager, userSettings, cardBuilder) {
|
2019-02-02 11:14:40 -05:00
|
|
|
"use strict";
|
|
|
|
|
|
|
|
function showAudioMenu(context, player, button, item) {
|
|
|
|
var currentIndex = playbackManager.getAudioStreamIndex(player);
|
|
|
|
var streams = playbackManager.audioTracks(player);
|
2019-02-02 11:36:09 -05:00
|
|
|
var menuItems = streams.map(function (s) {
|
2019-02-02 11:14:40 -05:00
|
|
|
var menuItem = {
|
2019-02-02 11:36:09 -05:00
|
|
|
name: s.DisplayTitle,
|
|
|
|
id: s.Index
|
2019-02-02 11:14:40 -05:00
|
|
|
};
|
|
|
|
|
2019-02-02 11:36:09 -05:00
|
|
|
if (s.Index == currentIndex) {
|
2019-02-02 11:14:40 -05:00
|
|
|
menuItem.selected = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
return menuItem;
|
|
|
|
});
|
2018-10-23 01:05:09 +03:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
require(["actionsheet"], function (actionsheet) {
|
|
|
|
actionsheet.show({
|
|
|
|
items: menuItems,
|
|
|
|
positionTo: button,
|
|
|
|
callback: function (id) {
|
|
|
|
playbackManager.setAudioStreamIndex(parseInt(id), player);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
2019-02-02 11:08:20 -05:00
|
|
|
}
|
2018-10-23 01:05:09 +03:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
function showSubtitleMenu(context, player, button, item) {
|
|
|
|
var currentIndex = playbackManager.getSubtitleStreamIndex(player);
|
|
|
|
var streams = playbackManager.subtitleTracks(player);
|
2019-02-02 11:36:09 -05:00
|
|
|
var menuItems = streams.map(function (s) {
|
2019-02-02 11:14:40 -05:00
|
|
|
var menuItem = {
|
2019-02-02 11:36:09 -05:00
|
|
|
name: s.DisplayTitle,
|
|
|
|
id: s.Index
|
2019-02-02 11:14:40 -05:00
|
|
|
};
|
2018-10-23 01:05:09 +03:00
|
|
|
|
2019-02-02 11:36:09 -05:00
|
|
|
if (s.Index == currentIndex) {
|
2019-02-02 11:14:40 -05:00
|
|
|
menuItem.selected = true;
|
|
|
|
}
|
2018-10-23 01:05:09 +03:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
return menuItem;
|
|
|
|
});
|
|
|
|
menuItems.unshift({
|
|
|
|
id: -1,
|
|
|
|
name: globalize.translate("ButtonOff"),
|
|
|
|
selected: null == currentIndex
|
|
|
|
});
|
2018-10-23 01:05:09 +03:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
require(["actionsheet"], function (actionsheet) {
|
|
|
|
actionsheet.show({
|
|
|
|
items: menuItems,
|
|
|
|
positionTo: button,
|
|
|
|
callback: function (id) {
|
|
|
|
playbackManager.setSubtitleStreamIndex(parseInt(id), player);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
2019-02-02 11:08:20 -05:00
|
|
|
}
|
2018-10-23 01:05:09 +03:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
function getNowPlayingNameHtml(nowPlayingItem, includeNonNameInfo) {
|
2019-02-02 11:36:09 -05:00
|
|
|
return nowPlayingHelper.getNowPlayingNames(nowPlayingItem, includeNonNameInfo).map(function (i) {
|
|
|
|
return i.text;
|
2019-02-02 11:14:40 -05:00
|
|
|
}).join("<br/>");
|
2019-02-02 11:08:20 -05:00
|
|
|
}
|
2018-10-23 01:05:09 +03:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
function seriesImageUrl(item, options) {
|
|
|
|
if ("Episode" !== item.Type) {
|
|
|
|
return null;
|
|
|
|
}
|
2018-10-23 01:05:09 +03:00
|
|
|
|
2019-02-12 10:01:11 -05:00
|
|
|
options = options || {};
|
|
|
|
options.type = options.type || "Primary";
|
|
|
|
if ("Primary" === options.type && item.SeriesPrimaryImageTag) {
|
2019-02-02 11:14:40 -05:00
|
|
|
options.tag = item.SeriesPrimaryImageTag;
|
|
|
|
return connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.SeriesId, options);
|
|
|
|
}
|
2018-10-23 01:05:09 +03:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
if ("Thumb" === options.type) {
|
|
|
|
if (item.SeriesThumbImageTag) {
|
|
|
|
options.tag = item.SeriesThumbImageTag;
|
|
|
|
return connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.SeriesId, options);
|
|
|
|
}
|
2018-10-23 01:05:09 +03:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
if (item.ParentThumbImageTag) {
|
|
|
|
options.tag = item.ParentThumbImageTag;
|
|
|
|
return connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.ParentThumbItemId, options);
|
|
|
|
}
|
|
|
|
}
|
2018-10-23 01:05:09 +03:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
return null;
|
2019-02-02 11:08:20 -05:00
|
|
|
}
|
2018-10-23 01:05:09 +03:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
function imageUrl(item, options) {
|
|
|
|
options = options || {};
|
|
|
|
options.type = options.type || "Primary";
|
2018-10-23 01:05:09 +03:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
if (item.ImageTags && item.ImageTags[options.type]) {
|
|
|
|
options.tag = item.ImageTags[options.type];
|
|
|
|
return connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.PrimaryImageItemId || item.Id, options);
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
if (item.AlbumId && item.AlbumPrimaryImageTag) {
|
|
|
|
options.tag = item.AlbumPrimaryImageTag;
|
|
|
|
return connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.AlbumId, options);
|
|
|
|
}
|
2018-10-23 01:05:09 +03:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
return null;
|
2019-02-02 11:08:20 -05:00
|
|
|
}
|
2018-10-23 01:05:09 +03:00
|
|
|
|
2020-04-09 19:15:49 -04:00
|
|
|
function updateNowPlayingInfo(context, state, serverId) {
|
2019-02-02 11:14:40 -05:00
|
|
|
var item = state.NowPlayingItem;
|
|
|
|
var displayName = item ? getNowPlayingNameHtml(item).replace("<br/>", " - ") : "";
|
2020-04-16 15:45:32 -04:00
|
|
|
if (typeof item !== 'undefined') {
|
|
|
|
var nowPlayingServerId = (item.ServerId || serverId);
|
2020-04-12 10:55:52 -04:00
|
|
|
if (item.Type == "Audio" || item.MediaStreams[0].Type == "Audio") {
|
|
|
|
var songName = item.Name;
|
|
|
|
if (item.Album != null && item.Artists != null) {
|
|
|
|
var albumName = item.Album;
|
|
|
|
var artistName;
|
|
|
|
if (item.ArtistItems != null) {
|
|
|
|
artistName = item.ArtistItems[0].Name;
|
2020-04-16 15:45:32 -04:00
|
|
|
context.querySelector(".nowPlayingAlbum").innerHTML = '<a class="button-link emby-button" is="emby-linkbutton" href="itemdetails.html?id=' + item.AlbumId + `&serverId=${nowPlayingServerId}">${albumName}</a>`;
|
|
|
|
context.querySelector(".nowPlayingArtist").innerHTML = '<a class="button-link emby-button" is="emby-linkbutton" href="itemdetails.html?id=' + item.ArtistItems[0].Id + `&serverId=${nowPlayingServerId}">${artistName}</a>`;
|
2020-04-26 02:37:28 +03:00
|
|
|
context.querySelector(".contextMenuAlbum").innerHTML = '<a class="button-link emby-button" is="emby-linkbutton" href="itemdetails.html?id=' + item.AlbumId + `&serverId=${nowPlayingServerId}"><span class="actionsheetMenuItemIcon listItemIcon listItemIcon-transparent material-icons album"></span> ` + globalize.translate("ViewAlbum") + '</a>';
|
|
|
|
context.querySelector(".contextMenuArtist").innerHTML = '<a class="button-link emby-button" is="emby-linkbutton" href="itemdetails.html?id=' + item.ArtistItems[0].Id + `&serverId=${nowPlayingServerId}"><span class="actionsheetMenuItemIcon listItemIcon listItemIcon-transparent material-icons person"></span> ` + globalize.translate("ViewArtist") + '</a>';
|
2020-04-12 10:55:52 -04:00
|
|
|
} else {
|
|
|
|
artistName = item.Artists;
|
2020-04-12 20:24:18 +02:00
|
|
|
context.querySelector(".nowPlayingAlbum").innerHTML = albumName;
|
2020-04-12 10:55:52 -04:00
|
|
|
context.querySelector(".nowPlayingArtist").innerHTML = artistName;
|
|
|
|
}
|
2020-04-09 19:15:49 -04:00
|
|
|
}
|
2020-04-12 10:55:52 -04:00
|
|
|
context.querySelector(".nowPlayingSongName").innerHTML = songName;
|
|
|
|
} else if (item.Type == "Episode") {
|
|
|
|
if (item.SeasonName != null) {
|
2020-04-16 15:45:32 -04:00
|
|
|
var seasonName = item.SeasonName;
|
|
|
|
context.querySelector(".nowPlayingSeason").innerHTML = '<a class="button-link emby-button" is="emby-linkbutton" href="itemdetails.html?id=' + item.SeasonId + `&serverId=${nowPlayingServerId}">${seasonName}</a>`;
|
2020-04-10 13:06:26 -04:00
|
|
|
}
|
2020-04-12 10:55:52 -04:00
|
|
|
if (item.SeriesName != null) {
|
2020-04-16 15:45:32 -04:00
|
|
|
var seriesName = item.SeriesName;
|
2020-04-12 10:55:52 -04:00
|
|
|
if (item.SeriesId !=null) {
|
2020-04-16 15:45:32 -04:00
|
|
|
context.querySelector(".nowPlayingSerie").innerHTML = '<a class="button-link emby-button" is="emby-linkbutton" href="itemdetails.html?id=' + item.SeriesId + `&serverId=${nowPlayingServerId}">${seriesName}</a>`;
|
2020-04-12 10:55:52 -04:00
|
|
|
} else {
|
2020-04-16 15:45:32 -04:00
|
|
|
context.querySelector(".nowPlayingSerie").innerHTML = seriesName;
|
2020-04-12 10:55:52 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
context.querySelector(".nowPlayingEpisode").innerHTML = item.Name;
|
|
|
|
} else {
|
|
|
|
context.querySelector(".nowPlayingPageTitle").innerHTML = displayName;
|
2020-04-10 13:06:26 -04:00
|
|
|
}
|
2018-10-23 01:05:09 +03:00
|
|
|
|
2020-04-16 15:45:32 -04:00
|
|
|
if (displayName.length > 0 && item.Type != "Audio" && item.Type != "Episode") {
|
2020-04-12 10:55:52 -04:00
|
|
|
context.querySelector(".nowPlayingPageTitle").classList.remove("hide");
|
|
|
|
} else {
|
|
|
|
context.querySelector(".nowPlayingPageTitle").classList.add("hide");
|
|
|
|
}
|
2018-10-23 01:05:09 +03:00
|
|
|
|
2020-04-12 10:55:52 -04:00
|
|
|
var url = item ? seriesImageUrl(item, {
|
|
|
|
maxHeight: 300 * 2
|
|
|
|
}) || imageUrl(item, {
|
|
|
|
maxHeight: 300 * 2
|
|
|
|
}) : null;
|
|
|
|
|
|
|
|
console.debug("updateNowPlayingInfo");
|
|
|
|
setImageUrl(context, state, url);
|
|
|
|
if (item) {
|
|
|
|
backdrop.setBackdrops([item]);
|
|
|
|
var apiClient = connectionManager.getApiClient(item.ServerId);
|
|
|
|
apiClient.getItem(apiClient.getCurrentUserId(), item.Id).then(function (fullItem) {
|
|
|
|
var userData = fullItem.UserData || {};
|
|
|
|
var likes = null == userData.Likes ? "" : userData.Likes;
|
2020-04-26 02:37:28 +03:00
|
|
|
context.querySelector(".nowPlayingPageUserDataButtonsTitle").innerHTML = '<button is="emby-ratingbutton" type="button" class="listItemButton paper-icon-button-light" data-id="' + fullItem.Id + '" data-serverid="' + fullItem.ServerId + '" data-itemtype="' + fullItem.Type + '" data-likes="' + likes + '" data-isfavorite="' + userData.IsFavorite + '"><span class="material-icons favorite"></span></button>';
|
|
|
|
context.querySelector(".nowPlayingPageUserDataButtons").innerHTML = '<button is="emby-ratingbutton" type="button" class="listItemButton paper-icon-button-light" data-id="' + fullItem.Id + '" data-serverid="' + fullItem.ServerId + '" data-itemtype="' + fullItem.Type + '" data-likes="' + likes + '" data-isfavorite="' + userData.IsFavorite + '"><span class="material-icons favorite"></span></button>';
|
2020-04-12 10:55:52 -04:00
|
|
|
});
|
|
|
|
} else {
|
|
|
|
backdrop.clear();
|
|
|
|
context.querySelector(".nowPlayingPageUserDataButtons").innerHTML = "";
|
|
|
|
}
|
2019-02-02 11:08:20 -05:00
|
|
|
}
|
2019-02-02 11:14:40 -05:00
|
|
|
}
|
2019-02-02 11:08:20 -05:00
|
|
|
|
2020-04-09 19:15:49 -04:00
|
|
|
function setImageUrl(context, state, url) {
|
2019-02-02 11:14:40 -05:00
|
|
|
currentImgUrl = url;
|
2020-04-09 19:15:49 -04:00
|
|
|
var item = state.NowPlayingItem;
|
2019-02-02 11:14:40 -05:00
|
|
|
var imgContainer = context.querySelector(".nowPlayingPageImageContainer");
|
|
|
|
|
|
|
|
if (url) {
|
|
|
|
imgContainer.innerHTML = '<img class="nowPlayingPageImage" src="' + url + '" />';
|
2020-04-09 22:33:58 -04:00
|
|
|
if (item.Type == "Audio") {
|
2020-04-09 19:15:49 -04:00
|
|
|
context.querySelector(".nowPlayingPageImage").classList.add("nowPlayingPageImageAudio");
|
|
|
|
context.querySelector(".nowPlayingPageImageContainer").classList.remove("nowPlayingPageImageAudio");
|
|
|
|
} else {
|
|
|
|
context.querySelector(".nowPlayingPageImageContainer").classList.add("nowPlayingPageImagePoster");
|
|
|
|
context.querySelector(".nowPlayingPageImage").classList.remove("nowPlayingPageImageAudio");
|
|
|
|
}
|
2019-02-02 11:14:40 -05:00
|
|
|
} else {
|
2020-04-26 02:37:28 +03:00
|
|
|
imgContainer.innerHTML = '<div class="nowPlayingPageImageContainerNoAlbum"><button data-action="link" class="cardContent-button cardImageContainer coveredImage ' + cardBuilder.getDefaultBackgroundClass(item.Name) + ' cardContent cardContent-shadow itemAction"><span class="cardImageIcon material-icons album"></span></button></div>';
|
2019-02-02 11:08:20 -05:00
|
|
|
}
|
|
|
|
}
|
2018-10-23 01:05:09 +03:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
function buttonVisible(btn, enabled) {
|
|
|
|
if (enabled) {
|
|
|
|
btn.classList.remove("hide");
|
2019-02-02 11:08:20 -05:00
|
|
|
} else {
|
2019-02-02 11:14:40 -05:00
|
|
|
btn.classList.add("hide");
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
2019-02-02 11:08:20 -05:00
|
|
|
}
|
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
function updateSupportedCommands(context, commands) {
|
|
|
|
var all = context.querySelectorAll(".btnCommand");
|
|
|
|
|
2019-02-02 11:36:09 -05:00
|
|
|
for (var i = 0, length = all.length; i < length; i++) {
|
2019-09-11 22:16:27 -07:00
|
|
|
var enableButton = -1 !== commands.indexOf(all[i].getAttribute("data-command"));
|
|
|
|
all[i].disabled = !enableButton;
|
2019-02-02 11:14:40 -05:00
|
|
|
}
|
2019-02-02 11:08:20 -05:00
|
|
|
}
|
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
var currentImgUrl;
|
|
|
|
return function () {
|
|
|
|
function toggleRepeat(player) {
|
|
|
|
if (player) {
|
|
|
|
switch (playbackManager.getRepeatMode(player)) {
|
|
|
|
case "RepeatNone":
|
2019-11-23 00:29:38 +09:00
|
|
|
playbackManager.setRepeatMode("RepeatAll", player);
|
|
|
|
break;
|
2019-02-02 11:08:20 -05:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
case "RepeatAll":
|
2019-11-23 00:29:38 +09:00
|
|
|
playbackManager.setRepeatMode("RepeatOne", player);
|
|
|
|
break;
|
2019-02-02 11:08:20 -05:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
case "RepeatOne":
|
2019-11-23 00:29:38 +09:00
|
|
|
playbackManager.setRepeatMode("RepeatNone", player);
|
2019-02-02 11:14:40 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2019-02-02 11:08:20 -05:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
function updatePlayerState(player, context, state) {
|
|
|
|
lastPlayerState = state;
|
|
|
|
var item = state.NowPlayingItem;
|
|
|
|
var playerInfo = playbackManager.getPlayerInfo();
|
|
|
|
var supportedCommands = playerInfo.supportedCommands;
|
|
|
|
currentPlayerSupportedCommands = supportedCommands;
|
|
|
|
var playState = state.PlayState || {};
|
2020-04-16 19:14:40 -04:00
|
|
|
var isSupportedCommands = supportedCommands.includes("DisplayMessage") || supportedCommands.includes("SendString") || supportedCommands.includes("Select");
|
|
|
|
buttonVisible(context.querySelector(".btnToggleFullscreen"), item && "Video" == item.MediaType && supportedCommands.includes("ToggleFullscreen"));
|
2019-02-02 11:14:40 -05:00
|
|
|
updateAudioTracksDisplay(player, context);
|
|
|
|
updateSubtitleTracksDisplay(player, context);
|
|
|
|
|
2020-04-16 19:14:40 -04:00
|
|
|
if (supportedCommands.includes("DisplayMessage") && !currentPlayer.isLocalPlayer) {
|
2019-02-02 11:14:40 -05:00
|
|
|
context.querySelector(".sendMessageSection").classList.remove("hide");
|
|
|
|
} else {
|
|
|
|
context.querySelector(".sendMessageSection").classList.add("hide");
|
|
|
|
}
|
|
|
|
|
2020-04-16 19:14:40 -04:00
|
|
|
if (supportedCommands.includes("SendString") && !currentPlayer.isLocalPlayer) {
|
2019-02-02 11:14:40 -05:00
|
|
|
context.querySelector(".sendTextSection").classList.remove("hide");
|
|
|
|
} else {
|
|
|
|
context.querySelector(".sendTextSection").classList.add("hide");
|
|
|
|
}
|
|
|
|
|
2020-04-16 19:14:40 -04:00
|
|
|
if (supportedCommands.includes("Select") && !currentPlayer.isLocalPlayer) {
|
2019-11-22 16:01:25 +01:00
|
|
|
context.querySelector(".navigationSection").classList.remove("hide");
|
|
|
|
} else {
|
|
|
|
context.querySelector(".navigationSection").classList.add("hide");
|
|
|
|
}
|
|
|
|
|
2020-04-16 19:14:40 -04:00
|
|
|
if (isSupportedCommands && !currentPlayer.isLocalPlayer) {
|
2020-04-12 20:15:58 -04:00
|
|
|
context.querySelector(".remoteControlSection").classList.remove("hide");
|
|
|
|
} else {
|
|
|
|
context.querySelector(".remoteControlSection").classList.add("hide");
|
|
|
|
}
|
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
buttonVisible(context.querySelector(".btnStop"), null != item);
|
|
|
|
buttonVisible(context.querySelector(".btnNextTrack"), null != item);
|
|
|
|
buttonVisible(context.querySelector(".btnPreviousTrack"), null != item);
|
|
|
|
buttonVisible(context.querySelector(".btnRewind"), null != item);
|
|
|
|
buttonVisible(context.querySelector(".btnFastForward"), null != item);
|
|
|
|
var positionSlider = context.querySelector(".nowPlayingPositionSlider");
|
|
|
|
|
2020-02-19 02:10:40 +03:00
|
|
|
if (positionSlider && item && item.RunTimeTicks) {
|
|
|
|
positionSlider.setKeyboardSteps(userSettings.skipBackLength() * 1000000 / item.RunTimeTicks,
|
|
|
|
userSettings.skipForwardLength() * 1000000 / item.RunTimeTicks);
|
|
|
|
}
|
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
if (positionSlider && !positionSlider.dragging) {
|
|
|
|
positionSlider.disabled = !playState.CanSeek;
|
|
|
|
var isProgressClear = state.MediaSource && null == state.MediaSource.RunTimeTicks;
|
|
|
|
positionSlider.setIsClear(isProgressClear);
|
|
|
|
}
|
|
|
|
|
|
|
|
updatePlayPauseState(playState.IsPaused, null != item);
|
|
|
|
updateTimeDisplay(playState.PositionTicks, item ? item.RunTimeTicks : null);
|
|
|
|
updatePlayerVolumeState(context, playState.IsMuted, playState.VolumeLevel);
|
|
|
|
|
|
|
|
if (item && "Video" == item.MediaType) {
|
|
|
|
context.classList.remove("hideVideoButtons");
|
|
|
|
} else {
|
|
|
|
context.classList.add("hideVideoButtons");
|
|
|
|
}
|
|
|
|
|
|
|
|
updateRepeatModeDisplay(playState.RepeatMode);
|
|
|
|
updateNowPlayingInfo(context, state);
|
|
|
|
}
|
2019-02-02 11:08:20 -05:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
function updateAudioTracksDisplay(player, context) {
|
|
|
|
var supportedCommands = currentPlayerSupportedCommands;
|
|
|
|
buttonVisible(context.querySelector(".btnAudioTracks"), playbackManager.audioTracks(player).length > 1 && -1 != supportedCommands.indexOf("SetAudioStreamIndex"));
|
2019-02-02 11:08:20 -05:00
|
|
|
}
|
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
function updateSubtitleTracksDisplay(player, context) {
|
|
|
|
var supportedCommands = currentPlayerSupportedCommands;
|
|
|
|
buttonVisible(context.querySelector(".btnSubtitles"), playbackManager.subtitleTracks(player).length && -1 != supportedCommands.indexOf("SetSubtitleStreamIndex"));
|
|
|
|
}
|
2018-10-23 01:05:09 +03:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
function updateRepeatModeDisplay(repeatMode) {
|
|
|
|
var context = dlg;
|
|
|
|
var toggleRepeatButton = context.querySelector(".repeatToggleButton");
|
|
|
|
|
|
|
|
if ("RepeatAll" == repeatMode) {
|
2020-04-26 02:37:28 +03:00
|
|
|
toggleRepeatButton.innerHTML = "<span class='material-icons repeat'></span>";
|
2019-02-02 11:14:40 -05:00
|
|
|
toggleRepeatButton.classList.add("repeatButton-active");
|
2019-02-02 11:36:09 -05:00
|
|
|
} else if ("RepeatOne" == repeatMode) {
|
2020-04-26 02:37:28 +03:00
|
|
|
toggleRepeatButton.innerHTML = "<span class='material-icons repeat_one'></span>";
|
2019-02-02 11:36:09 -05:00
|
|
|
toggleRepeatButton.classList.add("repeatButton-active");
|
2019-02-02 11:14:40 -05:00
|
|
|
} else {
|
2020-04-26 02:37:28 +03:00
|
|
|
toggleRepeatButton.innerHTML = "<span class='material-icons repeat'></span>";
|
2019-02-02 11:36:09 -05:00
|
|
|
toggleRepeatButton.classList.remove("repeatButton-active");
|
2019-02-02 11:14:40 -05:00
|
|
|
}
|
|
|
|
}
|
2019-02-02 11:08:20 -05:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
function updatePlayerVolumeState(context, isMuted, volumeLevel) {
|
|
|
|
var view = context;
|
|
|
|
var supportedCommands = currentPlayerSupportedCommands;
|
|
|
|
var showMuteButton = true;
|
|
|
|
var showVolumeSlider = true;
|
|
|
|
|
|
|
|
if (-1 === supportedCommands.indexOf("Mute")) {
|
|
|
|
showMuteButton = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (-1 === supportedCommands.indexOf("SetVolume")) {
|
|
|
|
showVolumeSlider = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (currentPlayer.isLocalPlayer && appHost.supports("physicalvolumecontrol")) {
|
|
|
|
showMuteButton = false;
|
|
|
|
showVolumeSlider = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (isMuted) {
|
|
|
|
view.querySelector(".buttonMute").setAttribute("title", globalize.translate("Unmute"));
|
2020-04-26 02:37:28 +03:00
|
|
|
view.querySelector(".buttonMute .material-icons").classList.replace("volume_up", "volume_off");
|
2019-02-02 11:14:40 -05:00
|
|
|
} else {
|
|
|
|
view.querySelector(".buttonMute").setAttribute("title", globalize.translate("Mute"));
|
2020-04-26 02:37:28 +03:00
|
|
|
view.querySelector(".buttonMute .material-icons").classList.replace("volume_off", "volume_up");
|
2019-02-02 11:14:40 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
if (showMuteButton) {
|
|
|
|
view.querySelector(".buttonMute").classList.remove("hide");
|
|
|
|
} else {
|
|
|
|
view.querySelector(".buttonMute").classList.add("hide");
|
|
|
|
}
|
|
|
|
|
|
|
|
var nowPlayingVolumeSlider = context.querySelector(".nowPlayingVolumeSlider");
|
|
|
|
var nowPlayingVolumeSliderContainer = context.querySelector(".nowPlayingVolumeSliderContainer");
|
|
|
|
|
|
|
|
if (nowPlayingVolumeSlider) {
|
|
|
|
if (showVolumeSlider) {
|
|
|
|
nowPlayingVolumeSliderContainer.classList.remove("hide");
|
|
|
|
} else {
|
|
|
|
nowPlayingVolumeSliderContainer.classList.add("hide");
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!nowPlayingVolumeSlider.dragging) {
|
|
|
|
nowPlayingVolumeSlider.value = volumeLevel || 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2019-02-02 11:08:20 -05:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
function updatePlayPauseState(isPaused, isActive) {
|
|
|
|
var context = dlg;
|
|
|
|
var btnPlayPause = context.querySelector(".btnPlayPause");
|
2020-04-25 10:00:20 +03:00
|
|
|
let icons = ["play_circle_filled", "pause_circle_filled"];
|
|
|
|
if (isPaused) icons = icons.reverse();
|
2020-04-26 02:37:28 +03:00
|
|
|
btnPlayPause.querySelector(".material-icons").classList.replace(icons[0], icons[1]);
|
2019-02-02 11:14:40 -05:00
|
|
|
buttonVisible(btnPlayPause, isActive);
|
|
|
|
}
|
2019-02-02 11:08:20 -05:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
function updateTimeDisplay(positionTicks, runtimeTicks) {
|
|
|
|
var context = dlg;
|
|
|
|
var positionSlider = context.querySelector(".nowPlayingPositionSlider");
|
|
|
|
|
|
|
|
if (positionSlider && !positionSlider.dragging) {
|
|
|
|
if (runtimeTicks) {
|
|
|
|
var pct = positionTicks / runtimeTicks;
|
|
|
|
pct *= 100;
|
|
|
|
positionSlider.value = pct;
|
|
|
|
} else {
|
|
|
|
positionSlider.value = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
context.querySelector(".positionTime").innerHTML = null == positionTicks ? "--:--" : datetime.getDisplayRunningTime(positionTicks);
|
|
|
|
context.querySelector(".runtime").innerHTML = null != runtimeTicks ? datetime.getDisplayRunningTime(runtimeTicks) : "--:--";
|
|
|
|
}
|
2019-02-02 11:08:20 -05:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
function getPlaylistItems(player) {
|
|
|
|
return playbackManager.getPlaylist(player);
|
|
|
|
}
|
2019-02-02 11:08:20 -05:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
function loadPlaylist(context, player) {
|
|
|
|
getPlaylistItems(player).then(function (items) {
|
|
|
|
var html = "";
|
|
|
|
html += listView.getListViewHtml({
|
|
|
|
items: items,
|
|
|
|
smallIcon: true,
|
|
|
|
action: "setplaylistindex",
|
|
|
|
enableUserDataButtons: false,
|
|
|
|
rightButtons: [{
|
2020-04-25 10:00:20 +03:00
|
|
|
icon: "remove_circle_outline",
|
2019-02-02 11:14:40 -05:00
|
|
|
title: globalize.translate("ButtonRemove"),
|
|
|
|
id: "remove"
|
|
|
|
}],
|
|
|
|
dragHandle: true
|
|
|
|
});
|
|
|
|
|
|
|
|
if (items.length) {
|
2020-04-12 20:15:58 -04:00
|
|
|
context.querySelector(".btnTogglePlaylist").classList.remove("hide");
|
2019-02-02 11:14:40 -05:00
|
|
|
} else {
|
2020-04-12 20:15:58 -04:00
|
|
|
context.querySelector(".btnTogglePlaylist").classList.add("hide");
|
2019-02-02 11:14:40 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
var itemsContainer = context.querySelector(".playlist");
|
|
|
|
itemsContainer.innerHTML = html;
|
|
|
|
var playlistItemId = playbackManager.getCurrentPlaylistItemId(player);
|
|
|
|
|
|
|
|
if (playlistItemId) {
|
|
|
|
var img = itemsContainer.querySelector('.listItem[data-playlistItemId="' + playlistItemId + '"] .listItemImage');
|
|
|
|
|
|
|
|
if (img) {
|
|
|
|
img.classList.remove("lazy");
|
|
|
|
img.classList.add("playlistIndexIndicatorImage");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
imageLoader.lazyChildren(itemsContainer);
|
2020-04-09 19:15:49 -04:00
|
|
|
context.querySelector(".playlist").classList.add("hide");
|
|
|
|
context.querySelector(".contextMenu").classList.add("hide");
|
|
|
|
context.querySelector(".btnSavePlaylist").classList.add("hide");
|
2019-02-02 11:14:40 -05:00
|
|
|
});
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
2019-02-02 11:08:20 -05:00
|
|
|
|
2019-02-02 11:36:09 -05:00
|
|
|
function onPlaybackStart(e, state) {
|
2020-02-16 03:44:43 +01:00
|
|
|
console.debug("remotecontrol event: " + e.type);
|
2019-02-02 11:14:40 -05:00
|
|
|
var player = this;
|
2019-02-02 11:36:09 -05:00
|
|
|
onStateChanged.call(player, e, state);
|
2019-02-02 11:14:40 -05:00
|
|
|
}
|
2019-02-02 11:08:20 -05:00
|
|
|
|
2019-02-02 11:36:09 -05:00
|
|
|
function onRepeatModeChange(e) {
|
2019-02-02 11:14:40 -05:00
|
|
|
var player = this;
|
|
|
|
updateRepeatModeDisplay(playbackManager.getRepeatMode(player));
|
|
|
|
}
|
2019-02-02 11:08:20 -05:00
|
|
|
|
2019-02-02 11:36:09 -05:00
|
|
|
function onPlaylistUpdate(e) {
|
2019-02-02 11:14:40 -05:00
|
|
|
loadPlaylist(dlg, this);
|
|
|
|
}
|
2019-02-02 11:08:20 -05:00
|
|
|
|
2019-02-02 11:36:09 -05:00
|
|
|
function onPlaylistItemRemoved(e, info) {
|
2019-02-02 11:14:40 -05:00
|
|
|
var context = dlg;
|
|
|
|
var playlistItemIds = info.playlistItemIds;
|
2019-02-02 11:08:20 -05:00
|
|
|
|
2019-02-02 11:36:09 -05:00
|
|
|
for (var i = 0, length = playlistItemIds.length; i < length; i++) {
|
|
|
|
var listItem = context.querySelector('.listItem[data-playlistItemId="' + playlistItemIds[i] + '"]');
|
2019-02-02 11:08:20 -05:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
if (listItem) {
|
|
|
|
listItem.parentNode.removeChild(listItem);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2019-02-02 11:08:20 -05:00
|
|
|
|
2019-02-02 11:36:09 -05:00
|
|
|
function onPlaybackStopped(e, state) {
|
2020-02-16 03:44:43 +01:00
|
|
|
console.debug("remotecontrol event: " + e.type);
|
2019-02-02 11:14:40 -05:00
|
|
|
var player = this;
|
2019-02-02 11:08:20 -05:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
if (!state.NextMediaType) {
|
|
|
|
updatePlayerState(player, dlg, {});
|
|
|
|
loadPlaylist(dlg);
|
2019-02-24 10:53:41 +01:00
|
|
|
Emby.Page.back();
|
2019-02-02 11:14:40 -05:00
|
|
|
}
|
|
|
|
}
|
2019-02-02 11:08:20 -05:00
|
|
|
|
2019-02-02 11:36:09 -05:00
|
|
|
function onPlayPauseStateChanged(e) {
|
2019-02-02 11:14:40 -05:00
|
|
|
updatePlayPauseState(this.paused(), true);
|
|
|
|
}
|
2018-10-23 01:05:09 +03:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
function onStateChanged(event, state) {
|
|
|
|
var player = this;
|
|
|
|
updatePlayerState(player, dlg, state);
|
|
|
|
loadPlaylist(dlg, player);
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
2019-02-02 11:08:20 -05:00
|
|
|
|
2019-02-02 11:36:09 -05:00
|
|
|
function onTimeUpdate(e) {
|
2019-02-02 11:14:40 -05:00
|
|
|
var now = new Date().getTime();
|
2019-02-02 11:08:20 -05:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
if (!(now - lastUpdateTime < 700)) {
|
|
|
|
lastUpdateTime = now;
|
|
|
|
var player = this;
|
|
|
|
currentRuntimeTicks = playbackManager.duration(player);
|
|
|
|
updateTimeDisplay(playbackManager.currentTime(player), currentRuntimeTicks);
|
|
|
|
}
|
|
|
|
}
|
2019-02-02 11:08:20 -05:00
|
|
|
|
2019-02-02 11:36:09 -05:00
|
|
|
function onVolumeChanged(e) {
|
2019-02-02 11:14:40 -05:00
|
|
|
var player = this;
|
|
|
|
updatePlayerVolumeState(dlg, player.isMuted(), player.getVolume());
|
|
|
|
}
|
2019-02-02 11:08:20 -05:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
function releaseCurrentPlayer() {
|
|
|
|
var player = currentPlayer;
|
|
|
|
|
|
|
|
if (player) {
|
|
|
|
events.off(player, "playbackstart", onPlaybackStart);
|
|
|
|
events.off(player, "statechange", onStateChanged);
|
|
|
|
events.off(player, "repeatmodechange", onRepeatModeChange);
|
|
|
|
events.off(player, "playlistitemremove", onPlaylistUpdate);
|
|
|
|
events.off(player, "playlistitemmove", onPlaylistUpdate);
|
|
|
|
events.off(player, "playbackstop", onPlaybackStopped);
|
|
|
|
events.off(player, "volumechange", onVolumeChanged);
|
|
|
|
events.off(player, "pause", onPlayPauseStateChanged);
|
|
|
|
events.off(player, "unpause", onPlayPauseStateChanged);
|
|
|
|
events.off(player, "timeupdate", onTimeUpdate);
|
|
|
|
currentPlayer = null;
|
|
|
|
}
|
|
|
|
}
|
2018-10-23 01:05:09 +03:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
function bindToPlayer(context, player) {
|
|
|
|
if (releaseCurrentPlayer(), currentPlayer = player, player) {
|
|
|
|
var state = playbackManager.getPlayerState(player);
|
|
|
|
onStateChanged.call(player, {
|
|
|
|
type: "init"
|
|
|
|
}, state);
|
|
|
|
events.on(player, "playbackstart", onPlaybackStart);
|
|
|
|
events.on(player, "statechange", onStateChanged);
|
|
|
|
events.on(player, "repeatmodechange", onRepeatModeChange);
|
|
|
|
events.on(player, "playlistitemremove", onPlaylistItemRemoved);
|
|
|
|
events.on(player, "playlistitemmove", onPlaylistUpdate);
|
|
|
|
events.on(player, "playbackstop", onPlaybackStopped);
|
|
|
|
events.on(player, "volumechange", onVolumeChanged);
|
|
|
|
events.on(player, "pause", onPlayPauseStateChanged);
|
|
|
|
events.on(player, "unpause", onPlayPauseStateChanged);
|
|
|
|
events.on(player, "timeupdate", onTimeUpdate);
|
|
|
|
var playerInfo = playbackManager.getPlayerInfo();
|
|
|
|
var supportedCommands = playerInfo.supportedCommands;
|
|
|
|
currentPlayerSupportedCommands = supportedCommands;
|
|
|
|
updateSupportedCommands(context, supportedCommands);
|
|
|
|
}
|
|
|
|
}
|
2019-02-02 11:08:20 -05:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
function onBtnCommandClick() {
|
|
|
|
if (currentPlayer) {
|
|
|
|
if (this.classList.contains("repeatToggleButton")) {
|
|
|
|
toggleRepeat(currentPlayer);
|
|
|
|
} else {
|
|
|
|
playbackManager.sendCommand({
|
|
|
|
Name: this.getAttribute("data-command")
|
|
|
|
}, currentPlayer);
|
|
|
|
}
|
|
|
|
}
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
2019-02-02 11:08:20 -05:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
function getSaveablePlaylistItems() {
|
|
|
|
return getPlaylistItems(currentPlayer).then(function (items) {
|
2019-10-12 16:17:17 +09:00
|
|
|
return items.filter(function (i) {
|
|
|
|
return i.Id && i.ServerId;
|
|
|
|
});
|
2019-02-02 11:14:40 -05:00
|
|
|
});
|
|
|
|
}
|
2019-02-02 11:08:20 -05:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
function savePlaylist() {
|
|
|
|
require(["playlistEditor"], function (playlistEditor) {
|
|
|
|
getSaveablePlaylistItems().then(function (items) {
|
|
|
|
var serverId = items.length ? items[0].ServerId : ApiClient.serverId();
|
|
|
|
new playlistEditor().show({
|
2019-02-02 11:36:09 -05:00
|
|
|
items: items.map(function (i) {
|
|
|
|
return i.Id;
|
2019-02-02 11:14:40 -05:00
|
|
|
}),
|
|
|
|
serverId: serverId,
|
|
|
|
enableAddToPlayQueue: false,
|
|
|
|
defaultValue: "new"
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
2019-02-02 11:08:20 -05:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
function bindEvents(context) {
|
|
|
|
var btnCommand = context.querySelectorAll(".btnCommand");
|
|
|
|
|
2019-02-02 11:36:09 -05:00
|
|
|
for (var i = 0, length = btnCommand.length; i < length; i++) {
|
|
|
|
btnCommand[i].addEventListener("click", onBtnCommandClick);
|
2019-02-02 11:14:40 -05:00
|
|
|
}
|
|
|
|
|
2019-02-02 11:36:09 -05:00
|
|
|
context.querySelector(".btnToggleFullscreen").addEventListener("click", function (e) {
|
2019-02-02 11:14:40 -05:00
|
|
|
if (currentPlayer) {
|
|
|
|
playbackManager.sendCommand({
|
2019-02-02 11:36:09 -05:00
|
|
|
Name: e.target.getAttribute("data-command")
|
2019-02-02 11:14:40 -05:00
|
|
|
}, currentPlayer);
|
|
|
|
}
|
|
|
|
});
|
2019-02-02 11:36:09 -05:00
|
|
|
context.querySelector(".btnAudioTracks").addEventListener("click", function (e) {
|
2019-02-02 11:14:40 -05:00
|
|
|
if (currentPlayer && lastPlayerState && lastPlayerState.NowPlayingItem) {
|
2019-02-02 11:36:09 -05:00
|
|
|
showAudioMenu(context, currentPlayer, e.target, lastPlayerState.NowPlayingItem);
|
2019-02-02 11:14:40 -05:00
|
|
|
}
|
|
|
|
});
|
2019-02-02 11:36:09 -05:00
|
|
|
context.querySelector(".btnSubtitles").addEventListener("click", function (e) {
|
2019-02-02 11:14:40 -05:00
|
|
|
if (currentPlayer && lastPlayerState && lastPlayerState.NowPlayingItem) {
|
2019-02-02 11:36:09 -05:00
|
|
|
showSubtitleMenu(context, currentPlayer, e.target, lastPlayerState.NowPlayingItem);
|
2019-02-02 11:14:40 -05:00
|
|
|
}
|
|
|
|
});
|
|
|
|
context.querySelector(".btnStop").addEventListener("click", function () {
|
|
|
|
if (currentPlayer) {
|
|
|
|
playbackManager.stop(currentPlayer);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
context.querySelector(".btnPlayPause").addEventListener("click", function () {
|
|
|
|
if (currentPlayer) {
|
|
|
|
playbackManager.playPause(currentPlayer);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
context.querySelector(".btnNextTrack").addEventListener("click", function () {
|
|
|
|
if (currentPlayer) {
|
|
|
|
playbackManager.nextTrack(currentPlayer);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
context.querySelector(".btnRewind").addEventListener("click", function () {
|
|
|
|
if (currentPlayer) {
|
|
|
|
playbackManager.rewind(currentPlayer);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
context.querySelector(".btnFastForward").addEventListener("click", function () {
|
|
|
|
if (currentPlayer) {
|
|
|
|
playbackManager.fastForward(currentPlayer);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
context.querySelector(".btnPreviousTrack").addEventListener("click", function () {
|
|
|
|
if (currentPlayer) {
|
|
|
|
playbackManager.previousTrack(currentPlayer);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
context.querySelector(".nowPlayingPositionSlider").addEventListener("change", function () {
|
|
|
|
var value = this.value;
|
|
|
|
|
|
|
|
if (currentPlayer) {
|
|
|
|
var newPercent = parseFloat(value);
|
|
|
|
playbackManager.seekPercent(newPercent, currentPlayer);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
context.querySelector(".nowPlayingPositionSlider").getBubbleText = function (value) {
|
|
|
|
var state = lastPlayerState;
|
|
|
|
|
|
|
|
if (!state || !state.NowPlayingItem || !currentRuntimeTicks) {
|
|
|
|
return "--:--";
|
|
|
|
}
|
|
|
|
|
|
|
|
var ticks = currentRuntimeTicks;
|
|
|
|
ticks /= 100;
|
|
|
|
ticks *= value;
|
|
|
|
return datetime.getDisplayRunningTime(ticks);
|
|
|
|
};
|
|
|
|
|
2020-02-15 16:51:37 +03:00
|
|
|
function setVolume() {
|
2019-02-07 08:09:49 -05:00
|
|
|
playbackManager.setVolume(this.value, currentPlayer);
|
2020-02-15 16:51:37 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
context.querySelector(".nowPlayingVolumeSlider").addEventListener("change", setVolume);
|
2020-04-13 12:49:40 +03:00
|
|
|
context.querySelector(".nowPlayingVolumeSlider").addEventListener("mousemove", setVolume);
|
|
|
|
context.querySelector(".nowPlayingVolumeSlider").addEventListener("touchmove", setVolume);
|
2019-02-02 11:14:40 -05:00
|
|
|
context.querySelector(".buttonMute").addEventListener("click", function () {
|
|
|
|
playbackManager.toggleMute(currentPlayer);
|
|
|
|
});
|
|
|
|
var playlistContainer = context.querySelector(".playlist");
|
2019-02-02 11:36:09 -05:00
|
|
|
playlistContainer.addEventListener("action-remove", function (e) {
|
|
|
|
playbackManager.removeFromPlaylist([e.detail.playlistItemId], currentPlayer);
|
2019-02-02 11:14:40 -05:00
|
|
|
});
|
2019-02-02 11:36:09 -05:00
|
|
|
playlistContainer.addEventListener("itemdrop", function (e) {
|
|
|
|
var newIndex = e.detail.newIndex;
|
|
|
|
var playlistItemId = e.detail.playlistItemId;
|
2019-02-02 11:14:40 -05:00
|
|
|
playbackManager.movePlaylistItem(playlistItemId, newIndex, currentPlayer);
|
|
|
|
});
|
2020-04-10 16:12:45 -04:00
|
|
|
context.querySelector(".btnSavePlaylist").addEventListener("click", savePlaylist);
|
2020-04-10 15:51:05 +02:00
|
|
|
context.querySelector(".btnTogglePlaylist").addEventListener("click", function () {
|
2020-04-09 22:33:58 -04:00
|
|
|
if (context.querySelector(".playlist").classList.contains("hide")) {
|
2020-04-09 19:15:49 -04:00
|
|
|
context.querySelector(".playlist").classList.remove("hide");
|
|
|
|
context.querySelector(".btnSavePlaylist").classList.remove("hide");
|
|
|
|
context.querySelector(".contextMenu").classList.add("hide");
|
2020-04-12 20:24:18 +02:00
|
|
|
context.querySelector(".volumecontrol").classList.add("hide");
|
2020-04-09 19:15:49 -04:00
|
|
|
} else {
|
|
|
|
context.querySelector(".playlist").classList.add("hide");
|
|
|
|
context.querySelector(".btnSavePlaylist").classList.add("hide");
|
2020-04-12 20:24:18 +02:00
|
|
|
context.querySelector(".volumecontrol").classList.remove("hide");
|
2020-04-09 19:15:49 -04:00
|
|
|
}
|
|
|
|
});
|
2020-04-10 15:51:05 +02:00
|
|
|
context.querySelector(".btnToggleContextMenu").addEventListener("click", function () {
|
2020-04-09 22:33:58 -04:00
|
|
|
if (context.querySelector(".contextMenu").classList.contains("hide")) {
|
2020-04-09 19:15:49 -04:00
|
|
|
context.querySelector(".contextMenu").classList.remove("hide");
|
|
|
|
context.querySelector(".btnSavePlaylist").classList.add("hide");
|
|
|
|
context.querySelector(".playlist").classList.add("hide");
|
|
|
|
} else {
|
|
|
|
context.querySelector(".contextMenu").classList.add("hide");
|
|
|
|
}
|
|
|
|
});
|
2019-02-02 11:14:40 -05:00
|
|
|
}
|
2019-02-02 11:08:20 -05:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
function onPlayerChange() {
|
|
|
|
bindToPlayer(dlg, playbackManager.getCurrentPlayer());
|
|
|
|
}
|
2019-02-02 11:08:20 -05:00
|
|
|
|
2019-02-02 11:36:09 -05:00
|
|
|
function onMessageSubmit(e) {
|
|
|
|
var form = e.target;
|
2019-02-02 11:14:40 -05:00
|
|
|
playbackManager.sendCommand({
|
|
|
|
Name: "DisplayMessage",
|
|
|
|
Arguments: {
|
|
|
|
Header: form.querySelector("#txtMessageTitle").value,
|
|
|
|
Text: form.querySelector("#txtMessageText", form).value
|
|
|
|
}
|
|
|
|
}, currentPlayer);
|
|
|
|
form.querySelector("input").value = "";
|
|
|
|
|
|
|
|
require(["toast"], function (toast) {
|
|
|
|
toast("Message sent.");
|
|
|
|
});
|
|
|
|
|
2019-02-02 11:36:09 -05:00
|
|
|
e.preventDefault();
|
|
|
|
e.stopPropagation();
|
2019-02-02 11:14:40 -05:00
|
|
|
return false;
|
|
|
|
}
|
2019-02-02 11:08:20 -05:00
|
|
|
|
2019-02-02 11:36:09 -05:00
|
|
|
function onSendStringSubmit(e) {
|
|
|
|
var form = e.target;
|
2019-02-02 11:14:40 -05:00
|
|
|
playbackManager.sendCommand({
|
|
|
|
Name: "SendString",
|
|
|
|
Arguments: {
|
|
|
|
String: form.querySelector("#txtTypeText", form).value
|
|
|
|
}
|
|
|
|
}, currentPlayer);
|
|
|
|
form.querySelector("input").value = "";
|
|
|
|
|
|
|
|
require(["toast"], function (toast) {
|
|
|
|
toast("Text sent.");
|
|
|
|
});
|
|
|
|
|
2019-02-02 11:36:09 -05:00
|
|
|
e.preventDefault();
|
|
|
|
e.stopPropagation();
|
2019-02-02 11:14:40 -05:00
|
|
|
return false;
|
|
|
|
}
|
2019-02-02 11:08:20 -05:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
function init(ownerView, context) {
|
2020-04-28 19:18:37 +03:00
|
|
|
let contextmenuHtml = `<button id="toggleContextMenu" is="paper-icon-button-light" class="btnToggleContextMenu" title=${globalize.translate('ButtonToggleContextMenu')}><span class="material-icons more_vert"></span></button>`;
|
2020-04-28 16:09:40 +03:00
|
|
|
let volumecontrolHtml = '<div class="volumecontrol flex align-items-center flex-wrap-wrap justify-content-center">';
|
2020-04-28 19:18:37 +03:00
|
|
|
volumecontrolHtml += `<button is="paper-icon-button-light" class="buttonMute autoSize" title=${globalize.translate('Mute')}><span class="xlargePaperIconButton material-icons volume_up"></span></button>`;
|
2020-04-28 15:57:34 +03:00
|
|
|
volumecontrolHtml += '<div class="sliderContainer nowPlayingVolumeSliderContainer"><input is="emby-slider" type="range" step="1" min="0" max="100" value="0" class="nowPlayingVolumeSlider"/></div>';
|
|
|
|
volumecontrolHtml += '</div>';
|
|
|
|
if (!layoutManager.mobile) {
|
2020-04-28 16:09:40 +03:00
|
|
|
context.querySelector('.nowPlayingSecondaryButtons').innerHTML += volumecontrolHtml;
|
|
|
|
context.querySelector('.playlistSectionButton').innerHTML += contextmenuHtml;
|
2020-04-28 15:57:34 +03:00
|
|
|
} else {
|
2020-04-28 16:09:40 +03:00
|
|
|
context.querySelector('.playlistSectionButton').innerHTML += volumecontrolHtml + contextmenuHtml;
|
2020-04-28 15:57:34 +03:00
|
|
|
}
|
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
bindEvents(context);
|
|
|
|
context.querySelector(".sendMessageForm").addEventListener("submit", onMessageSubmit);
|
|
|
|
context.querySelector(".typeTextForm").addEventListener("submit", onSendStringSubmit);
|
|
|
|
events.on(playbackManager, "playerchange", onPlayerChange);
|
2020-02-19 02:10:40 +03:00
|
|
|
|
|
|
|
if (layoutManager.tv) {
|
|
|
|
var positionSlider = context.querySelector(".nowPlayingPositionSlider");
|
|
|
|
positionSlider.classList.add("focusable");
|
|
|
|
positionSlider.enableKeyboardDragging();
|
|
|
|
}
|
2019-02-02 11:14:40 -05:00
|
|
|
}
|
2019-02-02 11:08:20 -05:00
|
|
|
|
2019-02-02 11:36:09 -05:00
|
|
|
function onDialogClosed(e) {
|
2019-02-02 11:14:40 -05:00
|
|
|
releaseCurrentPlayer();
|
|
|
|
events.off(playbackManager, "playerchange", onPlayerChange);
|
|
|
|
lastPlayerState = null;
|
|
|
|
}
|
2019-02-02 11:08:20 -05:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
function onShow(context, tab) {
|
|
|
|
currentImgUrl = null;
|
|
|
|
bindToPlayer(context, playbackManager.getCurrentPlayer());
|
|
|
|
}
|
2019-02-02 11:08:20 -05:00
|
|
|
|
2019-02-02 11:14:40 -05:00
|
|
|
var dlg;
|
|
|
|
var currentPlayer;
|
|
|
|
var lastPlayerState;
|
|
|
|
var currentPlayerSupportedCommands = [];
|
|
|
|
var lastUpdateTime = 0;
|
|
|
|
var currentRuntimeTicks = 0;
|
|
|
|
var self = this;
|
|
|
|
|
|
|
|
self.init = function (ownerView, context) {
|
|
|
|
dlg = context;
|
|
|
|
init(ownerView, dlg);
|
|
|
|
};
|
|
|
|
|
|
|
|
self.onShow = function () {
|
|
|
|
onShow(dlg, window.location.hash);
|
|
|
|
};
|
|
|
|
|
|
|
|
self.destroy = function () {
|
|
|
|
onDialogClosed();
|
|
|
|
};
|
2019-02-02 11:08:20 -05:00
|
|
|
};
|
|
|
|
});
|