JSON metadata for local manga (#1658)

* JSON metadata for local manga

* Simplification

* Lazy load local data
This commit is contained in:
Chris Allan 2020-01-11 12:59:43 -08:00 committed by arkon
parent 2d3bfa9a89
commit 1b37c61b5a

View file

@ -1,6 +1,8 @@
package eu.kanade.tachiyomi.source
import android.content.Context
import com.google.gson.Gson
import com.google.gson.JsonObject
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.source.model.Filter
import eu.kanade.tachiyomi.source.model.FilterList
@ -21,6 +23,7 @@ import java.io.File
import java.io.FileInputStream
import java.io.InputStream
import java.util.Locale
import java.util.Scanner
import java.util.concurrent.TimeUnit
import java.util.zip.ZipEntry
import java.util.zip.ZipFile
@ -117,8 +120,6 @@ class LocalSource(private val context: Context) : CatalogueSource {
}
}
}
initialized = true
}
}
return Observable.just(MangasPage(mangas, false))
@ -126,7 +127,26 @@ class LocalSource(private val context: Context) : CatalogueSource {
override fun fetchLatestUpdates(page: Int) = fetchSearchManga(page, "", LATEST_FILTERS)
override fun fetchMangaDetails(manga: SManga) = Observable.just(manga)
override fun fetchMangaDetails(manga: SManga): Observable<SManga> {
getBaseDirectories(context)
.mapNotNull { File(it, manga.url).listFiles()?.toList() }
.flatten()
.filter { it.extension.equals("json") }
.firstOrNull()
?.apply {
val json = Gson().fromJson(Scanner(this).useDelimiter("\\Z").next(), JsonObject::class.java)
manga.title = json["title"]?.asString ?: manga.title
manga.author = json["author"]?.asString ?: manga.author
manga.artist = json["artist"]?.asString ?: manga.artist
manga.description = json["description"]?.asString ?: manga.description
manga.genre = json["genre"]?.asJsonArray
?.map { it.asString }
?.joinToString(", ")
?: manga.genre
manga.status = json["status"]?.asInt ?: manga.status
}
return Observable.just(manga)
}
override fun fetchChapterList(manga: SManga): Observable<List<SChapter>> {
val chapters = getBaseDirectories(context)