瀏覽代碼

JSON metadata for local manga (#1658)

* JSON metadata for local manga

* Simplification

* Lazy load local data
Chris Allan 5 年之前
父節點
當前提交
1b37c61b5a
共有 1 個文件被更改,包括 23 次插入3 次删除
  1. 23 3
      app/src/main/java/eu/kanade/tachiyomi/source/LocalSource.kt

+ 23 - 3
app/src/main/java/eu/kanade/tachiyomi/source/LocalSource.kt

@@ -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)