diff --git a/src/pt/animeq/AndroidManifest.xml b/src/pt/animeq/AndroidManifest.xml
new file mode 100644
index 00000000..19f3f557
--- /dev/null
+++ b/src/pt/animeq/AndroidManifest.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pt/animeq/build.gradle b/src/pt/animeq/build.gradle
index 4c137754..99c77ee6 100644
--- a/src/pt/animeq/build.gradle
+++ b/src/pt/animeq/build.gradle
@@ -1,7 +1,7 @@
ext {
extName = 'AnimeQ'
extClass = '.AnimeQ'
- extVersionCode = 1
+ extVersionCode = 2
isNsfw = true
}
diff --git a/src/pt/animeq/src/eu/kanade/tachiyomi/animeextension/pt/animeq/AnimeQ.kt b/src/pt/animeq/src/eu/kanade/tachiyomi/animeextension/pt/animeq/AnimeQ.kt
index 600760c6..3e040747 100644
--- a/src/pt/animeq/src/eu/kanade/tachiyomi/animeextension/pt/animeq/AnimeQ.kt
+++ b/src/pt/animeq/src/eu/kanade/tachiyomi/animeextension/pt/animeq/AnimeQ.kt
@@ -6,12 +6,14 @@ import androidx.preference.ListPreference
import androidx.preference.PreferenceScreen
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
import eu.kanade.tachiyomi.animesource.model.AnimeFilterList
+import eu.kanade.tachiyomi.animesource.model.AnimesPage
import eu.kanade.tachiyomi.animesource.model.SAnime
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.lib.bloggerextractor.BloggerExtractor
import eu.kanade.tachiyomi.network.GET
+import eu.kanade.tachiyomi.network.awaitSuccess
import eu.kanade.tachiyomi.util.asJsoup
import eu.kanade.tachiyomi.util.parallelCatchingFlatMapBlocking
import okhttp3.HttpUrl.Companion.toHttpUrl
@@ -67,6 +69,25 @@ class AnimeQ : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override fun latestUpdatesNextPageSelector() = "div.ContainerEps a.next.page-numbers"
// =============================== 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 url = "$baseUrl/page".toHttpUrl().newBuilder()
.addPathSegment(page.toString())
@@ -249,6 +270,8 @@ class AnimeQ : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
}
companion object {
+ const val PREFIX_SEARCH = "id:"
+
private val REGEX_QUALITY by lazy { Regex("""(\d+)p""") }
private val REGEX_NUMBER by lazy { Regex("""\d+""") }
diff --git a/src/pt/animeq/src/eu/kanade/tachiyomi/animeextension/pt/animeq/AnimeQUrlActivity.kt b/src/pt/animeq/src/eu/kanade/tachiyomi/animeextension/pt/animeq/AnimeQUrlActivity.kt
new file mode 100644
index 00000000..72f016f0
--- /dev/null
+++ b/src/pt/animeq/src/eu/kanade/tachiyomi/animeextension/pt/animeq/AnimeQUrlActivity.kt
@@ -0,0 +1,42 @@
+package eu.kanade.tachiyomi.animeextension.pt.animeq
+
+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://animeq.blog/ intents
+ * and redirects them to the main Aniyomi process.
+ */
+class AnimeQUrlActivity : Activity() {
+
+ private val tag = javaClass.simpleName
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ val pathSegments = intent?.data?.pathSegments
+ if (pathSegments != null && pathSegments.size > 0) {
+ val searchQuery = pathSegments[0]
+
+ val mainIntent = Intent().apply {
+ action = "eu.kanade.tachiyomi.ANIMESEARCH"
+ putExtra("query", "${AnimeQ.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)
+ }
+}