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 = ""
}