mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
switch to unified notifications
This commit is contained in:
parent
fa438393af
commit
cec6b66c27
19 changed files with 200 additions and 514 deletions
|
@ -15,12 +15,12 @@
|
|||
},
|
||||
"devDependencies": {},
|
||||
"ignore": [],
|
||||
"version": "1.4.113",
|
||||
"_release": "1.4.113",
|
||||
"version": "1.4.114",
|
||||
"_release": "1.4.114",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "1.4.113",
|
||||
"commit": "03c34e718b6b72ec847567dcedb114e32ff8a1f0"
|
||||
"tag": "1.4.114",
|
||||
"commit": "cf5d4390c6b08e025aaa3d7086172c483bc440ed"
|
||||
},
|
||||
"_source": "https://github.com/MediaBrowser/emby-webcomponents.git",
|
||||
"_target": "^1.2.0",
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
define(['connectionManager', 'playbackManager', 'events', 'inputManager', 'focusManager'], function (connectionManager, playbackManager, events, inputManager, focusManager) {
|
||||
define(['connectionManager', 'playbackManager', 'events', 'inputManager', 'focusManager', 'embyRouter'], function (connectionManager, playbackManager, events, inputManager, focusManager, embyRouter) {
|
||||
|
||||
function displayMessage(cmd) {
|
||||
|
||||
|
@ -18,7 +18,14 @@ define(['connectionManager', 'playbackManager', 'events', 'inputManager', 'focus
|
|||
}
|
||||
}
|
||||
|
||||
function processGeneralCommand(cmd) {
|
||||
function displayContent(cmd, apiClient) {
|
||||
|
||||
apiClient.getItem(apiClient.getCurrentUserId(), cmd.ItemId).then(function (item) {
|
||||
embyRouter.showItem(item);
|
||||
});
|
||||
}
|
||||
|
||||
function processGeneralCommand(cmd, apiClient) {
|
||||
|
||||
// Full list
|
||||
// https://github.com/MediaBrowser/MediaBrowser/blob/master/MediaBrowser.Model/Session/GeneralCommand.cs#L23
|
||||
|
@ -93,7 +100,7 @@ define(['connectionManager', 'playbackManager', 'events', 'inputManager', 'focus
|
|||
inputManager.trigger('settings');
|
||||
break;
|
||||
case 'DisplayContent':
|
||||
//Dashboard.onBrowseCommand(cmd.Arguments);
|
||||
displayContent(cmd, apiClient);
|
||||
break;
|
||||
case 'GoToSearch':
|
||||
inputManager.trigger('search');
|
||||
|
@ -164,7 +171,7 @@ define(['connectionManager', 'playbackManager', 'events', 'inputManager', 'focus
|
|||
}
|
||||
else if (msg.MessageType === "GeneralCommand") {
|
||||
var cmd = msg.Data;
|
||||
processGeneralCommand(cmd);
|
||||
processGeneralCommand(cmd, apiClient);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -174,10 +181,10 @@ define(['connectionManager', 'playbackManager', 'events', 'inputManager', 'focus
|
|||
events.on(apiClient, "websocketmessage", onWebSocketMessageReceived);
|
||||
}
|
||||
|
||||
//var current = connectionManager.currentApiClient();
|
||||
//if (current) {
|
||||
// bindEvents(current);
|
||||
//}
|
||||
var current = connectionManager.currentApiClient();
|
||||
if (current) {
|
||||
bindEvents(current);
|
||||
}
|
||||
|
||||
events.on(connectionManager, 'apiclientcreated', function (e, newApiClient) {
|
||||
|
||||
|
|
|
@ -116,17 +116,13 @@ define(['playbackManager', 'focusManager', 'embyRouter'], function (playbackMana
|
|||
// TODO
|
||||
break;
|
||||
case 'next':
|
||||
if (playbackManager.isPlayingVideo()) {
|
||||
playbackManager.nextChapter();
|
||||
} else if (playbackManager.isPlaying()) {
|
||||
if (playbackManager.isPlaying()) {
|
||||
playbackManager.nextTrack();
|
||||
}
|
||||
break;
|
||||
case 'previous':
|
||||
|
||||
if (playbackManager.isPlayingVideo()) {
|
||||
playbackManager.previousChapter();
|
||||
} else if (playbackManager.isPlaying()) {
|
||||
if (playbackManager.isPlaying()) {
|
||||
playbackManager.previousTrack();
|
||||
}
|
||||
break;
|
||||
|
|
117
dashboard-ui/bower_components/emby-webcomponents/librarychangednotifications.js
vendored
Normal file
117
dashboard-ui/bower_components/emby-webcomponents/librarychangednotifications.js
vendored
Normal file
|
@ -0,0 +1,117 @@
|
|||
define(['connectionManager', 'playbackManager', 'events', 'inputManager', 'focusManager', 'embyRouter'], function (connectionManager, playbackManager, events, inputManager, focusManager, embyRouter) {
|
||||
|
||||
function onOneDocumentClick() {
|
||||
|
||||
document.removeEventListener('click', onOneDocumentClick);
|
||||
document.removeEventListener('keydown', onOneDocumentClick);
|
||||
|
||||
if (window.Notification) {
|
||||
Notification.requestPermission();
|
||||
}
|
||||
}
|
||||
document.addEventListener('click', onOneDocumentClick);
|
||||
document.addEventListener('keydown', onOneDocumentClick);
|
||||
|
||||
function onLibraryChanged(data, apiClient) {
|
||||
|
||||
var newItems = data.ItemsAdded;
|
||||
|
||||
if (!newItems.length || /*AppInfo.isNativeApp ||*/ !window.Notification || Notification.permission !== "granted") {
|
||||
return;
|
||||
}
|
||||
|
||||
if (playbackManager.isPlayingVideo()) {
|
||||
return;
|
||||
}
|
||||
|
||||
apiClient.getItems(apiClient.getCurrentUserId(), {
|
||||
|
||||
Recursive: true,
|
||||
Limit: 3,
|
||||
IsFolder: false,
|
||||
SortBy: "DateCreated",
|
||||
SortOrder: "Descending",
|
||||
ImageTypes: "Primary",
|
||||
Ids: newItems.join(',')
|
||||
|
||||
}).then(function (result) {
|
||||
|
||||
var items = result.Items;
|
||||
|
||||
for (var i = 0, length = items.length ; i < length; i++) {
|
||||
|
||||
var item = items[i];
|
||||
|
||||
var notification = {
|
||||
title: "New " + item.Type,
|
||||
body: item.Name,
|
||||
timeout: 15000,
|
||||
vibrate: true,
|
||||
|
||||
data: {
|
||||
//options: {
|
||||
// url: LibraryBrowser.getHref(item)
|
||||
//}
|
||||
}
|
||||
};
|
||||
|
||||
var imageTags = item.ImageTags || {};
|
||||
|
||||
if (imageTags.Primary) {
|
||||
|
||||
notification.icon = apiClient.getScaledImageUrl(item.Id, {
|
||||
width: 80,
|
||||
tag: imageTags.Primary,
|
||||
type: "Primary"
|
||||
});
|
||||
}
|
||||
|
||||
var notif = new Notification(notification.title, notification);
|
||||
|
||||
if (notif.show) {
|
||||
notif.show();
|
||||
}
|
||||
|
||||
if (notification.timeout) {
|
||||
setTimeout(function () {
|
||||
|
||||
if (notif.close) {
|
||||
notif.close();
|
||||
}
|
||||
else if (notif.cancel) {
|
||||
notif.cancel();
|
||||
}
|
||||
}, notification.timeout);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function onWebSocketMessageReceived(e, msg) {
|
||||
|
||||
var apiClient = this;
|
||||
|
||||
if (msg.MessageType === "LibraryChanged") {
|
||||
var cmd = msg.Data;
|
||||
onLibraryChanged(cmd, apiClient);
|
||||
}
|
||||
}
|
||||
|
||||
function bindEvents(apiClient) {
|
||||
|
||||
if (!apiClient) {
|
||||
return;
|
||||
}
|
||||
|
||||
events.off(apiClient, "websocketmessage", onWebSocketMessageReceived);
|
||||
events.on(apiClient, "websocketmessage", onWebSocketMessageReceived);
|
||||
}
|
||||
|
||||
bindEvents(connectionManager.currentApiClient());
|
||||
|
||||
events.on(connectionManager, 'apiclientcreated', function (e, newApiClient) {
|
||||
|
||||
bindEvents(newApiClient);
|
||||
});
|
||||
|
||||
});
|
|
@ -29,14 +29,14 @@
|
|||
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
|
||||
},
|
||||
"ignore": [],
|
||||
"homepage": "https://github.com/polymerelements/iron-behaviors",
|
||||
"homepage": "https://github.com/PolymerElements/iron-behaviors",
|
||||
"_release": "1.0.17",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "v1.0.17",
|
||||
"commit": "ef8e89b5f0aa4e8a6b51ca6491ea453bf395f94f"
|
||||
},
|
||||
"_source": "git://github.com/polymerelements/iron-behaviors.git",
|
||||
"_source": "git://github.com/PolymerElements/iron-behaviors.git",
|
||||
"_target": "^1.0.0",
|
||||
"_originalSource": "polymerelements/iron-behaviors"
|
||||
"_originalSource": "PolymerElements/iron-behaviors"
|
||||
}
|
|
@ -31,14 +31,14 @@
|
|||
"web-component-tester": "*"
|
||||
},
|
||||
"private": true,
|
||||
"homepage": "https://github.com/Polymer/polymer",
|
||||
"homepage": "https://github.com/polymer/polymer",
|
||||
"_release": "1.6.0",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "v1.6.0",
|
||||
"commit": "8715c83bf04a228de00ec662ed43eb6141e61b91"
|
||||
},
|
||||
"_source": "git://github.com/Polymer/polymer.git",
|
||||
"_source": "git://github.com/polymer/polymer.git",
|
||||
"_target": "^1.1.0",
|
||||
"_originalSource": "Polymer/polymer"
|
||||
"_originalSource": "polymer/polymer"
|
||||
}
|
|
@ -197,7 +197,7 @@
|
|||
return;
|
||||
}
|
||||
|
||||
Dashboard.showModalLoadingMsg();
|
||||
Dashboard.showLoadingMsg();
|
||||
|
||||
ApiClient.ajax({
|
||||
type: "GET",
|
||||
|
@ -220,7 +220,7 @@
|
|||
$('#selectListing', page).val(listingsId);
|
||||
}
|
||||
|
||||
Dashboard.hideModalLoadingMsg();
|
||||
Dashboard.hideLoadingMsg();
|
||||
|
||||
}, function (result) {
|
||||
|
||||
|
@ -228,7 +228,7 @@
|
|||
message: Globalize.translate('ErrorGettingTvLineups')
|
||||
});
|
||||
refreshListings('');
|
||||
Dashboard.hideModalLoadingMsg();
|
||||
Dashboard.hideLoadingMsg();
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -574,53 +574,6 @@
|
|||
}
|
||||
}
|
||||
|
||||
/** homePageSmallBackdropCard */
|
||||
.homePageSmallBackdropCard .cardPadder {
|
||||
padding-bottom: 56.25%;
|
||||
}
|
||||
|
||||
|
||||
.homePageSmallBackdropCard {
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
@media all and (min-width: 540px) {
|
||||
|
||||
.homePageSmallBackdropCard {
|
||||
width: 33.333%;
|
||||
}
|
||||
}
|
||||
|
||||
@media all and (min-width: 600px) {
|
||||
|
||||
.homePageSmallBackdropCard {
|
||||
width: 25%;
|
||||
}
|
||||
}
|
||||
|
||||
@media all and (min-width: 800px) {
|
||||
|
||||
.homePageSmallBackdropCard {
|
||||
width: 20%;
|
||||
}
|
||||
}
|
||||
|
||||
@media all and (min-width: 1100px) {
|
||||
|
||||
.homePageSmallBackdropCard {
|
||||
width: 16.66666666666667%;
|
||||
}
|
||||
}
|
||||
|
||||
@media all and (min-width: 1440px) {
|
||||
|
||||
.homePageSmallBackdropCard {
|
||||
width: 12.5%;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** horizontalBackdropCard */
|
||||
.horizontalBackdropCard .cardPadder {
|
||||
padding-bottom: 56.25%;
|
||||
|
|
|
@ -365,9 +365,9 @@ body:not(.dashboardDocument) .btnNotifications {
|
|||
}
|
||||
|
||||
i.sidebarLinkIcon {
|
||||
font-size: 24px;
|
||||
height: 24px;
|
||||
width: 24px;
|
||||
font-size: 150%;
|
||||
height: auto;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.darkDrawer i.sidebarLinkIcon {
|
||||
|
@ -441,7 +441,6 @@ body:not(.dashboardDocument) .headerAppsButton {
|
|||
|
||||
.dashboardDocument .libraryMenuButtonText {
|
||||
font-size: 150%;
|
||||
margin-left: 1em;
|
||||
}
|
||||
|
||||
.dashboardDocument .mainDrawerPanelContent {
|
||||
|
@ -507,45 +506,3 @@ body:not(.dashboardDocument) .headerAppsButton {
|
|||
.title-separator {
|
||||
margin: 0 .5em;
|
||||
}
|
||||
|
||||
.adminAppsMenu {
|
||||
position: fixed;
|
||||
top: 5vh !important;
|
||||
left: 2vw !important;
|
||||
padding: 1.5em 1em !important;
|
||||
font-size: 110%;
|
||||
margin: 0 !important;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.adminAppsMenuRow {
|
||||
display: flex;
|
||||
padding: 0 !important;
|
||||
margin: 0 !important;
|
||||
}
|
||||
|
||||
.adminAppsMenuRow + .adminAppsMenuRow {
|
||||
margin-top: 1.5em !important;
|
||||
border-top: 1px solid #ddd;
|
||||
padding-top: 1em !important;
|
||||
}
|
||||
|
||||
.adminAppsButton {
|
||||
display: block;
|
||||
color: inherit !important;
|
||||
font-weight: normal !important;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.adminAppsButton {
|
||||
width: 5.3vw;
|
||||
}
|
||||
|
||||
.adminAppsButton + .adminAppsButton {
|
||||
margin-left: 1.5em;
|
||||
}
|
||||
|
||||
.adminAppsButton paper-icon-button {
|
||||
width: 4.5vh;
|
||||
height: 4.5vh;
|
||||
}
|
||||
|
|
|
@ -2,16 +2,16 @@
|
|||
|
||||
function login(page, username, password) {
|
||||
|
||||
Dashboard.showModalLoadingMsg();
|
||||
Dashboard.showLoadingMsg();
|
||||
|
||||
ConnectionManager.loginToConnect(username, password).then(function () {
|
||||
|
||||
Dashboard.hideModalLoadingMsg();
|
||||
Dashboard.hideLoadingMsg();
|
||||
Dashboard.navigate('selectserver.html');
|
||||
|
||||
}, function () {
|
||||
|
||||
Dashboard.hideModalLoadingMsg();
|
||||
Dashboard.hideLoadingMsg();
|
||||
|
||||
Dashboard.alert({
|
||||
message: Globalize.translate('MessageInvalidUser'),
|
||||
|
@ -26,7 +26,7 @@
|
|||
|
||||
function handleConnectionResult(page, result) {
|
||||
|
||||
Dashboard.hideModalLoadingMsg();
|
||||
Dashboard.hideLoadingMsg();
|
||||
|
||||
switch (result.State) {
|
||||
|
||||
|
@ -75,7 +75,7 @@
|
|||
|
||||
function loadAppConnection(page) {
|
||||
|
||||
Dashboard.showModalLoadingMsg();
|
||||
Dashboard.showLoadingMsg();
|
||||
|
||||
ConnectionManager.connect().then(function (result) {
|
||||
|
||||
|
@ -167,7 +167,7 @@
|
|||
host += ':' + port;
|
||||
}
|
||||
|
||||
Dashboard.showModalLoadingMsg();
|
||||
Dashboard.showLoadingMsg();
|
||||
|
||||
ConnectionManager.connectToAddress(host).then(function (result) {
|
||||
|
||||
|
|
|
@ -68,10 +68,10 @@
|
|||
return Sections.loadLibraryTiles(elem, user, 'backdrop', index, false, showLibraryTileNames);
|
||||
}
|
||||
else if (section == 'smalllibrarytiles') {
|
||||
return Sections.loadLibraryTiles(elem, user, 'homePageSmallBackdrop', index, false, showLibraryTileNames);
|
||||
return Sections.loadLibraryTiles(elem, user, 'smallBackdrop', index, false, showLibraryTileNames);
|
||||
}
|
||||
else if (section == 'smalllibrarytiles-automobile') {
|
||||
return Sections.loadLibraryTiles(elem, user, 'homePageSmallBackdrop', index, true, showLibraryTileNames);
|
||||
return Sections.loadLibraryTiles(elem, user, 'smallBackdrop', index, true, showLibraryTileNames);
|
||||
}
|
||||
else if (section == 'librarytiles-automobile') {
|
||||
return Sections.loadLibraryTiles(elem, user, 'backdrop', index, true, showLibraryTileNames);
|
||||
|
|
|
@ -835,7 +835,7 @@
|
|||
return html;
|
||||
},
|
||||
|
||||
shapes: ['square', 'portrait', 'banner', 'smallBackdrop', 'homePageSmallBackdrop', 'backdrop', 'overflowBackdrop', 'overflowPortrait', 'overflowSquare'],
|
||||
shapes: ['square', 'portrait', 'banner', 'smallBackdrop', 'backdrop', 'overflowBackdrop', 'overflowPortrait', 'overflowSquare'],
|
||||
|
||||
getPostersPerRow: function (screenWidth) {
|
||||
|
||||
|
@ -881,14 +881,6 @@
|
|||
if (screenWidth >= 540) return 3;
|
||||
if (screenWidth >= 420) return 2;
|
||||
return 1;
|
||||
case 'homePageSmallBackdrop':
|
||||
if (screenWidth >= 1440) return 8;
|
||||
if (screenWidth >= 1100) return 6;
|
||||
if (screenWidth >= 800) return 5;
|
||||
if (screenWidth >= 600) return 4;
|
||||
if (screenWidth >= 540) return 3;
|
||||
if (screenWidth >= 420) return 2;
|
||||
return 1;
|
||||
case 'overflowPortrait':
|
||||
if (screenWidth >= 1000) return 100 / 23;
|
||||
if (screenWidth >= 640) return 100 / 36;
|
||||
|
@ -1015,10 +1007,6 @@
|
|||
else if (options.shape == 'smallBackdrop') {
|
||||
thumbWidth = posterInfo.smallBackdropWidth;
|
||||
}
|
||||
else if (options.shape == 'homePageSmallBackdrop') {
|
||||
thumbWidth = posterInfo.homePageSmallBackdropWidth;
|
||||
posterWidth = posterInfo.homePageSmallBackdropWidth;
|
||||
}
|
||||
else if (options.shape == 'detailPagePortrait') {
|
||||
posterWidth = 200;
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
html += '<button type="button" is="paper-icon-button-light" class="headerButton headerButtonLeft headerBackButton hide autoSize"><i class="md-icon">' + backIcon + '</i></button>';
|
||||
|
||||
html += '<button type="button" is="paper-icon-button-light" class="headerButton mainDrawerButton barsMenuButton headerButtonLeft autoSize"><i class="md-icon">menu</i></button>';
|
||||
html += '<button type="button" is="paper-icon-button-light" class="headerButton headerAppsButton barsMenuButton headerButtonLeft autoSize"><i class="md-icon">menu</i></button>';
|
||||
html += '<button type="button" is="paper-icon-button-light" class="headerButton headerAppsButton barsMenuButton headerButtonLeft autoSize"><i class="md-icon">home</i></button>';
|
||||
|
||||
html += '<div class="libraryMenuButtonText headerButton">' + Globalize.translate('ButtonHome') + '</div>';
|
||||
|
||||
|
@ -179,57 +179,7 @@
|
|||
|
||||
function onHeaderAppsButtonClick() {
|
||||
|
||||
require(['dialogHelper', 'dom'], function (dialogHelper, dom) {
|
||||
|
||||
var dlg = dialogHelper.createDialog({
|
||||
removeOnClose: true,
|
||||
modal: false,
|
||||
autoFocus: false,
|
||||
entryAnimationDuration: 160,
|
||||
exitAnimationDuration: 160,
|
||||
enableHistory: false
|
||||
});
|
||||
|
||||
dlg.classList.add('ui-body-a');
|
||||
dlg.classList.add('background-theme-a');
|
||||
dlg.classList.add('adminAppsMenu');
|
||||
|
||||
var html = '';
|
||||
|
||||
html += '<div class="adminAppsMenuRow">';
|
||||
|
||||
html += '<a class="adminAppsButton" href="home.html">';
|
||||
html += '<button is="paper-icon-button-light" class="autoSize"><i class="md-icon">home</i></button>';
|
||||
html += '<div>' + Globalize.translate('ButtonHome') + '</div>';
|
||||
html += '</a>';
|
||||
|
||||
html += '</div>';
|
||||
|
||||
html += '<div class="adminAppsMenuRow">';
|
||||
|
||||
html += '<a class="adminAppsButton" href="edititemmetadata.html">';
|
||||
html += '<button is="paper-icon-button-light" class="autoSize"><i class="md-icon">mode_edit</i></button>';
|
||||
html += '<div>' + Globalize.translate('ButtonMetadataManager') + '</div>';
|
||||
html += '</a>';
|
||||
html += '<a class="adminAppsButton" href="reports.html">';
|
||||
html += '<button is="paper-icon-button-light" class="autoSize"><i class="md-icon">insert_chart</i></button>';
|
||||
html += '<div>' + Globalize.translate('ButtonReports') + '</div>';
|
||||
html += '</a>';
|
||||
|
||||
html += '</div>';
|
||||
|
||||
dlg.innerHTML = html;
|
||||
document.body.appendChild(dlg);
|
||||
|
||||
dlg.addEventListener('click', function (e) {
|
||||
var link = dom.parentWithTag(e.target, 'A');
|
||||
if (link) {
|
||||
dialogHelper.close(dlg);
|
||||
}
|
||||
});
|
||||
dialogHelper.open(dlg);
|
||||
|
||||
});
|
||||
Dashboard.navigate('home.html');
|
||||
}
|
||||
|
||||
function bindMenuEvents() {
|
||||
|
|
|
@ -801,10 +801,7 @@
|
|||
break;
|
||||
default:
|
||||
{
|
||||
if (player.isLocalPlayer) {
|
||||
// Not player-related
|
||||
Dashboard.processGeneralCommand(cmd);
|
||||
} else {
|
||||
if (!player.isLocalPlayer) {
|
||||
player.sendCommand(cmd);
|
||||
}
|
||||
break;
|
||||
|
@ -1070,60 +1067,12 @@
|
|||
|
||||
function onWebSocketMessageReceived(e, msg) {
|
||||
|
||||
var localPlayer;
|
||||
|
||||
if (msg.MessageType === "Play") {
|
||||
|
||||
localPlayer = MediaController.getLocalPlayer();
|
||||
|
||||
if (msg.Data.PlayCommand == "PlayNext") {
|
||||
localPlayer.queueNext({ ids: msg.Data.ItemIds });
|
||||
}
|
||||
else if (msg.Data.PlayCommand == "PlayLast") {
|
||||
localPlayer.queue({ ids: msg.Data.ItemIds });
|
||||
}
|
||||
else {
|
||||
localPlayer.play({ ids: msg.Data.ItemIds, startPositionTicks: msg.Data.StartPositionTicks });
|
||||
}
|
||||
|
||||
}
|
||||
else if (msg.MessageType === "ServerShuttingDown") {
|
||||
if (msg.MessageType === "ServerShuttingDown") {
|
||||
MediaController.setDefaultPlayerActive();
|
||||
}
|
||||
else if (msg.MessageType === "ServerRestarting") {
|
||||
MediaController.setDefaultPlayerActive();
|
||||
}
|
||||
else if (msg.MessageType === "Playstate") {
|
||||
|
||||
localPlayer = MediaController.getLocalPlayer();
|
||||
|
||||
if (msg.Data.Command === 'Stop') {
|
||||
localPlayer.stop();
|
||||
}
|
||||
else if (msg.Data.Command === 'Pause') {
|
||||
localPlayer.pause();
|
||||
}
|
||||
else if (msg.Data.Command === 'Unpause') {
|
||||
localPlayer.unpause();
|
||||
}
|
||||
else if (msg.Data.Command === 'Seek') {
|
||||
localPlayer.seek(msg.Data.SeekPositionTicks);
|
||||
}
|
||||
else if (msg.Data.Command === 'NextTrack') {
|
||||
localPlayer.nextTrack();
|
||||
}
|
||||
else if (msg.Data.Command === 'PreviousTrack') {
|
||||
localPlayer.previousTrack();
|
||||
}
|
||||
}
|
||||
else if (msg.MessageType === "GeneralCommand") {
|
||||
|
||||
var cmd = msg.Data;
|
||||
|
||||
localPlayer = MediaController.getLocalPlayer();
|
||||
|
||||
MediaController.sendCommand(cmd, localPlayer);
|
||||
}
|
||||
}
|
||||
|
||||
function initializeApiClient(apiClient) {
|
||||
|
|
|
@ -783,10 +783,14 @@ define(['appSettings', 'userSettings', 'appStorage', 'datetime'], function (appS
|
|||
return null;
|
||||
};
|
||||
|
||||
self.displayContent = function (options) {
|
||||
self.displayContent = function (cmd) {
|
||||
|
||||
// Handle it the same as a remote control command
|
||||
Dashboard.onBrowseCommand(options);
|
||||
var apiClient = ApiClient;
|
||||
apiClient.getItem(apiClient.getCurrentUserId(), cmd.ItemId).then(function (item) {
|
||||
require(['embyRouter'], function (embyRouter) {
|
||||
embyRouter.showItem(item);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
self.getItemsForPlayback = function (query) {
|
||||
|
|
|
@ -118,7 +118,7 @@
|
|||
|
||||
html = libraryBrowser.getPosterViewHtml({
|
||||
items: result.Items,
|
||||
shape: "portrait",
|
||||
shape: "auto",
|
||||
context: 'movies',
|
||||
showTitle: true,
|
||||
showYear: true,
|
||||
|
@ -132,7 +132,7 @@
|
|||
// Poster
|
||||
html = libraryBrowser.getPosterViewHtml({
|
||||
items: result.Items,
|
||||
shape: "portrait",
|
||||
shape: "auto",
|
||||
context: 'movies',
|
||||
centerText: true,
|
||||
lazy: true,
|
||||
|
|
|
@ -260,10 +260,8 @@
|
|||
loadResume(tabContent, userId, parentId);
|
||||
loadLatest(tabContent, userId, parentId);
|
||||
|
||||
if (AppInfo.enableMovieHomeSuggestions) {
|
||||
loadSuggestions(tabContent, userId, parentId);
|
||||
}
|
||||
}
|
||||
|
||||
return function (view, params) {
|
||||
|
||||
|
|
|
@ -71,7 +71,7 @@
|
|||
|
||||
function showGeneralError() {
|
||||
|
||||
Dashboard.hideModalLoadingMsg();
|
||||
Dashboard.hideLoadingMsg();
|
||||
Dashboard.alert({
|
||||
message: Globalize.translate('DefaultErrorMessage')
|
||||
});
|
||||
|
@ -138,12 +138,12 @@
|
|||
|
||||
function acceptInvitation(page, id) {
|
||||
|
||||
Dashboard.showModalLoadingMsg();
|
||||
Dashboard.showLoadingMsg();
|
||||
|
||||
// Add/Update connect info
|
||||
ConnectionManager.acceptServer(id).then(function () {
|
||||
|
||||
Dashboard.hideModalLoadingMsg();
|
||||
Dashboard.hideLoadingMsg();
|
||||
loadPage(page);
|
||||
|
||||
}, function () {
|
||||
|
@ -154,12 +154,12 @@
|
|||
|
||||
function deleteServer(page, serverId) {
|
||||
|
||||
Dashboard.showModalLoadingMsg();
|
||||
Dashboard.showLoadingMsg();
|
||||
|
||||
// Add/Update connect info
|
||||
ConnectionManager.deleteServer(serverId).then(function () {
|
||||
|
||||
Dashboard.hideModalLoadingMsg();
|
||||
Dashboard.hideLoadingMsg();
|
||||
|
||||
loadPage(page);
|
||||
|
||||
|
@ -172,12 +172,12 @@
|
|||
|
||||
function rejectInvitation(page, id) {
|
||||
|
||||
Dashboard.showModalLoadingMsg();
|
||||
Dashboard.showLoadingMsg();
|
||||
|
||||
// Add/Update connect info
|
||||
ConnectionManager.rejectServer(id).then(function () {
|
||||
|
||||
Dashboard.hideModalLoadingMsg();
|
||||
Dashboard.hideLoadingMsg();
|
||||
|
||||
loadPage(page);
|
||||
|
||||
|
|
|
@ -1,18 +1,4 @@
|
|||
(function () {
|
||||
|
||||
function onOneDocumentClick() {
|
||||
|
||||
document.removeEventListener('click', onOneDocumentClick);
|
||||
|
||||
if (window.Notification) {
|
||||
Notification.requestPermission();
|
||||
}
|
||||
}
|
||||
document.addEventListener('click', onOneDocumentClick);
|
||||
|
||||
})();
|
||||
|
||||
var Dashboard = {
|
||||
var Dashboard = {
|
||||
|
||||
isConnectMode: function () {
|
||||
|
||||
|
@ -72,20 +58,6 @@ var Dashboard = {
|
|||
}
|
||||
},
|
||||
|
||||
onPopupOpen: function () {
|
||||
Dashboard.popupCount = (Dashboard.popupCount || 0) + 1;
|
||||
document.body.classList.add('bodyWithPopupOpen');
|
||||
},
|
||||
|
||||
onPopupClose: function () {
|
||||
|
||||
Dashboard.popupCount = (Dashboard.popupCount || 1) - 1;
|
||||
|
||||
if (!Dashboard.popupCount) {
|
||||
document.body.classList.remove('bodyWithPopupOpen');
|
||||
}
|
||||
},
|
||||
|
||||
getCurrentUser: function () {
|
||||
|
||||
return window.ApiClient.getCurrentUser();
|
||||
|
@ -415,32 +387,6 @@ var Dashboard = {
|
|||
});
|
||||
},
|
||||
|
||||
getModalLoadingMsg: function () {
|
||||
|
||||
var elem = document.querySelector('.modalLoading');
|
||||
|
||||
if (!elem) {
|
||||
|
||||
elem = document.createElement('modalLoading');
|
||||
elem.classList.add('modalLoading');
|
||||
elem.classList.add('hide');
|
||||
document.body.appendChild(elem);
|
||||
|
||||
}
|
||||
|
||||
return elem;
|
||||
},
|
||||
|
||||
showModalLoadingMsg: function () {
|
||||
Dashboard.getModalLoadingMsg().classList.remove('hide');
|
||||
Dashboard.showLoadingMsg();
|
||||
},
|
||||
|
||||
hideModalLoadingMsg: function () {
|
||||
Dashboard.getModalLoadingMsg().classList.add('hide');
|
||||
Dashboard.hideLoadingMsg();
|
||||
},
|
||||
|
||||
processPluginConfigurationUpdateResult: function () {
|
||||
|
||||
Dashboard.hideLoadingMsg();
|
||||
|
@ -784,12 +730,22 @@ var Dashboard = {
|
|||
name: Globalize.translate('TabLogs'),
|
||||
href: "log.html",
|
||||
pageIds: ['logPage'],
|
||||
icon: 'folder-open'
|
||||
icon: 'folder_open'
|
||||
}, {
|
||||
name: Globalize.translate('TabScheduledTasks'),
|
||||
href: "scheduledtasks.html",
|
||||
pageIds: ['scheduledTasksPage', 'scheduledTaskPage'],
|
||||
icon: 'schedule'
|
||||
}, {
|
||||
name: Globalize.translate('ButtonMetadataManager'),
|
||||
href: "edititemmetadata.html",
|
||||
pageIds: [],
|
||||
icon: 'mode_edit'
|
||||
}, {
|
||||
name: Globalize.translate('ButtonReports'),
|
||||
href: "reports.html",
|
||||
pageIds: [],
|
||||
icon: 'insert_chart'
|
||||
}, {
|
||||
name: Globalize.translate('TabHelp'),
|
||||
href: "about.html",
|
||||
|
@ -801,87 +757,11 @@ var Dashboard = {
|
|||
|
||||
},
|
||||
|
||||
processGeneralCommand: function (cmd) {
|
||||
|
||||
// Full list
|
||||
// https://github.com/MediaBrowser/MediaBrowser/blob/master/MediaBrowser.Model/Session/GeneralCommand.cs#L23
|
||||
|
||||
switch (cmd.Name) {
|
||||
|
||||
case 'GoHome':
|
||||
Dashboard.navigate('home.html');
|
||||
break;
|
||||
case 'GoToSettings':
|
||||
Dashboard.navigate('dashboard.html');
|
||||
break;
|
||||
case 'DisplayContent':
|
||||
Dashboard.onBrowseCommand(cmd.Arguments);
|
||||
break;
|
||||
case 'GoToSearch':
|
||||
Dashboard.navigate('search.html');
|
||||
break;
|
||||
case 'DisplayMessage':
|
||||
{
|
||||
var args = cmd.Arguments;
|
||||
|
||||
if (args.TimeoutMs && window.Notification && Notification.permission === "granted") {
|
||||
|
||||
var notification = {
|
||||
title: args.Header,
|
||||
body: args.Text,
|
||||
vibrate: true,
|
||||
timeout: args.TimeoutMs
|
||||
};
|
||||
|
||||
var notif = new Notification(notification.title, notification);
|
||||
|
||||
if (notif.show) {
|
||||
notif.show();
|
||||
}
|
||||
|
||||
if (notification.timeout) {
|
||||
setTimeout(function () {
|
||||
|
||||
if (notif.close) {
|
||||
notif.close();
|
||||
}
|
||||
else if (notif.cancel) {
|
||||
notif.cancel();
|
||||
}
|
||||
}, notification.timeout);
|
||||
}
|
||||
}
|
||||
else {
|
||||
Dashboard.alert({ title: args.Header, message: args.Text });
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case 'VolumeUp':
|
||||
case 'VolumeDown':
|
||||
case 'Mute':
|
||||
case 'Unmute':
|
||||
case 'ToggleMute':
|
||||
case 'SetVolume':
|
||||
case 'SetAudioStreamIndex':
|
||||
case 'SetSubtitleStreamIndex':
|
||||
case 'ToggleFullscreen':
|
||||
case 'SetRepeatMode':
|
||||
break;
|
||||
default:
|
||||
console.log('Unrecognized command: ' + cmd.Name);
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
onWebSocketMessageReceived: function (e, data) {
|
||||
|
||||
var msg = data;
|
||||
|
||||
if (msg.MessageType === "LibraryChanged") {
|
||||
Dashboard.processLibraryUpdateNotification(msg.Data);
|
||||
}
|
||||
else if (msg.MessageType === "ServerShuttingDown") {
|
||||
if (msg.MessageType === "ServerShuttingDown") {
|
||||
Dashboard.hideServerRestartWarning();
|
||||
}
|
||||
else if (msg.MessageType === "ServerRestarting") {
|
||||
|
@ -929,50 +809,6 @@ var Dashboard = {
|
|||
}
|
||||
});
|
||||
}
|
||||
else if (msg.MessageType === "GeneralCommand") {
|
||||
|
||||
var cmd = msg.Data;
|
||||
// Media Controller should catch this
|
||||
//Dashboard.processGeneralCommand(cmd);
|
||||
}
|
||||
},
|
||||
|
||||
onBrowseCommand: function (cmd) {
|
||||
|
||||
var url;
|
||||
|
||||
var type = (cmd.ItemType || "").toLowerCase();
|
||||
|
||||
if (type == "genre") {
|
||||
url = "itemdetails.html?id=" + cmd.ItemId;
|
||||
}
|
||||
else if (type == "musicgenre") {
|
||||
url = "itemdetails.html?id=" + cmd.ItemId;
|
||||
}
|
||||
else if (type == "gamegenre") {
|
||||
url = "itemdetails.html?id=" + cmd.ItemId;
|
||||
}
|
||||
else if (type == "studio") {
|
||||
url = "itemdetails.html?id=" + cmd.ItemId;
|
||||
}
|
||||
else if (type == "person") {
|
||||
url = "itemdetails.html?id=" + cmd.ItemId;
|
||||
}
|
||||
else if (type == "musicartist") {
|
||||
url = "itemdetails.html?id=" + cmd.ItemId;
|
||||
}
|
||||
|
||||
if (url) {
|
||||
Dashboard.navigate(url);
|
||||
return;
|
||||
}
|
||||
|
||||
ApiClient.getItem(Dashboard.getCurrentUserId(), cmd.ItemId).then(function (item) {
|
||||
|
||||
Dashboard.navigate(LibraryBrowser.getHref(item, null, ''));
|
||||
|
||||
});
|
||||
|
||||
},
|
||||
|
||||
showPackageInstallNotification: function (installation, status) {
|
||||
|
@ -1038,77 +874,6 @@ var Dashboard = {
|
|||
Dashboard.showFooterNotification({ html: html, id: installation.Id, timeout: timeout, forceShow: forceShow, allowHide: allowHide });
|
||||
},
|
||||
|
||||
processLibraryUpdateNotification: function (data) {
|
||||
|
||||
var newItems = data.ItemsAdded;
|
||||
|
||||
if (!newItems.length || AppInfo.isNativeApp || !window.Notification || Notification.permission !== "granted") {
|
||||
return;
|
||||
}
|
||||
|
||||
ApiClient.getItems(Dashboard.getCurrentUserId(), {
|
||||
|
||||
Recursive: true,
|
||||
Limit: 3,
|
||||
Filters: "IsNotFolder",
|
||||
SortBy: "DateCreated",
|
||||
SortOrder: "Descending",
|
||||
ImageTypes: "Primary",
|
||||
Ids: newItems.join(',')
|
||||
|
||||
}).then(function (result) {
|
||||
|
||||
var items = result.Items;
|
||||
|
||||
for (var i = 0, length = Math.min(items.length, 2) ; i < length; i++) {
|
||||
|
||||
var item = items[i];
|
||||
|
||||
var notification = {
|
||||
title: "New " + item.Type,
|
||||
body: item.Name,
|
||||
timeout: 15000,
|
||||
vibrate: true,
|
||||
|
||||
data: {
|
||||
options: {
|
||||
url: LibraryBrowser.getHref(item)
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var imageTags = item.ImageTags || {};
|
||||
|
||||
if (imageTags.Primary) {
|
||||
|
||||
notification.icon = ApiClient.getScaledImageUrl(item.Id, {
|
||||
width: 60,
|
||||
tag: imageTags.Primary,
|
||||
type: "Primary"
|
||||
});
|
||||
}
|
||||
|
||||
var notif = new Notification(notification.title, notification);
|
||||
|
||||
if (notif.show) {
|
||||
notif.show();
|
||||
}
|
||||
|
||||
if (notification.timeout) {
|
||||
setTimeout(function () {
|
||||
|
||||
if (notif.close) {
|
||||
notif.close();
|
||||
}
|
||||
else if (notif.cancel) {
|
||||
notif.cancel();
|
||||
}
|
||||
}, notification.timeout);
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
setPageTitle: function (title, documentTitle) {
|
||||
|
||||
LibraryMenu.setTitle(title || 'Emby');
|
||||
|
@ -1466,8 +1231,6 @@ var AppInfo = {};
|
|||
var isCordova = Dashboard.isRunningInCordova();
|
||||
|
||||
AppInfo.enableDetailPageChapters = true;
|
||||
AppInfo.enableDetailsMenuImages = true;
|
||||
AppInfo.enableMovieHomeSuggestions = true;
|
||||
AppInfo.enableSearchInTopMenu = true;
|
||||
AppInfo.enableHomeFavorites = true;
|
||||
AppInfo.enableNowPlayingBar = true;
|
||||
|
@ -1500,8 +1263,6 @@ var AppInfo = {};
|
|||
|
||||
} else {
|
||||
AppInfo.enableDetailPageChapters = false;
|
||||
AppInfo.enableDetailsMenuImages = false;
|
||||
AppInfo.enableMovieHomeSuggestions = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3258,6 +3019,12 @@ var AppInfo = {};
|
|||
postInitDependencies.push('robotoFont');
|
||||
}
|
||||
|
||||
postInitDependencies.push('bower_components/emby-webcomponents/input/api');
|
||||
|
||||
if (window.Notification && !AppInfo.isNativeApp) {
|
||||
postInitDependencies.push('bower_components/emby-webcomponents/librarychangednotifications');
|
||||
}
|
||||
|
||||
require(postInitDependencies);
|
||||
upgradeLayouts();
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue