Fetch thumbnails from cbz

This commit is contained in:
Koitharu
2020-02-11 20:31:38 +02:00
parent 4f02060d50
commit a15f196a6b
4 changed files with 43 additions and 2 deletions

View File

@@ -11,6 +11,7 @@ import org.koin.android.ext.koin.androidLogger
import org.koin.core.context.startKoin
import org.koin.dsl.module
import org.koitharu.kotatsu.core.db.MangaDatabase
import org.koitharu.kotatsu.core.local.CbzFetcher
import org.koitharu.kotatsu.core.local.PagesCache
import org.koitharu.kotatsu.core.prefs.AppSettings
import org.koitharu.kotatsu.domain.MangaLoaderContext
@@ -61,6 +62,9 @@ class KotatsuApp : Application() {
.cache(CoilUtils.createDefaultCache(applicationContext))
.build()
}
componentRegistry {
add(CbzFetcher())
}
})
}

View File

@@ -0,0 +1,37 @@
package org.koitharu.kotatsu.core.local
import android.net.Uri
import android.webkit.MimeTypeMap
import coil.bitmappool.BitmapPool
import coil.decode.DataSource
import coil.decode.Options
import coil.fetch.FetchResult
import coil.fetch.Fetcher
import coil.fetch.SourceResult
import coil.size.Size
import okio.buffer
import okio.source
import java.util.zip.ZipFile
class CbzFetcher : Fetcher<Uri> {
override suspend fun fetch(
pool: BitmapPool,
data: Uri,
size: Size,
options: Options
): FetchResult {
val zip = ZipFile(data.schemeSpecificPart)
val entry = zip.getEntry(data.fragment)
val ext = MimeTypeMap.getFileExtensionFromUrl(entry.name)
return SourceResult(
source = zip.getInputStream(entry).source().buffer(),
mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(ext),
dataSource = DataSource.DISK
)
}
override fun key(data: Uri): String? = data.toString()
override fun handles(data: Uri) = data.scheme == "cbz"
}

View File

@@ -90,5 +90,5 @@ class LocalMangaRepository(loaderContext: MangaLoaderContext) : BaseMangaReposit
}
private fun zipUri(file: File, entryName: String) =
Uri.fromParts("zip", file.path, entryName).toString()
Uri.fromParts("cbz", file.path, entryName).toString()
}

View File

@@ -69,7 +69,7 @@ class MangaIndex(source: String?) {
jo.put("url", chapter.url)
jo.put("name", chapter.name)
jo.put("entries", "%03d\\d{3}".format(chapter.number))
chapters.put(chapter.number.toString(), jo)
chapters.put(chapter.id.toString(), jo)
}
}