mirror of
https://github.com/ranaldsgift/KefinTweaks.git
synced 2026-11-05 15:52:47 +01:00
Use number of days for premiere date in Recently Released home screen sections
This commit is contained in:
@@ -34,8 +34,8 @@ window.KefinTweaksDefaultConfig = {
|
||||
"sortOrderDirection": "Descending",
|
||||
"cardFormat": "Poster",
|
||||
"order": 30,
|
||||
"minPremiereDate": "",
|
||||
"maxPremiereDate": ""
|
||||
"minAgeInDays": null,
|
||||
"maxAgeInDays": null
|
||||
},
|
||||
"episodes": {
|
||||
"name": "Recently Aired Episodes",
|
||||
@@ -45,8 +45,8 @@ window.KefinTweaksDefaultConfig = {
|
||||
"sortOrderDirection": "Descending",
|
||||
"cardFormat": "Backdrop",
|
||||
"order": 31,
|
||||
"minPremiereDate": "",
|
||||
"maxPremiereDate": ""
|
||||
"minAgeInDays": null,
|
||||
"maxAgeInDays": null
|
||||
}
|
||||
},
|
||||
"trending": {
|
||||
|
||||
+26
-12
@@ -1672,16 +1672,16 @@
|
||||
|
||||
<div class="listItem" style="border: 1px solid rgba(255,255,255,0.1); border-radius: 4px; padding: 0.75em;">
|
||||
<div class="listItemContent">
|
||||
<div class="listItemBodyText" style="margin-bottom: 0.5em;">Min Premiere Date</div>
|
||||
<input type="date" id="homeScreen_recentlyReleased_movies_minPremiereDate" class="fld emby-input" value="${recentlyReleased.movies?.minPremiereDate || ''}" style="width: 100%;">
|
||||
<div class="fieldDescription" style="margin-top: 0.25em;">Optional. Leave empty for default (30 days ago).</div>
|
||||
<div class="listItemBodyText" style="margin-bottom: 0.5em;">Minimum Age (Days)</div>
|
||||
<input type="number" id="homeScreen_recentlyReleased_movies_minAgeInDays" class="fld emby-input" value="${recentlyReleased.movies?.minAgeInDays ?? ''}" style="width: 100%;">
|
||||
<div class="fieldDescription" style="margin-top: 0.25em;">Optional. Days since release (e.g. 0 for today).</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="listItem" style="border: 1px solid rgba(255,255,255,0.1); border-radius: 4px; padding: 0.75em;">
|
||||
<div class="listItemContent">
|
||||
<div class="listItemBodyText" style="margin-bottom: 0.5em;">Max Premiere Date</div>
|
||||
<input type="date" id="homeScreen_recentlyReleased_movies_maxPremiereDate" class="fld emby-input" value="${recentlyReleased.movies?.maxPremiereDate || ''}" style="width: 100%;">
|
||||
<div class="fieldDescription" style="margin-top: 0.25em;">Optional. Leave empty for default (today).</div>
|
||||
<div class="listItemBodyText" style="margin-bottom: 0.5em;">Maximum Age (Days)</div>
|
||||
<input type="number" id="homeScreen_recentlyReleased_movies_maxAgeInDays" class="fld emby-input" value="${recentlyReleased.movies?.maxAgeInDays ?? ''}" style="width: 100%;">
|
||||
<div class="fieldDescription" style="margin-top: 0.25em;">Optional. Max days old (e.g. 30).</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1704,16 +1704,16 @@
|
||||
|
||||
<div class="listItem" style="border: 1px solid rgba(255,255,255,0.1); border-radius: 4px; padding: 0.75em;">
|
||||
<div class="listItemContent">
|
||||
<div class="listItemBodyText" style="margin-bottom: 0.5em;">Min Premiere Date</div>
|
||||
<input type="date" id="homeScreen_recentlyReleased_episodes_minPremiereDate" class="fld emby-input" value="${recentlyReleased.episodes?.minPremiereDate || ''}" style="width: 100%;">
|
||||
<div class="fieldDescription" style="margin-top: 0.25em;">Optional. Leave empty for default (7 days ago).</div>
|
||||
<div class="listItemBodyText" style="margin-bottom: 0.5em;">Minimum Age (Days)</div>
|
||||
<input type="number" id="homeScreen_recentlyReleased_episodes_minAgeInDays" class="fld emby-input" value="${recentlyReleased.episodes?.minAgeInDays ?? ''}" style="width: 100%;">
|
||||
<div class="fieldDescription" style="margin-top: 0.25em;">Optional. Days since release (e.g. 0 for today).</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="listItem" style="border: 1px solid rgba(255,255,255,0.1); border-radius: 4px; padding: 0.75em;">
|
||||
<div class="listItemContent">
|
||||
<div class="listItemBodyText" style="margin-bottom: 0.5em;">Max Premiere Date</div>
|
||||
<input type="date" id="homeScreen_recentlyReleased_episodes_maxPremiereDate" class="fld emby-input" value="${recentlyReleased.episodes?.maxPremiereDate || ''}" style="width: 100%;">
|
||||
<div class="fieldDescription" style="margin-top: 0.25em;">Optional. Leave empty for default (today).</div>
|
||||
<div class="listItemBodyText" style="margin-bottom: 0.5em;">Maximum Age (Days)</div>
|
||||
<input type="number" id="homeScreen_recentlyReleased_episodes_maxAgeInDays" class="fld emby-input" value="${recentlyReleased.episodes?.maxAgeInDays ?? ''}" style="width: 100%;">
|
||||
<div class="fieldDescription" style="margin-top: 0.25em;">Optional. Max days old (e.g. 7).</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -4933,6 +4933,20 @@ window.KefinTweaksConfig = ${JSON.stringify(config, null, 2)};`;
|
||||
}
|
||||
}
|
||||
|
||||
// Handle Min/Max Age In Days for Recently Released
|
||||
if (prefix === 'homeScreen_recentlyReleased_movies') {
|
||||
const minAge = document.getElementById(`${prefix}_minAgeInDays`)?.value;
|
||||
const maxAge = document.getElementById(`${prefix}_maxAgeInDays`)?.value;
|
||||
config.minAgeInDays = minAge !== '' ? parseInt(minAge, 10) : null;
|
||||
config.maxAgeInDays = maxAge !== '' ? parseInt(maxAge, 10) : null;
|
||||
}
|
||||
if (prefix === 'homeScreen_recentlyReleased_episodes') {
|
||||
const minAge = document.getElementById(`${prefix}_minAgeInDays`)?.value;
|
||||
const maxAge = document.getElementById(`${prefix}_maxAgeInDays`)?.value;
|
||||
config.minAgeInDays = minAge !== '' ? parseInt(minAge, 10) : null;
|
||||
config.maxAgeInDays = maxAge !== '' ? parseInt(maxAge, 10) : null;
|
||||
}
|
||||
|
||||
return config;
|
||||
}
|
||||
|
||||
|
||||
+69
-19
@@ -620,21 +620,47 @@
|
||||
// --- NEW UPDATE LOGIC ---
|
||||
// Runs even if no major migration was needed, to catch specific updates
|
||||
|
||||
// 1. Ensure Recently Released date fields exist
|
||||
// 1. Ensure Recently Released date fields exist (Migration Logic)
|
||||
let configChanged = false;
|
||||
// Use the current config (which might have been just migrated)
|
||||
const currentConfig = window.KefinTweaksConfig.homeScreen;
|
||||
|
||||
if (currentConfig.recentlyReleased) {
|
||||
if (currentConfig.recentlyReleased.movies && currentConfig.recentlyReleased.movies.minPremiereDate === undefined) {
|
||||
currentConfig.recentlyReleased.movies.minPremiereDate = "";
|
||||
currentConfig.recentlyReleased.movies.maxPremiereDate = "";
|
||||
configChanged = true;
|
||||
// Migrate movies config to minAgeInDays / maxAgeInDays
|
||||
if (currentConfig.recentlyReleased.movies) {
|
||||
// If old fields exist, remove them and replace with new defaults if not set
|
||||
if (currentConfig.recentlyReleased.movies.minPremiereDate !== undefined || currentConfig.recentlyReleased.movies.maxPremiereDate !== undefined) {
|
||||
delete currentConfig.recentlyReleased.movies.minPremiereDate;
|
||||
delete currentConfig.recentlyReleased.movies.maxPremiereDate;
|
||||
configChanged = true;
|
||||
}
|
||||
|
||||
if (currentConfig.recentlyReleased.movies.minAgeInDays === undefined) {
|
||||
currentConfig.recentlyReleased.movies.minAgeInDays = null;
|
||||
configChanged = true;
|
||||
}
|
||||
if (currentConfig.recentlyReleased.movies.maxAgeInDays === undefined) {
|
||||
currentConfig.recentlyReleased.movies.maxAgeInDays = null;
|
||||
configChanged = true;
|
||||
}
|
||||
}
|
||||
if (currentConfig.recentlyReleased.episodes && currentConfig.recentlyReleased.episodes.minPremiereDate === undefined) {
|
||||
currentConfig.recentlyReleased.episodes.minPremiereDate = "";
|
||||
currentConfig.recentlyReleased.episodes.maxPremiereDate = "";
|
||||
configChanged = true;
|
||||
|
||||
// Migrate episodes config to minAgeInDays / maxAgeInDays
|
||||
if (currentConfig.recentlyReleased.episodes) {
|
||||
if (currentConfig.recentlyReleased.episodes.minPremiereDate !== undefined || currentConfig.recentlyReleased.episodes.maxPremiereDate !== undefined) {
|
||||
delete currentConfig.recentlyReleased.episodes.minPremiereDate;
|
||||
delete currentConfig.recentlyReleased.episodes.maxPremiereDate;
|
||||
configChanged = true;
|
||||
}
|
||||
|
||||
if (currentConfig.recentlyReleased.episodes.minAgeInDays === undefined) {
|
||||
currentConfig.recentlyReleased.episodes.minAgeInDays = null;
|
||||
configChanged = true;
|
||||
}
|
||||
if (currentConfig.recentlyReleased.episodes.maxAgeInDays === undefined) {
|
||||
currentConfig.recentlyReleased.episodes.maxAgeInDays = null;
|
||||
configChanged = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2588,8 +2614,23 @@
|
||||
async function fetchNewMovies() {
|
||||
const apiClient = window.ApiClient;
|
||||
|
||||
const today = new Date().toISOString().split('T')[0]; // Format: YYYY-MM-DD
|
||||
const monthAgo = new Date(Date.now() - 30 * 24 * 60 * 60 * 1000).toISOString().split('T')[0]; // Format: YYYY-MM-DD
|
||||
// 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
|
||||
|
||||
// Calculate actual dates:
|
||||
// MaxPremiereDate (latest allowed date) = Today - minAgeInDays
|
||||
// MinPremiereDate (earliest allowed date) = Today - maxAgeInDays
|
||||
|
||||
const today = new Date();
|
||||
|
||||
const maxDateObj = new Date(today);
|
||||
maxDateObj.setDate(today.getDate() - minAgeInDays);
|
||||
const maxPremiereDate = maxDateObj.toISOString().split('T')[0];
|
||||
|
||||
const minDateObj = new Date(today);
|
||||
minDateObj.setDate(today.getDate() - maxAgeInDays);
|
||||
const minPremiereDate = minDateObj.toISOString().split('T')[0];
|
||||
|
||||
const options = {
|
||||
IncludeItemTypes: 'Movie',
|
||||
@@ -2598,8 +2639,8 @@
|
||||
Limit: 16,
|
||||
Fields: 'PremiereDate',
|
||||
Recursive: true,
|
||||
MinPremiereDate: newMoviesConfig.minPremiereDate || monthAgo,
|
||||
MaxPremiereDate: newMoviesConfig.maxPremiereDate || today
|
||||
MinPremiereDate: minPremiereDate,
|
||||
MaxPremiereDate: maxPremiereDate
|
||||
}
|
||||
|
||||
const isPlayedFilter = getIsPlayedFilter(newMoviesConfig);
|
||||
@@ -2625,10 +2666,19 @@
|
||||
async function fetchNewEpisodes() {
|
||||
const apiClient = window.ApiClient;
|
||||
|
||||
// Compute ISO date range for the last 7 days
|
||||
const now = new Date();
|
||||
const maxDate = now.toISOString().split('T')[0];
|
||||
const minDate = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000).toISOString().split('T')[0];
|
||||
// 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
|
||||
|
||||
const today = new Date();
|
||||
|
||||
const maxDateObj = new Date(today);
|
||||
maxDateObj.setDate(today.getDate() - minAgeInDays);
|
||||
const maxPremiereDate = maxDateObj.toISOString().split('T')[0];
|
||||
|
||||
const minDateObj = new Date(today);
|
||||
minDateObj.setDate(today.getDate() - maxAgeInDays);
|
||||
const minPremiereDate = minDateObj.toISOString().split('T')[0];
|
||||
|
||||
const options = {
|
||||
IncludeItemTypes: 'Episode',
|
||||
@@ -2636,8 +2686,8 @@
|
||||
Recursive: true,
|
||||
SortBy: 'PremiereDate',
|
||||
SortOrder: 'Descending',
|
||||
MinPremiereDate: newEpisodesConfig.minPremiereDate || minDate,
|
||||
MaxPremiereDate: newEpisodesConfig.maxPremiereDate || maxDate,
|
||||
MinPremiereDate: minPremiereDate,
|
||||
MaxPremiereDate: maxPremiereDate,
|
||||
Limit: 100,
|
||||
Fields: 'PremiereDate,SeriesName,ParentIndexNumber,IndexNumber,ProviderIds,Path'
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user