fix(import): re-offer imported requests whose files left the library

This commit is contained in:
Steppenstreuner
2026-08-29 07:39:56 +02:00
parent 7daa0d61a4
commit d432881a7a
4 changed files with 98 additions and 8 deletions
+7 -4
View File
@@ -649,6 +649,7 @@ $("#detail-form").addEventListener("submit", async (e) => {
let scanItems = [];
let missingReqs = [];
let importedReqs = [];
let orphanedIds = new Set(); // imported, but their files are gone from the library
let viewIdx = []; // indices into scanItems after filter/sort
let importPage = 0;
const IMPORT_PAGE_SIZE = 25;
@@ -670,8 +671,10 @@ $("#scan-btn").addEventListener("click", async () => {
item.request_id = item.suggested_request_id;
item.checked = !!item.suggested_request_id;
});
missingReqs = reqs;
importedReqs = done;
orphanedIds = new Set(scan.orphaned_request_ids || []);
// an imported title whose files vanished is selectable like an open one
missingReqs = [...reqs, ...done.filter((r) => orphanedIds.has(r.id))];
importedReqs = done.filter((r) => !orphanedIds.has(r.id));
importPage = 0;
$("#scan-info").textContent = `${scan.items.length} Kandidat(en) in ${scan.download_dir}`;
$("#import-toolbar").hidden = scanItems.length === 0;
@@ -734,7 +737,7 @@ function renderImportTable() {
${esc(r.title)}${esc(r.authors)} (${esc(r.library_name)})${suffix}</option>`;
const opts = missingReqs
.filter((r) => r.media_type === item.media_type)
.map((r) => option(r))
.map((r) => option(r, orphanedIds.has(r.id) ? " ↺" : ""))
.join("");
// already imported audiobooks can take further parts (a late CD, or one
// that failed while its siblings went through)
@@ -1151,7 +1154,7 @@ function collapseSharedRequests(chosen) {
is_dir: group.length > 1 ? true : group[0].is_dir,
files: group.flatMap((it) => it.files),
request_id: group[0].request_id,
append: importedReqs.some((r) => r.id === group[0].request_id),
append: importedReqs.some((r) => r.id === group[0].request_id), // orphans re-import
}));
}