From 9560a68fdc8ae15bd8deb2f89ebec80186349843 Mon Sep 17 00:00:00 2001
From: Logan B <einstein95@users.noreply.github.com>
Date: Fri, 29 Mar 2019 01:14:12 +1300
Subject: [PATCH] =?UTF-8?q?[mangarock]=20Add=20null=20check=20for=20author?=
 =?UTF-8?q?s,=20convert=20hardcoded=20JSON=20string=E2=80=A6=20(#977)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* [mangarock] Add null check for authors, convert hardcoded JSON strings to maps

* dammit
---
 src/en/mangarock/build.gradle                 |  6 +++-
 .../extension/en/mangarock/MangaRock.kt       | 33 +++++++++++--------
 2 files changed, 25 insertions(+), 14 deletions(-)

diff --git a/src/en/mangarock/build.gradle b/src/en/mangarock/build.gradle
index d5b1fb855..be5735081 100644
--- a/src/en/mangarock/build.gradle
+++ b/src/en/mangarock/build.gradle
@@ -5,8 +5,12 @@ ext {
     appName = 'Tachiyomi: Manga Rock'
     pkgNameSuffix = 'en.mangarock'
     extClass = '.MangaRock'
-    extVersionCode = 5
+    extVersionCode = 6
     libVersion = '1.0'
 }
 
+dependencies {
+    compileOnly 'com.google.code.gson:gson:2.8.2'
+}
+
 apply from: "$rootDir/common.gradle"
diff --git a/src/en/mangarock/src/eu/kanade/tachiyomi/extension/en/mangarock/MangaRock.kt b/src/en/mangarock/src/eu/kanade/tachiyomi/extension/en/mangarock/MangaRock.kt
index 42217c89e..8b4a59b50 100644
--- a/src/en/mangarock/src/eu/kanade/tachiyomi/extension/en/mangarock/MangaRock.kt
+++ b/src/en/mangarock/src/eu/kanade/tachiyomi/extension/en/mangarock/MangaRock.kt
@@ -1,5 +1,6 @@
 package eu.kanade.tachiyomi.extension.en.mangarock
 
+import com.google.gson.GsonBuilder
 import eu.kanade.tachiyomi.network.GET
 import eu.kanade.tachiyomi.network.POST
 import eu.kanade.tachiyomi.source.model.*
@@ -58,6 +59,7 @@ class MangaRock : HttpSource() {
 
     override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
         val jsonType = MediaType.parse("application/jsonType; charset=utf-8")
+        val gson = GsonBuilder().create()
 
         // Filter
         if (query.isBlank()) {
@@ -91,12 +93,12 @@ class MangaRock : HttpSource() {
                 }
             }
 
-            val body = RequestBody.create(jsonType, "{\"status\":\"$status\",\"genres\":{$genres},\"rank\":\"$rank\",\"order\":\"$orderBy\"}")
+            val body = RequestBody.create(jsonType, gson.toJson(mapOf("status" to status, "genres" to genres, "rank" to rank, "order" to orderBy)))
             return POST("$baseUrl/mrs_filter", headers, body)
         }
 
         // Regular search
-        val body = RequestBody.create(jsonType, "{\"type\":\"series\", \"keywords\":\"$query\"}")
+        val body = RequestBody.create(jsonType, gson.toJson(mapOf("type" to "series", "keywords" to query)))
         return POST("$baseUrl/mrs_search", headers, body)
     }
 
@@ -143,7 +145,7 @@ class MangaRock : HttpSource() {
     }
 
     private fun sortByRank(arr: List<JSONObject>): List<JSONObject> {
-        return arr.sortedBy({ it.getInt("rank") })
+        return arr.sortedBy { it.getInt("rank") }
     }
 
     override fun mangaDetailsParse(response: Response) = SManga.create().apply {
@@ -153,18 +155,23 @@ class MangaRock : HttpSource() {
         title = obj.getString("name")
         description = obj.getString("description")
 
-        val people = obj.getJSONArray("authors")
-        val authors = ArrayList<String>()
-        val artists = ArrayList<String>()
-        for (i in 0 until people.length()) {
-            val person = people.getJSONObject(i)
-            when (person.getString("role")) {
-                "art" -> artists.add(person.getString("name"))
-                "story" -> authors.add(person.getString("name"))
+        if (obj.isNull("authors")) {
+            artist = ""
+            author = ""
+        } else {
+            val people = obj.getJSONArray("authors")
+            val authors = ArrayList<String>()
+            val artists = ArrayList<String>()
+            for (i in 0 until people.length()) {
+                val person = people.getJSONObject(i)
+                when (person.getString("role")) {
+                    "art" -> artists.add(person.getString("name"))
+                    "story" -> authors.add(person.getString("name"))
+                }
             }
+            artist = artists.sorted().joinToString(", ")
+            author = authors.sorted().joinToString(", ")
         }
-        artist = artists.sorted().joinToString(", ")
-        author = authors.sorted().joinToString(", ")
 
         val categories = obj.getJSONArray("rich_categories")
         val genres = ArrayList<String>(categories.length())