From 871e8b7838aa0e1d25012ce7087875a8e89d0895 Mon Sep 17 00:00:00 2001 From: Alessandro Jean <14254807+alessandrojean@users.noreply.github.com> Date: Mon, 25 Jul 2022 16:06:45 -0300 Subject: [PATCH] Add Manga UP! as a new source. (#12737) --- src/all/mangaup/AndroidManifest.xml | 28 +++ src/all/mangaup/README.md | 16 ++ src/all/mangaup/build.gradle | 12 ++ .../mangaup/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4228 bytes .../mangaup/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2347 bytes .../mangaup/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5530 bytes .../mangaup/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 9599 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 12630 bytes src/all/mangaup/res/web_hi_res_512.png | Bin 0 -> 54664 bytes .../extension/all/mangaup/MangaUp.kt | 194 ++++++++++++++++++ .../extension/all/mangaup/MangaUpDto.kt | 97 +++++++++ .../extension/all/mangaup/MangaUpFactory.kt | 16 ++ .../all/mangaup/MangaUpUrlActivity.kt | 41 ++++ 13 files changed, 404 insertions(+) create mode 100644 src/all/mangaup/AndroidManifest.xml create mode 100644 src/all/mangaup/README.md create mode 100644 src/all/mangaup/build.gradle create mode 100644 src/all/mangaup/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/all/mangaup/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/all/mangaup/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/all/mangaup/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/all/mangaup/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/all/mangaup/res/web_hi_res_512.png create mode 100644 src/all/mangaup/src/eu/kanade/tachiyomi/extension/all/mangaup/MangaUp.kt create mode 100644 src/all/mangaup/src/eu/kanade/tachiyomi/extension/all/mangaup/MangaUpDto.kt create mode 100644 src/all/mangaup/src/eu/kanade/tachiyomi/extension/all/mangaup/MangaUpFactory.kt create mode 100644 src/all/mangaup/src/eu/kanade/tachiyomi/extension/all/mangaup/MangaUpUrlActivity.kt diff --git a/src/all/mangaup/AndroidManifest.xml b/src/all/mangaup/AndroidManifest.xml new file mode 100644 index 000000000..02005096f --- /dev/null +++ b/src/all/mangaup/AndroidManifest.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + diff --git a/src/all/mangaup/README.md b/src/all/mangaup/README.md new file mode 100644 index 000000000..ab000dc15 --- /dev/null +++ b/src/all/mangaup/README.md @@ -0,0 +1,16 @@ +# Manga UP! + +Table of Content +- [FAQ](#FAQ) + - [Why chapters are missing in some titles?](#why-chapters-are-missing-in-some-titles) + +## FAQ + +### Why chapters are missing in some titles? + +Manga UP! have series with paid chapters. These will be filtered out from the chapter +list by default, even if you have bought then before. To read these chapters, use their +official app to purchase with their coin system and read there. + +To check if a chapter is paid, open the WebView and check if the chapter thumbnail is +grayed out with a "Exclusive on app" warning or has an "Advanced" badge. diff --git a/src/all/mangaup/build.gradle b/src/all/mangaup/build.gradle new file mode 100644 index 000000000..fd180f392 --- /dev/null +++ b/src/all/mangaup/build.gradle @@ -0,0 +1,12 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply plugin: 'kotlinx-serialization' + +ext { + extName = 'Manga UP!' + pkgNameSuffix = 'all.mangaup' + extClass = '.MangaUpFactory' + extVersionCode = 1 +} + +apply from: "$rootDir/common.gradle" diff --git a/src/all/mangaup/res/mipmap-hdpi/ic_launcher.png b/src/all/mangaup/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..180dc064d8b754484357580b3c7e05a8a039da02 GIT binary patch literal 4228 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 afd2z)8N|?fj?Gg50000Px-q@QQ8TO%rwB3 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 literal 0 HcmV?d00001 diff --git a/src/all/mangaup/res/mipmap-xxhdpi/ic_launcher.png b/src/all/mangaup/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..59d1d2b7e484e0c2e8acac14d5538d8b8a978e67 GIT binary patch literal 9599 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 W923O)VL<;V0Vv3*N|#HT1pE&OH0p8y literal 0 HcmV?d00001 diff --git a/src/all/mangaup/res/web_hi_res_512.png b/src/all/mangaup/res/web_hi_res_512.png new file mode 100644 index 0000000000000000000000000000000000000000..2bd22fc93047ef598b0d64e2dc2826d17673f035 GIT binary patch literal 54664 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 literal 0 HcmV?d00001 diff --git a/src/all/mangaup/src/eu/kanade/tachiyomi/extension/all/mangaup/MangaUp.kt b/src/all/mangaup/src/eu/kanade/tachiyomi/extension/all/mangaup/MangaUp.kt new file mode 100644 index 000000000..8b85840cf --- /dev/null +++ b/src/all/mangaup/src/eu/kanade/tachiyomi/extension/all/mangaup/MangaUp.kt @@ -0,0 +1,194 @@ +package eu.kanade.tachiyomi.extension.all.mangaup + +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.asObservableSuccess +import eu.kanade.tachiyomi.network.interceptor.rateLimitHost +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.source.online.HttpSource +import kotlinx.serialization.decodeFromString +import kotlinx.serialization.json.Json +import okhttp3.Headers +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.Interceptor +import okhttp3.OkHttpClient +import okhttp3.Request +import okhttp3.Response +import okhttp3.internal.closeQuietly +import rx.Observable +import uy.kohesive.injekt.injectLazy + +class MangaUp(override val lang: String) : HttpSource() { + + override val name = "Manga UP!" + + override val baseUrl = "https://global.manga-up.com" + + override val supportsLatest = false + + override fun headersBuilder(): Headers.Builder = Headers.Builder() + .add("Origin", baseUrl) + .add("Referer", baseUrl) + .add("User-Agent", USER_AGENT) + + override val client: OkHttpClient = network.client.newBuilder() + .addInterceptor(::thumbnailIntercept) + .rateLimitHost(API_URL.toHttpUrl(), 1) + .rateLimitHost(baseUrl.toHttpUrl(), 2) + .build() + + private val json: Json by injectLazy() + + private var titleList: List? = null + + override fun popularMangaRequest(page: Int): Request { + return GET("$API_URL/search?format=json", headers) + } + + override fun popularMangaParse(response: Response): MangasPage { + titleList = response.parseAs().titles + + val titles = titleList!! + .sortedByDescending { it.bookmarkCount ?: 0 } + .map(MangaUpTitle::toSManga) + + return MangasPage(titles, hasNextPage = false) + } + + override fun latestUpdatesRequest(page: Int) = throw UnsupportedOperationException("Not used") + + override fun latestUpdatesParse(response: Response) = throw UnsupportedOperationException("Not used") + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + if (query.startsWith(PREFIX_ID_SEARCH) && query.matches(ID_SEARCH_PATTERN)) { + return titleDetailsRequest(query.removePrefix(PREFIX_ID_SEARCH)) + } + + val apiUrl = "$API_URL/manga/search".toHttpUrl().newBuilder() + .addQueryParameter("word", query) + .addQueryParameter("format", "json") + .toString() + + return GET(apiUrl, headers) + } + + override fun searchMangaParse(response: Response): MangasPage { + if (response.request.url.toString().contains("manga/detail")) { + val titleId = response.request.url.queryParameter("title_id")!! + + val title = response.parseAs().toSManga().apply { + url = "/manga/$titleId" + } + + return MangasPage(listOf(title), hasNextPage = false) + } + + val titles = response.parseAs().titles + + val query = response.request.url.queryParameter("word") + + if (query.isNullOrEmpty()) { + fetchAllTitles() + } else { + titleList = titles + } + + return MangasPage(titles.map(MangaUpTitle::toSManga), hasNextPage = false) + } + + private fun titleDetailsRequest(mangaUrl: String): Request { + val titleId = mangaUrl.substringAfterLast("/") + + val apiUrl = "$API_URL/manga/detail".toHttpUrl().newBuilder() + .addQueryParameter("title_id", titleId) + .addQueryParameter("ui_lang", lang) + .addQueryParameter("format", "json") + .toString() + + return GET(apiUrl, headers) + } + + // Workaround to allow "Open in browser" use the real URL. + override fun fetchMangaDetails(manga: SManga): Observable { + return client.newCall(titleDetailsRequest(manga.url)) + .asObservableSuccess() + .map { response -> + mangaDetailsParse(response).apply { initialized = true } + } + } + + override fun mangaDetailsParse(response: Response): SManga { + return response.parseAs().toSManga() + } + + override fun chapterListRequest(manga: SManga): Request = titleDetailsRequest(manga.url) + + override fun chapterListParse(response: Response): List { + val titleId = response.request.url.queryParameter("title_id")!!.toInt() + + return response.parseAs().readableChapters + .map { it.toSChapter(titleId) } + } + + override fun pageListRequest(chapter: SChapter): Request { + val chapterId = chapter.url.substringAfterLast("/") + + return GET("$API_URL/manga/viewer?chapter_id=$chapterId&format=json", headers) + } + + override fun pageListParse(response: Response): List { + return response.parseAs().pages + .mapIndexed { i, page -> Page(i, "", page.imageUrl) } + } + + override fun fetchImageUrl(page: Page): Observable = Observable.just(page.imageUrl!!) + + override fun imageUrlParse(response: Response): String = "" + + // Fetch all titles to get newer thumbnail URLs in the interceptor. + private fun fetchAllTitles() = runCatching { + val popularResponse = client.newCall(popularMangaRequest(1)).execute() + titleList = popularResponse.parseAs().titles + } + + private fun thumbnailIntercept(chain: Interceptor.Chain): Response { + val request = chain.request() + val response = chain.proceed(request) + + if (response.code == 401 && request.url.toString().contains(TITLE_THUMBNAIL_PATH)) { + val titleId = request.url.toString() + .substringAfter("/$TITLE_THUMBNAIL_PATH/") + .substringBefore(".webp") + .toInt() + val title = titleList?.find { it.id == titleId } ?: return response + + val thumbnailUrl = title.mainThumbnailUrl + ?: title.thumbnailUrl + ?: return response + + response.closeQuietly() + val thumbnailRequest = GET(thumbnailUrl, request.headers) + return chain.proceed(thumbnailRequest) + } + + return response + } + + private inline fun Response.parseAs(): T = use { + json.decodeFromString(body?.string().orEmpty()) + } + + companion object { + private const val API_URL = "https://global-web-api.manga-up.com/api" + private const val USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " + + "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36" + + private const val TITLE_THUMBNAIL_PATH = "manga_list" + + const val PREFIX_ID_SEARCH = "id:" + private val ID_SEARCH_PATTERN = "^id:(\\d+)$".toRegex() + } +} diff --git a/src/all/mangaup/src/eu/kanade/tachiyomi/extension/all/mangaup/MangaUpDto.kt b/src/all/mangaup/src/eu/kanade/tachiyomi/extension/all/mangaup/MangaUpDto.kt new file mode 100644 index 000000000..795972f2e --- /dev/null +++ b/src/all/mangaup/src/eu/kanade/tachiyomi/extension/all/mangaup/MangaUpDto.kt @@ -0,0 +1,97 @@ +package eu.kanade.tachiyomi.extension.all.mangaup + +import eu.kanade.tachiyomi.source.model.SChapter +import eu.kanade.tachiyomi.source.model.SManga +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import java.util.Date + +@Serializable +data class MangaUpSearch( + val titles: List = emptyList() +) + +@Serializable +data class MangaUpViewer( + val pages: List = emptyList() +) + +@Serializable +data class MangaUpTitle( + @SerialName("titleId") val id: Int? = null, + @SerialName("titleName") val name: String, + val authorName: String? = null, + val description: String? = null, + val copyright: String? = null, + val thumbnailUrl: String? = null, + val mainThumbnailUrl: String? = null, + val bookmarkCount: Int? = null, + val genres: List = emptyList(), + val chapters: List = emptyList() +) { + + private val fullDescription: String + get() = buildString { + description?.let { append(it) } + copyright?.let { append("\n\n" + it.replace("(C)", "© ")) } + } + + private val isFinished: Boolean + get() = chapters.any { it.mainName.contains("final chapter", ignoreCase = true) } + + val readableChapters: List + get() = chapters.filter(MangaUpChapter::isReadable).reversed() + + fun toSManga(): SManga = SManga.create().apply { + title = name + author = authorName + description = fullDescription.trim() + genre = genres.joinToString { it.name } + status = if (isFinished) SManga.COMPLETED else SManga.ONGOING + thumbnail_url = mainThumbnailUrl ?: thumbnailUrl + url = "/manga/$id" + } +} + +@Serializable +data class MangaUpGenre( + val id: Int, + val name: String +) + +@Serializable +data class MangaUpChapter( + val id: Int, + val mainName: String, + val subName: String? = null, + val price: Int? = null, + val published: Int, + val badge: MangaUpBadge = MangaUpBadge.FREE, + val available: Boolean = false +) { + + val isReadable: Boolean + get() = badge == MangaUpBadge.FREE && available + + fun toSChapter(titleId: Int): SChapter = SChapter.create().apply { + name = mainName.replace(WRONG_SPACING_REGEX, "-$1") + + if (!subName.isNullOrEmpty()) ": $subName" else "" + date_upload = (published * 1000L).takeIf { it <= Date().time } ?: 0L + url = "/manga/$titleId/$id" + } + + companion object { + private val WRONG_SPACING_REGEX = "\\s+-(\\d+)$".toRegex() + } +} + +enum class MangaUpBadge { + FREE, + ADVANCE, + UPDATE +} + +@Serializable +data class MangaUpPage( + val imageUrl: String +) diff --git a/src/all/mangaup/src/eu/kanade/tachiyomi/extension/all/mangaup/MangaUpFactory.kt b/src/all/mangaup/src/eu/kanade/tachiyomi/extension/all/mangaup/MangaUpFactory.kt new file mode 100644 index 000000000..146ca1e2d --- /dev/null +++ b/src/all/mangaup/src/eu/kanade/tachiyomi/extension/all/mangaup/MangaUpFactory.kt @@ -0,0 +1,16 @@ +package eu.kanade.tachiyomi.extension.all.mangaup + +import eu.kanade.tachiyomi.source.Source +import eu.kanade.tachiyomi.source.SourceFactory + +class MangaUpFactory : SourceFactory { + /** + * They only have English for now, but the website does have a + * language selector and the API also supports that. + * + * Probably it's something they will add in the future, so better + * to already make the extension a multilang to avoid users having + * to migrate to an All extension after. + */ + override fun createSources(): List = listOf(MangaUp("en")) +} diff --git a/src/all/mangaup/src/eu/kanade/tachiyomi/extension/all/mangaup/MangaUpUrlActivity.kt b/src/all/mangaup/src/eu/kanade/tachiyomi/extension/all/mangaup/MangaUpUrlActivity.kt new file mode 100644 index 000000000..81dffe7bc --- /dev/null +++ b/src/all/mangaup/src/eu/kanade/tachiyomi/extension/all/mangaup/MangaUpUrlActivity.kt @@ -0,0 +1,41 @@ +package eu.kanade.tachiyomi.extension.all.mangaup + +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 MangaUpUrlActivity : Activity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + val pathSegments = intent?.data?.pathSegments + if (pathSegments != null && pathSegments.size > 1) { + val query = pathSegments[1] + + if (query != null) { + val mainIntent = Intent().apply { + action = "eu.kanade.tachiyomi.SEARCH" + putExtra("query", MangaUp.PREFIX_ID_SEARCH + query) + putExtra("filter", packageName) + } + + try { + startActivity(mainIntent) + } catch (e: ActivityNotFoundException) { + Log.e("MangaPlusUrlActivity", e.toString()) + } + } else { + Log.e("MangaUpUrlActivity", "Missing the title ID from the URL") + } + } else { + Log.e("MangaUpUrlActivity", "Could not parse URI from intent $intent") + } + + finish() + exitProcess(0) + } +}