feat(koreader): hide audiobook-only books from the KOReader plugin

Add a per-login setting, on by default, that leaves books whose content files are all audio out
of the plugin catalog, its counts and bulk downloads, and drops a library holding nothing else.
The plugin detail page also names the first file the device can open as the main file.

Closes #1345
This commit is contained in:
neon
2026-10-20 16:49:58 +00:00
parent a728bf293b
commit b95a285c1b
30 changed files with 25547 additions and 127 deletions
+22
View File
@@ -856,6 +856,28 @@ export const E2E_SUITES = Object.freeze({
...SHARED_DB_AND_HELPER_PATHS,
],
},
"koreader-audio-only-catalog": {
id: "koreader-audio-only-catalog",
name: "KOReader Audiobook-Only Catalog",
timeout: 20,
lane: "full",
description: "KOReader catalog setting that hides books whose only content files are audio",
vitestTarget: "test/koreader-audio-only-catalog.e2e-spec.ts",
junitOutput: `${TEST_RESULTS_DIR}/koreader-audio-only-catalog-e2e-junit.xml`,
prepareDedicatedDatabase: true,
useDedicatedDatabase: true,
changedPaths: [
"server/src/modules/koreader/**",
"server/src/modules/opds/**",
"server/src/modules/dashboard/dashboard.repository.ts",
"server/src/modules/dashboard/dashboard.service.ts",
"server/src/modules/smart-scope/smart-scope.service.ts",
"server/src/common/utils/audio-only-book-sql.utils.ts",
"server/test/koreader-audio-only-catalog.e2e-spec.ts",
"server/test/e2e/reader-state-isolation/**",
...SHARED_DB_AND_HELPER_PATHS,
],
},
"koreader-page-stats": {
id: "koreader-page-stats",
name: "KOReader Page Stats Derivation",