diff --git a/admin/app/services/collection_manifest_service.ts b/admin/app/services/collection_manifest_service.ts index 2479f82..ac9f6e3 100644 --- a/admin/app/services/collection_manifest_service.ts +++ b/admin/app/services/collection_manifest_service.ts @@ -5,6 +5,7 @@ import { DateTime } from 'luxon' import { join } from 'path' import CollectionManifest from '#models/collection_manifest' import InstalledResource from '#models/installed_resource' +import WikipediaSelection from '#models/wikipedia_selection' import { QueueService } from './queue_service.js' import { RunDownloadJob } from '#jobs/run_download_job' import { zimCategoriesSpecSchema, mapsSpecSchema, wikipediaSpecSchema } from '#validators/curated_collections' @@ -284,10 +285,17 @@ export class CollectionManifestService { const seenZimIds = new Set() + // Only skip the single Wikipedia file tracked by WikipediaSelection — not every file + // starting with `wikipedia_en_`. Curated category tiers (e.g. Medicine → Comprehensive) + // ship Wikipedia-themed ZIMs like `wikipedia_en_medicine_maxi` that must reconcile + // normally; otherwise their InstalledResource row gets wiped on every restart and the + // tier detection silently downgrades. + const wikipediaSelection = await WikipediaSelection.query().first() + const managedWikipediaFilename = wikipediaSelection?.filename ?? null + for (const file of zimFiles) { console.log(`Processing ZIM file: ${file.name}`) - // Skip Wikipedia files (managed by WikipediaSelection model) - if (file.name.startsWith('wikipedia_en_')) continue + if (managedWikipediaFilename && file.name === managedWikipediaFilename) continue const parsed = CollectionManifestService.parseZimFilename(file.name) console.log(`Parsed ZIM filename:`, parsed)