From 51ff911e0e21392eb584f1773070f5809a75e186 Mon Sep 17 00:00:00 2001
From: Alessandro Jean <alessandrojean@gmail.com>
Date: Tue, 17 Aug 2021 22:17:46 -0300
Subject: [PATCH] Escape entities in Bato.to (#8613)

---
 src/all/batoto/build.gradle                   |  2 +-
 .../tachiyomi/extension/all/batoto/BatoTo.kt  | 22 +++++++------------
 2 files changed, 9 insertions(+), 15 deletions(-)

diff --git a/src/all/batoto/build.gradle b/src/all/batoto/build.gradle
index 1017726d3..dd5e8ef39 100644
--- a/src/all/batoto/build.gradle
+++ b/src/all/batoto/build.gradle
@@ -6,7 +6,7 @@ ext {
     extName = 'Bato.to'
     pkgNameSuffix = 'all.batoto'
     extClass = '.BatoToFactory'
-    extVersionCode = 13
+    extVersionCode = 14
     libVersion = '1.2'
     containsNsfw = true
 }
diff --git a/src/all/batoto/src/eu/kanade/tachiyomi/extension/all/batoto/BatoTo.kt b/src/all/batoto/src/eu/kanade/tachiyomi/extension/all/batoto/BatoTo.kt
index e87613a10..31279b7b8 100644
--- a/src/all/batoto/src/eu/kanade/tachiyomi/extension/all/batoto/BatoTo.kt
+++ b/src/all/batoto/src/eu/kanade/tachiyomi/extension/all/batoto/BatoTo.kt
@@ -20,6 +20,7 @@ import okhttp3.Request
 import okhttp3.Response
 import org.jsoup.nodes.Document
 import org.jsoup.nodes.Element
+import org.jsoup.parser.Parser
 import rx.Observable
 import uy.kohesive.injekt.injectLazy
 import java.util.Calendar
@@ -57,7 +58,7 @@ open class BatoTo(
         val item = element.select("a.item-cover")
         val imgurl = item.select("img").attr("abs:src")
         manga.setUrlWithoutDomain(item.attr("href"))
-        manga.title = element.select("a.item-title").text()
+        manga.title = element.select("a.item-title").text().removeEntities()
         manga.thumbnail_url = imgurl
         return manga
     }
@@ -149,7 +150,7 @@ open class BatoTo(
         val document = response.asJsoup()
         val infoElement = document.select("div#mainer div.container-fluid")
         val manga = SManga.create()
-        manga.title = infoElement.select("h3").text()
+        manga.title = infoElement.select("h3").text().removeEntities()
         manga.thumbnail_url = document.select("div.attr-cover img")
             .attr("abs:src")
         manga.url = infoElement.select("h3 a").attr("abs:href")
@@ -157,11 +158,9 @@ open class BatoTo(
     }
 
     private fun queryParse(response: Response): MangasPage {
-        val mangas = mutableListOf<SManga>()
         val document = response.asJsoup()
-        document.select(latestUpdatesSelector()).forEach { element ->
-            mangas.add(latestUpdatesFromElement(element))
-        }
+        val mangas = document.select(latestUpdatesSelector())
+            .map { element -> latestUpdatesFromElement(element) }
         val nextPage = document.select(latestUpdatesNextPageSelector()).first() != null
         return MangasPage(mangas, nextPage)
     }
@@ -181,15 +180,8 @@ open class BatoTo(
     override fun mangaDetailsParse(document: Document): SManga {
         val infoElement = document.select("div#mainer div.container-fluid")
         val manga = SManga.create()
-        val genres = mutableListOf<String>()
         val status = infoElement.select("div.attr-item:contains(status) span").text()
-        infoElement.select("div.attr-item:contains(genres) span").text().split(
-            " / "
-                .toRegex()
-        ).forEach { element ->
-            genres.add(element)
-        }
-        manga.title = infoElement.select("h3").text()
+        manga.title = infoElement.select("h3").text().removeEntities()
         manga.author = infoElement.select("div.attr-item:contains(author) a:first-child").text()
         manga.artist = infoElement.select("div.attr-item:contains(author) a:last-child").text()
         manga.status = parseStatus(status)
@@ -337,6 +329,8 @@ open class BatoTo(
 
     override fun imageUrlParse(document: Document): String = throw UnsupportedOperationException("Not used")
 
+    private fun String.removeEntities(): String = Parser.unescapeEntities(this, true)
+
     override fun getFilterList() = FilterList(
         // LetterFilter(),
         Filter.Header("NOTE: Ignored if using text search!"),