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