diff --git a/dashboard-ui/bower_components/emby-webcomponents/.bower.json b/dashboard-ui/bower_components/emby-webcomponents/.bower.json index 606524bebb..1984bef922 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/.bower.json +++ b/dashboard-ui/bower_components/emby-webcomponents/.bower.json @@ -15,12 +15,12 @@ }, "devDependencies": {}, "ignore": [], - "version": "1.4.86", - "_release": "1.4.86", + "version": "1.4.87", + "_release": "1.4.87", "_resolution": { "type": "version", - "tag": "1.4.86", - "commit": "ddbdeddbe5f3fec3e7024a009077256d14f2ec0b" + "tag": "1.4.87", + "commit": "66ba0bbe4db51edaebe898f5672e6da45aafbed9" }, "_source": "https://github.com/MediaBrowser/emby-webcomponents.git", "_target": "^1.2.0", 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 500231a1fe..b691b3557f 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 @@ -48,6 +48,8 @@ positionTo: button, item: item }); + + // TODO: playallfromhere, queueallfromhere }); }); } diff --git a/dashboard-ui/bower_components/emby-webcomponents/itemcontextmenu.js b/dashboard-ui/bower_components/emby-webcomponents/itemcontextmenu.js index 526adedd41..977a711777 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/itemcontextmenu.js +++ b/dashboard-ui/bower_components/emby-webcomponents/itemcontextmenu.js @@ -1,4 +1,4 @@ -define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'embyRouter'], function (appHost, globalize, connectionManager, itemHelper, embyRouter) { +define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'embyRouter', 'playbackManager'], function (appHost, globalize, connectionManager, itemHelper, embyRouter, playbackManager) { function getCommands(options) { @@ -48,38 +48,86 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'embyRouter'] }); } + if (item.MediaType == "Audio" || item.Type == "MusicAlbum" || item.Type == "MusicArtist" || item.Type == "MusicGenre" || item.CollectionType == "music") { + if (options.instantMix !== false) { + commands.push({ + name: globalize.translate('sharedcomponents#InstantMix'), + id: 'instantmix' + }); + } + } + if (options.open !== false) { commands.push({ - name: globalize.translate('Open'), + name: globalize.translate('sharedcomponents#Open'), id: 'open' }); } + if (options.play) { + commands.push({ + name: globalize.translate('sharedcomponents#Play'), + id: 'resume' + }); + } + + if (options.playAllFromHere) { + commands.push({ + name: globalize.translate('sharedcomponents#PlayAllFromHere'), + id: 'playallfromhere' + }); + } + + if (playbackManager.canQueueMediaType(item.MediaType)) { + if (options.queue) { + commands.push({ + name: globalize.translate('sharedcomponents#Queue'), + id: 'queue' + }); + } + + if (options.queueAllFromHere) { + commands.push({ + name: globalize.translate('sharedcomponents#QueueAllFromHere'), + id: 'queueallfromhere' + }); + } + } + if (user.Policy.IsAdministrator) { commands.push({ - name: globalize.translate('Refresh'), + name: globalize.translate('sharedcomponents#Refresh'), id: 'refresh' }); } if (item.Type != 'Timer' && user.Policy.EnablePublicSharing && appHost.supports('sharing')) { commands.push({ - name: globalize.translate('Share'), + name: globalize.translate('sharedcomponents#Share'), id: 'share' }); } + if (item.IsFolder || item.Type == "MusicArtist" || item.Type == "MusicGenre") { + if (options.shuffle !== false) { + commands.push({ + name: globalize.translate('sharedcomponents#Shuffle'), + id: 'shuffle' + }); + } + } + if (options.openAlbum !== false && item.AlbumId) { commands.push({ - name: Globalize.translate('ViewAlbum'), + name: Globalize.translate('sharedcomponents#ViewAlbum'), id: 'album' }); } if (options.openArtist !== false && item.ArtistItems && item.ArtistItems.length) { commands.push({ - name: Globalize.translate('ViewArtist'), + name: Globalize.translate('sharedcomponents#ViewArtist'), id: 'artist' }); } @@ -88,6 +136,17 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'embyRouter'] }); } + function getResolveFunction(resolve, id, changed, deleted) { + + return function () { + resolve({ + command: id, + updated: changed, + deleted: deleted + }); + }; + } + function executeCommand(item, id) { var itemId = item.Id; @@ -106,7 +165,7 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'embyRouter'] items: [itemId], serverId: serverId - }).then(reject, reject); + }).then(getResolveFunction(resolve, id, true), getResolveFunction(resolve, id)); }); break; } @@ -118,7 +177,7 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'embyRouter'] items: [itemId], serverId: serverId - }).then(reject, reject); + }).then(getResolveFunction(resolve, id, true), getResolveFunction(resolve, id)); }); break; } @@ -136,7 +195,7 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'embyRouter'] serverId: serverId }]); - reject(); + getResolveFunction(getResolveFunction(resolve, id), id)(); }); break; @@ -146,27 +205,61 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'embyRouter'] require(['subtitleEditor'], function (subtitleEditor) { var serverId = apiClient.serverInfo().Id; - subtitleEditor.show(itemId, serverId).then(resolve, reject); + subtitleEditor.show(itemId, serverId).then(getResolveFunction(resolve, id, true), getResolveFunction(resolve, id)); }); break; } case 'refresh': { refresh(apiClient, itemId); - reject(); + getResolveFunction(resolve, id)(); break; } case 'open': { embyRouter.showItem(item); - reject(); + getResolveFunction(resolve, id)(); + break; + } + case 'play': + { + playbackManager.play({ + items: [item] + }); + getResolveFunction(resolve, id)(); + break; + } + case 'resume': + { + playbackManager.play({ + items: [item] + }); + getResolveFunction(resolve, id)(); + break; + } + case 'queue': + { + playbackManager.queue({ + items: [item] + }); + getResolveFunction(resolve, id)(); + break; + } + case 'shuffle': + { + playbackManager.shuffle(item); + getResolveFunction(resolve, id)(); + break; + } + case 'instantmix': + { + playbackManager.instantMix(item); + getResolveFunction(resolve, id)(); break; } case 'delete': { - deleteItem(apiClient, itemId).then(function () { - resolve(true); - }); + deleteItem(apiClient, itemId).then(getResolveFunction(resolve, id, true, true), getResolveFunction(resolve, id)); break; } case 'share': @@ -176,20 +269,30 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'embyRouter'] serverId: serverId, itemId: itemId - }).then(reject); + }).then(getResolveFunction(resolve, id)); }); break; } case 'album': { embyRouter.showItem(item.AlbumId, item.ServerId); - reject(); + getResolveFunction(resolve, id)(); break; } case 'artist': { embyRouter.showItem(item.ArtistItems[0].Id, item.ServerId); - reject(); + getResolveFunction(resolve, id)(); + break; + } + case 'playallfromhere': + { + getResolveFunction(resolve, id)(); + break; + } + case 'queueallfromhere': + { + getResolveFunction(resolve, id)(); break; } default: diff --git a/dashboard-ui/bower_components/emby-webcomponents/listview/listview.css b/dashboard-ui/bower_components/emby-webcomponents/listview/listview.css index ffe066ae30..539d832121 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/listview/listview.css +++ b/dashboard-ui/bower_components/emby-webcomponents/listview/listview.css @@ -179,6 +179,10 @@ div.listItem { @supports (display: flex) { + .listItem > * { + display: flex; + } + .listItem, .listItemBody, .listItemMediaInfo { display: flex; } diff --git a/dashboard-ui/bower_components/emby-webcomponents/listview/listview.js b/dashboard-ui/bower_components/emby-webcomponents/listview/listview.js index f9498a2796..a2d52f8edc 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/listview/listview.js +++ b/dashboard-ui/bower_components/emby-webcomponents/listview/listview.js @@ -121,6 +121,7 @@ define(['itemHelper', 'mediaInfo', 'indicators', 'connectionManager', 'layoutMan var clickEntireItem = layoutManager.tv ? true : false; var outerTagName = clickEntireItem ? 'button' : 'div'; + var enableSideMediaInfo = options.enableSideMediaInfo != null ? options.enableSideMediaInfo : clickEntireItem; var outerHtml = ''; @@ -234,7 +235,7 @@ define(['itemHelper', 'mediaInfo', 'indicators', 'connectionManager', 'layoutMan } var lineCount = textlines.length; - if (!options.enableSideMediaInfo) { + if (!enableSideMediaInfo) { lineCount++; } if (enableOverview && item.Overview) { @@ -268,7 +269,7 @@ define(['itemHelper', 'mediaInfo', 'indicators', 'connectionManager', 'layoutMan } } - if (!options.enableSideMediaInfo) { + if (!enableSideMediaInfo) { html += '
' + mediaInfo.getPrimaryMediaInfoHtml(item) + '
'; } @@ -280,6 +281,10 @@ define(['itemHelper', 'mediaInfo', 'indicators', 'connectionManager', 'layoutMan html += ''; + if (enableSideMediaInfo) { + html += '
' + mediaInfo.getPrimaryMediaInfoHtml(item) + '
'; + } + if (!clickEntireItem) { html += ''; html += ''; @@ -287,10 +292,6 @@ define(['itemHelper', 'mediaInfo', 'indicators', 'connectionManager', 'layoutMan html += ''; } - if (options.enableSideMediaInfo) { - html += '
' + mediaInfo.getPrimaryMediaInfoHtml(item) + '
'; - } - html += ''; index++; diff --git a/dashboard-ui/bower_components/emby-webcomponents/strings/en-US.json b/dashboard-ui/bower_components/emby-webcomponents/strings/en-US.json index afdf8b5788..41eaaf4f9b 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/strings/en-US.json +++ b/dashboard-ui/bower_components/emby-webcomponents/strings/en-US.json @@ -100,6 +100,12 @@ "Played": "Played", "RefreshDialogHelp": "Metadata is refreshed based on settings and internet services that are enabled in the Emby Server dashboard.", "Open": "Open", + "Play": "Play", + "Queue": "Queue", + "Shuffle": "Shuffle", + "InstantMix": "Instant Mix", "ViewAlbum": "View Album", - "ViewArtist": "View Artist" + "ViewArtist": "View Artist", + "QueueAllFromHere": "Queue All from Here", + "PlayAllFromHere": "Play All from Here" } \ No newline at end of file diff --git a/dashboard-ui/scripts/site.js b/dashboard-ui/scripts/site.js index 4ff9e83023..c95ee0eb49 100644 --- a/dashboard-ui/scripts/site.js +++ b/dashboard-ui/scripts/site.js @@ -2029,6 +2029,9 @@ var AppInfo = {}; }, currentPlaylistIndex: function (options) { return MediaController.currentPlaylistIndex(options); + }, + canQueueMediaType: function(mediaType) { + return MediaController.canQueueMediaType(mediaType); } }; });