diff --git a/src/ja/mangagun/build.gradle b/src/ja/mangagun/build.gradle index fcf1dbbba..8949c70c9 100644 --- a/src/ja/mangagun/build.gradle +++ b/src/ja/mangagun/build.gradle @@ -1,9 +1,9 @@ ext { - extName = 'MangaGun' + extName = 'NihonKuni' extClass = '.MangaGun' themePkg = 'fmreader' - baseUrl = 'https://mangagun.net' - overrideVersionCode = 4 + baseUrl = 'https://nihonkuni.com' + overrideVersionCode = 5 isNsfw = true } diff --git a/src/ja/mangagun/res/mipmap-hdpi/ic_launcher.png b/src/ja/mangagun/res/mipmap-hdpi/ic_launcher.png index 518d8f95e..ca434c6a5 100644 Binary files a/src/ja/mangagun/res/mipmap-hdpi/ic_launcher.png and b/src/ja/mangagun/res/mipmap-hdpi/ic_launcher.png differ diff --git a/src/ja/mangagun/res/mipmap-mdpi/ic_launcher.png b/src/ja/mangagun/res/mipmap-mdpi/ic_launcher.png index ca3d132c0..737539025 100644 Binary files a/src/ja/mangagun/res/mipmap-mdpi/ic_launcher.png and b/src/ja/mangagun/res/mipmap-mdpi/ic_launcher.png differ diff --git a/src/ja/mangagun/res/mipmap-xhdpi/ic_launcher.png b/src/ja/mangagun/res/mipmap-xhdpi/ic_launcher.png index e8e588723..754ad9f9a 100644 Binary files a/src/ja/mangagun/res/mipmap-xhdpi/ic_launcher.png and b/src/ja/mangagun/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/src/ja/mangagun/res/mipmap-xxhdpi/ic_launcher.png b/src/ja/mangagun/res/mipmap-xxhdpi/ic_launcher.png index fd9bfe241..2ea92e503 100644 Binary files a/src/ja/mangagun/res/mipmap-xxhdpi/ic_launcher.png and b/src/ja/mangagun/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/src/ja/mangagun/res/mipmap-xxxhdpi/ic_launcher.png b/src/ja/mangagun/res/mipmap-xxxhdpi/ic_launcher.png index f92f4d781..b1d9ea87d 100644 Binary files a/src/ja/mangagun/res/mipmap-xxxhdpi/ic_launcher.png and b/src/ja/mangagun/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/src/ja/mangagun/src/eu/kanade/tachiyomi/extension/ja/mangagun/MangaGun.kt b/src/ja/mangagun/src/eu/kanade/tachiyomi/extension/ja/mangagun/MangaGun.kt index 3eaf9061e..9d37be428 100644 --- a/src/ja/mangagun/src/eu/kanade/tachiyomi/extension/ja/mangagun/MangaGun.kt +++ b/src/ja/mangagun/src/eu/kanade/tachiyomi/extension/ja/mangagun/MangaGun.kt @@ -1,6 +1,5 @@ package eu.kanade.tachiyomi.extension.ja.mangagun -import android.util.Base64 import eu.kanade.tachiyomi.multisrc.fmreader.FMReader import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.asObservableSuccess @@ -8,17 +7,23 @@ 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.Cookie -import okhttp3.HttpUrl.Companion.toHttpUrl import okhttp3.Request +import org.jsoup.Jsoup import org.jsoup.nodes.Document import org.jsoup.nodes.Element import rx.Observable import java.util.Calendar -private const val DOMAIN = "mangagun.net" +private const val DOMAIN = "nihonkuni.com" + +/** + * This plugin is for the website originally named MangaGun(漫画軍), which was later renamed to NihonKuni(日本国). Please do not be confused by the names. + */ +class MangaGun : FMReader("NihonKuni", "https://$DOMAIN", "ja") { + + // Formerly "MangaGun(漫画軍)" + override val id = 3811800324362294701 -class MangaGun : FMReader("MangaGun", "https://$DOMAIN", "ja") { override val infoElementSelector = "div.row div.row" // source is picky about URL format @@ -31,17 +36,6 @@ class MangaGun : FMReader("MangaGun", "https://$DOMAIN", "ja") { override fun popularMangaRequest(page: Int): Request = mangaRequest("views", page) - override fun popularMangaFromElement(element: Element): SManga { - return SManga.create().apply { - element.select(headerSelector).let { - setUrlWithoutDomain(it.attr("abs:href")) - title = it.text() - } - thumbnail_url = element.select("img, .thumb-wrapper .img-in-ratio").attr("style") - .substringAfter("background-image:url(").substringBefore(")") - } - } - override fun latestUpdatesRequest(page: Int): Request = mangaRequest("last_update", page) override fun getImgAttr(element: Element?): String? { @@ -51,15 +45,21 @@ class MangaGun : FMReader("MangaGun", "https://$DOMAIN", "ja") { element.hasAttr("data-src") -> element.attr("abs:data-src") element.hasAttr("data-bg") -> element.attr("abs:data-bg") element.hasAttr("data-srcset") -> element.attr("abs:data-srcset") - element.hasAttr("style") -> element.attr("style").substringAfter("('") - .substringBefore("')") + element.hasAttr("style") -> element.attr("style").substringAfter("url(") + .substringBefore(")").trim('\'', '"') else -> element.attr("abs:src") } } override fun fetchChapterList(manga: SManga): Observable> { - val slug = manga.url.substringAfter("raw-").substringBefore(".html") + val index = manga.url.indexOf("manga-") + // Handling version compatibility, previous version used the 'raw-' prefix. + val slug = if (index >= 0) { + manga.url.substring(index + 6) + } else { + manga.url.substringAfter("raw-") + }.substringBefore(".html") return client.newCall( GET( @@ -99,39 +99,14 @@ class MangaGun : FMReader("MangaGun", "https://$DOMAIN", "ja") { return chapterDate.timeInMillis } - private fun handleDdosProtect(document: Document): Document { - val key = document.select("script:containsData(document.cookie)").first()?.html() - ?.substringAfter("escape('")?.substringBefore("'") - if (key != null) { - // save cookie ct_anti_ddos_key - client.cookieJar.saveFromResponse( - baseUrl.toHttpUrl(), - listOf( - Cookie.Builder() - .name("ct_anti_ddos_key") - .value(key) - .domain(DOMAIN) - .path("/") - .build(), - ), - ) - } - return document.select("noscript div a").attr("abs:href").let { url -> - client.newCall(GET(url, headers)).execute().asJsoup() - } - } - override fun pageListParse(document: Document): List { - val ddosProtect = document.select("title").first()?.text() - ?.contains("Manga Gun - DDoS protection") ?: false - return if (ddosProtect) { - handleDdosProtect(document) - } else { - document - }.select(".chapter-content img.chapter-img") - .eachAttr("data-img") - .mapIndexed { index, img -> - Page(index, "", Base64.decode(img, Base64.DEFAULT).decodeToString()) - } + val html = document.select("script:containsData(window.chapterImages)").first()!!.data() + .substringAfter("window.chapterImages=\"").substringBefore("\"") + .replace("\\/", "/") + .replace("\\n", "") + .replace("\\r", "") + return Jsoup.parse(html).select("img.chapter-img").mapIndexed { index, element -> + Page(index, imageUrl = element.attr("abs:data-srcset").trim()) + } } }