diff --git a/src/pt/goyabu/AndroidManifest.xml b/src/pt/goyabu/AndroidManifest.xml
index 94339ee7a..779ad7078 100644
--- a/src/pt/goyabu/AndroidManifest.xml
+++ b/src/pt/goyabu/AndroidManifest.xml
@@ -1,2 +1,24 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pt/goyabu/build.gradle b/src/pt/goyabu/build.gradle
index 8f12c5f40..b53306aa2 100644
--- a/src/pt/goyabu/build.gradle
+++ b/src/pt/goyabu/build.gradle
@@ -6,7 +6,7 @@ ext {
extName = 'Goyabu'
pkgNameSuffix = 'pt.goyabu'
extClass = '.Goyabu'
- extVersionCode = 2
+ extVersionCode = 3
libVersion = '13'
}
diff --git a/src/pt/goyabu/src/eu/kanade/tachiyomi/animeextension/pt/goyabu/GYConstants.kt b/src/pt/goyabu/src/eu/kanade/tachiyomi/animeextension/pt/goyabu/GYConstants.kt
index d05b96578..b7d5d5ca0 100644
--- a/src/pt/goyabu/src/eu/kanade/tachiyomi/animeextension/pt/goyabu/GYConstants.kt
+++ b/src/pt/goyabu/src/eu/kanade/tachiyomi/animeextension/pt/goyabu/GYConstants.kt
@@ -2,10 +2,9 @@ package eu.kanade.tachiyomi.animeextension.pt.goyabu
object GYConstants {
const val ACCEPT_LANGUAGE = "pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7"
- const val USER_AGENT = "Mozilla/5.0 (Linux; Android 10; SM-A307GT Build/QP1A.190711.020;) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/81.0.4044.138 Mobile Safari/537.36"
+ const val USER_AGENT = "Mozilla/5.0 (Linux; Android 10; SM-A307GT Build/QP1A.190711.020) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/103.0.5060.71 Mobile Safari/537.36"
const val PREFERRED_QUALITY = "preferred_quality"
- const val PREFERRED_PLAYER = "preferred_player"
+ const val PREFIX_SEARCH_SLUG = "slug:"
val QUALITY_LIST = arrayOf("SD", "HD")
- val PLAYER_NAMES = arrayOf("Player 1", "Player 2")
val PLAYER_REGEX = Regex("""label: "(\w+)",.*file: "(.*?)"""")
}
diff --git a/src/pt/goyabu/src/eu/kanade/tachiyomi/animeextension/pt/goyabu/GYUrlActivity.kt b/src/pt/goyabu/src/eu/kanade/tachiyomi/animeextension/pt/goyabu/GYUrlActivity.kt
new file mode 100644
index 000000000..c52af8c71
--- /dev/null
+++ b/src/pt/goyabu/src/eu/kanade/tachiyomi/animeextension/pt/goyabu/GYUrlActivity.kt
@@ -0,0 +1,42 @@
+package eu.kanade.tachiyomi.animeextension.pt.goyabu
+
+import android.app.Activity
+import android.content.ActivityNotFoundException
+import android.content.Intent
+import android.os.Bundle
+import android.util.Log
+import kotlin.system.exitProcess
+
+/**
+ * Springboard that accepts https://goyabu.com/assistir/ intents
+ * and redirects them to the main Aniyomi process.
+ */
+class GYUrlActivity : Activity() {
+
+ private val TAG = "GYUrlActivity"
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ val pathSegments = intent?.data?.pathSegments
+ if (pathSegments != null && pathSegments.size > 1) {
+ val slug = pathSegments[1]
+ val searchQuery = GYConstants.PREFIX_SEARCH_SLUG + slug
+ val mainIntent = Intent().apply {
+ action = "eu.kanade.tachiyomi.ANIMESEARCH"
+ putExtra("query", searchQuery)
+ putExtra("filter", packageName)
+ }
+
+ try {
+ startActivity(mainIntent)
+ } catch (e: ActivityNotFoundException) {
+ Log.e(TAG, e.toString())
+ }
+ } else {
+ Log.e(TAG, "could not parse uri from intent $intent")
+ }
+
+ finish()
+ exitProcess(0)
+ }
+}
diff --git a/src/pt/goyabu/src/eu/kanade/tachiyomi/animeextension/pt/goyabu/Goyabu.kt b/src/pt/goyabu/src/eu/kanade/tachiyomi/animeextension/pt/goyabu/Goyabu.kt
index 156f922f5..f98d49895 100644
--- a/src/pt/goyabu/src/eu/kanade/tachiyomi/animeextension/pt/goyabu/Goyabu.kt
+++ b/src/pt/goyabu/src/eu/kanade/tachiyomi/animeextension/pt/goyabu/Goyabu.kt
@@ -6,7 +6,6 @@ import androidx.preference.ListPreference
import androidx.preference.PreferenceScreen
import eu.kanade.tachiyomi.animeextension.pt.goyabu.GYFilters.applyFilterParams
import eu.kanade.tachiyomi.animeextension.pt.goyabu.extractors.PlayerOneExtractor
-import eu.kanade.tachiyomi.animeextension.pt.goyabu.extractors.PlayerTwoExtractor
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
import eu.kanade.tachiyomi.animesource.model.AnimesPage
@@ -15,6 +14,7 @@ import eu.kanade.tachiyomi.animesource.model.SEpisode
import eu.kanade.tachiyomi.animesource.model.Video
import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
import eu.kanade.tachiyomi.network.GET
+import eu.kanade.tachiyomi.network.asObservableSuccess
import eu.kanade.tachiyomi.util.asJsoup
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.json.Json
@@ -28,6 +28,9 @@ import rx.Observable
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import java.lang.Exception
+import java.text.ParseException
+import java.text.SimpleDateFormat
+import java.util.Locale
class Goyabu : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
@@ -56,7 +59,10 @@ class Goyabu : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
.add("Referer", baseUrl)
// ============================== Popular ===============================
- override fun popularAnimeSelector(): String = "div.item > div.anime-episode"
+ private fun popularAnimeContainerSelector(): String = "div.index-size > div.episodes-container"
+
+ override fun popularAnimeSelector(): String = "div.anime-episode"
+
override fun popularAnimeRequest(page: Int): Request = GET(baseUrl)
override fun popularAnimeFromElement(element: Element): SAnime {
@@ -71,7 +77,7 @@ class Goyabu : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override fun popularAnimeParse(response: Response): AnimesPage {
val document = response.asJsoup()
- val content = document.select("div.episodes-container").get(2)
+ val content = document.selectFirst(popularAnimeContainerSelector())
val animes = content.select(popularAnimeSelector()).map { element ->
popularAnimeFromElement(element)
}
@@ -79,7 +85,7 @@ class Goyabu : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
}
// ============================== Episodes ==============================
- override fun episodeListSelector(): String = "div.episodes-container > div.anime-episode"
+ override fun episodeListSelector(): String = "div.episodes-container > div.row > a"
private fun getAllEps(response: Response): List {
val epList = mutableListOf()
@@ -100,17 +106,20 @@ class Goyabu : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
}
override fun episodeListParse(response: Response): List {
- return getAllEps(response).reversed()
+ return getAllEps(response)
}
override fun episodeFromElement(element: Element): SEpisode {
val episode = SEpisode.create()
-
- episode.setUrlWithoutDomain(element.selectFirst("a").attr("href"))
- val epName = element.selectFirst("h3").text().substringAfter("– ")
- episode.name = epName
+ val info_div = element.selectFirst("div.chaps-infs")
+ episode.setUrlWithoutDomain(element.attr("href"))
+ val epName = info_div.ownText()
+ episode.name = epName.substringAfter("– ")
+ episode.date_upload = info_div.selectFirst("small").ownText().toDate()
episode.episode_number = try {
- epName.substringAfter(" ").substringBefore(" ").toFloat()
+ epName.substringAfter("#")
+ .substringBefore(" ")
+ .toFloat()
} catch (e: NumberFormatException) { 0F }
return episode
}
@@ -119,16 +128,21 @@ class Goyabu : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override fun videoListParse(response: Response): List