From eefbc2896b870147f3a6390ddfd2231e96b4a152 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thiago=20Fran=C3=A7a=20da=20Silva?= Date: Thu, 23 Apr 2020 23:13:49 -0300 Subject: [PATCH] UnionMangas - Implement Url Intent, fix url (#2787) UnionMangas - Implement Url Intent and Fix Base Url --- src/pt/unionmangas/AndroidManifest.xml | 19 ++++++++++ src/pt/unionmangas/build.gradle | 2 +- .../extension/pt/unionmangas/UnionMangas.kt | 27 ++++++++++++- .../pt/unionmangas/UnionMangasUrlActivity.kt | 38 +++++++++++++++++++ 4 files changed, 83 insertions(+), 3 deletions(-) create mode 100644 src/pt/unionmangas/AndroidManifest.xml create mode 100644 src/pt/unionmangas/src/eu/kanade/tachiyomi/extension/pt/unionmangas/UnionMangasUrlActivity.kt diff --git a/src/pt/unionmangas/AndroidManifest.xml b/src/pt/unionmangas/AndroidManifest.xml new file mode 100644 index 000000000..46a8ae975 --- /dev/null +++ b/src/pt/unionmangas/AndroidManifest.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + diff --git a/src/pt/unionmangas/build.gradle b/src/pt/unionmangas/build.gradle index 5d8bb8937..bf9cb0692 100644 --- a/src/pt/unionmangas/build.gradle +++ b/src/pt/unionmangas/build.gradle @@ -5,7 +5,7 @@ ext { appName = 'Tachiyomi: Union Mangás' pkgNameSuffix = 'pt.unionmangas' extClass = '.UnionMangas' - extVersionCode = 12 + extVersionCode = 13 libVersion = '1.2' } diff --git a/src/pt/unionmangas/src/eu/kanade/tachiyomi/extension/pt/unionmangas/UnionMangas.kt b/src/pt/unionmangas/src/eu/kanade/tachiyomi/extension/pt/unionmangas/UnionMangas.kt index 6aaa05600..1183d5659 100644 --- a/src/pt/unionmangas/src/eu/kanade/tachiyomi/extension/pt/unionmangas/UnionMangas.kt +++ b/src/pt/unionmangas/src/eu/kanade/tachiyomi/extension/pt/unionmangas/UnionMangas.kt @@ -7,6 +7,7 @@ import com.google.gson.JsonObject import com.google.gson.JsonParser import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.POST +import eu.kanade.tachiyomi.network.asObservableSuccess import eu.kanade.tachiyomi.source.model.* import eu.kanade.tachiyomi.source.online.ParsedHttpSource import okhttp3.FormBody @@ -17,6 +18,7 @@ import okhttp3.Request import okhttp3.Response import org.jsoup.nodes.Document import org.jsoup.nodes.Element +import rx.Observable import java.text.ParseException import java.text.SimpleDateFormat import java.util.Locale @@ -29,7 +31,7 @@ class UnionMangas : ParsedHttpSource() { override val name = "Union Mangás" - override val baseUrl = "https://unionmangas.top" + override val baseUrl = "https://unionleitor.top" override val lang = "pt-BR" @@ -46,7 +48,7 @@ class UnionMangas : ParsedHttpSource() { override fun headersBuilder(): Headers.Builder = Headers.Builder() .add("User-Agent", USER_AGENT) .add("Origin", baseUrl) - .add("Referer", "$baseUrl/ax") + .add("Referer", "$baseUrl/xz") override fun popularMangaRequest(page: Int): Request { val newHeaders = headersBuilder() @@ -181,6 +183,25 @@ class UnionMangas : ParsedHttpSource() { override fun searchMangaNextPageSelector() = throw Exception("This method should not be called!") + private fun searchMangaByIdRequest(id: String) = GET("$baseUrl/perfil-manga/$id", headers) + + private fun searchMangaByIdParse(response: Response, id: String): MangasPage { + val details = mangaDetailsParse(response) + details.url = "/perfil-manga/$id" + return MangasPage(listOf(details), false) + } + + override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable { + return if (query.startsWith(PREFIX_ID_SEARCH)) { + val id = query.removePrefix(PREFIX_ID_SEARCH) + client.newCall(searchMangaByIdRequest(id)) + .asObservableSuccess() + .map { response -> searchMangaByIdParse(response, id) } + } else { + super.fetchSearchManga(page, query, filters) + } + } + private fun SimpleDateFormat.tryParseTime(date: String) : Long { return try { parse(date).time @@ -200,6 +221,8 @@ class UnionMangas : ParsedHttpSource() { private val JSON_PARSER by lazy { JsonParser() } + const val PREFIX_ID_SEARCH = "id:" + private val DATE_FORMATTER by lazy { SimpleDateFormat("(dd/MM/yyyy)", Locale.ENGLISH) } } } diff --git a/src/pt/unionmangas/src/eu/kanade/tachiyomi/extension/pt/unionmangas/UnionMangasUrlActivity.kt b/src/pt/unionmangas/src/eu/kanade/tachiyomi/extension/pt/unionmangas/UnionMangasUrlActivity.kt new file mode 100644 index 000000000..4c5cd93ca --- /dev/null +++ b/src/pt/unionmangas/src/eu/kanade/tachiyomi/extension/pt/unionmangas/UnionMangasUrlActivity.kt @@ -0,0 +1,38 @@ +package eu.kanade.tachiyomi.extension.pt.unionmangas + +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://unionleitor.top/perfil-manga/xxxxxx intents and redirects them to + * the main Tachiyomi process. + */ +class UnionMangasUrlActivity : Activity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val pathSegments = intent?.data?.pathSegments + if (pathSegments != null && pathSegments.size > 1) { + val id = pathSegments[1] + val mainIntent = Intent().apply { + action = "eu.kanade.tachiyomi.SEARCH" + putExtra("query", "${UnionMangas.PREFIX_ID_SEARCH}$id") + putExtra("filter", packageName) + } + + try { + startActivity(mainIntent) + } catch (e: ActivityNotFoundException) { + Log.e("UnionMangasUrl", e.toString()) + } + } else { + Log.e("UnionMangasUrl", "could not parse uri from intent $intent") + } + + finish() + exitProcess(0) + } +}