From 75695a9ee2e94baf98c5812e17034a6229b2fb94 Mon Sep 17 00:00:00 2001 From: Pavka Date: Mon, 23 Nov 2020 16:18:04 +0300 Subject: [PATCH] [RU] Libmanga. Fix latest page. Add intent to mangalib.me (#4923) * [RU] Libmanga. Fix latest page. Add intent to mangalib.me * [Ru]Mangalib. Fix manga status * [Ru]Mangalib. More concrete intent Co-authored-by: pavkazzz --- src/ru/libmanga/AndroidManifest.xml | 23 ++++++++++ src/ru/libmanga/build.gradle | 2 +- .../extension/ru/libmanga/LibManga.kt | 46 +++++++++++++++---- .../extension/ru/libmanga/LibMangaActivity.kt | 41 +++++++++++++++++ 4 files changed, 102 insertions(+), 10 deletions(-) create mode 100644 src/ru/libmanga/AndroidManifest.xml create mode 100644 src/ru/libmanga/src/eu/kanade/tachiyomi/extension/ru/libmanga/LibMangaActivity.kt diff --git a/src/ru/libmanga/AndroidManifest.xml b/src/ru/libmanga/AndroidManifest.xml new file mode 100644 index 000000000..45928ba18 --- /dev/null +++ b/src/ru/libmanga/AndroidManifest.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + diff --git a/src/ru/libmanga/build.gradle b/src/ru/libmanga/build.gradle index 062cf3e43..0e8eb4896 100644 --- a/src/ru/libmanga/build.gradle +++ b/src/ru/libmanga/build.gradle @@ -5,7 +5,7 @@ ext { extName = 'MangaLib' pkgNameSuffix = 'ru.libmanga' extClass = '.LibManga' - extVersionCode = 23 + extVersionCode = 24 libVersion = '1.2' } diff --git a/src/ru/libmanga/src/eu/kanade/tachiyomi/extension/ru/libmanga/LibManga.kt b/src/ru/libmanga/src/eu/kanade/tachiyomi/extension/ru/libmanga/LibManga.kt index f71dcadc2..9e1043df5 100644 --- a/src/ru/libmanga/src/eu/kanade/tachiyomi/extension/ru/libmanga/LibManga.kt +++ b/src/ru/libmanga/src/eu/kanade/tachiyomi/extension/ru/libmanga/LibManga.kt @@ -110,7 +110,7 @@ class LibManga : ConfigurableSource, HttpSource() { override fun latestUpdatesRequest(page: Int) = GET(baseUrl, headers) - private val latestUpdatesSelector = "div.updates__left" + private val latestUpdatesSelector = "div.updates__item" override fun latestUpdatesParse(response: Response): MangasPage { val elements = response.asJsoup().select(latestUpdatesSelector) @@ -121,13 +121,16 @@ class LibManga : ConfigurableSource, HttpSource() { } private fun latestUpdatesFromElement(element: Element): SManga { - val link = element.select("a").first() - val img = link.select("img").first() val manga = SManga.create() - manga.thumbnail_url = baseUrl + img.attr("data-src").substringAfter(baseUrl) - .replace("cover_thumb", "cover_250x350") - manga.setUrlWithoutDomain(link.attr("href")) - manga.title = img.attr("alt") + element.select("div.cover").first().let { img -> + manga.thumbnail_url = baseUrl + img.attr("data-src").substringAfter(baseUrl) + .replace("cover_thumb", "cover_250x350") + } + + element.select("a").first().let { link -> + manga.setUrlWithoutDomain(link.attr("href")) + manga.title = element.select("h4").first().text() + } return manga } @@ -209,10 +212,11 @@ class LibManga : ConfigurableSource, HttpSource() { manga.author = body.select(".info-list__row:nth-child(2) > a").text() manga.artist = body.select(".info-list__row:nth-child(3) > a").text() manga.status = when ( - body.select(".info-list__row:has(strong:contains(Перевод))") + body.select(".info-list__row:has(strong:contains(перевод))") .first() - .select("span.m-label") + .select("span") .text() + .toLowerCase() ) { "продолжается" -> SManga.ONGOING "завершен" -> SManga.COMPLETED @@ -303,6 +307,29 @@ class LibManga : ConfigurableSource, HttpSource() { override fun imageUrlParse(response: Response): String = "" + private fun searchMangaByIdRequest(id: String): Request { + return GET("$baseUrl/$id", headers) + } + + override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable { + return if (query.startsWith(PREFIX_SLUG_SEARCH)) { + val realQuery = query.removePrefix(PREFIX_SLUG_SEARCH) + client.newCall(searchMangaByIdRequest(realQuery)) + .asObservableSuccess() + .map { response -> + val details = mangaDetailsParse(response) + details.url = "/$realQuery" + MangasPage(listOf(details), false) + } + } else { + client.newCall(searchMangaRequest(page, query, filters)) + .asObservableSuccess() + .map { response -> + searchMangaParse(response) + } + } + } + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { if (csrfToken.isEmpty()) { val tokenResponse = client.newCall(popularMangaRequest(page)).execute() @@ -477,5 +504,6 @@ class LibManga : ConfigurableSource, HttpSource() { companion object { private const val SERVER_PREF_Title = "Сервер изображений" private const val SERVER_PREF = "MangaLibImageServer" + const val PREFIX_SLUG_SEARCH = "slug:" } } diff --git a/src/ru/libmanga/src/eu/kanade/tachiyomi/extension/ru/libmanga/LibMangaActivity.kt b/src/ru/libmanga/src/eu/kanade/tachiyomi/extension/ru/libmanga/LibMangaActivity.kt new file mode 100644 index 000000000..c9a5f6bd5 --- /dev/null +++ b/src/ru/libmanga/src/eu/kanade/tachiyomi/extension/ru/libmanga/LibMangaActivity.kt @@ -0,0 +1,41 @@ +package eu.kanade.tachiyomi.extension.ru.libmanga + +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://mangalib.me/xxx intents and redirects them to + * the main tachiyomi process. The idea is to not install the intent filter unless + * you have this extension installed, but still let the main tachiyomi app control + * things. + */ +class LibMangaActivity : Activity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val pathSegments = intent?.data?.pathSegments + if (pathSegments != null && pathSegments.size > 0) { + val titleid = pathSegments[0] + val mainIntent = Intent().apply { + action = "eu.kanade.tachiyomi.SEARCH" + putExtra("query", "${LibManga.PREFIX_SLUG_SEARCH}$titleid") + putExtra("filter", packageName) + } + + try { + startActivity(mainIntent) + } catch (e: ActivityNotFoundException) { + Log.e("LibMangaActivity", e.toString()) + } + } else { + Log.e("LibMangaActivity", "could not parse uri from intent $intent") + } + + finish() + exitProcess(0) + } +}