mirror of
https://github.com/Crosstalk-Solutions/project-nomad.git
synced 2026-05-31 00:26:49 +02:00
Merge 4ba1b9d853 into a96e0d682f
This commit is contained in:
commit
0364c88b5e
|
|
@ -1,7 +1,7 @@
|
|||
import { XMLBuilder, XMLParser } from 'fast-xml-parser'
|
||||
import { readFile, writeFile, rename, readdir } from 'fs/promises'
|
||||
import { join } from 'path'
|
||||
import { Archive } from '@openzim/libzim'
|
||||
import type { Archive as ZimArchive } from '@openzim/libzim'
|
||||
import { KIWIX_LIBRARY_XML_PATH, ZIM_STORAGE_PATH, ensureDirectoryExists, isValidZimFile } from '../utils/fs.js'
|
||||
import logger from '@adonisjs/core/services/logger'
|
||||
import { randomUUID } from 'node:crypto'
|
||||
|
|
@ -9,6 +9,11 @@ import { randomUUID } from 'node:crypto'
|
|||
const CONTAINER_DATA_PATH = '/data'
|
||||
const XML_DECLARATION = '<?xml version="1.0" encoding="UTF-8"?>\n'
|
||||
|
||||
async function loadArchiveClass(): Promise<typeof import('@openzim/libzim').Archive> {
|
||||
const { Archive } = await import('@openzim/libzim')
|
||||
return Archive
|
||||
}
|
||||
|
||||
interface KiwixBook {
|
||||
id: string
|
||||
path: string
|
||||
|
|
@ -60,7 +65,8 @@ export class KiwixLibraryService {
|
|||
logger.warn(`[KiwixLibraryService] Skipping invalid/corrupted ZIM file: ${zimFilePath}`)
|
||||
return null
|
||||
}
|
||||
const archive = new Archive(zimFilePath)
|
||||
const Archive = await loadArchiveClass()
|
||||
const archive: ZimArchive = new Archive(zimFilePath)
|
||||
|
||||
const getMeta = (key: string): string | undefined => {
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import { Archive, Entry } from '@openzim/libzim'
|
||||
import type { Archive as ZimArchive, Entry } from '@openzim/libzim'
|
||||
import * as cheerio from 'cheerio'
|
||||
import { HTML_SELECTORS_TO_REMOVE, NON_CONTENT_HEADING_PATTERNS } from '../../constants/zim_extraction.js'
|
||||
import logger from '@adonisjs/core/services/logger'
|
||||
|
|
@ -7,9 +7,14 @@ import { randomUUID } from 'node:crypto'
|
|||
import { access } from 'node:fs/promises'
|
||||
import { isValidZimFile } from '../utils/fs.js'
|
||||
|
||||
async function loadArchiveClass(): Promise<typeof import('@openzim/libzim').Archive> {
|
||||
const { Archive } = await import('@openzim/libzim')
|
||||
return Archive
|
||||
}
|
||||
|
||||
export class ZIMExtractionService {
|
||||
|
||||
private extractArchiveMetadata(archive: Archive): ZIMArchiveMetadata {
|
||||
private extractArchiveMetadata(archive: ZimArchive): ZIMArchiveMetadata {
|
||||
try {
|
||||
return {
|
||||
title: archive.getMetadata('Title') || archive.getMetadata('Name') || 'Unknown',
|
||||
|
|
@ -62,7 +67,8 @@ export class ZIMExtractionService {
|
|||
throw new Error(`ZIM file is invalid or corrupted: ${filePath}`)
|
||||
}
|
||||
|
||||
const archive = new Archive(filePath)
|
||||
const Archive = await loadArchiveClass()
|
||||
const archive: ZimArchive = new Archive(filePath)
|
||||
|
||||
// Extract archive-level metadata once
|
||||
const archiveMetadata = this.extractArchiveMetadata(archive)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user