7zip local manga

it crashes
This commit is contained in:
Abdallah Mehiz
2024-01-02 19:47:47 +01:00
parent 22589a9c30
commit ed18014430
8 changed files with 62 additions and 2 deletions

View File

@@ -213,6 +213,7 @@ dependencies {
implementation(libs.disklrucache)
implementation(libs.unifile)
implementation(libs.junrar)
implementation(libs.bundles.sevenzip)
// Preferences
implementation(libs.preferencektx)

View File

@@ -90,6 +90,7 @@ class ChapterLoader(
when (format) {
is Format.Directory -> DirectoryPageLoader(format.file)
is Format.Zip -> ZipPageLoader(format.file.toTempFile(context))
is Format.SevenZip -> SevenZipPageLoader(format.file.toTempFile(context))
is Format.Rar -> try {
RarPageLoader(format.file.toTempFile(context))
} catch (e: UnsupportedRarV5Exception) {

View File

@@ -0,0 +1,42 @@
package eu.kanade.tachiyomi.ui.reader.loader
import eu.kanade.tachiyomi.source.model.Page
import eu.kanade.tachiyomi.ui.reader.model.ReaderPage
import eu.kanade.tachiyomi.util.lang.compareToCaseInsensitiveNaturalOrder
import org.apache.commons.compress.archivers.sevenz.SevenZFile
import tachiyomi.core.util.system.ImageUtil
import java.io.File
/**
* Loader used to load a chapter from a .7z or .cb7 file.
*/
internal class SevenZipPageLoader(file: File) : PageLoader() {
private val zip = SevenZFile(file)
override var isLocal: Boolean = true
override suspend fun getPages(): List<ReaderPage> {
return zip.entries.asSequence()
.filter { !it.isDirectory && ImageUtil.isImage(it.name) { zip.getInputStream(it) } }
.sortedWith { f1, f2 -> f1.name.compareToCaseInsensitiveNaturalOrder(f2.name) }
.mapIndexed { i, entry ->
ReaderPage(i).apply {
stream = {
zip.getInputStream(entry)
}
status = Page.State.READY
}
}
.toList()
}
override suspend fun loadPage(page: ReaderPage) {
check(!isRecycled)
}
override fun recycle() {
super.recycle()
zip.close()
}
}