diff --git a/src/components/itemContextMenu.js b/src/components/itemContextMenu.js index 0ec982f15a..ee5518e110 100644 --- a/src/components/itemContextMenu.js +++ b/src/components/itemContextMenu.js @@ -9,6 +9,8 @@ import itemHelper from './itemHelper'; import { playbackManager } from './playback/playbackmanager'; import ServerConnections from './ServerConnections'; import toast from './toast/toast'; +import * as userSettings from '../scripts/settings/userSettings'; +import libraryMenu from '../scripts/libraryMenu'; export function getCommands(options) { const item = options.item; @@ -567,6 +569,29 @@ function deleteSeriesTimer(apiClient, item, resolve, command) { }); } +function getSettingsKey(item) { + if (item.IsFolder) { + return 'Folder'; + } + const itemType = item.MediaType; + switch (itemType) { + case 'Movie': + case 'BoxSet': + case 'Video': + return 'movies'; + case 'Audio': + return 'songs'; + case 'MusicAlbum': + return 'musicalbums'; + case 'MusicArtist': + return 'musicartists'; + case 'MusicGenre': + return 'genres'; + case 'MusicPlaylist': + return 'musicplaylists'; + } +} + function play(item, resume, queue, queueNext) { let method = 'play'; if (queue) { @@ -589,9 +614,16 @@ function play(item, resume, queue, queueNext) { serverId: item.ServerId }); } else { + const sortParentId = item.IsFolder ? ('items-' + item.Id) : libraryMenu.getTopParentId() + '-' + getSettingsKey(item); + const sortValues = userSettings.getSortValues(sortParentId); + playbackManager[method]({ items: [item], - startPositionTicks: startPosition + startPositionTicks: startPosition, + queryOptions: { + SortBy: sortValues.sortBy, + SortOrder: sortValues.sortOrder + } }); } } diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index 0ff00b232d..e263a72848 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -1815,7 +1815,7 @@ class PlaybackManager { // Setting this to true may cause some incorrect sorting Recursive: false, MediaTypes: 'Photo,Video', - sortBy: options.shuffle ? 'Random' : 'SortName', + SortBy: options.shuffle ? 'Random' : 'SortName', Limit: UNLIMITED_ITEMS }, queryOptions)).then(function (result) { const playbackItems = result.Items; diff --git a/src/components/shortcuts.js b/src/components/shortcuts.js index bcbf42a36c..58a7bffb05 100644 --- a/src/components/shortcuts.js +++ b/src/components/shortcuts.js @@ -206,6 +206,7 @@ function executeAction(card, target, action) { } else if (action === 'play' || action === 'resume') { const startPositionTicks = parseInt(card.getAttribute('data-positionticks') || '0', 10); const sortValues = userSettings.getSortValuesLegacy(sortParentId, 'SortName'); + if (playbackManager.canPlay(item)) { playbackManager.play({ ids: [playableItemId],