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

@ -13,6 +13,7 @@ kotlin {
implementation(libs.unifile)
implementation(libs.junrar)
implementation(libs.bundles.sevenzip)
}
}
val androidMain by getting {

View File

@ -11,6 +11,7 @@ import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.util.lang.compareToCaseInsensitiveNaturalOrder
import eu.kanade.tachiyomi.util.storage.EpubFile
import eu.kanade.tachiyomi.util.storage.SevenZUtil.getImages
import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll
import kotlinx.serialization.json.Json
@ -18,6 +19,7 @@ import kotlinx.serialization.json.decodeFromStream
import logcat.LogPriority
import nl.adaptivity.xmlutil.AndroidXmlReader
import nl.adaptivity.xmlutil.serialization.XML
import org.apache.commons.compress.archivers.sevenz.SevenZFile
import tachiyomi.core.i18n.stringResource
import tachiyomi.core.metadata.comicinfo.COMIC_INFO_FILE
import tachiyomi.core.metadata.comicinfo.ComicInfo
@ -340,6 +342,13 @@ actual class LocalSource(
entry?.let { coverManager.update(manga, zip.getInputStream(it)) }
}
}
is Format.SevenZip -> {
SevenZFile(format.file.toTempFile(context)).use { archive ->
val entry = archive.getImages().firstOrNull()
entry?.let { coverManager.update(manga, it.inputStream()) }
}
}
is Format.Rar -> {
JunrarArchive(tempFileManager.createTempFile(format.file)).use { archive ->
val entry = archive.fileHeaders

View File

@ -5,7 +5,7 @@ import tachiyomi.core.storage.extension
object Archive {
private val SUPPORTED_ARCHIVE_TYPES = listOf("zip", "cbz", "rar", "cbr", "epub")
private val SUPPORTED_ARCHIVE_TYPES = listOf("zip", "cbz", "7z", "cb7", "rar", "cbr", "epub")
fun isSupported(file: UniFile): Boolean {
return file.extension in SUPPORTED_ARCHIVE_TYPES

View File

@ -6,6 +6,7 @@ import tachiyomi.core.storage.extension
sealed interface Format {
data class Directory(val file: UniFile) : Format
data class Zip(val file: UniFile) : Format
data class SevenZip(val file: UniFile) : Format
data class Rar(val file: UniFile) : Format
data class Epub(val file: UniFile) : Format
@ -17,6 +18,7 @@ sealed interface Format {
when {
isDirectory -> Directory(this)
extension.equals("zip", true) || extension.equals("cbz", true) -> Zip(this)
extension.equals("7z", true) || extension.equals("cb7", true) -> SevenZip(this)
extension.equals("rar", true) || extension.equals("cbr", true) -> Rar(this)
extension.equals("epub", true) -> Epub(this)
else -> throw UnknownFormatException()