V1.0.46 oss (#253)
* add a UI trigger for demo annotations * Implement internal link navigation * Simplify bottom padding logic in `EpubReaderScreen` for vertical scroll mode * Add support for Calibre metadata * Implement advanced library management with Room-backed collections, tags, and smart rules. * Display book series information in book details and remove tags from home screen * Implement zoom reset functionality in PDF viewer * Add a "Pages" thumbnail view to the PDF navigation drawer * Implement jump-back navigation in PDF viewer * MainViewModel: disable FolderSyncWorker, add log export, and enhance PDF position logging * Replace Gson with Kotlin Serialization in SmartCollectionEngine * Implement ONNX-based speech bubble detection * Implement speech bubble detection in PDF viewer * Implement "Smart Comic Zoom" feature for PDF manga/comic reading * Implement reader session persistence and restoration in `MainViewModel` * Add tap-to-turn page feature to PDF viewer * Improve book cache management and recovery * Refactor top overlay padding logic in `PdfViewerScreen` * Implement stylus eraser support in PDF reader * Refactor ReaderTextFormatPanel to use ModalBottomSheet and add new formatting controls * Introduce a customizable horizontal margin setting for the EPUB reader * Refine folder sync and metadata handling for better conflict resolution and stability. * Introduce user-adjustable image scaling for the EPUB reader * Use maxWidthPx as default width fallback for blocks * Improve cross-page text selection and header styling in the paginated reader * Refactor speech bubble detection and UI to support segmentation masks and interactive scaling * Improve speech bubble detection masking and rendering quality * Update ONNX speech bubble detector to use `.ort` model and optimize inference * Improve pagination accuracy * Implement hierarchical folder navigation for the library. * Refactor library item layout for improved space efficiency * Add support for browsing and downloading Google Fonts * Persist library landing state and add shelf search functionality * Fix base tts sample. * Move SpeechBubbleDetector to main source set and update ONNX dependency * Implement a "locate" feature and improve synchronization for TTS (Text-to-Speech) playback across EPUB and PDF readers. * Refine TTS synchronization and voice management in the EPUB reader * Adjust OCR checks for OSS flavor and optimize external dictionary intent flags * Add "Locate" button to PDF drawer's pages tab and move the page number to bottom right of thumbnail * fix various crashes * Refactor SpeechBubbleDetector into product flavors * Implement speech bubble detection caching and background prefetching * Implement on-demand download for Bubble Zoom ML model * Add smooth animation for PDF speech bubble expansion * fixes #252 * hide Google Fonts option, in FontsScreen, for offline variant * Bump version to 1.0.46(46)
This commit is contained in:
parent
579b6f25bf
commit
d16bdd70d4
67 changed files with 9724 additions and 1890 deletions
|
|
@ -167,17 +167,14 @@ class EpubParser(private val context: Context) {
|
|||
bookId: String,
|
||||
shouldUseToc: Boolean = true,
|
||||
originalBookNameHint: String = "streamed_book",
|
||||
parseContent: Boolean = true
|
||||
parseContent: Boolean = true,
|
||||
extractionDirOverride: File? = null
|
||||
): EpubBook {
|
||||
return withContext(Dispatchers.IO) {
|
||||
Timber.d("Parsing EPUB input stream for bookId: $bookId")
|
||||
|
||||
val extractionDir = File(context.cacheDir, "imported_file_$bookId")
|
||||
|
||||
if (extractionDir.exists()) {
|
||||
extractionDir.deleteRecursively()
|
||||
}
|
||||
extractionDir.mkdirs()
|
||||
val extractionDir = extractionDirOverride?.let(ImportedFileCache::prepareDirectory)
|
||||
?: ImportedFileCache.prepareActiveBookDir(context, bookId)
|
||||
|
||||
val tempFile = File.createTempFile("epub_stream", ".epub", context.cacheDir)
|
||||
val filesMap: Map<String, EpubFile>
|
||||
|
|
@ -244,6 +241,24 @@ class EpubParser(private val context: Context) {
|
|||
val metadataLanguage =
|
||||
document.metadata.selectFirstChildTag("dc:language")?.textContent ?: "en"
|
||||
val metadataCoverId = getMetadataCoverId(document.metadata)
|
||||
val metadataDescription =
|
||||
document.metadata.selectFirstChildTag("dc:description")?.textContent
|
||||
|
||||
Timber.d("EpubParser: Extracted OPF metadata: title='$metadataTitle', author='$metadataAuthor'")
|
||||
|
||||
var metadataSeriesName: String? = null
|
||||
var metadataSeriesIndex: Double? = null
|
||||
|
||||
document.metadata.selectChildTag("meta")
|
||||
.ifEmpty { document.metadata.selectChildTag("opf:meta") }
|
||||
.forEach { meta ->
|
||||
val nameAttr = meta.getAttributeValue("name")
|
||||
val contentAttr = meta.getAttributeValue("content")
|
||||
|
||||
if (nameAttr == "calibre:series") metadataSeriesName = contentAttr
|
||||
if (nameAttr == "calibre:series_index") metadataSeriesIndex = contentAttr?.toDoubleOrNull()
|
||||
}
|
||||
|
||||
val opfRelativePath = document.opfFilePath
|
||||
val opfParentDir = File(opfRelativePath).parentFile ?: File("")
|
||||
val manifestItems = getManifestItems(document.manifest, opfParentDir)
|
||||
|
|
@ -344,7 +359,10 @@ class EpubParser(private val context: Context) {
|
|||
pageList = pageTargets,
|
||||
tableOfContents = tableOfContents,
|
||||
extractionBasePath = extractionBasePath,
|
||||
css = cssContent
|
||||
css = cssContent,
|
||||
seriesName = metadataSeriesName,
|
||||
seriesIndex = metadataSeriesIndex,
|
||||
description = metadataDescription
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -688,4 +706,4 @@ class EpubParser(private val context: Context) {
|
|||
lowerName.endsWith(".htm") ||
|
||||
lowerName.endsWith(".css")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue