diff --git a/dashboard-ui/bower_components/emby-apiclient/.bower.json b/dashboard-ui/bower_components/emby-apiclient/.bower.json
index 202772b92..68f06c076 100644
--- a/dashboard-ui/bower_components/emby-apiclient/.bower.json
+++ b/dashboard-ui/bower_components/emby-apiclient/.bower.json
@@ -16,12 +16,12 @@
},
"devDependencies": {},
"ignore": [],
- "version": "1.1.118",
- "_release": "1.1.118",
+ "version": "1.1.119",
+ "_release": "1.1.119",
"_resolution": {
"type": "version",
- "tag": "1.1.118",
- "commit": "e43c750bd0a2cdb109e4b12ae561960118381e51"
+ "tag": "1.1.119",
+ "commit": "d3d62a7f416a3b980bf98000830d2ee6203a1658"
},
"_source": "https://github.com/MediaBrowser/Emby.ApiClient.Javascript.git",
"_target": "^1.1.51",
diff --git a/dashboard-ui/bower_components/emby-apiclient/apiclient.js b/dashboard-ui/bower_components/emby-apiclient/apiclient.js
index 39e15b0da..69f0872d5 100644
--- a/dashboard-ui/bower_components/emby-apiclient/apiclient.js
+++ b/dashboard-ui/bower_components/emby-apiclient/apiclient.js
@@ -2123,6 +2123,19 @@
return self.getJSON(url);
};
+ self.getItemDownloadUrl = function (itemId) {
+
+ if (!itemId) {
+ throw new Error("itemId cannot be empty");
+ }
+
+ var url = "Items/" + itemId + "/Download";
+
+ return self.getUrl(url, {
+ api_key: self.accessToken()
+ });
+ };
+
self.getSessions = function (options) {
var url = self.getUrl("Sessions", options);
diff --git a/dashboard-ui/bower_components/emby-apiclient/connectionmanager.js b/dashboard-ui/bower_components/emby-apiclient/connectionmanager.js
index ca6f0ea0a..6f4c1e7ba 100644
--- a/dashboard-ui/bower_components/emby-apiclient/connectionmanager.js
+++ b/dashboard-ui/bower_components/emby-apiclient/connectionmanager.js
@@ -216,7 +216,7 @@
return connectUser;
};
- var minServerVersion = '3.0.8000';
+ var minServerVersion = '3.0.8500';
self.minServerVersion = function (val) {
if (val) {
diff --git a/dashboard-ui/bower_components/emby-apiclient/localassetmanager.js b/dashboard-ui/bower_components/emby-apiclient/localassetmanager.js
index 3a5bf23f7..b8760e456 100644
--- a/dashboard-ui/bower_components/emby-apiclient/localassetmanager.js
+++ b/dashboard-ui/bower_components/emby-apiclient/localassetmanager.js
@@ -203,7 +203,14 @@
}
function addOrUpdateLocalItem(localItem) {
- return itemrepository.set(localItem.Id, localItem);
+ console.log('addOrUpdateLocalItem Start');
+ return itemrepository.set(localItem.Id, localItem).then(function (res) {
+ console.log('addOrUpdateLocalItem Success');
+ return Promise.resolve(true);
+ }, function (error) {
+ console.log('addOrUpdateLocalItem Error');
+ return Promise.resolve(false);
+ });
}
function createLocalItem(libraryItem, serverInfo, jobItem) {
@@ -342,6 +349,11 @@
return transfermanager.isDownloadFileInQueue(path);
}
+ function getDownloadItemCount() {
+
+ return transfermanager.getDownloadItemCount();
+ }
+
function translateFilePath(path) {
return Promise.resolve(path);
}
@@ -471,6 +483,7 @@
getServerItems: getServerItems,
getItemFileSize: getItemFileSize,
isDownloadFileInQueue: isDownloadFileInQueue,
+ getDownloadItemCount: getDownloadItemCount,
getViews: getViews,
getViewItems: getViewItems,
resyncTransfers: resyncTransfers
diff --git a/dashboard-ui/bower_components/emby-apiclient/sync/itemrepository.js b/dashboard-ui/bower_components/emby-apiclient/sync/itemrepository.js
index c9a97831f..bd076e35d 100644
--- a/dashboard-ui/bower_components/emby-apiclient/sync/itemrepository.js
+++ b/dashboard-ui/bower_components/emby-apiclient/sync/itemrepository.js
@@ -90,7 +90,7 @@
function clear() {
return dbPromise.then(function (db) {
var tx = db.transaction(dbName, 'readwrite');
- tx.objectStore(dbName).clear(key);
+ tx.objectStore(dbName).clear();
return tx.complete;
});
}
diff --git a/dashboard-ui/bower_components/emby-apiclient/sync/mediasync.js b/dashboard-ui/bower_components/emby-apiclient/sync/mediasync.js
index df681c3a7..0a0dee207 100644
--- a/dashboard-ui/bower_components/emby-apiclient/sync/mediasync.js
+++ b/dashboard-ui/bower_components/emby-apiclient/sync/mediasync.js
@@ -178,7 +178,7 @@
});
}
- function getNewMedia(apiClient, serverInfo, options) {
+ function getNewMedia(apiClient, serverInfo, options, downloadCount) {
console.log('[mediasync] Begin getNewMedia');
@@ -186,10 +186,15 @@
var p = Promise.resolve();
+ var maxDownloads = 10;
+ var currentCount = downloadCount;
+
jobItems.forEach(function (jobItem) {
- p = p.then(function () {
- return getNewItem(jobItem, apiClient, serverInfo, options);
- });
+ if (currentCount++ <= maxDownloads) {
+ p = p.then(function () {
+ return getNewItem(jobItem, apiClient, serverInfo, options);
+ });
+ }
});
return p.then(function () {
@@ -344,6 +349,7 @@
return localassetmanager.addOrUpdateLocalItem(localItem);
}, function (err) {
console.log('[mediasync] Error getImages: ' + err.toString());
+ return Promise.resolve();
});
}
@@ -368,9 +374,15 @@
console.log('[mediasync] downloadImage ' + itemId + ' ' + imageType + '_' + index.toString());
- return localassetmanager.downloadImage(localItem, imageUrl, serverId, itemId, imageType, index);
+ return localassetmanager.downloadImage(localItem, imageUrl, serverId, itemId, imageType, index).then(function (result) {
+ return Promise.resolve();
+ }, function (err) {
+ console.log('[mediasync] Error downloadImage: ' + err.toString());
+ return Promise.resolve();
+ });
}, function (err) {
console.log('[mediasync] Error downloadImage: ' + err.toString());
+ return Promise.resolve();
});
}
@@ -450,26 +462,28 @@
return processDownloadStatus(apiClient, serverInfo, options).then(function () {
- if (options.syncCheckProgressOnly === true) {
- return Promise.resolve();
- }
+ return localassetmanager.getDownloadItemCount().then(function (downloadCount) {
- return reportOfflineActions(apiClient, serverInfo).then(function () {
+ if (options.syncCheckProgressOnly === true && downloadCount > 2) {
+ return Promise.resolve();
+ }
- //// Do the first data sync
- //return syncData(apiClient, serverInfo, false).then(function () {
+ return reportOfflineActions(apiClient, serverInfo).then(function () {
- // Download new content
- return getNewMedia(apiClient, serverInfo, options).then(function () {
+ // Download new content
+ return getNewMedia(apiClient, serverInfo, options, downloadCount).then(function () {
- // Do the second data sync
- return syncData(apiClient, serverInfo, false).then(function () {
- console.log('[mediasync]************************************* Exit sync');
- return Promise.resolve();
+ // Do the second data sync
+ return syncData(apiClient, serverInfo, false).then(function () {
+ console.log('[mediasync]************************************* Exit sync');
+ return Promise.resolve();
+ });
});
+ //});
});
- //});
});
+ }, function (err) {
+ console.error(err.toString());
});
};
};
diff --git a/dashboard-ui/bower_components/emby-webcomponents/.bower.json b/dashboard-ui/bower_components/emby-webcomponents/.bower.json
index d3945d0de..b10939b20 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/.bower.json
+++ b/dashboard-ui/bower_components/emby-webcomponents/.bower.json
@@ -14,12 +14,12 @@
},
"devDependencies": {},
"ignore": [],
- "version": "1.4.478",
- "_release": "1.4.478",
+ "version": "1.4.479",
+ "_release": "1.4.479",
"_resolution": {
"type": "version",
- "tag": "1.4.478",
- "commit": "f0d0c518404756700c0d9f709c79f00fd45f06b0"
+ "tag": "1.4.479",
+ "commit": "b01a4ecb86439ba61593ff9d28721c0af048c4ef"
},
"_source": "https://github.com/MediaBrowser/emby-webcomponents.git",
"_target": "^1.2.1",
diff --git a/dashboard-ui/bower_components/emby-webcomponents/emby-itemscontainer/emby-itemscontainer.js b/dashboard-ui/bower_components/emby-webcomponents/emby-itemscontainer/emby-itemscontainer.js
index 706646ca5..2a52ea67c 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/emby-itemscontainer/emby-itemscontainer.js
+++ b/dashboard-ui/bower_components/emby-webcomponents/emby-itemscontainer/emby-itemscontainer.js
@@ -251,6 +251,11 @@
}
}
+ ItemsContainerProtoType.createdCallback = function () {
+
+ this.classList.add('itemsContainer');
+ };
+
ItemsContainerProtoType.attachedCallback = function () {
this.addEventListener('click', onClick);
@@ -278,6 +283,10 @@
addNotificationEvent(this, 'SeriesTimerCreated', onSeriesTimerCreated);
addNotificationEvent(this, 'TimerCancelled', onTimerCancelled);
addNotificationEvent(this, 'SeriesTimerCancelled', onSeriesTimerCancelled);
+
+ if (this.getAttribute('data-dragreorder') === 'true') {
+ this.enableDragReordering(true);
+ }
};
ItemsContainerProtoType.detachedCallback = function () {
diff --git a/dashboard-ui/bower_components/emby-webcomponents/htmlaudioplayer/plugin.js b/dashboard-ui/bower_components/emby-webcomponents/htmlaudioplayer/plugin.js
index 9c6da53f1..a2b411497 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/htmlaudioplayer/plugin.js
+++ b/dashboard-ui/bower_components/emby-webcomponents/htmlaudioplayer/plugin.js
@@ -171,9 +171,7 @@ define(['events', 'browser', 'pluginManager', 'apphost', 'appSettings'], functio
var originalVolume = elem.volume;
- return fade(elem, function () {
-
- }).then(function () {
+ return fade(elem, elem.volume).then(function () {
if (!elem.paused) {
elem.pause();
}
@@ -194,13 +192,16 @@ define(['events', 'browser', 'pluginManager', 'apphost', 'appSettings'], functio
var fadeTimeout;
- function fade(elem) {
+ function fade(elem, startingVolume) {
- var newVolume = Math.max(0, elem.volume - 0.15);
+ // Need to record the starting volume on each pass rather than querying elem.volume
+ // This is due to iOS safari not allowing volume changes and always returning the system volume value
+
+ var newVolume = Math.max(0, startingVolume - 0.15);
console.log('fading volume to ' + newVolume);
elem.volume = newVolume;
- if (!elem.volume) {
+ if (newVolume <= 0) {
return Promise.resolve();
}
@@ -209,7 +210,7 @@ define(['events', 'browser', 'pluginManager', 'apphost', 'appSettings'], functio
cancelFadeTimeout();
fadeTimeout = setTimeout(function () {
- fade(elem).then(resolve, reject);
+ fade(elem, newVolume).then(resolve, reject);
}, 100);
});
}
diff --git a/dashboard-ui/bower_components/emby-webcomponents/itemcontextmenu.js b/dashboard-ui/bower_components/emby-webcomponents/itemcontextmenu.js
index bd73f24a2..cb7228dad 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/itemcontextmenu.js
+++ b/dashboard-ui/bower_components/emby-webcomponents/itemcontextmenu.js
@@ -295,9 +295,7 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'embyRouter',
case 'download':
{
require(['fileDownloader'], function (fileDownloader) {
- var downloadHref = apiClient.getUrl("Items/" + itemId + "/Download", {
- api_key: apiClient.accessToken()
- });
+ var downloadHref = apiClient.getItemDownloadUrl(itemId);
fileDownloader.download([
{
diff --git a/dashboard-ui/bower_components/emby-webcomponents/playback/playbackmanager.js b/dashboard-ui/bower_components/emby-webcomponents/playback/playbackmanager.js
index d4ac36e77..732ac7c4f 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/playback/playbackmanager.js
+++ b/dashboard-ui/bower_components/emby-webcomponents/playback/playbackmanager.js
@@ -2117,6 +2117,23 @@ define(['events', 'datetime', 'appSettings', 'pluginManager', 'userSettings', 'g
});
}
+ function isHostReachable(mediaSource, apiClient) {
+
+ var url = mediaSource.Path;
+
+ var isServerAddress = url.toLowerCase().replace('https:', 'http').indexOf(apiClient.serverAddress().toLowerCase().replace('https:', 'http').substring(0, 14)) === 0;
+
+ if (isServerAddress) {
+ return Promise.resolve();
+ }
+
+ if (mediaSource.IsRemote) {
+ return Promise.resolve();
+ }
+
+ return Promise.reject();
+ }
+
function supportsDirectPlay(apiClient, mediaSource) {
return new Promise(function (resolve, reject) {
@@ -2130,12 +2147,15 @@ define(['events', 'datetime', 'appSettings', 'pluginManager', 'userSettings', 'g
resolve(true);
}
else {
- var val = mediaSource.Path.toLowerCase().replace('https:', 'http').indexOf(apiClient.serverAddress().toLowerCase().replace('https:', 'http').substring(0, 14)) === 0;
- resolve(val);
+ isHostReachable(mediaSource, apiClient).then(function () {
+ resolve(true);
+ }, function () {
+ resolve(false);
+ });
}
}
- if (mediaSource.Protocol === 'File') {
+ else if (mediaSource.Protocol === 'File') {
// Determine if the file can be accessed directly
require(['filesystem'], function (filesystem) {
@@ -2241,7 +2261,7 @@ define(['events', 'datetime', 'appSettings', 'pluginManager', 'userSettings', 'g
}
function findPlaylistIndex(playlistItemId, list) {
-
+
for (var i = 0, length = playlist.length; i < length; i++) {
if (list[i].PlaylistItemId === playlistItemId) {
return i;
diff --git a/dashboard-ui/bower_components/emby-webcomponents/playback/playerselection.js b/dashboard-ui/bower_components/emby-webcomponents/playback/playerselection.js
index f5449dad8..151427295 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/playback/playerselection.js
+++ b/dashboard-ui/bower_components/emby-webcomponents/playback/playerselection.js
@@ -1,4 +1,4 @@
-define(['appSettings', 'events', 'browser', 'loading', 'playbackManager', 'embyRouter', 'globalize'], function (appSettings, events, browser, loading, playbackManager, embyRouter, globalize) {
+define(['appSettings', 'events', 'browser', 'loading', 'playbackManager', 'embyRouter', 'globalize', 'apphost'], function (appSettings, events, browser, loading, playbackManager, embyRouter, globalize, appHost) {
'use strict';
var currentDisplayInfo;
@@ -79,7 +79,7 @@
// 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)) {
+ if (!(!browser.chrome || appHost.supports('castmenuhashchange'))) {
menuOptions.enableHistory = false;
}
diff --git a/dashboard-ui/bower_components/emby-webcomponents/playmenu.js b/dashboard-ui/bower_components/emby-webcomponents/playmenu.js
index f3fb10179..097c17f71 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/playmenu.js
+++ b/dashboard-ui/bower_components/emby-webcomponents/playmenu.js
@@ -6,7 +6,6 @@ define(['actionsheet', 'datetime', 'playbackManager', 'globalize', 'appSettings'
var item = options.item;
var itemType = item.Type;
- var mediaType = item.MediaType;
var isFolder = item.IsFolder;
var itemId = item.Id;
var channelId = item.ChannelId;
@@ -25,29 +24,15 @@ define(['actionsheet', 'datetime', 'playbackManager', 'globalize', 'appSettings'
var menuItems = [];
- if (resumePositionTicks) {
- menuItems.push({
- name: globalize.translate('sharedcomponents#ResumeAt', datetime.getDisplayRunningTime(resumePositionTicks)),
- id: 'resume'
- });
+ menuItems.push({
+ name: globalize.translate('sharedcomponents#ResumeAt', datetime.getDisplayRunningTime(resumePositionTicks)),
+ id: 'resume'
+ });
- menuItems.push({
- name: globalize.translate('sharedcomponents#PlayFromBeginning'),
- id: 'play'
- });
- } else {
- menuItems.push({
- name: globalize.translate('sharedcomponents#Play'),
- id: 'play'
- });
- }
-
- if (isFolder || itemType === "MusicArtist" || itemType === "MusicGenre") {
- menuItems.push({
- name: globalize.translate('sharedcomponents#Shuffle'),
- id: 'shuffle'
- });
- }
+ menuItems.push({
+ name: globalize.translate('sharedcomponents#PlayFromBeginning'),
+ id: 'play'
+ });
actionsheet.show({
diff --git a/dashboard-ui/bower_components/emby-webcomponents/sanitizefilename.js b/dashboard-ui/bower_components/emby-webcomponents/sanitizefilename.js
new file mode 100644
index 000000000..b38c027f4
--- /dev/null
+++ b/dashboard-ui/bower_components/emby-webcomponents/sanitizefilename.js
@@ -0,0 +1,100 @@
+// From https://github.com/parshap/node-sanitize-filename
+
+define([], function () {
+ 'use strict';
+
+ var illegalRe = /[\/\?<>\\:\*\|":]/g;
+ var controlRe = /[\x00-\x1f\x80-\x9f]/g;
+ var reservedRe = /^\.+$/;
+ var windowsReservedRe = /^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i;
+ var windowsTrailingRe = /[\. ]+$/;
+
+ function isHighSurrogate(codePoint) {
+ return codePoint >= 0xd800 && codePoint <= 0xdbff;
+ }
+
+ function isLowSurrogate(codePoint) {
+ return codePoint >= 0xdc00 && codePoint <= 0xdfff;
+ }
+
+ function getByteLength(string) {
+ if (typeof string !== "string") {
+ throw new Error("Input must be string");
+ }
+
+ var charLength = string.length;
+ var byteLength = 0;
+ var codePoint = null;
+ var prevCodePoint = null;
+ for (var i = 0; i < charLength; i++) {
+ codePoint = string.charCodeAt(i);
+ // handle 4-byte non-BMP chars
+ // low surrogate
+ if (isLowSurrogate(codePoint)) {
+ // when parsing previous hi-surrogate, 3 is added to byteLength
+ if (prevCodePoint != null && isHighSurrogate(prevCodePoint)) {
+ byteLength += 1;
+ }
+ else {
+ byteLength += 3;
+ }
+ }
+ else if (codePoint <= 0x7f) {
+ byteLength += 1;
+ }
+ else if (codePoint >= 0x80 && codePoint <= 0x7ff) {
+ byteLength += 2;
+ }
+ else if (codePoint >= 0x800 && codePoint <= 0xffff) {
+ byteLength += 3;
+ }
+ prevCodePoint = codePoint;
+ }
+
+ return byteLength;
+ };
+
+ function truncate(string, byteLength) {
+ if (typeof string !== "string") {
+ throw new Error("Input must be string");
+ }
+
+ var charLength = string.length;
+ var curByteLength = 0;
+ var codePoint;
+ var segment;
+
+ for (var i = 0; i < charLength; i += 1) {
+ codePoint = string.charCodeAt(i);
+ segment = string[i];
+
+ if (isHighSurrogate(codePoint) && isLowSurrogate(string.charCodeAt(i + 1))) {
+ i += 1;
+ segment += string[i];
+ }
+
+ curByteLength += getByteLength(segment);
+
+ if (curByteLength === byteLength) {
+ return string.slice(0, i + 1);
+ }
+ else if (curByteLength > byteLength) {
+ return string.slice(0, i - segment.length + 1);
+ }
+ }
+
+ return string;
+ };
+
+ return {
+ sanitize: function (input, replacement) {
+ var sanitized = input
+ .replace(illegalRe, replacement)
+ .replace(controlRe, replacement)
+ .replace(reservedRe, replacement)
+ .replace(windowsReservedRe, replacement)
+ .replace(windowsTrailingRe, replacement);
+ return truncate(sanitized, 255);
+ }
+ };
+});
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/emby-webcomponents/slideshow/slideshow.js b/dashboard-ui/bower_components/emby-webcomponents/slideshow/slideshow.js
index d5a5af7c3..d2dc68803 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/slideshow/slideshow.js
+++ b/dashboard-ui/bower_components/emby-webcomponents/slideshow/slideshow.js
@@ -59,9 +59,7 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f
} else {
if (item.MediaType === 'Photo' && original) {
- return apiClient.getUrl("Items/" + item.Id + "/Download", {
- api_key: apiClient.accessToken()
- });
+ return apiClient.getItemDownloadUrl(item.Id);
}
imageOptions.type = "Primary";
return getImageUrl(item, imageOptions, apiClient);
diff --git a/dashboard-ui/bower_components/emby-webcomponents/userdatabuttons/userdatabuttons.js b/dashboard-ui/bower_components/emby-webcomponents/userdatabuttons/userdatabuttons.js
index e2759bb30..19b5350a1 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/userdatabuttons/userdatabuttons.js
+++ b/dashboard-ui/bower_components/emby-webcomponents/userdatabuttons/userdatabuttons.js
@@ -106,9 +106,9 @@ define(['connectionManager', 'globalize', 'dom', 'itemHelper', 'paper-icon-butto
if (item.MediaType === 'Video' || item.Type === 'Series' || item.Type === 'Season' || item.Type === 'BoxSet' || item.Type === 'Playlist') {
if (item.Type !== 'TvChannel') {
if (userData.Played) {
- html += getUserDataButtonHtml('markPlayed', itemId, serverId, btnCssClass + ' btnUserDataOn', iconCssClass, 'check', tooltipPlayed, style);
+ html += getUserDataButtonHtml('markPlayed', itemId, serverId, btnCssClass + ' btnUserDataOn', iconCssClass, '', tooltipPlayed, style);
} else {
- html += getUserDataButtonHtml('markPlayed', itemId, serverId, btnCssClass, iconCssClass, 'check', tooltipPlayed, style);
+ html += getUserDataButtonHtml('markPlayed', itemId, serverId, btnCssClass, iconCssClass, '', tooltipPlayed, style);
}
}
}
@@ -133,9 +133,9 @@ define(['connectionManager', 'globalize', 'dom', 'itemHelper', 'paper-icon-butto
var tooltipFavorite = globalize.translate('sharedcomponents#Favorite');
if (userData.IsFavorite) {
- html += getUserDataButtonHtml('markFavorite', itemId, serverId, btnCssClass + ' btnUserData btnUserDataOn', iconCssClass, 'favorite', tooltipFavorite, style);
+ html += getUserDataButtonHtml('markFavorite', itemId, serverId, btnCssClass + ' btnUserData btnUserDataOn', iconCssClass, '', tooltipFavorite, style);
} else {
- html += getUserDataButtonHtml('markFavorite', itemId, serverId, btnCssClass + ' btnUserData', iconCssClass, 'favorite', tooltipFavorite, style);
+ html += getUserDataButtonHtml('markFavorite', itemId, serverId, btnCssClass + ' btnUserData', iconCssClass, '', tooltipFavorite, style);
}
return html;
diff --git a/dashboard-ui/components/remotecontrol.js b/dashboard-ui/components/remotecontrol.js
index 2d70e90c2..fe4cb0949 100644
--- a/dashboard-ui/components/remotecontrol.js
+++ b/dashboard-ui/components/remotecontrol.js
@@ -1,4 +1,4 @@
-define(['browser', 'datetime', 'backdrop', 'libraryBrowser', 'listView', 'userdataButtons', 'imageLoader', 'playbackManager', 'nowPlayingHelper', 'events', 'connectionManager', 'apphost', 'globalize', 'cardStyle'], function (browser, datetime, backdrop, libraryBrowser, listView, userdataButtons, imageLoader, playbackManager, nowPlayingHelper, events, connectionManager, appHost, globalize) {
+define(['browser', 'datetime', 'backdrop', 'libraryBrowser', 'listView', 'userdataButtons', 'imageLoader', 'playbackManager', 'nowPlayingHelper', 'events', 'connectionManager', 'apphost', 'globalize', 'cardStyle', 'emby-itemscontainer', 'css!css/nowplaying.css'], function (browser, datetime, backdrop, libraryBrowser, listView, userdataButtons, imageLoader, playbackManager, nowPlayingHelper, events, connectionManager, appHost, globalize) {
'use strict';
function showSlideshowMenu(context) {
@@ -800,8 +800,6 @@
playbackManager.movePlaylistItem(playlistItemId, newIndex, currentPlayer);
});
-
- playlistContainer.enableDragReordering(true);
}
function onPlayerChange() {
@@ -860,7 +858,6 @@
function init(ownerView, context) {
- require(['css!css/nowplaying.css']);
bindEvents(context);
context.querySelector('.sendMessageForm').addEventListener('submit', onMessageSubmit);
diff --git a/dashboard-ui/css/nowplayingbar.css b/dashboard-ui/css/nowplayingbar.css
index b1642c1b7..f8da4f472 100644
--- a/dashboard-ui/css/nowplayingbar.css
+++ b/dashboard-ui/css/nowplayingbar.css
@@ -33,8 +33,9 @@
}
}
-.mediaButton img {
- height: 24px;
+.nowPlayingBarInfoContainer {
+ display: flex;
+ align-items: center;
}
.currentTime {
@@ -111,13 +112,13 @@
}
.nowPlayingBarText {
- display: inline-block;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
vertical-align: middle;
text-align: left;
max-width: 130px;
+ flex-grow: 1;
}
.repeatActive {
diff --git a/dashboard-ui/nowplaying.html b/dashboard-ui/nowplaying.html
index 6f60a0dc4..c4c6df8c7 100644
--- a/dashboard-ui/nowplaying.html
+++ b/dashboard-ui/nowplaying.html
@@ -162,7 +162,7 @@