diff --git a/src/pt/betteranime/AndroidManifest.xml b/src/pt/betteranime/AndroidManifest.xml index 94339ee7a..c71bf9103 100644 --- a/src/pt/betteranime/AndroidManifest.xml +++ b/src/pt/betteranime/AndroidManifest.xml @@ -1,2 +1,24 @@ - + + + + + + + + + + + + + + + diff --git a/src/pt/betteranime/build.gradle b/src/pt/betteranime/build.gradle index d0952c558..c7d74e4d3 100644 --- a/src/pt/betteranime/build.gradle +++ b/src/pt/betteranime/build.gradle @@ -6,12 +6,19 @@ ext { extName = 'Better Anime' pkgNameSuffix = 'pt.betteranime' extClass = '.BetterAnime' - extVersionCode = 1 + extVersionCode = 2 libVersion = '12' } dependencies { compileOnly 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.2' + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" +} + +android { + kotlinOptions { + freeCompilerArgs += "-Xopt-in=kotlinx.serialization.ExperimentalSerializationApi" + } } apply from: "$rootDir/common.gradle" diff --git a/src/pt/betteranime/src/eu/kanade/tachiyomi/animeextension/pt/betteranime/BAUrlActivity.kt b/src/pt/betteranime/src/eu/kanade/tachiyomi/animeextension/pt/betteranime/BAUrlActivity.kt new file mode 100644 index 000000000..0f09cb976 --- /dev/null +++ b/src/pt/betteranime/src/eu/kanade/tachiyomi/animeextension/pt/betteranime/BAUrlActivity.kt @@ -0,0 +1,44 @@ +package eu.kanade.tachiyomi.animeextension.pt.betteranime + +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://betteranime.net/// intents + * and redirects them to the main Aniyomi process. + */ +class BAUrlActivity : Activity() { + + private val TAG = "BAUrlActivity" + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val pathSegments = intent?.data?.pathSegments + if (pathSegments != null && pathSegments.size > 1) { + val type = pathSegments[0] + val lang = pathSegments[1] + val item = pathSegments[2] + val searchQuery = "$type/$lang/$item" + val mainIntent = Intent().apply { + action = "eu.kanade.tachiyomi.ANIMESEARCH" + putExtra("query", "${BetterAnime.PREFIX_SEARCH_PATH}$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/betteranime/src/eu/kanade/tachiyomi/animeextension/pt/betteranime/BetterAnime.kt b/src/pt/betteranime/src/eu/kanade/tachiyomi/animeextension/pt/betteranime/BetterAnime.kt index e7bafb5ed..59ee603a7 100644 --- a/src/pt/betteranime/src/eu/kanade/tachiyomi/animeextension/pt/betteranime/BetterAnime.kt +++ b/src/pt/betteranime/src/eu/kanade/tachiyomi/animeextension/pt/betteranime/BetterAnime.kt @@ -139,12 +139,27 @@ class BetterAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() { } override fun fetchSearchAnime(page: Int, query: String, filters: AnimeFilterList): Observable { - val params = BAFilters.getSearchParameters(filters) - return client.newCall(searchAnimeRequest(page, query, params)) - .asObservableSuccess() - .map { response -> - searchAnimeParse(response) - } + return if (query.startsWith(PREFIX_SEARCH_PATH)) { + val path = query.removePrefix(PREFIX_SEARCH_PATH) + client.newCall(GET("$baseUrl/$path")) + .asObservableSuccess() + .map { response -> + searchAnimeByPathParse(response, path) + } + } else { + val params = BAFilters.getSearchParameters(filters) + client.newCall(searchAnimeRequest(page, query, params)) + .asObservableSuccess() + .map { response -> + searchAnimeParse(response) + } + } + } + + private fun searchAnimeByPathParse(response: Response, path: String): AnimesPage { + val details = animeDetailsParse(response) + details.url = "/$path" + return AnimesPage(listOf(details), false) } override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request = throw Exception("not used") @@ -310,7 +325,7 @@ class BetterAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() { private const val ACCEPT_LANGUAGE = "pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7" private const val PREFERRED_QUALITY = "preferred_quality" private val QUALITY_LIST = arrayOf("480p", "720p", "1080p") - + const val PREFIX_SEARCH_PATH = "path:" private var INITIAL_DATA: String = "" private var WIRE_TOKEN: String = "" }