From 6cfcf36c3cdc1663179806810bb10826ba634657 Mon Sep 17 00:00:00 2001 From: MrK Date: Sun, 17 Sep 2023 23:27:44 +0100 Subject: [PATCH] Fixing bug #5584 by sending the proper Sort params to the API --- src/components/playback/playbackmanager.js | 16 ++++++++++++++-- src/components/shortcuts.js | 18 ++++++++++++++++-- src/controllers/list.js | 4 +++- 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index 05117fd08d..c1ba163335 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -1806,12 +1806,18 @@ class PlaybackManager { MediaTypes: 'Audio' }); } else if (firstItem.MediaType === 'Photo') { + const sortOptions = options.sortOptions || {}; + let sortByValue = options.shuffle ? 'Random' : sortOptions.sortBy; + if (sortByValue == null) { + sortByValue = 'SortName'; + } promise = getItemsForPlayback(serverId, { ParentId: firstItem.ParentId, Filters: 'IsNotFolder', // Setting this to true may cause some incorrect sorting Recursive: false, - SortBy: options.shuffle ? 'Random' : 'SortName', + SortBy: sortByValue, + SortOrder: sortOptions.sortOrder, MediaTypes: 'Photo,Video', Limit: UNLIMITED_ITEMS }).then(function (result) { @@ -1849,11 +1855,17 @@ class PlaybackManager { MediaTypes: 'Audio' }); } else if (firstItem.IsFolder && firstItem.CollectionType === 'homevideos') { + const sortOptions = options.sortOptions || {}; + let sortByValue = options.shuffle ? 'Random' : sortOptions.sortBy; + if (sortByValue == null) { + sortByValue = 'SortName'; + } promise = getItemsForPlayback(serverId, mergePlaybackQueries({ ParentId: firstItem.Id, Filters: 'IsNotFolder', Recursive: true, - SortBy: options.shuffle ? 'Random' : 'SortName', + SortBy: sortByValue, + SortOrder: sortOptions.sortOrder, // Only include Photos because we do not handle mixed queues currently MediaTypes: 'Photo', Limit: UNLIMITED_ITEMS diff --git a/src/components/shortcuts.js b/src/components/shortcuts.js index 7dc840e8b6..10174d886d 100644 --- a/src/components/shortcuts.js +++ b/src/components/shortcuts.js @@ -11,6 +11,7 @@ import dom from '../scripts/dom'; import recordingHelper from './recordingcreator/recordinghelper'; import ServerConnections from './ServerConnections'; import toast from './toast/toast'; +import * as userSettings from '../scripts/settings/userSettings'; function playAllFromHere(card, serverId, queue) { const parent = card.parentNode; @@ -165,6 +166,14 @@ function showPlayMenu(card, target) { }); } +function getSortValues(parentId) { + const basekey = 'items-' + parentId + '-Folder'; + return { + sortBy: userSettings.getFilter(basekey + '-sortby'), + sortOrder: userSettings.getFilter(basekey + '-sortorder') === 'Descending' ? 'Descending' : 'Ascending' + }; +} + function executeAction(card, target, action) { target = target || card; @@ -175,6 +184,10 @@ function executeAction(card, target, action) { id = card.getAttribute('data-id'); } + const itemsContainer = dom.parentWithClass(card, 'itemsContainer'); + + const parentId = itemsContainer.getAttribute('data-parentid'); + const item = getItemInfoFromCard(card); const serverId = item.ServerId; @@ -200,12 +213,13 @@ function executeAction(card, target, action) { }); } else if (action === 'play' || action === 'resume') { const startPositionTicks = parseInt(card.getAttribute('data-positionticks') || '0', 10); - + if (playbackManager.canPlay(item)) { playbackManager.play({ ids: [playableItemId], startPositionTicks: startPositionTicks, - serverId: serverId + serverId: serverId, + sortOptions: getSortValues(parentId) }); } else { console.warn('Unable to play item', item); diff --git a/src/controllers/list.js b/src/controllers/list.js index 0378a1025c..fc2366a3e9 100644 --- a/src/controllers/list.js +++ b/src/controllers/list.js @@ -722,11 +722,13 @@ class ItemsView { function play() { const currentItem = self.currentItem; + const values = self.getSortValues(); if (currentItem && !self.hasFilters) { playbackManager.play({ items: [currentItem], - autoplay: true + autoplay: true, + sortOptions: values }); } else { getItems(self, self.params, currentItem, null, 0, 300).then(function (result) {