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

Make filtering local to device

This commit is contained in:
viown 2024-10-29 17:56:49 +03:00
parent 18ea570ea1
commit c0a9f8b544

View file

@ -17,6 +17,24 @@ function saveServerPreferences(instance) {
instance.saveTimeout = setTimeout(onSaveTimeout.bind(instance), 50); instance.saveTimeout = setTimeout(onSaveTimeout.bind(instance), 50);
} }
const allowedSortSettings = ['SortBy', 'SortOrder'];
const filterSettingsPostfix = '-filter';
const allowedFilterSettings = [
'Filters', 'HasSubtitles', 'HasTrailer', 'HasSpecialFeature',
'HasThemeSong', 'HasThemeVideo', 'Genres', 'OfficialRatings',
'Tags', 'VideoTypes', 'IsHD', 'Is4K', 'Is3D', 'Years'
];
function filterQuerySettings(query, allowedItems) {
return Object.keys(query)
.filter(field => allowedItems.includes(field))
.reduce((acc, field) => {
acc[field] = query[field];
return acc;
}, {});
}
const defaultSubtitleAppearanceSettings = { const defaultSubtitleAppearanceSettings = {
verticalPosition: -3 verticalPosition: -3
}; };
@ -521,15 +539,17 @@ export class UserSettings {
* @return {Query} Query. * @return {Query} Query.
*/ */
loadQuerySettings(key, query) { loadQuerySettings(key, query) {
let values = this.get(key); let sortSettings = this.get(key);
if (values) { let filterSettings = this.get(key + filterSettingsPostfix, false);
values = JSON.parse(values);
delete values.NameStartsWith; if (sortSettings) {
delete values.NameLessThan; sortSettings = filterQuerySettings(JSON.parse(sortSettings), allowedSortSettings);
return Object.assign(query, values); }
if (filterSettings) {
filterSettings = filterQuerySettings(JSON.parse(filterSettings), allowedFilterSettings);
} }
return query; return Object.assign(query, sortSettings, filterSettings);
} }
/** /**
@ -538,22 +558,11 @@ export class UserSettings {
* @param {Object} query - Query. * @param {Object} query - Query.
*/ */
saveQuerySettings(key, query) { saveQuerySettings(key, query) {
const allowedFields = [ const sortSettings = filterQuerySettings(query, allowedSortSettings);
'SortBy', 'SortOrder', 'Filters', 'HasSubtitles', const filterSettings = filterQuerySettings(query, allowedFilterSettings);
'HasTrailer', 'HasSpecialFeature', 'HasThemeSong',
'HasThemeVideo', 'Genres', 'OfficialRatings',
'Tags', 'VideoTypes', 'IsHD', 'Is4K', 'Is3D',
'Years'
];
const newQuery = Object.keys(query) this.set(key, JSON.stringify(sortSettings));
.filter(field => allowedFields.includes(field)) this.set(key + filterSettingsPostfix, JSON.stringify(filterSettings), false);
.reduce((acc, field) => {
acc[field] = query[field];
return acc;
}, {});
return this.set(key, JSON.stringify(newQuery));
} }
/** /**