Skip to content

Commit edd9405

Browse files
authored
Merge pull request #4786 from v0idMrK/Sorting-Only-Thumbnail-Fix-5584
Add sort options to playback requests
2 parents c62ddf4 + fa40c3f commit edd9405

File tree

6 files changed

+53
-15
lines changed

6 files changed

+53
-15
lines changed

CONTRIBUTORS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
6666
- [Fishbigger](https://github.com/fishbigger)
6767
- [sleepycatcoding](https://github.com/sleepycatcoding)
6868
- [TheMelmacian](https://github.com/TheMelmacian)
69+
- [v0idMrK](https://github.com/v0idMrK)
6970
- [tehciolo](https://github.com/tehciolo)
7071
- [scampower3](https://github.com/scampower3)
7172

src/components/itemContextMenu.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import itemHelper from './itemHelper';
99
import { playbackManager } from './playback/playbackmanager';
1010
import ServerConnections from './ServerConnections';
1111
import toast from './toast/toast';
12+
import * as userSettings from '../scripts/settings/userSettings';
1213

1314
export function getCommands(options) {
1415
const item = options.item;
@@ -589,9 +590,16 @@ function play(item, resume, queue, queueNext) {
589590
serverId: item.ServerId
590591
});
591592
} else {
593+
const sortParentId = 'items-' + (item.IsFolder ? item.Id : item.ParentId) + '-Folder';
594+
const sortValues = userSettings.getSortValuesLegacy(sortParentId);
595+
592596
playbackManager[method]({
593597
items: [item],
594-
startPositionTicks: startPosition
598+
startPositionTicks: startPosition,
599+
queryOptions: {
600+
SortBy: sortValues.sortBy,
601+
SortOrder: sortValues.sortOrder
602+
}
595603
});
596604
}
597605
}

src/components/playback/playbackmanager.js

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { PluginType } from '../../types/plugin.ts';
1515
import { includesAny } from '../../utils/container.ts';
1616
import { getItems } from '../../utils/jellyfin-apiclient/getItems.ts';
1717
import { getItemBackdropImageUrl } from '../../utils/jellyfin-apiclient/backdropImage';
18+
import merge from 'lodash-es/merge';
1819

1920
const UNLIMITED_ITEMS = -1;
2021

@@ -145,7 +146,7 @@ function createStreamInfoFromUrlItem(item) {
145146
}
146147

147148
function mergePlaybackQueries(obj1, obj2) {
148-
const query = Object.assign(obj1, obj2);
149+
const query = merge({}, obj1, obj2);
149150

150151
const filters = query.Filters ? query.Filters.split(',') : [];
151152
if (filters.indexOf('IsNotFolder') === -1) {
@@ -1798,23 +1799,23 @@ class PlaybackManager {
17981799
SortBy: options.shuffle ? 'Random' : null
17991800
});
18001801
} else if (firstItem.Type === 'MusicArtist') {
1801-
promise = getItemsForPlayback(serverId, {
1802+
promise = getItemsForPlayback(serverId, mergePlaybackQueries({
18021803
ArtistIds: firstItem.Id,
18031804
Filters: 'IsNotFolder',
18041805
Recursive: true,
18051806
SortBy: options.shuffle ? 'Random' : 'SortName',
18061807
MediaTypes: 'Audio'
1807-
});
1808+
}, queryOptions));
18081809
} else if (firstItem.MediaType === 'Photo') {
1809-
promise = getItemsForPlayback(serverId, {
1810+
promise = getItemsForPlayback(serverId, mergePlaybackQueries({
18101811
ParentId: firstItem.ParentId,
18111812
Filters: 'IsNotFolder',
18121813
// Setting this to true may cause some incorrect sorting
18131814
Recursive: false,
18141815
SortBy: options.shuffle ? 'Random' : 'SortName',
18151816
MediaTypes: 'Photo,Video',
18161817
Limit: UNLIMITED_ITEMS
1817-
}).then(function (result) {
1818+
}, queryOptions)).then(function (result) {
18181819
const playbackItems = result.Items;
18191820

18201821
let index = playbackItems.map(function (i) {
@@ -1830,7 +1831,7 @@ class PlaybackManager {
18301831
return Promise.resolve(result);
18311832
});
18321833
} else if (firstItem.Type === 'PhotoAlbum') {
1833-
promise = getItemsForPlayback(serverId, {
1834+
promise = getItemsForPlayback(serverId, mergePlaybackQueries({
18341835
ParentId: firstItem.Id,
18351836
Filters: 'IsNotFolder',
18361837
// Setting this to true may cause some incorrect sorting
@@ -1839,15 +1840,15 @@ class PlaybackManager {
18391840
// Only include Photos because we do not handle mixed queues currently
18401841
MediaTypes: 'Photo',
18411842
Limit: UNLIMITED_ITEMS
1842-
});
1843+
}, queryOptions));
18431844
} else if (firstItem.Type === 'MusicGenre') {
1844-
promise = getItemsForPlayback(serverId, {
1845+
promise = getItemsForPlayback(serverId, mergePlaybackQueries({
18451846
GenreIds: firstItem.Id,
18461847
Filters: 'IsNotFolder',
18471848
Recursive: true,
18481849
SortBy: options.shuffle ? 'Random' : 'SortName',
18491850
MediaTypes: 'Audio'
1850-
});
1851+
}, queryOptions));
18511852
} else if (firstItem.Type === 'Series' || firstItem.Type === 'Season') {
18521853
const apiClient = ServerConnections.getApiClient(firstItem.ServerId);
18531854

src/components/shortcuts.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import dom from '../scripts/dom';
1111
import recordingHelper from './recordingcreator/recordinghelper';
1212
import ServerConnections from './ServerConnections';
1313
import toast from './toast/toast';
14+
import * as userSettings from '../scripts/settings/userSettings';
1415

1516
function playAllFromHere(card, serverId, queue) {
1617
const parent = card.parentNode;
@@ -177,6 +178,10 @@ function executeAction(card, target, action) {
177178

178179
const item = getItemInfoFromCard(card);
179180

181+
const itemsContainer = dom.parentWithClass(card, 'itemsContainer');
182+
183+
const sortParentId = 'items-' + (item.IsFolder ? item.Id : itemsContainer?.getAttribute('data-parentid')) + '-Folder';
184+
180185
const serverId = item.ServerId;
181186
const type = item.Type;
182187

@@ -200,12 +205,17 @@ function executeAction(card, target, action) {
200205
});
201206
} else if (action === 'play' || action === 'resume') {
202207
const startPositionTicks = parseInt(card.getAttribute('data-positionticks') || '0', 10);
208+
const sortValues = userSettings.getSortValuesLegacy(sortParentId, 'SortName');
203209

204210
if (playbackManager.canPlay(item)) {
205211
playbackManager.play({
206212
ids: [playableItemId],
207213
startPositionTicks: startPositionTicks,
208-
serverId: serverId
214+
serverId: serverId,
215+
queryOptions: {
216+
SortBy: sortValues.sortBy,
217+
SortOrder: sortValues.sortOrder
218+
}
209219
});
210220
} else {
211221
console.warn('Unable to play item', item);

src/controllers/list.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -724,8 +724,13 @@ class ItemsView {
724724
const currentItem = self.currentItem;
725725

726726
if (currentItem && !self.hasFilters) {
727+
const values = self.getSortValues();
727728
playbackManager.play({
728729
items: [currentItem],
730+
queryOptions: {
731+
SortBy: values.sortBy,
732+
SortOrder: values.sortOrder
733+
},
729734
autoplay: true
730735
});
731736
} else {
@@ -960,10 +965,7 @@ class ItemsView {
960965

961966
getSortValues() {
962967
const basekey = this.getSettingsKey();
963-
return {
964-
sortBy: userSettings.getFilter(basekey + '-sortby') || this.getDefaultSortBy(),
965-
sortOrder: userSettings.getFilter(basekey + '-sortorder') === 'Descending' ? 'Descending' : 'Ascending'
966-
};
968+
return userSettings.getSortValuesLegacy(basekey, this.getDefaultSortBy());
967969
}
968970

969971
getDefaultSortBy() {

src/scripts/settings/userSettings.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -622,6 +622,21 @@ export class UserSettings {
622622
getFilter(key) {
623623
return this.get(key, true);
624624
}
625+
626+
/**
627+
* Gets the current sort values (Legacy - Non-JSON)
628+
* (old views such as list.js [Photos] will
629+
* use this one)
630+
* @param {string} key - Filter key.
631+
* @param {string} defaultSortBy - Default SortBy value.
632+
* @return {Object} sortOptions object
633+
*/
634+
getSortValuesLegacy(key, defaultSortBy) {
635+
return {
636+
sortBy: this.getFilter(key + '-sortby') || defaultSortBy,
637+
sortOrder: this.getFilter(key + '-sortorder') === 'Descending' ? 'Descending' : 'Ascending'
638+
};
639+
}
625640
}
626641

627642
export const currentSettings = new UserSettings;
@@ -672,3 +687,4 @@ export const customCss = currentSettings.customCss.bind(currentSettings);
672687
export const disableCustomCss = currentSettings.disableCustomCss.bind(currentSettings);
673688
export const getSavedView = currentSettings.getSavedView.bind(currentSettings);
674689
export const saveViewSetting = currentSettings.saveViewSetting.bind(currentSettings);
690+
export const getSortValuesLegacy = currentSettings.getSortValuesLegacy.bind(currentSettings);

0 commit comments

Comments
 (0)