Manhwa latino: (#9848)

* First commit Mahnwa-Latino Extension.

* manhwa-latino: Implementing find function

TODO: only works with text, filter not implemented yet

* manhwa-latino Add Parser to finde the information of Manhwa-Latino

The parser 'ManhwaLatinoSiteParser.kt' make the whole magic to find the
information of the Website.

Mudularize The code and adding documentation

* manhwa-latino: Adding Logos der Extension

TODO: I am not to happy, i will check it later.

* manhwa-latino: Adding Tags to Genre Combobox

* manhwa-latino: Adding Headers to prevent error 404

The headers are necesary to prevent error 403 by downloading images.

* manhwa-latino: Tags addded into Manga Description Page

Status from Manga readed from Tags

* manhwa-latino: Modularize Code

* manhwa-latino: Adding Uploaddate for Chapters

* manhwa-latino: Bug to get Chapter Number fixed

* manhwa-latino: Logo 0.2

* manhwa-latino: Versionb 1.2.10

Adding Comments to ManhwaLatinoSiteParser

* manhwa-latino: Remove logo_model directory

* manhwa-latino: Show Seconds after Release a new Chapter

* manhwa-latino: Fix for Cloudflare

* manhwa-latino: Try to fix Cloudflare ByPass

Adding isNsfw to build.gradle

* manhwa-latino: Update from parser after website update

* manhwa-latino: Deactivate lastest manga and new Client

The new website from Manhwa-Latino doesnt show lastest mangas.

* manhwa-latino: Adding Manifest to load url-adress

The extesion will bi able to open and find mangas with the url.
TODO: first version. NOT READY YET.

* manhwa-latino: Fix to find Manga Status information

* Manhwa-Latino: The Extension can open a Link

Now the extension can recognize a link from Manhwa-Latino and
show the manga from the link in the app.

* Manhwa-Latino: Modularize Code and Activity for Url added

* Manhwa-Latino: Add Constant-File.

This file contain all contants for this extension.

Co-authored-by: Luis Beroiza <luisalberto.beroizaosses@intern.osp-dd.de>
Co-authored-by: AlberyKous <extreme_rvd@hotmail.com>
This commit is contained in:
Luis Alberto 2021-11-20 14:44:48 +01:00 committed by GitHub
parent 726813f019
commit 33088997db
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 264 additions and 99 deletions

View File

@ -1,2 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest package="eu.kanade.tachiyomi.extension" />
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="eu.kanade.tachiyomi.extension">
<application>
<activity
android:name=".es.manhwalatino.ManhwaLatinoUrlActivity"
android:excludeFromRecents="true"
android:exported="true"
android:theme="@android:style/Theme.NoDisplay">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="manhwa-latino.com"
android:pathPattern="/..*/..*"
android:scheme="https" />
</intent-filter>
</activity>
</application>
</manifest>

View File

@ -5,8 +5,8 @@ ext {
extName = 'Manhwa-Latino'
pkgNameSuffix = 'es.manhwalatino'
extClass = '.ManhwaLatino'
extVersionCode = 11
containsNsfw = true
extVersionCode = 14
isNsfw = true
}
apply from: "$rootDir/common.gradle"

View File

@ -0,0 +1,39 @@
package eu.kanade.tachiyomi.extension.es.manhwalatino
object MLConstants {
const val PREFIX_MANGA_ID_SEARCH = "id:"
const val searchMangaNextPageSelector = "link[rel=next]"
const val latestUpdatesSelector = "div.slider__item"
const val searchMangaSelector = "div.page-item-detail.manga"
const val popularMangaNextPageSelector = "a.nextpostslink"
const val latestUpdatesNextPageSelector = "div[role=navigation] a.last"
const val popularMangaSelector = "div.page-item-detail.manga"
const val popularGenreTitleHTMLSelector: String = "div.item-summary div.post-title h3"
const val popularGenreUrlHTMLSelector: String = "div.item-summary div.post-title h3 a"
const val popularGenreThumbnailUrlMangaHTMLSelector: String = "div.item-thumb.c-image-hover img"
const val searchPageTitleHTMLSelector: String = "div.tab-summary div.post-title h3"
const val searchPageUrlHTMLSelector: String = "div.tab-summary div.post-title h3 a"
const val searchPageThumbnailUrlMangaHTMLSelector: String = "div.tab-thumb.c-image-hover img"
const val mangaDetailsThumbnailUrlHTMLSelector: String = "div.summary_image img"
const val mangaDetailsAuthorHTMLSelector: String = "div.author-content"
const val mangaDetailsArtistHTMLSelector: String = "div.artist-content"
const val mangaDetailsDescriptionHTMLSelector: String = "div.post-content_item > div > p"
const val mangaDetailsGenreHTMLSelector: String = "div.genres-content a"
const val mangaDetailsTagsHTMLSelector: String = "div.tags-content a"
const val mangaDetailsAttributes: String = "div.summary_content div.post-content_item"
const val searchSiteMangasHTMLSelector = "div.c-tabs-item__content"
const val genreSiteMangasHTMLSelector = "div.page-item-detail.manga"
const val latestUpdatesSelectorUrl = "div.slider__thumb_item > a"
const val latestUpdatesSelectorThumbnailUrl = "div.slider__thumb_item > a > img"
const val latestUpdatesSelectorTitle = "div.slider__content h4"
const val chapterListParseSelector = "li.wp-manga-chapter"
const val chapterLinkParser = "a"
const val chapterReleaseDateLinkParser = "span.chapter-release-date a"
const val chapterReleaseDateIParser = "span.chapter-release-date i"
const val pageListParseSelector = "div.page-break.no-gaps img"
}

View File

@ -11,10 +11,12 @@ import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
import eu.kanade.tachiyomi.util.asJsoup
import okhttp3.Headers
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.Response
import org.jsoup.nodes.Document
import org.jsoup.nodes.Element
import rx.Observable
class ManhwaLatino : ParsedHttpSource() {
@ -28,10 +30,20 @@ class ManhwaLatino : ParsedHttpSource() {
*/
override val baseUrl = "https://manhwa-latino.com"
/**
* Header for Request
*/
override fun headersBuilder() = Headers.Builder().add("Referer", "$baseUrl")
/**
* Http Client
*/
override val client: OkHttpClient = network.client.newBuilder().build()
/**
* Parser for Mainsite or Genre Site
*/
val manhwaLatinoSiteParser = ManhwaLatinoSiteParser(baseUrl)
val manhwaLatinoSiteParser = ManhwaLatinoSiteParser(baseUrl, client, headers)
/**
* An ISO 639-1 compliant language code (two letters in lower case).
@ -43,37 +55,25 @@ class ManhwaLatino : ParsedHttpSource() {
*/
override val supportsLatest = true
/**
* User Agent for this wWebsite
*/
private val userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 " +
"(KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"
override fun headersBuilder(): Headers.Builder {
return Headers.Builder()
.add("User-Agent", userAgent)
.add("Referer", "$baseUrl/")
}
/**
* Returns the Jsoup selector that returns a list of [Element] corresponding to each manga.
*/
override fun popularMangaSelector(): String {
return manhwaLatinoSiteParser.popularMangaSelector
return MLConstants.popularMangaSelector
}
/**
* Returns the Jsoup selector that returns a list of [Element] corresponding to each manga.
*/
override fun latestUpdatesSelector(): String {
return manhwaLatinoSiteParser.latestUpdatesSelector
return MLConstants.latestUpdatesSelector
}
/**
* Returns the Jsoup selector that returns a list of [Element] corresponding to each manga.
*/
override fun searchMangaSelector(): String {
return manhwaLatinoSiteParser.searchMangaSelector
return MLConstants.searchMangaSelector
}
/**
@ -87,7 +87,7 @@ class ManhwaLatino : ParsedHttpSource() {
* there's no next page.
*/
override fun popularMangaNextPageSelector(): String {
return manhwaLatinoSiteParser.popularMangaNextPageSelector
return MLConstants.popularMangaNextPageSelector
}
/**
@ -95,7 +95,7 @@ class ManhwaLatino : ParsedHttpSource() {
* there's no next page.
*/
override fun latestUpdatesNextPageSelector(): String {
return manhwaLatinoSiteParser.latestUpdatesNextPageSelector
return MLConstants.latestUpdatesNextPageSelector
}
/**
@ -103,7 +103,7 @@ class ManhwaLatino : ParsedHttpSource() {
* there's no next page.
*/
override fun searchMangaNextPageSelector(): String {
return manhwaLatinoSiteParser.searchMangaNextPageSelector
return MLConstants.searchMangaNextPageSelector
}
/**
@ -157,6 +157,10 @@ class ManhwaLatino : ParsedHttpSource() {
return GET(uri.toString(), headers)
}
override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable<MangasPage> {
return manhwaLatinoSiteParser.fetchSearchManga(page, query, filters)
}
/**
* Parses the response from the site and returns a [MangasPage] object.
*
@ -166,13 +170,13 @@ class ManhwaLatino : ParsedHttpSource() {
return manhwaLatinoSiteParser.searchMangaParse(response)
}
// /**
// * Returns the request for the details of a manga. Override only if it's needed to change the
// * url, send different headers or request method like POST.
// *
// * @param manga the manga to be updated.
// */
// override fun mangaDetailsRequest(manga: SManga) = GET(baseUrl + manga.url, headers)
/**
* Returns the request for the details of a manga. Override only if it's needed to change the
* url, send different headers or request method like POST.
*
* @param manga the manga to be updated.
*/
override fun mangaDetailsRequest(manga: SManga) = GET(baseUrl + manga.url, headers)
/**
* Returns the request for updating the chapter list. Override only if it's needed to override

View File

@ -2,62 +2,70 @@ package eu.kanade.tachiyomi.extension.es.manhwalatino
import android.net.Uri
import eu.kanade.tachiyomi.extension.es.manhwalatino.filters.UriFilter
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.network.asObservableSuccess
import eu.kanade.tachiyomi.source.model.FilterList
import eu.kanade.tachiyomi.source.model.MangasPage
import eu.kanade.tachiyomi.source.model.Page
import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.util.asJsoup
import okhttp3.Headers
import okhttp3.OkHttpClient
import okhttp3.Response
import org.jsoup.nodes.Document
import org.jsoup.nodes.Element
import org.jsoup.select.Elements
import rx.Observable
import java.text.SimpleDateFormat
import java.util.Calendar
import java.util.Locale
class ManhwaLatinoSiteParser(private val baseUrl: String) {
class ManhwaLatinoSiteParser(
private val baseUrl: String,
private val client: OkHttpClient,
private val headers: Headers
) {
/**
* TODO: ADD SEARCH_TAG
* Search Type
*/
enum class SearchType {
SEARCH_FREE, SEARCH_FILTER
}
/**
* Type of manga
*/
enum class MangaType {
ALL, ADULT, GAY;
// Static Enum Function
companion object {
fun isForAdults(mangaTypes: List<MangaType>): Boolean {
for (type in mangaTypes) {
when (type) {
ADULT, GAY -> return true
}
}
return false
}
}
// CSS Class to search in the title of the manga
fun getBadge(): String {
return when (this) {
ADULT -> "adult"
GAY -> "gay"
ALL -> ""
}
}
}
/**
* Type of search ( FREE, FILTER)
*/
var searchType = SearchType.SEARCH_FREE
private val urlHTMLSelector: String = "a"
private val titleHTMLSelector: String = "h3"
private val thumbnailUrlMangaListHTMLSelector: String = "div.item-thumb.c-image-hover img"
private val authorHTMLSelector: String = "div.author-content"
private val artistHTMLSelector: String = "div.artist-content"
private val descriptionHTMLSelector: String = "div.summary__content.show-more p"
private val genreHTMLSelector: String = "div.genres-content a"
private val statusHTMLSelector: String =
"div.summary_content div.post-status div.post-content_item div.summary-content"
private val thumbnailUrlMangaDetailsHTMLSelector: String = "div.summary_image img"
private val tagsHTMLSelector: String = "div.tags-content a"
private val searchSiteMangasHTMLSelector = "div.c-tabs-item__content"
private val genreSiteMangasHTMLSelector = "div.page-item-detail.manga"
private val latestUpdatesSelectorUrl = "div.slider__thumb_item a"
private val latestUpdatesSelectorThumbnailUrl = "div.slider__thumb_item a img"
private val latestUpdatesSelectorTitle = "div.slider__content h4"
private val chapterListParseSelector = "li.wp-manga-chapter"
private val chapterLinkParser = "a"
private val chapterReleaseDateLinkParser = "span.chapter-release-date a"
private val chapterReleaseDateIParser = "span.chapter-release-date i"
private val pageListParseSelector = "div.page-break.no-gaps img"
val searchMangaNextPageSelector = "link[rel=next]"
val latestUpdatesSelector = "div.slider__item"
val popularMangaSelector = "div.page-item-detail.manga"
val searchMangaSelector = "div.page-item-detail.manga"
val popularMangaNextPageSelector = "a.nextpostslink"
val latestUpdatesNextPageSelector = "div[role=navigation] a.last"
private var searchType = SearchType.SEARCH_FREE
/**
* The Latest Updates are in a Slider, this Methods get a Manga from the slide
@ -65,9 +73,9 @@ class ManhwaLatinoSiteParser(private val baseUrl: String) {
fun getMangaFromLastTranslatedSlide(element: Element): SManga {
val manga = SManga.create()
manga.url =
getUrlWithoutDomain(element.select(latestUpdatesSelectorUrl).first().attr("abs:href"))
manga.title = element.select(latestUpdatesSelectorTitle).text().trim()
manga.thumbnail_url = element.select(latestUpdatesSelectorThumbnailUrl).attr("abs:data-src")
getUrlWithoutDomain(element.select(MLConstants.latestUpdatesSelectorUrl).first().attr("abs:href"))
manga.title = element.select(MLConstants.latestUpdatesSelectorTitle).text().trim()
manga.thumbnail_url = element.select(MLConstants.latestUpdatesSelectorThumbnailUrl).attr("abs:src").replace("//", "/")
return manga
}
@ -76,29 +84,56 @@ class ManhwaLatinoSiteParser(private val baseUrl: String) {
*/
fun latestUpdatesHasNextPages() = false
/**
* Search the information of a Manga with the URL-Address
*/
fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable<MangasPage> {
return if (query.startsWith(MLConstants.PREFIX_MANGA_ID_SEARCH)) {
val realQuery = query.removePrefix(MLConstants.PREFIX_MANGA_ID_SEARCH)
client.newCall(GET("$baseUrl/$realQuery", headers))
.asObservableSuccess().map { response ->
val details = getMangaDetails(response.asJsoup())
details.url = "/$realQuery"
MangasPage(listOf(details), false)
}
} else {
val request = GET(searchMangaRequest(page, query, filters).toString(), headers)
client.newCall(request)
.asObservableSuccess().map { response ->
searchMangaParse(response)
}
}
}
/**
* Get eine Liste mit Mangas from Search Site
*/
fun getMangasFromSearchSite(document: Document): List<SManga> {
return document.select(searchSiteMangasHTMLSelector).map { getMangaFromList(it) }
private fun getMangasFromSearchSite(document: Document): List<SManga> {
return document.select(MLConstants.searchSiteMangasHTMLSelector).map {
val manga = SManga.create()
manga.url = getUrlWithoutDomain(it.select(MLConstants.searchPageUrlHTMLSelector).attr("abs:href"))
manga.title = it.select(MLConstants.searchPageTitleHTMLSelector).text().trim()
manga.thumbnail_url = it.select(MLConstants.searchPageThumbnailUrlMangaHTMLSelector).attr("abs:data-src")
manga
}
}
/**
* Get eine Liste mit Mangas from Genre Site
*/
fun getMangasFromGenreSite(document: Document): List<SManga> {
return document.select(genreSiteMangasHTMLSelector).map { getMangaFromList(it) }
private fun getMangasFromGenreSite(document: Document): List<SManga> {
return document.select(MLConstants.genreSiteMangasHTMLSelector).map { getMangaFromList(it) }
}
/**
* Parse The Information from Mangas From Search or Genre Site
* Parse The Information from Mangas From Popular or Genre Site
* Title, Address and thumbnail_url
*/
fun getMangaFromList(element: Element): SManga {
val manga = SManga.create()
manga.url = getUrlWithoutDomain(element.select(urlHTMLSelector).first().attr("abs:href"))
manga.title = element.select(titleHTMLSelector).text().trim()
manga.thumbnail_url = element.select(thumbnailUrlMangaListHTMLSelector).attr("abs:data-src")
manga.url = getUrlWithoutDomain(element.select(MLConstants.popularGenreUrlHTMLSelector).attr("abs:href"))
manga.title = element.select(MLConstants.popularGenreTitleHTMLSelector).text().trim()
manga.thumbnail_url = element.select(MLConstants.popularGenreThumbnailUrlMangaHTMLSelector).attr("abs:data-src")
return manga
}
@ -110,33 +145,61 @@ class ManhwaLatinoSiteParser(private val baseUrl: String) {
fun getMangaDetails(document: Document): SManga {
val manga = SManga.create()
val descriptionList = document.select(descriptionHTMLSelector).map { it.text() }
val author = document.select(authorHTMLSelector).text()
val artist = document.select(artistHTMLSelector).text()
val titleElements = document.select("#manga-title h1")
val mangaType = getMangaBadges(titleElements)
val descriptionList = document.select(MLConstants.mangaDetailsDescriptionHTMLSelector).map { it.text() }
val author = document.select(MLConstants.mangaDetailsAuthorHTMLSelector).text()
val artist = document.select(MLConstants.mangaDetailsArtistHTMLSelector).text()
val genrelist = document.select(genreHTMLSelector).map { it.text() }
val tagList = document.select(tagsHTMLSelector).map { it.text() }
val genrelist = document.select(MLConstants.mangaDetailsGenreHTMLSelector).map { it.text() }
val tagList = document.select(MLConstants.mangaDetailsTagsHTMLSelector).map { it.text() }
val genreTagList = genrelist + tagList
manga.title = titleElements.last().ownText().trim()
manga.thumbnail_url =
document.select(thumbnailUrlMangaDetailsHTMLSelector).attr("abs:data-src")
document.select(MLConstants.mangaDetailsThumbnailUrlHTMLSelector).attr("abs:data-src")
manga.description = descriptionList.joinToString("\n")
manga.author = if (author.isBlank()) "Autor Desconocido" else author
manga.artist = artist
manga.genre = genreTagList.joinToString(", ")
manga.status = findMangaStatus(tagList, document)
manga.status = findMangaStatus(tagList, document.select(MLConstants.mangaDetailsAttributes))
return manga
}
private fun findMangaStatus(tagList: List<String>, document: Document): Int {
return if (tagList.contains("Fin")) {
SManga.COMPLETED
} else {
when (document.select(statusHTMLSelector)?.first()?.text()?.trim()) {
"Publicandose" -> SManga.ONGOING
else -> SManga.UNKNOWN
/**
* Types of the Manga
* Return aList with all Types from a Manga
* for example Adults, Gay
* if the list is empty the manga is for everyone
*/
private fun getMangaBadges(titleBadges: Elements): List<MangaType> {
val types = mutableListOf<MangaType>()
for (badge in titleBadges.select("span")) {
if (badge.hasClass(MangaType.ADULT.getBadge()))
types.add(MangaType.ADULT)
if (badge.hasClass(MangaType.GAY.getBadge()))
types.add(MangaType.GAY)
}
return types
}
private fun findMangaStatus(tagList: List<String>, elements: Elements): Int {
if (tagList.contains("Fin")) {
return SManga.COMPLETED
}
elements.forEach { element ->
val key = element.select("div.summary-heading h5")?.text()?.trim()
val value = element.select("div.summary-content")?.text()?.trim()
if (key == "Estado") {
return when (value) {
"Publicandose" -> SManga.ONGOING
else -> SManga.UNKNOWN
}
}
}
return SManga.UNKNOWN
}
/**
@ -145,9 +208,9 @@ class ManhwaLatinoSiteParser(private val baseUrl: String) {
* @param response the response from the site.
*/
fun getChapterListParse(response: Response): List<SChapter> {
return response.asJsoup().select(chapterListParseSelector).map { element ->
return response.asJsoup().select(MLConstants.chapterListParseSelector).map { element ->
// Link to the Chapter with the info (address and chapter title)
val chapterInfo = element.select(chapterLinkParser)
val chapterInfo = element.select(MLConstants.chapterLinkParser)
// Chaptername
val chapterName = chapterInfo.text().trim()
// release date came as text with format dd/mm/yyyy from a link or <i>dd/mm/yyyy</i>
@ -171,8 +234,8 @@ class ManhwaLatinoSiteParser(private val baseUrl: String) {
* Get The String with the information about the Release date of the Chapter
*/
private fun getChapterReleaseDate(element: Element): String {
val chapterReleaseDateLink = element.select(chapterReleaseDateLinkParser).attr("title")
val chapterReleaseDateI = element.select(chapterReleaseDateIParser).text()
val chapterReleaseDateLink = element.select(MLConstants.chapterReleaseDateLinkParser).attr("title")
val chapterReleaseDateI = element.select(MLConstants.chapterReleaseDateIParser).text()
return when {
chapterReleaseDateLink.isNotEmpty() -> chapterReleaseDateLink
chapterReleaseDateI.isNotEmpty() -> chapterReleaseDateI
@ -204,7 +267,7 @@ class ManhwaLatinoSiteParser(private val baseUrl: String) {
getReleaseTime(releaseDateStr, Calendar.DAY_OF_YEAR)
regExDate.containsMatchIn(releaseDateStr) ->
SimpleDateFormat("dd/MM/yyyy", Locale.getDefault()).parse(releaseDateStr).time
SimpleDateFormat("dd/MM/yyyy", Locale.getDefault()).parse(releaseDateStr)!!.time
else -> 0
}
@ -229,7 +292,7 @@ class ManhwaLatinoSiteParser(private val baseUrl: String) {
*/
fun getPageListParse(response: Response): List<Page> {
val list =
response.asJsoup().select(pageListParseSelector).mapIndexed { index, imgElement ->
response.asJsoup().select(MLConstants.pageListParseSelector).mapIndexed { index, imgElement ->
Page(index, "", imgElement.attr("abs:data-src"))
}
return list
@ -270,11 +333,11 @@ class ManhwaLatinoSiteParser(private val baseUrl: String) {
val hasNextPages = hasNextPages(document)
val mangas: List<SManga>
when (searchType) {
mangas = when (searchType) {
SearchType.SEARCH_FREE ->
mangas = getMangasFromSearchSite(document)
getMangasFromSearchSite(document)
SearchType.SEARCH_FILTER ->
mangas = getMangasFromGenreSite(document)
getMangasFromGenreSite(document)
}
return MangasPage(mangas, hasNextPages)
@ -283,12 +346,12 @@ class ManhwaLatinoSiteParser(private val baseUrl: String) {
/**
* Check if there ir another page to show
*/
fun hasNextPages(document: Document): Boolean {
return !document.select(searchMangaNextPageSelector).isEmpty()
private fun hasNextPages(document: Document): Boolean {
return !document.select(MLConstants.searchMangaNextPageSelector).isEmpty()
}
/**
* Create a Address url without the base url.
*/
protected fun getUrlWithoutDomain(url: String) = url.substringAfter(baseUrl)
private fun getUrlWithoutDomain(url: String) = url.substringAfter(baseUrl)
}

View File

@ -0,0 +1,37 @@
package eu.kanade.tachiyomi.extension.es.manhwalatino
import android.app.Activity
import android.content.ActivityNotFoundException
import android.content.Intent
import android.os.Bundle
import android.util.Log
import kotlin.system.exitProcess
class ManhwaLatinoUrlActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val pathSegments = intent?.data?.pathSegments
if (pathSegments != null && pathSegments.size > 1) {
val type = pathSegments[0]
val mangaName = pathSegments[1]
val mainIntent = Intent().apply {
action = "eu.kanade.tachiyomi.SEARCH"
putExtra("query", "${MLConstants.PREFIX_MANGA_ID_SEARCH}$type/$mangaName")
putExtra("filter", packageName)
}
try {
startActivity(mainIntent)
} catch (e: ActivityNotFoundException) {
Log.e("MLUrlActivity", e.toString())
}
} else {
Log.e("TMOUrlActivity", "could not parse uri from intent $intent")
}
finish()
exitProcess(0)
}
}