From 0596adc5a1c092446700628c290b13b888fa175a Mon Sep 17 00:00:00 2001
From: funkyhippo <52957110+funkyhippo@users.noreply.github.com>
Date: Tue, 27 Aug 2019 15:36:27 -0700
Subject: [PATCH] Added support for new recommended sort API response. (#1419)

---
 src/en/guya/build.gradle                      |  2 +-
 .../tachiyomi/extension/en/guya/Guya.kt       | 26 ++++++++++++++-----
 2 files changed, 20 insertions(+), 8 deletions(-)

diff --git a/src/en/guya/build.gradle b/src/en/guya/build.gradle
index 2c6112b63..7a2f6a5d5 100644
--- a/src/en/guya/build.gradle
+++ b/src/en/guya/build.gradle
@@ -5,7 +5,7 @@ ext {
     appName = 'Tachiyomi: Guya'
     pkgNameSuffix = "en.guya"
     extClass = '.Guya'
-    extVersionCode = 5
+    extVersionCode = 6
     libVersion = '1.2'
 }
 
diff --git a/src/en/guya/src/eu/kanade/tachiyomi/extension/en/guya/Guya.kt b/src/en/guya/src/eu/kanade/tachiyomi/extension/en/guya/Guya.kt
index 62c65f77f..069f5bf03 100644
--- a/src/en/guya/src/eu/kanade/tachiyomi/extension/en/guya/Guya.kt
+++ b/src/en/guya/src/eu/kanade/tachiyomi/extension/en/guya/Guya.kt
@@ -12,6 +12,7 @@ import android.support.v7.preference.ListPreference
 import android.support.v7.preference.PreferenceScreen
 import eu.kanade.tachiyomi.extension.BuildConfig
 import okhttp3.*
+import org.json.JSONArray
 import org.json.JSONObject
 import rx.Observable
 import uy.kohesive.injekt.Injekt
@@ -191,6 +192,7 @@ open class Guya() : ConfigurableSource, HttpSource() {
     // ------------- Helpers and whatnot ---------------
 
     private fun parseChapterList(payload: String): List<SChapter> {
+        val SORT_KEY = "preferred_sort"
         val response = JSONObject(payload)
         val chapters = response.getJSONObject("chapters")
 
@@ -201,7 +203,11 @@ open class Guya() : ConfigurableSource, HttpSource() {
         while (iter.hasNext()) {
             val chapter = iter.next()
             val chapterObj = chapters.getJSONObject(chapter)
-            chapterList.add(parseChapterFromJson(chapterObj, chapter, response.getString("slug")))
+            var preferredSort = response.getJSONArray(SORT_KEY)
+            if (chapterObj.has(SORT_KEY)) {
+                preferredSort = chapterObj.getJSONArray(SORT_KEY)
+            }
+            chapterList.add(parseChapterFromJson(chapterObj, chapter, preferredSort, response.getString("slug")))
         }
 
         return chapterList.reversed()
@@ -235,11 +241,11 @@ open class Guya() : ConfigurableSource, HttpSource() {
         return manga
     }
 
-    private fun parseChapterFromJson(json: JSONObject, num: String, slug: String): SChapter {
+    private fun parseChapterFromJson(json: JSONObject, num: String, sort: JSONArray, slug: String): SChapter {
         val chapter = SChapter.create()
 
         // Get the scanlator info based on group ranking; do it first since we need it later
-        val firstGroupId = getBestScanlator(json.getJSONObject("groups"))
+        val firstGroupId = getBestScanlator(json.getJSONObject("groups"), sort)
         chapter.scanlator = Scanlators.getValueFromKey(firstGroupId)
         chapter.name = num + " - " + json.getString("title")
         chapter.chapter_number = num.toFloat()
@@ -263,13 +269,19 @@ open class Guya() : ConfigurableSource, HttpSource() {
         return pageArray
     }
 
-    private fun getBestScanlator(json: JSONObject): String {
+    private fun getBestScanlator(json: JSONObject, sort: JSONArray): String {
         val preferred = preferences.getString(SCANLATOR_PREFERENCE, null)
 
-        return if (preferred != null && json.has(preferred)) {
-            preferred
+        if (preferred != null && json.has(preferred)) {
+            return preferred
         } else {
-            json.keys().next()
+            for (i in 0 until sort.length()) {
+                if (json.has(sort.get(i).toString())) {
+                    return sort.get(i).toString()
+                }
+            }
+            // If all fails, fall-back to the next available key
+            return json.keys().next()
         }
     }