1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

Changed from using sortOptions to using already implemented queryOptions

Null verification for parentid on shortcuts.js
itemContextMenu is now obeying to sorting
This commit is contained in:
MrK 2023-09-20 17:44:55 +01:00
parent 580ad5f1a8
commit ee791f9d0d
5 changed files with 70 additions and 47 deletions

View file

@ -9,6 +9,8 @@ import itemHelper from './itemHelper';
import { playbackManager } from './playback/playbackmanager'; import { playbackManager } from './playback/playbackmanager';
import ServerConnections from './ServerConnections'; import ServerConnections from './ServerConnections';
import toast from './toast/toast'; import toast from './toast/toast';
import * as userSettings from '../scripts/settings/userSettings';
import libraryMenu from '../scripts/libraryMenu';
export function getCommands(options) { export function getCommands(options) {
const item = options.item; 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) { function play(item, resume, queue, queueNext) {
let method = 'play'; let method = 'play';
if (queue) { if (queue) {
@ -589,9 +614,12 @@ function play(item, resume, queue, queueNext) {
serverId: item.ServerId serverId: item.ServerId
}); });
} else { } else {
const sortParentId = item.IsFolder ? ('items-' + item.Id) : libraryMenu.getTopParentId() + '-' + getSettingsKey(item);
const sortValues = userSettings.getSortValues(sortParentId);
playbackManager[method]({ playbackManager[method]({
items: [item], items: [item],
startPositionTicks: startPosition startPositionTicks: startPosition,
queryOptions: sortValues
}); });
} }
} }

View file

@ -145,7 +145,10 @@ function createStreamInfoFromUrlItem(item) {
} }
function mergePlaybackQueries(obj1, obj2) { function mergePlaybackQueries(obj1, obj2) {
const query = Object.assign(obj1, obj2); const query = obj1;
for (const key in obj2) {
if (obj2[key] !== undefined) query[key] = obj2[key];
}
const filters = query.Filters ? query.Filters.split(',') : []; const filters = query.Filters ? query.Filters.split(',') : [];
if (filters.indexOf('IsNotFolder') === -1) { if (filters.indexOf('IsNotFolder') === -1) {
@ -1773,18 +1776,6 @@ class PlaybackManager {
}); });
} }
function getSortOptions(options) {
const sortOptions = options.sortOptions || {};
let sortByValue = options.shuffle ? 'Random' : sortOptions.sortBy;
if (sortByValue == null) {
sortByValue = 'SortName';
}
return {
sortBy: sortByValue,
sortOrder: sortOptions.sortOrder
};
}
function translateItemsForPlayback(items, options) { function translateItemsForPlayback(items, options) {
if (items.length > 1 && options && options.ids) { if (items.length > 1 && options && options.ids) {
// Use the original request id array for sorting the result in the proper order // Use the original request id array for sorting the result in the proper order
@ -1800,8 +1791,6 @@ class PlaybackManager {
const queryOptions = options.queryOptions || {}; const queryOptions = options.queryOptions || {};
const sortOptions = getSortOptions(options);
if (firstItem.Type === 'Program') { if (firstItem.Type === 'Program') {
promise = getItemsForPlayback(serverId, { promise = getItemsForPlayback(serverId, {
Ids: firstItem.ChannelId Ids: firstItem.ChannelId
@ -1812,25 +1801,23 @@ class PlaybackManager {
SortBy: options.shuffle ? 'Random' : null SortBy: options.shuffle ? 'Random' : null
}); });
} else if (firstItem.Type === 'MusicArtist') { } else if (firstItem.Type === 'MusicArtist') {
promise = getItemsForPlayback(serverId, { promise = getItemsForPlayback(serverId, mergePlaybackQueries({
ArtistIds: firstItem.Id, ArtistIds: firstItem.Id,
Filters: 'IsNotFolder', Filters: 'IsNotFolder',
Recursive: true, Recursive: true,
SortBy: sortOptions.sortBy, SortBy: options.shuffle ? 'Random' : 'SortName',
SortOrder: sortOptions.sortOrder,
MediaTypes: 'Audio' MediaTypes: 'Audio'
}); }, queryOptions));
} else if (firstItem.MediaType === 'Photo') { } else if (firstItem.MediaType === 'Photo') {
promise = getItemsForPlayback(serverId, { promise = getItemsForPlayback(serverId, mergePlaybackQueries({
ParentId: firstItem.ParentId, ParentId: firstItem.ParentId,
Filters: 'IsNotFolder', Filters: 'IsNotFolder',
// Setting this to true may cause some incorrect sorting // Setting this to true may cause some incorrect sorting
Recursive: false, Recursive: false,
SortBy: sortOptions.sortBy,
SortOrder: sortOptions.sortOrder,
MediaTypes: 'Photo,Video', MediaTypes: 'Photo,Video',
sortBy: options.shuffle ? 'Random' : 'SortName',
Limit: UNLIMITED_ITEMS Limit: UNLIMITED_ITEMS
}).then(function (result) { }, queryOptions)).then(function (result) {
const playbackItems = result.Items; const playbackItems = result.Items;
let index = playbackItems.map(function (i) { let index = playbackItems.map(function (i) {
@ -1846,45 +1833,40 @@ class PlaybackManager {
return Promise.resolve(result); return Promise.resolve(result);
}); });
} else if (firstItem.Type === 'PhotoAlbum') { } else if (firstItem.Type === 'PhotoAlbum') {
promise = getItemsForPlayback(serverId, { promise = getItemsForPlayback(serverId, mergePlaybackQueries({
ParentId: firstItem.Id, ParentId: firstItem.Id,
Filters: 'IsNotFolder', Filters: 'IsNotFolder',
// Setting this to true may cause some incorrect sorting // Setting this to true may cause some incorrect sorting
Recursive: false, Recursive: false,
SortBy: sortOptions.sortBy, SortBy: options.shuffle ? 'Random' : 'SortName',
SortOrder: sortOptions.sortOrder,
// Only include Photos because we do not handle mixed queues currently // Only include Photos because we do not handle mixed queues currently
MediaTypes: 'Photo', MediaTypes: 'Photo',
Limit: UNLIMITED_ITEMS Limit: UNLIMITED_ITEMS
}); }, queryOptions));
} else if (firstItem.Type === 'MusicGenre') { } else if (firstItem.Type === 'MusicGenre') {
promise = getItemsForPlayback(serverId, { promise = getItemsForPlayback(serverId, mergePlaybackQueries({
GenreIds: firstItem.Id, GenreIds: firstItem.Id,
Filters: 'IsNotFolder', Filters: 'IsNotFolder',
Recursive: true, Recursive: true,
SortBy: sortOptions.sortBy, SortBy: options.shuffle ? 'Random' : 'SortName',
SortOrder: sortOptions.sortOrder,
MediaTypes: 'Audio' MediaTypes: 'Audio'
}); }));
} else if (firstItem.IsFolder && firstItem.CollectionType === 'homevideos') { } else if (firstItem.IsFolder && firstItem.CollectionType === 'homevideos') {
promise = getItemsForPlayback(serverId, mergePlaybackQueries({ promise = getItemsForPlayback(serverId, mergePlaybackQueries({
ParentId: firstItem.Id, ParentId: firstItem.Id,
Filters: 'IsNotFolder', Filters: 'IsNotFolder',
Recursive: true, Recursive: true,
SortBy: sortOptions.sortBy, SortBy: options.shuffle ? 'Random' : 'SortName',
SortOrder: sortOptions.sortOrder,
// Only include Photos because we do not handle mixed queues currently // Only include Photos because we do not handle mixed queues currently
MediaTypes: 'Photo', MediaTypes: 'Photo',
Limit: UNLIMITED_ITEMS Limit: UNLIMITED_ITEMS
}, queryOptions)); }, queryOptions));
} else if (firstItem.IsFolder) { } else if (firstItem.IsFolder) {
let sortBy = null; let sortBy = null;
let sortOrder = null;
if (options.shuffle) { if (options.shuffle) {
sortBy = 'Random'; sortBy = 'Random';
} else if (firstItem.Type !== 'BoxSet') { } else if (firstItem.Type !== 'BoxSet') {
sortBy = sortOptions.sortBy; sortBy = 'SortName';
sortOrder = sortOptions.sortOrder;
} }
promise = getItemsForPlayback(serverId, mergePlaybackQueries({ promise = getItemsForPlayback(serverId, mergePlaybackQueries({
ParentId: firstItem.Id, ParentId: firstItem.Id,
@ -1892,7 +1874,6 @@ class PlaybackManager {
Recursive: true, Recursive: true,
// These are pre-sorted // These are pre-sorted
SortBy: sortBy, SortBy: sortBy,
SortOrder: sortOrder,
MediaTypes: 'Audio,Video' MediaTypes: 'Audio,Video'
}, queryOptions)); }, queryOptions));
} else if (firstItem.Type === 'Episode' && items.length === 1 && getPlayer(firstItem, options).supportsProgress !== false) { } else if (firstItem.Type === 'Episode' && items.length === 1 && getPlayer(firstItem, options).supportsProgress !== false) {

View file

@ -180,7 +180,7 @@ function executeAction(card, target, action) {
const itemsContainer = dom.parentWithClass(card, 'itemsContainer'); const itemsContainer = dom.parentWithClass(card, 'itemsContainer');
const sortParentId = 'items-' + (item.IsFolder ? item.Id : itemsContainer.getAttribute('data-parentid')) + '-Folder'; const sortParentId = 'items-' + (item.IsFolder ? item.Id : itemsContainer?.getAttribute('data-parentid')) + '-Folder';
const serverId = item.ServerId; const serverId = item.ServerId;
const type = item.Type; const type = item.Type;
@ -211,7 +211,7 @@ function executeAction(card, target, action) {
ids: [playableItemId], ids: [playableItemId],
startPositionTicks: startPositionTicks, startPositionTicks: startPositionTicks,
serverId: serverId, serverId: serverId,
sortOptions: userSettings.getSortValues(sortParentId) queryOptions: userSettings.getSortValuesLegacy(sortParentId, 'SortName')
}); });
} else { } else {
console.warn('Unable to play item', item); console.warn('Unable to play item', item);

View file

@ -728,7 +728,7 @@ class ItemsView {
playbackManager.play({ playbackManager.play({
items: [currentItem], items: [currentItem],
autoplay: true, autoplay: true,
sortOptions: values queryOptions: values
}); });
} else { } else {
getItems(self, self.params, currentItem, null, 0, 300).then(function (result) { getItems(self, self.params, currentItem, null, 0, 300).then(function (result) {
@ -962,7 +962,7 @@ class ItemsView {
getSortValues() { getSortValues() {
const basekey = this.getSettingsKey(); const basekey = this.getSettingsKey();
return userSettings.getSortValues(basekey); return userSettings.getSortValuesLegacy(basekey, this.getDefaultSortBy());
} }
getDefaultSortBy() { getDefaultSortBy() {

View file

@ -624,15 +624,28 @@ export class UserSettings {
} }
/** /**
* Gets the current sort values * Gets the current sort values (Legacy - Non-JSON)
* (old views such as list.js [Photos] will
* use this one)
* @param {string} key - Filter key.
* @return {Object} sortOptions object
*/
getSortValuesLegacy(key, defaultSortBy) {
return {
sortBy: this.getFilter(key + '-sortby') || defaultSortBy,
sortOrder: this.getFilter(key + '-sortorder') === 'Descending' ? 'Descending' : 'Ascending'
};
}
/**
* Gets the current sort values (JSON)
* (new views such as MoviesView will use
* this one)
* @param {string} key - Filter key. * @param {string} key - Filter key.
* @return {Object} sortOptions object * @return {Object} sortOptions object
*/ */
getSortValues(key) { getSortValues(key) {
return { return this.loadQuerySettings(key, {});
sortBy: this.getFilter(key + '-sortby'),
sortOrder: this.getFilter(key + '-sortorder') === 'Descending' ? 'Descending' : 'Ascending'
};
} }
} }
@ -684,4 +697,5 @@ export const customCss = currentSettings.customCss.bind(currentSettings);
export const disableCustomCss = currentSettings.disableCustomCss.bind(currentSettings); export const disableCustomCss = currentSettings.disableCustomCss.bind(currentSettings);
export const getSavedView = currentSettings.getSavedView.bind(currentSettings); export const getSavedView = currentSettings.getSavedView.bind(currentSettings);
export const saveViewSetting = currentSettings.saveViewSetting.bind(currentSettings); export const saveViewSetting = currentSettings.saveViewSetting.bind(currentSettings);
export const getSortValuesLegacy = currentSettings.getSortValuesLegacy.bind(currentSettings);
export const getSortValues = currentSettings.getSortValues.bind(currentSettings); export const getSortValues = currentSettings.getSortValues.bind(currentSettings);