diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 33e59610a..9c12383b3 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -169,11 +169,11 @@ dependencies { implementation(projects.i18n) // KMK --> implementation(projects.i18nKmk) - implementation(projects.flagkit) // KMK <-- // SY --> implementation(projects.i18nSy) // SY <-- + implementation(projects.core.archive) implementation(projects.core.common) implementation(projects.coreMetadata) implementation(projects.sourceApi) @@ -280,6 +280,7 @@ dependencies { implementation(libs.material.kolor) implementation(libs.haze) implementation(compose.colorpicker) + implementation(projects.flagkit) // KMK <-- // Logging diff --git a/app/src/main/java/eu/kanade/domain/manga/model/Manga.kt b/app/src/main/java/eu/kanade/domain/manga/model/Manga.kt index 376339c99..60be49e85 100644 --- a/app/src/main/java/eu/kanade/domain/manga/model/Manga.kt +++ b/app/src/main/java/eu/kanade/domain/manga/model/Manga.kt @@ -5,7 +5,7 @@ import eu.kanade.tachiyomi.data.cache.CoverCache import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation import eu.kanade.tachiyomi.ui.reader.setting.ReadingMode -import eu.kanade.tachiyomi.util.storage.CbzCrypto +import mihon.core.archive.CbzCrypto import tachiyomi.core.common.preference.TriState import tachiyomi.core.metadata.comicinfo.ComicInfo import tachiyomi.core.metadata.comicinfo.ComicInfoPublishingStatus diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSecurityScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSecurityScreen.kt index caceb1988..1f4663501 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSecurityScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSecurityScreen.kt @@ -48,11 +48,11 @@ import eu.kanade.presentation.more.settings.Preference import eu.kanade.tachiyomi.core.security.SecurityPreferences import eu.kanade.tachiyomi.ui.base.delegate.SecureActivityDelegate import eu.kanade.tachiyomi.ui.category.biometric.BiometricTimesScreen -import eu.kanade.tachiyomi.util.storage.CbzCrypto import eu.kanade.tachiyomi.util.system.AuthenticatorUtil.authenticate import eu.kanade.tachiyomi.util.system.AuthenticatorUtil.isAuthenticationSupported import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableMap +import mihon.core.archive.CbzCrypto import tachiyomi.core.common.i18n.stringResource import tachiyomi.i18n.MR import tachiyomi.i18n.sy.SYMR diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/coil/TachiyomiImageDecoder.kt b/app/src/main/java/eu/kanade/tachiyomi/data/coil/TachiyomiImageDecoder.kt index 888d9ebcc..b93cc88cf 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/coil/TachiyomiImageDecoder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/coil/TachiyomiImageDecoder.kt @@ -12,10 +12,10 @@ import coil3.fetch.SourceFetchResult import coil3.request.Options import coil3.request.bitmapConfig import com.hippo.unifile.UniFile -import eu.kanade.tachiyomi.util.storage.CbzCrypto -import eu.kanade.tachiyomi.util.storage.CbzCrypto.getCoverStream import eu.kanade.tachiyomi.util.system.GLUtil -import mihon.core.common.archive.archiveReader +import mihon.core.archive.CbzCrypto +import mihon.core.archive.CbzCrypto.getCoverStream +import mihon.core.archive.archiveReader import okio.BufferedSource import tachiyomi.core.common.util.system.ImageUtil import tachiyomi.decoder.ImageDecoder diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt index 5b9b0bfa7..62455083d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt @@ -12,7 +12,6 @@ import eu.kanade.tachiyomi.data.notification.NotificationHandler import eu.kanade.tachiyomi.source.UnmeteredSource import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.source.online.HttpSource -import eu.kanade.tachiyomi.util.storage.CbzCrypto import eu.kanade.tachiyomi.util.storage.DiskUtil import eu.kanade.tachiyomi.util.storage.DiskUtil.NOMEDIA_FILE import eu.kanade.tachiyomi.util.storage.saveTo @@ -44,7 +43,8 @@ import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import kotlinx.coroutines.supervisorScope import logcat.LogPriority -import mihon.core.common.archive.ZipWriter +import mihon.core.archive.CbzCrypto +import mihon.core.archive.ZipWriter import nl.adaptivity.xmlutil.serialization.XML import okhttp3.Response import tachiyomi.core.common.i18n.stringResource diff --git a/app/src/main/java/eu/kanade/tachiyomi/di/AppModule.kt b/app/src/main/java/eu/kanade/tachiyomi/di/AppModule.kt index 93ef3aa33..f71f4474c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/di/AppModule.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/di/AppModule.kt @@ -26,11 +26,11 @@ import eu.kanade.tachiyomi.extension.ExtensionManager import eu.kanade.tachiyomi.network.JavaScriptEngine import eu.kanade.tachiyomi.network.NetworkHelper import eu.kanade.tachiyomi.source.AndroidSourceManager -import eu.kanade.tachiyomi.util.storage.CbzCrypto import exh.eh.EHentaiUpdateHelper import io.requery.android.database.sqlite.RequerySQLiteOpenHelperFactory import kotlinx.serialization.json.Json import kotlinx.serialization.protobuf.ProtoBuf +import mihon.core.archive.CbzCrypto import net.zetetic.database.sqlcipher.SupportOpenHelperFactory import nl.adaptivity.xmlutil.XmlDeclMode import nl.adaptivity.xmlutil.core.XmlVersion diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ArchivePageLoader.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ArchivePageLoader.kt index f00fc25df..1379c2cde 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ArchivePageLoader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ArchivePageLoader.kt @@ -13,7 +13,7 @@ import kotlinx.coroutines.async import kotlinx.coroutines.runBlocking import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock -import mihon.core.common.archive.ArchiveReader +import mihon.core.archive.ArchiveReader import tachiyomi.core.common.util.system.ImageUtil import uy.kohesive.injekt.injectLazy import java.io.File diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ChapterLoader.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ChapterLoader.kt index 1b15d8ea9..75d945d0c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ChapterLoader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ChapterLoader.kt @@ -8,7 +8,8 @@ import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.source.online.all.MergedSource import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences -import mihon.core.common.archive.archiveReader +import mihon.core.archive.archiveReader +import mihon.core.archive.epubReader import tachiyomi.core.common.i18n.stringResource import tachiyomi.core.common.util.lang.withIOContext import tachiyomi.core.common.util.system.logcat @@ -127,7 +128,7 @@ class ChapterLoader( when (format) { is Format.Directory -> DirectoryPageLoader(format.file) is Format.Archive -> ArchivePageLoader(format.file.archiveReader(context)) - is Format.Epub -> EpubPageLoader(format.file.archiveReader(context)) + is Format.Epub -> EpubPageLoader(format.file.epubReader(context)) } } else -> error(context.stringResource(MR.strings.loader_not_implemented_error)) @@ -145,7 +146,7 @@ class ChapterLoader( when (format) { is Format.Directory -> DirectoryPageLoader(format.file) is Format.Archive -> ArchivePageLoader(format.file.archiveReader(context)) - is Format.Epub -> EpubPageLoader(format.file.archiveReader(context)) + is Format.Epub -> EpubPageLoader(format.file.epubReader(context)) } } source is HttpSource -> HttpPageLoader(chapter, source) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/DownloadPageLoader.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/DownloadPageLoader.kt index c6a6aeadc..b7eb5a147 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/DownloadPageLoader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/DownloadPageLoader.kt @@ -10,7 +10,7 @@ import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter import eu.kanade.tachiyomi.ui.reader.model.ReaderPage -import mihon.core.common.archive.archiveReader +import mihon.core.archive.archiveReader import tachiyomi.domain.manga.model.Manga import uy.kohesive.injekt.injectLazy diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/EpubPageLoader.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/EpubPageLoader.kt index 8ace2fdee..cc43487a8 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/EpubPageLoader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/EpubPageLoader.kt @@ -2,27 +2,22 @@ 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.EpubFile -import mihon.core.common.archive.ArchiveReader +import mihon.core.archive.EpubReader /** * Loader used to load a chapter from a .epub file. */ -internal class EpubPageLoader(reader: ArchiveReader) : PageLoader() { - - private val epub = EpubFile(reader) +internal class EpubPageLoader(private val reader: EpubReader) : PageLoader() { override var isLocal: Boolean = true override suspend fun getPages(): List { - return epub.getImagesFromPages() - .mapIndexed { i, path -> - val streamFn = { epub.getInputStream(path)!! } - ReaderPage(i).apply { - stream = streamFn - status = Page.State.READY - } + return reader.getImagesFromPages().mapIndexed { i, path -> + ReaderPage(i).apply { + stream = { reader.getInputStream(path)!! } + status = Page.State.READY } + } } override suspend fun loadPage(page: ReaderPage) { @@ -31,6 +26,6 @@ internal class EpubPageLoader(reader: ArchiveReader) : PageLoader() { override fun recycle() { super.recycle() - epub.close() + reader.close() } } diff --git a/core/archive/.gitignore b/core/archive/.gitignore new file mode 100644 index 000000000..796b96d1c --- /dev/null +++ b/core/archive/.gitignore @@ -0,0 +1 @@ +/build diff --git a/core/archive/build.gradle.kts b/core/archive/build.gradle.kts new file mode 100644 index 000000000..d53762ac2 --- /dev/null +++ b/core/archive/build.gradle.kts @@ -0,0 +1,19 @@ +plugins { + id("mihon.library") + kotlin("android") + kotlin("plugin.serialization") +} + +android { + namespace = "mihon.core.archive" +} + +dependencies { + implementation(libs.jsoup) + implementation(libs.libarchive) + implementation(libs.unifile) + // KMK --> + implementation(projects.core.common) + implementation(libs.injekt.core) + // KMK <-- +} diff --git a/core/archive/src/main/AndroidManifest.xml b/core/archive/src/main/AndroidManifest.xml new file mode 100644 index 000000000..8072ee00d --- /dev/null +++ b/core/archive/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + + diff --git a/core/common/src/main/kotlin/mihon/core/common/archive/ArchiveEntry.kt b/core/archive/src/main/kotlin/mihon/core/archive/ArchiveEntry.kt similarity index 74% rename from core/common/src/main/kotlin/mihon/core/common/archive/ArchiveEntry.kt rename to core/archive/src/main/kotlin/mihon/core/archive/ArchiveEntry.kt index f9cd9c190..f1506b84b 100644 --- a/core/common/src/main/kotlin/mihon/core/common/archive/ArchiveEntry.kt +++ b/core/archive/src/main/kotlin/mihon/core/archive/ArchiveEntry.kt @@ -1,4 +1,4 @@ -package mihon.core.common.archive +package mihon.core.archive class ArchiveEntry( val name: String, diff --git a/core/common/src/main/kotlin/mihon/core/common/archive/ArchiveInputStream.kt b/core/archive/src/main/kotlin/mihon/core/archive/ArchiveInputStream.kt similarity index 96% rename from core/common/src/main/kotlin/mihon/core/common/archive/ArchiveInputStream.kt rename to core/archive/src/main/kotlin/mihon/core/archive/ArchiveInputStream.kt index 71c2b5e68..fb8527774 100644 --- a/core/common/src/main/kotlin/mihon/core/common/archive/ArchiveInputStream.kt +++ b/core/archive/src/main/kotlin/mihon/core/archive/ArchiveInputStream.kt @@ -1,6 +1,5 @@ -package mihon.core.common.archive +package mihon.core.archive -import eu.kanade.tachiyomi.util.storage.CbzCrypto import me.zhanghai.android.libarchive.Archive import me.zhanghai.android.libarchive.ArchiveEntry import me.zhanghai.android.libarchive.ArchiveException diff --git a/core/common/src/main/kotlin/mihon/core/common/archive/ArchiveReader.kt b/core/archive/src/main/kotlin/mihon/core/archive/ArchiveReader.kt similarity index 90% rename from core/common/src/main/kotlin/mihon/core/common/archive/ArchiveReader.kt rename to core/archive/src/main/kotlin/mihon/core/archive/ArchiveReader.kt index f0312092f..ab38cd87e 100644 --- a/core/common/src/main/kotlin/mihon/core/common/archive/ArchiveReader.kt +++ b/core/archive/src/main/kotlin/mihon/core/archive/ArchiveReader.kt @@ -1,12 +1,9 @@ -package mihon.core.common.archive +package mihon.core.archive -import android.content.Context import android.os.ParcelFileDescriptor import android.system.Os import android.system.OsConstants -import com.hippo.unifile.UniFile import me.zhanghai.android.libarchive.ArchiveException -import tachiyomi.core.common.storage.openFileDescriptor import java.io.Closeable import java.io.InputStream @@ -90,5 +87,3 @@ class ArchiveReader(pfd: ParcelFileDescriptor) : Closeable { Os.munmap(address, size) } } - -fun UniFile.archiveReader(context: Context) = openFileDescriptor(context, "r").use { ArchiveReader(it) } diff --git a/core/common/src/main/kotlin/eu/kanade/tachiyomi/util/storage/CbzCrypto.kt b/core/archive/src/main/kotlin/mihon/core/archive/CbzCrypto.kt similarity index 98% rename from core/common/src/main/kotlin/eu/kanade/tachiyomi/util/storage/CbzCrypto.kt rename to core/archive/src/main/kotlin/mihon/core/archive/CbzCrypto.kt index 178fa3ac0..66e001d67 100644 --- a/core/common/src/main/kotlin/eu/kanade/tachiyomi/util/storage/CbzCrypto.kt +++ b/core/archive/src/main/kotlin/mihon/core/archive/CbzCrypto.kt @@ -1,4 +1,4 @@ -package eu.kanade.tachiyomi.util.storage +package mihon.core.archive import android.security.keystore.KeyGenParameterSpec import android.security.keystore.KeyProperties @@ -9,7 +9,6 @@ import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn -import mihon.core.common.archive.ArchiveReader import tachiyomi.core.common.util.system.ImageUtil import uy.kohesive.injekt.injectLazy import java.io.BufferedInputStream diff --git a/core/common/src/main/kotlin/eu/kanade/tachiyomi/util/storage/EpubFile.kt b/core/archive/src/main/kotlin/mihon/core/archive/EpubReader.kt similarity index 95% rename from core/common/src/main/kotlin/eu/kanade/tachiyomi/util/storage/EpubFile.kt rename to core/archive/src/main/kotlin/mihon/core/archive/EpubReader.kt index b194c5ee3..620602c81 100644 --- a/core/common/src/main/kotlin/eu/kanade/tachiyomi/util/storage/EpubFile.kt +++ b/core/archive/src/main/kotlin/mihon/core/archive/EpubReader.kt @@ -1,6 +1,5 @@ -package eu.kanade.tachiyomi.util.storage +package mihon.core.archive -import mihon.core.common.archive.ArchiveReader import org.jsoup.Jsoup import org.jsoup.nodes.Document import java.io.Closeable @@ -8,9 +7,9 @@ import java.io.File import java.io.InputStream /** - * Wrapper over ZipFile to load files in epub format. + * Wrapper over ArchiveReader to load files in epub format. */ -class EpubFile(private val reader: ArchiveReader) : Closeable by reader { +class EpubReader(private val reader: ArchiveReader) : Closeable by reader { /** * Path separator used by this epub. diff --git a/core/archive/src/main/kotlin/mihon/core/archive/UniFileExtensions.kt b/core/archive/src/main/kotlin/mihon/core/archive/UniFileExtensions.kt new file mode 100644 index 000000000..3a2e0876f --- /dev/null +++ b/core/archive/src/main/kotlin/mihon/core/archive/UniFileExtensions.kt @@ -0,0 +1,12 @@ +package mihon.core.archive + +import android.content.Context +import android.os.ParcelFileDescriptor +import com.hippo.unifile.UniFile + +internal fun UniFile.openFileDescriptor(context: Context, mode: String): ParcelFileDescriptor = + context.contentResolver.openFileDescriptor(uri, mode) ?: error("Failed to open file descriptor: ${filePath ?: uri}") + +fun UniFile.archiveReader(context: Context) = openFileDescriptor(context, "r").use { ArchiveReader(it) } + +fun UniFile.epubReader(context: Context) = EpubReader(archiveReader(context)) diff --git a/core/common/src/main/kotlin/mihon/core/common/archive/ZipWriter.kt b/core/archive/src/main/kotlin/mihon/core/archive/ZipWriter.kt similarity index 91% rename from core/common/src/main/kotlin/mihon/core/common/archive/ZipWriter.kt rename to core/archive/src/main/kotlin/mihon/core/archive/ZipWriter.kt index df43a88e5..bbb5e9bc6 100644 --- a/core/common/src/main/kotlin/mihon/core/common/archive/ZipWriter.kt +++ b/core/archive/src/main/kotlin/mihon/core/archive/ZipWriter.kt @@ -1,15 +1,13 @@ -package mihon.core.common.archive +package mihon.core.archive import android.content.Context import android.system.Os import android.system.StructStat import com.hippo.unifile.UniFile -import eu.kanade.tachiyomi.util.storage.CbzCrypto import me.zhanghai.android.libarchive.Archive import me.zhanghai.android.libarchive.ArchiveEntry import me.zhanghai.android.libarchive.ArchiveEntry.AE_IFREG import me.zhanghai.android.libarchive.ArchiveException -import tachiyomi.core.common.storage.openFileDescriptor import java.io.Closeable import java.nio.ByteBuffer @@ -110,10 +108,10 @@ private fun StructStat.toArchiveStat() = ArchiveEntry.StructStat().apply { stSize = st_size stBlksize = st_blksize stBlocks = st_blocks - stAtim = timespec(st_atime) - stMtim = timespec(st_mtime) - stCtim = timespec(st_ctime) + stAtim = st_atime.toTimespec() + stMtim = st_mtime.toTimespec() + stCtim = st_ctime.toTimespec() stIno = st_ino } -private fun timespec(tvSec: Long) = ArchiveEntry.StructTimespec().also { it.tvSec = tvSec } +private fun Long.toTimespec() = ArchiveEntry.StructTimespec().also { it.tvSec = this } diff --git a/core/common/src/main/kotlin/tachiyomi/core/common/storage/UniFileExtensions.kt b/core/common/src/main/kotlin/tachiyomi/core/common/storage/UniFileExtensions.kt index 4b04ff405..8bbd9b3a7 100644 --- a/core/common/src/main/kotlin/tachiyomi/core/common/storage/UniFileExtensions.kt +++ b/core/common/src/main/kotlin/tachiyomi/core/common/storage/UniFileExtensions.kt @@ -1,7 +1,5 @@ package tachiyomi.core.common.storage -import android.content.Context -import android.os.ParcelFileDescriptor import com.hippo.unifile.UniFile val UniFile.extension: String? @@ -12,6 +10,3 @@ val UniFile.nameWithoutExtension: String? val UniFile.displayablePath: String get() = filePath ?: uri.toString() - -fun UniFile.openFileDescriptor(context: Context, mode: String): ParcelFileDescriptor = - context.contentResolver.openFileDescriptor(uri, mode) ?: error("Failed to open file descriptor: $displayablePath") diff --git a/settings.gradle.kts b/settings.gradle.kts index 455600c55..100d02c60 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -43,6 +43,7 @@ enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") rootProject.name = "Komikku" include(":app") include(":core-metadata") +include(":core:archive") include(":core:common") include(":data") include(":domain") diff --git a/source-local/build.gradle.kts b/source-local/build.gradle.kts index 1a34cd1a8..5d87e72c9 100644 --- a/source-local/build.gradle.kts +++ b/source-local/build.gradle.kts @@ -19,6 +19,7 @@ kotlin { } val androidMain by getting { dependencies { + implementation(projects.core.archive) implementation(projects.core.common) implementation(projects.coreMetadata) diff --git a/source-local/src/androidMain/kotlin/tachiyomi/source/local/LocalSource.kt b/source-local/src/androidMain/kotlin/tachiyomi/source/local/LocalSource.kt index aba2bd429..1098b20bf 100644 --- a/source-local/src/androidMain/kotlin/tachiyomi/source/local/LocalSource.kt +++ b/source-local/src/androidMain/kotlin/tachiyomi/source/local/LocalSource.kt @@ -11,14 +11,14 @@ import eu.kanade.tachiyomi.source.model.Page 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 kotlinx.coroutines.async import kotlinx.coroutines.awaitAll import kotlinx.serialization.json.Json import kotlinx.serialization.json.decodeFromStream import logcat.LogPriority -import mihon.core.common.archive.ZipWriter -import mihon.core.common.archive.archiveReader +import mihon.core.archive.ZipWriter +import mihon.core.archive.archiveReader +import mihon.core.archive.epubReader import nl.adaptivity.xmlutil.AndroidXmlReader import nl.adaptivity.xmlutil.serialization.XML import tachiyomi.core.common.i18n.stringResource @@ -344,7 +344,7 @@ actual class LocalSource( val format = Format.valueOf(chapterFile) if (format is Format.Epub) { - EpubFile(format.file.archiveReader(context)).use { epub -> + format.file.epubReader(context).use { epub -> epub.fillMetadata(manga, this) } } @@ -414,7 +414,7 @@ actual class LocalSource( } } is Format.Epub -> { - EpubFile(format.file.archiveReader(context)).use { epub -> + format.file.epubReader(context).use { epub -> val entry = epub.getImagesFromPages().firstOrNull() entry?.let { coverManager.update(manga, epub.getInputStream(it)!!) } diff --git a/source-local/src/androidMain/kotlin/tachiyomi/source/local/image/LocalCoverManager.kt b/source-local/src/androidMain/kotlin/tachiyomi/source/local/image/LocalCoverManager.kt index 116075f96..e1f7c72e6 100644 --- a/source-local/src/androidMain/kotlin/tachiyomi/source/local/image/LocalCoverManager.kt +++ b/source-local/src/androidMain/kotlin/tachiyomi/source/local/image/LocalCoverManager.kt @@ -4,7 +4,7 @@ import android.content.Context import com.hippo.unifile.UniFile import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.util.storage.DiskUtil -import mihon.core.common.archive.ZipWriter +import mihon.core.archive.ZipWriter import tachiyomi.core.common.storage.nameWithoutExtension import tachiyomi.core.common.util.system.ImageUtil import tachiyomi.source.local.io.LocalSourceFileSystem diff --git a/source-local/src/androidMain/kotlin/tachiyomi/source/local/metadata/EpubFile.kt b/source-local/src/androidMain/kotlin/tachiyomi/source/local/metadata/EpubReaderExtensions.kt similarity index 92% rename from source-local/src/androidMain/kotlin/tachiyomi/source/local/metadata/EpubFile.kt rename to source-local/src/androidMain/kotlin/tachiyomi/source/local/metadata/EpubReaderExtensions.kt index 6bade530b..388156bc7 100644 --- a/source-local/src/androidMain/kotlin/tachiyomi/source/local/metadata/EpubFile.kt +++ b/source-local/src/androidMain/kotlin/tachiyomi/source/local/metadata/EpubReaderExtensions.kt @@ -2,7 +2,7 @@ package tachiyomi.source.local.metadata import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SManga -import eu.kanade.tachiyomi.util.storage.EpubFile +import mihon.core.archive.EpubReader import java.text.ParseException import java.text.SimpleDateFormat import java.util.Locale @@ -10,7 +10,7 @@ import java.util.Locale /** * Fills manga and chapter metadata using this epub file's metadata. */ -fun EpubFile.fillMetadata(manga: SManga, chapter: SChapter) { +fun EpubReader.fillMetadata(manga: SManga, chapter: SChapter) { val ref = getPackageHref() val doc = getPackageDocument(ref)