diff --git a/src/pt/animeszone/AndroidManifest.xml b/src/pt/animeszone/AndroidManifest.xml
new file mode 100644
index 00000000..bc031e78
--- /dev/null
+++ b/src/pt/animeszone/AndroidManifest.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pt/animeszone/build.gradle b/src/pt/animeszone/build.gradle
index 1059e27d..6b089449 100644
--- a/src/pt/animeszone/build.gradle
+++ b/src/pt/animeszone/build.gradle
@@ -1,7 +1,7 @@
ext {
extName = 'AnimesZone'
extClass = '.AnimesZone'
- extVersionCode = 7
+ extVersionCode = 8
isNsfw = true
}
diff --git a/src/pt/animeszone/src/eu/kanade/tachiyomi/animeextension/pt/animeszone/AZUrlActivity.kt b/src/pt/animeszone/src/eu/kanade/tachiyomi/animeextension/pt/animeszone/AZUrlActivity.kt
new file mode 100644
index 00000000..e701aadf
--- /dev/null
+++ b/src/pt/animeszone/src/eu/kanade/tachiyomi/animeextension/pt/animeszone/AZUrlActivity.kt
@@ -0,0 +1,42 @@
+package eu.kanade.tachiyomi.animeextension.pt.animeszone
+
+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://animeszone.net// intents
+ * and redirects them to the main Aniyomi process.
+ */
+class AZUrlActivity : Activity() {
+
+ private val tag = javaClass.simpleName
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ val pathSegments = intent?.data?.pathSegments
+ if (pathSegments != null && pathSegments.size > 1) {
+ val searchQuery = "${pathSegments[0]}/${pathSegments[1]}"
+
+ val mainIntent = Intent().apply {
+ action = "eu.kanade.tachiyomi.ANIMESEARCH"
+ putExtra("query", "${AnimesZone.PREFIX_SEARCH}$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/animeszone/src/eu/kanade/tachiyomi/animeextension/pt/animeszone/AnimesZone.kt b/src/pt/animeszone/src/eu/kanade/tachiyomi/animeextension/pt/animeszone/AnimesZone.kt
index 2b8eac78..04f40496 100644
--- a/src/pt/animeszone/src/eu/kanade/tachiyomi/animeextension/pt/animeszone/AnimesZone.kt
+++ b/src/pt/animeszone/src/eu/kanade/tachiyomi/animeextension/pt/animeszone/AnimesZone.kt
@@ -16,6 +16,7 @@ import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.network.POST
+import eu.kanade.tachiyomi.network.awaitSuccess
import eu.kanade.tachiyomi.util.asJsoup
import eu.kanade.tachiyomi.util.parseAs
import kotlinx.serialization.Serializable
@@ -86,6 +87,26 @@ class AnimesZone : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
}
// =============================== Search ===============================
+ override suspend fun getSearchAnime(page: Int, query: String, filters: AnimeFilterList): AnimesPage {
+ return if (query.startsWith(PREFIX_SEARCH)) {
+ val path = query.removePrefix(PREFIX_SEARCH)
+ client.newCall(GET("$baseUrl/$path"))
+ .awaitSuccess()
+ .use(::searchAnimeByIdParse)
+ } else {
+ super.getSearchAnime(page, query, filters)
+ }
+ }
+
+ private fun searchAnimeByIdParse(response: Response): AnimesPage {
+ val details = animeDetailsParse(response).apply {
+ setUrlWithoutDomain(response.request.url.toString())
+ initialized = true
+ }
+
+ return AnimesPage(listOf(details), false)
+ }
+
override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request {
val params = AnimesZoneFilters.getSearchParameters(filters)
@@ -405,6 +426,8 @@ class AnimesZone : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
}
companion object {
+ const val PREFIX_SEARCH = "id:"
+
private val EPISODE_REGEX by lazy { Regex("""Episódio ?\d+\.?\d* ?""") }
private const val PREF_QUALITY_KEY = "preferred_quality"