mirror of
https://github.com/null2264/yokai.git
synced 2025-06-21 10:44:42 +00:00
Fixes for double page mode when reading .rar chapters
Fixes #1478 somewhat
This commit is contained in:
parent
5139e98dea
commit
908fa3bfa1
3 changed files with 9 additions and 21 deletions
|
@ -42,18 +42,16 @@ class RarPageLoader(file: File) : PageLoader() {
|
||||||
* comparator.
|
* comparator.
|
||||||
*/
|
*/
|
||||||
override fun getPages(): Observable<List<ReaderPage>> {
|
override fun getPages(): Observable<List<ReaderPage>> {
|
||||||
return archive.fileHeaders
|
return archive.fileHeaders.asSequence()
|
||||||
.filter { !it.isDirectory && ImageUtil.isImage(it.fileName) { archive.getInputStream(it) } }
|
.filter { !it.isDirectory && ImageUtil.isImage(it.fileName) { archive.getInputStream(it) } }
|
||||||
.sortedWith { f1, f2 -> f1.fileName.compareToCaseInsensitiveNaturalOrder(f2.fileName) }
|
.sortedWith { f1, f2 -> f1.fileName.compareToCaseInsensitiveNaturalOrder(f2.fileName) }
|
||||||
.mapIndexed { i, header ->
|
.mapIndexed { i, header ->
|
||||||
val streamFn = { getStream(header) }
|
|
||||||
|
|
||||||
ReaderPage(i).apply {
|
ReaderPage(i).apply {
|
||||||
stream = streamFn
|
stream = { getStream(header) }
|
||||||
status = Page.READY
|
status = Page.READY
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.let { Observable.just(it) }
|
.let { Observable.just(it.toList()) }
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -492,7 +492,7 @@ class PagerPageHolder(
|
||||||
.fromCallable {
|
.fromCallable {
|
||||||
val stream = streamFn().buffered(16)
|
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)
|
openStream = this@PagerPageHolder.mergeOrSplitPages(stream, stream2)
|
||||||
ImageUtil.isAnimatedAndSupported(stream) ||
|
ImageUtil.isAnimatedAndSupported(stream) ||
|
||||||
if (stream2 != null) ImageUtil.isAnimatedAndSupported(stream2) else false
|
if (stream2 != null) ImageUtil.isAnimatedAndSupported(stream2) else false
|
||||||
|
@ -781,16 +781,6 @@ class PagerPageHolder(
|
||||||
return supportHingeIfThere(imageStream)
|
return supportHingeIfThere(imageStream)
|
||||||
}
|
}
|
||||||
if (page.fullPage == true) 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 imageBytes = imageStream.readBytes()
|
||||||
val imageBitmap = try {
|
val imageBitmap = try {
|
||||||
BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.size)
|
BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.size)
|
||||||
|
@ -800,7 +790,7 @@ class PagerPageHolder(
|
||||||
page.fullPage = true
|
page.fullPage = true
|
||||||
splitDoublePages()
|
splitDoublePages()
|
||||||
Timber.e("Cannot combine pages ${e.message}")
|
Timber.e("Cannot combine pages ${e.message}")
|
||||||
return imageBytes.inputStream()
|
return supportHingeIfThere(imageBytes.inputStream())
|
||||||
}
|
}
|
||||||
scope?.launchUI { progressBar.setProgress(96) }
|
scope?.launchUI { progressBar.setProgress(96) }
|
||||||
val height = imageBitmap.height
|
val height = imageBitmap.height
|
||||||
|
@ -824,7 +814,7 @@ class PagerPageHolder(
|
||||||
page.isolatedPage = true
|
page.isolatedPage = true
|
||||||
splitDoublePages()
|
splitDoublePages()
|
||||||
Timber.e("Cannot combine pages ${e.message}")
|
Timber.e("Cannot combine pages ${e.message}")
|
||||||
return imageBytes.inputStream()
|
return supportHingeIfThere(imageBytes.inputStream())
|
||||||
}
|
}
|
||||||
scope?.launchUI { progressBar.setProgress(97) }
|
scope?.launchUI { progressBar.setProgress(97) }
|
||||||
val height2 = imageBitmap2.height
|
val height2 = imageBitmap2.height
|
||||||
|
|
|
@ -53,8 +53,8 @@ object ImageUtil {
|
||||||
}
|
}
|
||||||
|
|
||||||
fun findImageType(stream: InputStream): ImageType? {
|
fun findImageType(stream: InputStream): ImageType? {
|
||||||
try {
|
return try {
|
||||||
return when (getImageType(stream)?.format) {
|
when (getImageType(stream)?.format) {
|
||||||
Format.Avif -> ImageType.AVIF
|
Format.Avif -> ImageType.AVIF
|
||||||
Format.Gif -> ImageType.GIF
|
Format.Gif -> ImageType.GIF
|
||||||
Format.Heif -> ImageType.HEIF
|
Format.Heif -> ImageType.HEIF
|
||||||
|
@ -65,8 +65,8 @@ object ImageUtil {
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
null
|
||||||
}
|
}
|
||||||
return null
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun resizeBitMapDrawable(drawable: Drawable, resources: Resources?, size: Int): Drawable? {
|
fun resizeBitMapDrawable(drawable: Drawable, resources: Resources?, size: Int): Drawable? {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue