Fixes for double page mode when reading .rar chapters

Fixes #1478 somewhat
This commit is contained in:
Jays2Kings 2022-12-30 00:47:58 -05:00
parent 5139e98dea
commit 908fa3bfa1
3 changed files with 9 additions and 21 deletions

View file

@ -42,18 +42,16 @@ class RarPageLoader(file: File) : PageLoader() {
* comparator.
*/
override fun getPages(): Observable<List<ReaderPage>> {
return archive.fileHeaders
return archive.fileHeaders.asSequence()
.filter { !it.isDirectory && ImageUtil.isImage(it.fileName) { archive.getInputStream(it) } }
.sortedWith { f1, f2 -> f1.fileName.compareToCaseInsensitiveNaturalOrder(f2.fileName) }
.mapIndexed { i, header ->
val streamFn = { getStream(header) }
ReaderPage(i).apply {
stream = streamFn
stream = { getStream(header) }
status = Page.READY
}
}
.let { Observable.just(it) }
.let { Observable.just(it.toList()) }
}
/**

View file

@ -492,7 +492,7 @@ class PagerPageHolder(
.fromCallable {
val stream = streamFn().buffered(16)
val stream2 = if (extraPage != null) streamFn2?.invoke()?.buffered(16) else null
val stream2 = streamFn2?.invoke()?.buffered(16)
openStream = this@PagerPageHolder.mergeOrSplitPages(stream, stream2)
ImageUtil.isAnimatedAndSupported(stream) ||
if (stream2 != null) ImageUtil.isAnimatedAndSupported(stream2) else false
@ -781,16 +781,6 @@ class PagerPageHolder(
return supportHingeIfThere(imageStream)
}
if (page.fullPage == true) return supportHingeIfThere(imageStream)
if (ImageUtil.isAnimatedAndSupported(imageStream)) {
page.fullPage = true
splitDoublePages()
return imageStream
} else if (ImageUtil.isAnimatedAndSupported(imageStream2)) {
page.isolatedPage = true
extraPage?.fullPage = true
splitDoublePages()
return supportHingeIfThere(imageStream)
}
val imageBytes = imageStream.readBytes()
val imageBitmap = try {
BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.size)
@ -800,7 +790,7 @@ class PagerPageHolder(
page.fullPage = true
splitDoublePages()
Timber.e("Cannot combine pages ${e.message}")
return imageBytes.inputStream()
return supportHingeIfThere(imageBytes.inputStream())
}
scope?.launchUI { progressBar.setProgress(96) }
val height = imageBitmap.height
@ -824,7 +814,7 @@ class PagerPageHolder(
page.isolatedPage = true
splitDoublePages()
Timber.e("Cannot combine pages ${e.message}")
return imageBytes.inputStream()
return supportHingeIfThere(imageBytes.inputStream())
}
scope?.launchUI { progressBar.setProgress(97) }
val height2 = imageBitmap2.height

View file

@ -53,8 +53,8 @@ object ImageUtil {
}
fun findImageType(stream: InputStream): ImageType? {
try {
return when (getImageType(stream)?.format) {
return try {
when (getImageType(stream)?.format) {
Format.Avif -> ImageType.AVIF
Format.Gif -> ImageType.GIF
Format.Heif -> ImageType.HEIF
@ -65,8 +65,8 @@ object ImageUtil {
else -> null
}
} catch (e: Exception) {
null
}
return null
}
fun resizeBitMapDrawable(drawable: Drawable, resources: Resources?, size: Int): Drawable? {