feat: Set File Date to First Aired Date

This commit is contained in:
kodi
2026-03-09 11:40:21 +01:00
parent 8d0c36cc42
commit 8aec1ae269
7 changed files with 450 additions and 16 deletions
+51
View File
@@ -14,6 +14,9 @@
modalFiles: [],
modalSelectedFilePaths: new Set(),
syncScrolling: false,
settings: {
set_file_date_to_first_aired_date: false,
},
};
const el = {
@@ -30,6 +33,11 @@
seriesStatus: document.getElementById("seriesStatus"),
seriesOverview: document.getElementById("seriesOverview"),
seriesTvdbLink: document.getElementById("seriesTvdbLink"),
settingsBtn: document.getElementById("settingsBtn"),
settingsModal: document.getElementById("settingsModal"),
closeSettingsModalBtn: document.getElementById("closeSettingsModalBtn"),
saveSettingsBtn: document.getElementById("saveSettingsBtn"),
setFileDateToFirstAiredDateInput: document.getElementById("setFileDateToFirstAiredDateInput"),
refreshEpisodesBtn: document.getElementById("refreshEpisodesBtn"),
episodesList: document.getElementById("episodesList"),
episodeMeta: document.getElementById("episodeMeta"),
@@ -199,6 +207,42 @@
el.fileMeta.innerHTML = `Rows: <b>${fileCount}</b> <span class="${mismatch ? "mismatch" : ""}">${mismatchText}</span>`;
}
function applySettingsToForm() {
el.setFileDateToFirstAiredDateInput.checked = !!state.settings.set_file_date_to_first_aired_date;
}
function openSettingsModal() {
applySettingsToForm();
el.settingsModal.classList.remove("hidden");
el.settingsModal.setAttribute("aria-hidden", "false");
}
function closeSettingsModal() {
el.settingsModal.classList.add("hidden");
el.settingsModal.setAttribute("aria-hidden", "true");
}
async function loadSettings() {
const data = await api("/api/session/settings");
state.settings = data.settings || { set_file_date_to_first_aired_date: false };
applySettingsToForm();
}
async function saveSettings() {
const payload = {
set_file_date_to_first_aired_date: !!el.setFileDateToFirstAiredDateInput.checked,
};
const data = await api("/api/session/settings", {
method: "PUT",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(payload),
});
state.settings = data.settings || payload;
applySettingsToForm();
closeSettingsModal();
out("Settings saved", data);
}
function selectPair(index) {
state.selectedPairIndex = index;
renderSelectedEpisodes();
@@ -557,6 +601,12 @@
function bindEvents() {
el.searchBtn.addEventListener("click", () => withHandler(doSearch, el.searchBtn));
el.settingsBtn.addEventListener("click", openSettingsModal);
el.closeSettingsModalBtn.addEventListener("click", closeSettingsModal);
el.saveSettingsBtn.addEventListener("click", () => withHandler(saveSettings, el.saveSettingsBtn));
el.settingsModal.addEventListener("click", (e) => {
if (e.target === el.settingsModal) closeSettingsModal();
});
el.refreshEpisodesBtn.addEventListener("click", () => withHandler(loadEpisodes, el.refreshEpisodesBtn));
el.refreshSelectedEpisodesBtn.addEventListener("click", () => withHandler(loadSelectedEpisodes, el.refreshSelectedEpisodesBtn));
@@ -611,6 +661,7 @@
el.modalRecursiveInput.checked = true;
renderSelectedSeriesDetails();
bindEvents();
await loadSettings();
await loadSelectedEpisodes();
await loadSelectedFiles();
await loadRoots();