From 17fc1acd6c62d11b153403ee04e86bbb896d134e Mon Sep 17 00:00:00 2001 From: Vetle Ledaal Date: Sun, 27 Oct 2024 08:06:19 +0100 Subject: [PATCH] Split VyvyManga and VyvyManga.org extensions (#5704) * Revert "VyvyManga: Migrate theme (#5573)" This reverts commit bba2693814d306417366fc03dcc8b21bf2e1d740. * VyvyManga: bump version * VyvyManga.org: move to other extension --- src/en/vyvymanga/build.gradle | 4 +- .../extension/en/vyvymanga/VyvyManga.kt | 179 +++++++++++++++++- .../en/vyvymanga/VyvyMangaFilters.kt | 108 +++++++++++ src/en/vyvymangaorg/build.gradle | 10 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4005 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2276 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5334 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 9459 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 12665 bytes .../extension/en/vyvymangaorg/VyvyMangaOrg.kt | 11 ++ 10 files changed, 301 insertions(+), 11 deletions(-) create mode 100644 src/en/vyvymanga/src/eu/kanade/tachiyomi/extension/en/vyvymanga/VyvyMangaFilters.kt create mode 100644 src/en/vyvymangaorg/build.gradle create mode 100644 src/en/vyvymangaorg/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/vyvymangaorg/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/vyvymangaorg/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/vyvymangaorg/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/vyvymangaorg/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/vyvymangaorg/src/eu/kanade/tachiyomi/extension/en/vyvymangaorg/VyvyMangaOrg.kt diff --git a/src/en/vyvymanga/build.gradle b/src/en/vyvymanga/build.gradle index 706bef44e..eccf2d6d6 100644 --- a/src/en/vyvymanga/build.gradle +++ b/src/en/vyvymanga/build.gradle @@ -1,9 +1,7 @@ ext { extName = 'VyvyManga' extClass = '.VyvyManga' - themePkg = 'madara' - baseUrl = 'https://vyvymanga.org' - overrideVersionCode = 0 + extVersionCode = 37 isNsfw = true } diff --git a/src/en/vyvymanga/src/eu/kanade/tachiyomi/extension/en/vyvymanga/VyvyManga.kt b/src/en/vyvymanga/src/eu/kanade/tachiyomi/extension/en/vyvymanga/VyvyManga.kt index 49a597873..6841c0e61 100644 --- a/src/en/vyvymanga/src/eu/kanade/tachiyomi/extension/en/vyvymanga/VyvyManga.kt +++ b/src/en/vyvymanga/src/eu/kanade/tachiyomi/extension/en/vyvymanga/VyvyManga.kt @@ -1,13 +1,176 @@ package eu.kanade.tachiyomi.extension.en.vyvymanga -import eu.kanade.tachiyomi.multisrc.madara.Madara +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.source.model.FilterList +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.source.online.ParsedHttpSource +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.Request +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element +import java.text.ParseException +import java.text.SimpleDateFormat +import java.util.Calendar +import java.util.Locale -class VyvyManga : Madara( - name = "VyvyManga", - baseUrl = "https://vyvymanga.org", - lang = "en", -) { - override val versionId = 2 +class VyvyManga : ParsedHttpSource() { + override val name = "VyvyManga" - override val useLoadMoreRequest = LoadMoreStrategy.Always + override val baseUrl = "https://vymanga.net" + + override val lang = "en" + + override val supportsLatest = true + + private val dateFormat = SimpleDateFormat("MMM dd, yyy", Locale.US) + + // Popular + override fun popularMangaRequest(page: Int): Request = + GET("$baseUrl/search" + if (page != 1) "?page=$page" else "", headers) + + override fun popularMangaSelector(): String = + searchMangaSelector() + + override fun popularMangaFromElement(element: Element): SManga = + searchMangaFromElement(element) + + override fun popularMangaNextPageSelector(): String = + searchMangaNextPageSelector() + + // Search + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + val url = "$baseUrl/search".toHttpUrl().newBuilder() + .addQueryParameter("q", query) + .addQueryParameter("page", page.toString()) + (if (filters.isEmpty()) getFilterList() else filters).forEach { filter -> + when (filter) { + is SearchType -> url.addQueryParameter("search_po", filter.selected) + is SearchDescription -> if (filter.state) url.addQueryParameter("check_search_desc", "1") + is AuthorSearchType -> url.addQueryParameter("author_po", filter.selected) + is AuthorFilter -> url.addQueryParameter("author", filter.state) + is StatusFilter -> url.addQueryParameter("completed", filter.selected) + is SortFilter -> url.addQueryParameter("sort", filter.selected) + is SortType -> url.addQueryParameter("sort_type", filter.selected) + is GenreFilter -> { + filter.state.forEach { + if (!it.isIgnored()) url.addQueryParameter(if (it.isIncluded()) "genre[]" else "exclude_genre[]", it.id) + } + } + else -> {} + } + } + return GET(url.build(), headers) + } + + override fun searchMangaSelector(): String = ".comic-item" + + override fun searchMangaFromElement(element: Element): SManga = SManga.create().apply { + setUrlWithoutDomain(element.selectFirst("a")!!.absUrl("href")) + title = element.selectFirst(".comic-title")!!.text() + thumbnail_url = element.selectFirst(".comic-image")!!.absUrl("data-background-image") + } + + override fun searchMangaNextPageSelector(): String = "[rel=next]" + + // Latest + override fun latestUpdatesRequest(page: Int): Request = + GET("$baseUrl/search?sort=updated_at" + if (page != 1) "&page=$page" else "", headers) + + override fun latestUpdatesSelector(): String = + searchMangaSelector() + + override fun latestUpdatesFromElement(element: Element): SManga = + searchMangaFromElement(element) + + override fun latestUpdatesNextPageSelector() = + searchMangaNextPageSelector() + + // Details + override fun mangaDetailsParse(document: Document): SManga = SManga.create().apply { + title = document.selectFirst("h1")!!.text() + artist = document.selectFirst(".pre-title:contains(Artist) ~ a")?.text() + author = document.selectFirst(".pre-title:contains(Author) ~ a")?.text() + description = document.selectFirst(".summary > .content")!!.text() + genre = document.select(".pre-title:contains(Genres) ~ a").joinToString { it.text() } + status = when (document.selectFirst(".pre-title:contains(Status) ~ span:not(.space)")?.text()) { + "Ongoing" -> SManga.ONGOING + "Completed" -> SManga.COMPLETED + else -> SManga.UNKNOWN + } + thumbnail_url = document.selectFirst(".img-manga")!!.absUrl("src") + } + + // Chapters + override fun chapterListSelector(): String = + ".list-group > a" + + override fun chapterFromElement(element: Element): SChapter = SChapter.create().apply { + url = element.absUrl("href") + name = element.selectFirst("span")!!.text() + date_upload = parseChapterDate(element.selectFirst("> p")?.text()) + } + + // Pages + override fun pageListRequest(chapter: SChapter): Request = + GET(chapter.url, headers) + + override fun pageListParse(document: Document): List { + return document.select("img.d-block").mapIndexed { index, element -> + Page(index, "", element.absUrl("data-src")) + } + } + + override fun imageUrlParse(document: Document): String { + throw UnsupportedOperationException() + } + + // Other + // Date logic lifted from Madara + private fun parseChapterDate(date: String?): Long { + date ?: return 0 + + fun SimpleDateFormat.tryParse(string: String): Long { + return try { + parse(string)?.time ?: 0 + } catch (_: ParseException) { + 0 + } + } + + return when { + "ago".endsWith(date) -> { + parseRelativeDate(date) + } + else -> dateFormat.tryParse(date) + } + } + + private fun parseRelativeDate(date: String): Long { + val number = Regex("""(\d+)""").find(date)?.value?.toIntOrNull() ?: return 0 + val cal = Calendar.getInstance() + + return when { + date.contains("day") -> cal.apply { add(Calendar.DAY_OF_MONTH, -number) }.timeInMillis + date.contains("hour") -> cal.apply { add(Calendar.HOUR, -number) }.timeInMillis + date.contains("minute") -> cal.apply { add(Calendar.MINUTE, -number) }.timeInMillis + date.contains("second") -> cal.apply { add(Calendar.SECOND, -number) }.timeInMillis + else -> 0 + } + } + + override fun getFilterList(): FilterList { + launchIO { fetchGenres(baseUrl, headers, client) } + return FilterList( + SearchType(), + SearchDescription(), + AuthorSearchType(), + AuthorFilter(), + StatusFilter(), + SortFilter(), + SortType(), + GenreFilter(), + ) + } } diff --git a/src/en/vyvymanga/src/eu/kanade/tachiyomi/extension/en/vyvymanga/VyvyMangaFilters.kt b/src/en/vyvymanga/src/eu/kanade/tachiyomi/extension/en/vyvymanga/VyvyMangaFilters.kt new file mode 100644 index 000000000..4785fc530 --- /dev/null +++ b/src/en/vyvymanga/src/eu/kanade/tachiyomi/extension/en/vyvymanga/VyvyMangaFilters.kt @@ -0,0 +1,108 @@ +package eu.kanade.tachiyomi.extension.en.vyvymanga + +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.source.model.Filter +import eu.kanade.tachiyomi.util.asJsoup +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import org.jsoup.nodes.Document + +abstract class SelectFilter(displayName: String, private val options: Array>) : + Filter.Select( + displayName, + options.map { it.first }.toTypedArray(), + ) { + open val selected get() = options[state].second.takeUnless { it.isEmpty() } +} + +class SearchType : SelectFilter( + "Title should contain/begin/end with typed text", + arrayOf( + Pair("Contain", "0"), + Pair("Begin", "1"), + Pair("End", "2"), + ), +) + +class SearchDescription : Filter.CheckBox("Search In Description") + +class AuthorSearchType : SelectFilter( + "Author should contain/begin/end with typed text", + arrayOf( + Pair("Contain", "0"), + Pair("Begin", "1"), + Pair("End", "2"), + ), +) + +class AuthorFilter : Filter.Text("Author") + +class StatusFilter : SelectFilter( + "Status", + arrayOf( + Pair("All", "2"), + Pair("Ongoing", "0"), + Pair("Completed", "1"), + ), +) + +class SortFilter : SelectFilter( + "Sort by", + arrayOf( + Pair("Viewed", "viewed"), + Pair("Scored", "scored"), + Pair("Newest", "created_at"), + Pair("Latest Update", "updated_at"), + ), +) + +class SortType : SelectFilter( + "Sort order", + arrayOf( + Pair("Descending", "desc"), + Pair("Ascending", "asc"), + ), +) + +class Genre(name: String, val id: String) : Filter.TriState(name) + +class GenreFilter : Filter.Group("Genre", genrePairs.map { Genre(it.name, it.id) }) + +private var genrePairs: List = emptyList() + +private val scope = CoroutineScope(Dispatchers.IO) + +fun launchIO(block: () -> Unit) = scope.launch { block() } + +private var fetchGenresAttempts: Int = 0 + +fun fetchGenres(baseUrl: String, headers: okhttp3.Headers, client: okhttp3.OkHttpClient) { + if (fetchGenresAttempts < 3 && genrePairs.isEmpty()) { + try { + genrePairs = + client.newCall(genresRequest(baseUrl, headers)).execute() + .asJsoup() + .let(::parseGenres) + } catch (_: Exception) { + } finally { + fetchGenresAttempts++ + } + } +} + +private fun genresRequest(baseUrl: String, headers: okhttp3.Headers) = GET("$baseUrl/search", headers) + +private const val genresSelector = ".check-genre div div:has(.checkbox-genre)" + +private fun parseGenres(document: Document): List { + val items = document.select(genresSelector) + return buildList(items.size) { + items.mapTo(this) { + Genre( + it.select("label").text(), + it.select(".checkbox-genre").attr("data-value"), + ) + } + } +} diff --git a/src/en/vyvymangaorg/build.gradle b/src/en/vyvymangaorg/build.gradle new file mode 100644 index 000000000..f54620411 --- /dev/null +++ b/src/en/vyvymangaorg/build.gradle @@ -0,0 +1,10 @@ +ext { + extName = 'VyvyManga.org' + extClass = '.VyvyMangaOrg' + themePkg = 'madara' + baseUrl = 'https://vyvymanga.org' + overrideVersionCode = 0 + isNsfw = true +} + +apply from: "$rootDir/common.gradle" diff --git a/src/en/vyvymangaorg/res/mipmap-hdpi/ic_launcher.png b/src/en/vyvymangaorg/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..5db1f69a0ca2cff984a27e428a127455c66bc2fe GIT binary patch literal 4005 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 LNkvXXu0mjfJadz0 literal 0 HcmV?d00001 diff --git a/src/en/vyvymangaorg/res/mipmap-mdpi/ic_launcher.png b/src/en/vyvymangaorg/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..5bc11d78a5e64e5914823b61d599f9297c8bd935 GIT binary patch literal 2276 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 literal 0 HcmV?d00001 diff --git a/src/en/vyvymangaorg/res/mipmap-xxhdpi/ic_launcher.png b/src/en/vyvymangaorg/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..24498e9725058080e8fcd83e28e098be00623d8a GIT binary patch literal 9459 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 Nq{S7)YD5f!{s(?It26)r literal 0 HcmV?d00001 diff --git a/src/en/vyvymangaorg/src/eu/kanade/tachiyomi/extension/en/vyvymangaorg/VyvyMangaOrg.kt b/src/en/vyvymangaorg/src/eu/kanade/tachiyomi/extension/en/vyvymangaorg/VyvyMangaOrg.kt new file mode 100644 index 000000000..b6ccfd6d9 --- /dev/null +++ b/src/en/vyvymangaorg/src/eu/kanade/tachiyomi/extension/en/vyvymangaorg/VyvyMangaOrg.kt @@ -0,0 +1,11 @@ +package eu.kanade.tachiyomi.extension.en.vyvymangaorg + +import eu.kanade.tachiyomi.multisrc.madara.Madara + +class VyvyMangaOrg : Madara( + name = "VyvyManga.org", + baseUrl = "https://vyvymanga.org", + lang = "en", +) { + override val useLoadMoreRequest = LoadMoreStrategy.Always +}