mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-03 23:58:55 +01:00 
			
		
		
		
	Use UniFile for local source file handling
This commit is contained in:
		@@ -25,7 +25,7 @@ import kotlinx.serialization.json.Json
 | 
			
		||||
import nl.adaptivity.xmlutil.XmlDeclMode
 | 
			
		||||
import nl.adaptivity.xmlutil.core.XmlVersion
 | 
			
		||||
import nl.adaptivity.xmlutil.serialization.XML
 | 
			
		||||
import tachiyomi.core.provider.AndroidStorageFolderProvider
 | 
			
		||||
import tachiyomi.core.storage.AndroidStorageFolderProvider
 | 
			
		||||
import tachiyomi.data.AndroidDatabaseHandler
 | 
			
		||||
import tachiyomi.data.Database
 | 
			
		||||
import tachiyomi.data.DatabaseHandler
 | 
			
		||||
@@ -125,7 +125,7 @@ class AppModule(val app: Application) : InjektModule {
 | 
			
		||||
        addSingletonFactory { ImageSaver(app) }
 | 
			
		||||
 | 
			
		||||
        addSingletonFactory { AndroidStorageFolderProvider(app) }
 | 
			
		||||
        addSingletonFactory { LocalSourceFileSystem(get<AndroidStorageFolderProvider>()) }
 | 
			
		||||
        addSingletonFactory { LocalSourceFileSystem(app, get<AndroidStorageFolderProvider>()) }
 | 
			
		||||
        addSingletonFactory { LocalCoverManager(app, get()) }
 | 
			
		||||
 | 
			
		||||
        // Asynchronously init expensive components for a faster cold start
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences
 | 
			
		||||
import eu.kanade.tachiyomi.util.system.isDevFlavor
 | 
			
		||||
import tachiyomi.core.preference.AndroidPreferenceStore
 | 
			
		||||
import tachiyomi.core.preference.PreferenceStore
 | 
			
		||||
import tachiyomi.core.provider.AndroidStorageFolderProvider
 | 
			
		||||
import tachiyomi.core.storage.AndroidStorageFolderProvider
 | 
			
		||||
import tachiyomi.domain.backup.service.BackupPreferences
 | 
			
		||||
import tachiyomi.domain.download.service.DownloadPreferences
 | 
			
		||||
import tachiyomi.domain.library.service.LibraryPreferences
 | 
			
		||||
 
 | 
			
		||||
@@ -1,25 +1,24 @@
 | 
			
		||||
package eu.kanade.tachiyomi.ui.reader.loader
 | 
			
		||||
 | 
			
		||||
import com.hippo.unifile.UniFile
 | 
			
		||||
import eu.kanade.tachiyomi.source.model.Page
 | 
			
		||||
import eu.kanade.tachiyomi.ui.reader.model.ReaderPage
 | 
			
		||||
import eu.kanade.tachiyomi.util.lang.compareToCaseInsensitiveNaturalOrder
 | 
			
		||||
import tachiyomi.core.util.system.ImageUtil
 | 
			
		||||
import java.io.File
 | 
			
		||||
import java.io.FileInputStream
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Loader used to load a chapter from a directory given on [file].
 | 
			
		||||
 */
 | 
			
		||||
internal class DirectoryPageLoader(val file: File) : PageLoader() {
 | 
			
		||||
internal class DirectoryPageLoader(val file: UniFile) : PageLoader() {
 | 
			
		||||
 | 
			
		||||
    override var isLocal: Boolean = true
 | 
			
		||||
 | 
			
		||||
    override suspend fun getPages(): List<ReaderPage> {
 | 
			
		||||
        return file.listFiles()
 | 
			
		||||
            ?.filter { !it.isDirectory && ImageUtil.isImage(it.name) { FileInputStream(it) } }
 | 
			
		||||
            ?.sortedWith { f1, f2 -> f1.name.compareToCaseInsensitiveNaturalOrder(f2.name) }
 | 
			
		||||
            ?.filter { !it.isDirectory && ImageUtil.isImage(it.name) { it.openInputStream() } }
 | 
			
		||||
            ?.sortedWith { f1, f2 -> f1.name.orEmpty().compareToCaseInsensitiveNaturalOrder(f2.name.orEmpty()) }
 | 
			
		||||
            ?.mapIndexed { i, file ->
 | 
			
		||||
                val streamFn = { FileInputStream(file) }
 | 
			
		||||
                val streamFn = { file.openInputStream() }
 | 
			
		||||
                ReaderPage(i).apply {
 | 
			
		||||
                    stream = streamFn
 | 
			
		||||
                    status = Page.State.READY
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,6 @@ import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter
 | 
			
		||||
import eu.kanade.tachiyomi.ui.reader.model.ReaderPage
 | 
			
		||||
import tachiyomi.domain.manga.model.Manga
 | 
			
		||||
import uy.kohesive.injekt.injectLazy
 | 
			
		||||
import java.io.File
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Loader used to load a chapter from the downloaded chapters.
 | 
			
		||||
@@ -47,7 +46,7 @@ internal class DownloadPageLoader(
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private suspend fun getPagesFromArchive(chapterPath: UniFile): List<ReaderPage> {
 | 
			
		||||
        val loader = ZipPageLoader(File(chapterPath.filePath!!)).also { zipPageLoader = it }
 | 
			
		||||
        val loader = ZipPageLoader(chapterPath).also { zipPageLoader = it }
 | 
			
		||||
        return loader.getPages()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,14 +1,14 @@
 | 
			
		||||
package eu.kanade.tachiyomi.ui.reader.loader
 | 
			
		||||
 | 
			
		||||
import com.hippo.unifile.UniFile
 | 
			
		||||
import eu.kanade.tachiyomi.source.model.Page
 | 
			
		||||
import eu.kanade.tachiyomi.ui.reader.model.ReaderPage
 | 
			
		||||
import eu.kanade.tachiyomi.util.storage.EpubFile
 | 
			
		||||
import java.io.File
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Loader used to load a chapter from a .epub file.
 | 
			
		||||
 */
 | 
			
		||||
internal class EpubPageLoader(file: File) : PageLoader() {
 | 
			
		||||
internal class EpubPageLoader(file: UniFile) : PageLoader() {
 | 
			
		||||
 | 
			
		||||
    private val epub = EpubFile(file)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -2,11 +2,12 @@ package eu.kanade.tachiyomi.ui.reader.loader
 | 
			
		||||
 | 
			
		||||
import com.github.junrar.Archive
 | 
			
		||||
import com.github.junrar.rarfile.FileHeader
 | 
			
		||||
import com.hippo.unifile.UniFile
 | 
			
		||||
import eu.kanade.tachiyomi.source.model.Page
 | 
			
		||||
import eu.kanade.tachiyomi.ui.reader.model.ReaderPage
 | 
			
		||||
import eu.kanade.tachiyomi.util.lang.compareToCaseInsensitiveNaturalOrder
 | 
			
		||||
import tachiyomi.core.storage.toFile
 | 
			
		||||
import tachiyomi.core.util.system.ImageUtil
 | 
			
		||||
import java.io.File
 | 
			
		||||
import java.io.InputStream
 | 
			
		||||
import java.io.PipedInputStream
 | 
			
		||||
import java.io.PipedOutputStream
 | 
			
		||||
@@ -14,9 +15,9 @@ import java.io.PipedOutputStream
 | 
			
		||||
/**
 | 
			
		||||
 * Loader used to load a chapter from a .rar or .cbr file.
 | 
			
		||||
 */
 | 
			
		||||
internal class RarPageLoader(file: File) : PageLoader() {
 | 
			
		||||
internal class RarPageLoader(file: UniFile) : PageLoader() {
 | 
			
		||||
 | 
			
		||||
    private val rar = Archive(file)
 | 
			
		||||
    private val rar = Archive(file.toFile())
 | 
			
		||||
 | 
			
		||||
    override var isLocal: Boolean = true
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,23 +1,24 @@
 | 
			
		||||
package eu.kanade.tachiyomi.ui.reader.loader
 | 
			
		||||
 | 
			
		||||
import android.os.Build
 | 
			
		||||
import com.hippo.unifile.UniFile
 | 
			
		||||
import eu.kanade.tachiyomi.source.model.Page
 | 
			
		||||
import eu.kanade.tachiyomi.ui.reader.model.ReaderPage
 | 
			
		||||
import eu.kanade.tachiyomi.util.lang.compareToCaseInsensitiveNaturalOrder
 | 
			
		||||
import tachiyomi.core.storage.toFile
 | 
			
		||||
import tachiyomi.core.util.system.ImageUtil
 | 
			
		||||
import java.io.File
 | 
			
		||||
import java.nio.charset.StandardCharsets
 | 
			
		||||
import java.util.zip.ZipFile
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Loader used to load a chapter from a .zip or .cbz file.
 | 
			
		||||
 */
 | 
			
		||||
internal class ZipPageLoader(file: File) : PageLoader() {
 | 
			
		||||
internal class ZipPageLoader(file: UniFile) : PageLoader() {
 | 
			
		||||
 | 
			
		||||
    private val zip = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
 | 
			
		||||
        ZipFile(file, StandardCharsets.ISO_8859_1)
 | 
			
		||||
        ZipFile(file.toFile(), StandardCharsets.ISO_8859_1)
 | 
			
		||||
    } else {
 | 
			
		||||
        ZipFile(file)
 | 
			
		||||
        ZipFile(file.toFile())
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override var isLocal: Boolean = true
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user