From 8f3ee878191614047aba540233a2bd803091f243 Mon Sep 17 00:00:00 2001 From: HighImKevin Date: Tue, 2 Dec 2025 00:28:03 -0500 Subject: [PATCH] Add sort order option for recently released home screen sections --- scripts/configuration.css | 5 +++ scripts/configuration.js | 75 ++++++++++++++++----------------------- scripts/homeScreen.js | 26 ++++---------- 3 files changed, 43 insertions(+), 63 deletions(-) diff --git a/scripts/configuration.css b/scripts/configuration.css index 8994bea..e6c4235 100644 --- a/scripts/configuration.css +++ b/scripts/configuration.css @@ -176,4 +176,9 @@ summary.listItemBodyText { .navMenuOption[data-name="configure"]:hover:not(.navMenuOption-selected) { transform: none !important; margin-top: 3em !important; +} + +div#homeScreen_recentlyReleased_container .listItem:has(#homeScreen_recentlyReleased_movies_sortOrder), +div#homeScreen_recentlyReleased_container .listItem:has(#homeScreen_recentlyReleased_episodes_sortOrder) { + display: none; } \ No newline at end of file diff --git a/scripts/configuration.js b/scripts/configuration.js index 579daf9..16cc33c 100644 --- a/scripts/configuration.js +++ b/scripts/configuration.js @@ -1442,7 +1442,8 @@ nameInputAttributes = {}, includeCardFormat = true, includeItemLimit = true, - includeIsPlayed = false + includeIsPlayed = false, + includePremiereDays = false } = options; const nameValue = config.name ?? defaultName ?? ''; @@ -1557,6 +1558,26 @@ `; } + if (includePremiereDays) { + const minAgeInDays = config.minAgeInDays ?? 0; + const maxAgeInDays = config.maxAgeInDays ?? 30; + html += ` +
+
+
Minimum Age (Days)
+ +
Optional. Days since release (e.g. 0 for today).
+
+
+
+
+
Maximum Age (Days)
+ +
Optional. Max days old (e.g. 30).
+
+
`; + } + if (includeIsPlayed) { html += `
@@ -1668,22 +1689,7 @@ ${buildJellyfinCheckbox('homeScreen_recentlyReleased_movies_enabled', (recentlyReleased.movies || {}).enabled !== false, 'Enabled')}
- ${createSectionConfiguration('homeScreen_recentlyReleased_movies', recentlyReleased.movies || {}, { includeName: true, defaultName: 'Recently Released Movies', includeSortOrder: false, includeOrder: true, includeIsPlayed: true })} - -
-
-
Minimum Age (Days)
- -
Optional. Days since release (e.g. 0 for today).
-
-
-
-
-
Maximum Age (Days)
- -
Optional. Max days old (e.g. 30).
-
-
+ ${createSectionConfiguration('homeScreen_recentlyReleased_movies', recentlyReleased.movies || {}, { includeName: true, defaultName: 'Recently Released Movies', includeSortOrder: true, includeOrder: true, includeIsPlayed: true, includePremiereDays: true })}
@@ -1700,22 +1706,7 @@ ${buildJellyfinCheckbox('homeScreen_recentlyReleased_episodes_enabled', (recentlyReleased.episodes || {}).enabled !== false, 'Enabled')}
- ${createSectionConfiguration('homeScreen_recentlyReleased_episodes', recentlyReleased.episodes || {}, { includeName: true, defaultName: 'Recently Aired Episodes', includeSortOrder: false, includeOrder: true, includeIsPlayed: true })} - -
-
-
Minimum Age (Days)
- -
Optional. Days since release (e.g. 0 for today).
-
-
-
-
-
Maximum Age (Days)
- -
Optional. Max days old (e.g. 7).
-
-
+ ${createSectionConfiguration('homeScreen_recentlyReleased_episodes', recentlyReleased.episodes || {}, { includeName: true, defaultName: 'Recently Aired Episodes', includeSortOrder: true, includeOrder: true, includeIsPlayed: true, includePremiereDays: true })}
@@ -5022,17 +5013,13 @@ window.KefinTweaksConfig = ${JSON.stringify(config, null, 2)};`; enabled: document.getElementById('homeScreen_recentlyReleased_enabled')?.checked !== false, movies: { enabled: document.getElementById('homeScreen_recentlyReleased_movies_enabled')?.checked !== false, - ...getSectionConfig('homeScreen_recentlyReleased_movies', { includeName: true, defaultName: 'Recently Released Movies', includeSortOrder: false, includeOrder: true }), - minPremiereDate: document.getElementById('homeScreen_recentlyReleased_movies_minPremiereDate')?.value || '', - maxPremiereDate: document.getElementById('homeScreen_recentlyReleased_movies_maxPremiereDate')?.value || '' - }, - episodes: { - enabled: document.getElementById('homeScreen_recentlyReleased_episodes_enabled')?.checked !== false, - minPremiereDate: document.getElementById('homeScreen_recentlyReleased_episodes_minPremiereDate')?.value || '', - maxPremiereDate: document.getElementById('homeScreen_recentlyReleased_episodes_maxPremiereDate')?.value || '', - ...getSectionConfig('homeScreen_recentlyReleased_episodes', { includeName: true, defaultName: 'Recently Aired Episodes', includeSortOrder: false, includeOrder: true }) - } - }, + ...getSectionConfig('homeScreen_recentlyReleased_movies', { includeName: true, defaultName: 'Recently Released Movies', includeSortOrder: true, includeOrder: true, includeIsPlayed: true, includePremiereDays: true }) + }, + episodes: { + enabled: document.getElementById('homeScreen_recentlyReleased_episodes_enabled')?.checked !== false, + ...getSectionConfig('homeScreen_recentlyReleased_episodes', { includeName: true, defaultName: 'Recently Aired Episodes', includeSortOrder: true, includeOrder: true, includeIsPlayed: true, includePremiereDays: true }) + } + }, trending: { enabled: document.getElementById('homeScreen_trending_enabled')?.checked === true, ...getSectionConfig('homeScreen_trending', { includeName: true, defaultName: 'Trending' }) diff --git a/scripts/homeScreen.js b/scripts/homeScreen.js index f1ff1ca..02f442a 100644 --- a/scripts/homeScreen.js +++ b/scripts/homeScreen.js @@ -2611,9 +2611,7 @@ * Fetches newest movies from Jellyfin API * @returns {Promise} - Array of newest movie items */ - async function fetchNewMovies() { - const apiClient = window.ApiClient; - + async function fetchNewMovies() { // Calculate date range based on configuration const minAgeInDays = newMoviesConfig.minAgeInDays !== null && newMoviesConfig.minAgeInDays !== undefined ? newMoviesConfig.minAgeInDays : 0; const maxAgeInDays = newMoviesConfig.maxAgeInDays !== null && newMoviesConfig.maxAgeInDays !== undefined ? newMoviesConfig.maxAgeInDays : 30; // Default 30 days old max @@ -2634,8 +2632,8 @@ const options = { IncludeItemTypes: 'Movie', - SortBy: 'DateCreated', - SortOrder: 'Descending', + SortBy: 'PremiereDate', + SortOrder: newMoviesConfig.sortOrderDirection === 'Ascending' ? 'Ascending' : 'Descending', Limit: 16, Fields: 'PremiereDate', Recursive: true, @@ -2663,9 +2661,7 @@ * keeping only the episode with the lowest index number * @returns {Promise} - Array of deduplicated newest episode items */ - async function fetchNewEpisodes() { - const apiClient = window.ApiClient; - + async function fetchNewEpisodes() { // Calculate date range based on configuration const minAgeInDays = newEpisodesConfig.minAgeInDays !== null && newEpisodesConfig.minAgeInDays !== undefined ? newEpisodesConfig.minAgeInDays : 0; const maxAgeInDays = newEpisodesConfig.maxAgeInDays !== null && newEpisodesConfig.maxAgeInDays !== undefined ? newEpisodesConfig.maxAgeInDays : 7; // Default 7 days old max @@ -2685,7 +2681,7 @@ LocationTypes: 'FileSystem', Recursive: true, SortBy: 'PremiereDate', - SortOrder: 'Descending', + SortOrder: newEpisodesConfig.sortOrderDirection === 'Ascending' ? 'Ascending' : 'Descending', MinPremiereDate: minPremiereDate, MaxPremiereDate: maxPremiereDate, Limit: 100, @@ -2792,8 +2788,6 @@ // Get config values const itemLimit = newMoviesConfig.itemLimit ?? defaultItemLimit; - const sortOrder = newMoviesConfig.sortOrder ?? defaultSortOrder; - const sortOrderDirection = newMoviesConfig.sortOrderDirection ?? 'Descending'; const cardFormat = newMoviesConfig.cardFormat ?? defaultCardFormat; const order = newMoviesConfig.order ?? 30; const sectionName = newMoviesConfig.name || 'Recently Released Movies'; @@ -2807,9 +2801,7 @@ sectionName, null, true, - cardFormat, - sortOrder, - sortOrderDirection + cardFormat ); // Add data attributes to track rendered sections @@ -2849,8 +2841,6 @@ // Get config values const itemLimit = newEpisodesConfig.itemLimit ?? defaultItemLimit; - const sortOrder = newEpisodesConfig.sortOrder ?? defaultSortOrder; - const sortOrderDirection = newEpisodesConfig.sortOrderDirection ?? 'Descending'; const cardFormat = newEpisodesConfig.cardFormat ?? defaultCardFormat; const order = newEpisodesConfig.order ?? 31; const sectionName = newEpisodesConfig.name || 'Recently Aired Episodes'; @@ -2865,9 +2855,7 @@ sectionName, viewMoreUrl, true, - cardFormat, - sortOrder, - sortOrderDirection + cardFormat ); // Add data attributes to track rendered sections