Merge remote branch abdallahmehiz/tachiyomi:7zip

This commit is contained in:
AbdallahMehiz
2024-01-16 18:59:20 +01:00
10 changed files with 72 additions and 2 deletions

View File

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

View File

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

View File

@@ -0,0 +1,36 @@
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.storage.SevenZUtil.getImages
import org.apache.commons.compress.archivers.sevenz.SevenZFile
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 by lazy { SevenZFile(file) }
override var isLocal: Boolean = true
override suspend fun getPages(): List<ReaderPage> {
return zip.getImages()
.mapIndexed { i, entry ->
ReaderPage(i).apply {
stream = { entry.copyOf().inputStream() }
status = Page.State.READY
}
}.toList()
}
override suspend fun loadPage(page: ReaderPage) {
check(!isRecycled)
}
override fun recycle() {
super.recycle()
zip.close()
}
}