From c519a4460fd6c644d9c74d50b952c9fbc929568c Mon Sep 17 00:00:00 2001 From: jmir1 <43830312+jmir1@users.noreply.github.com> Date: Sat, 26 Jun 2021 17:23:21 +0200 Subject: [PATCH 01/10] tenshi: cloaudflare hotfix --- .../kanade/tachiyomi/animeextension/en/tenshimoe/TenshiMoe.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/en/tenshimoe/src/eu/kanade/tachiyomi/animeextension/en/tenshimoe/TenshiMoe.kt b/src/en/tenshimoe/src/eu/kanade/tachiyomi/animeextension/en/tenshimoe/TenshiMoe.kt index 745a8fe03..518da2431 100644 --- a/src/en/tenshimoe/src/eu/kanade/tachiyomi/animeextension/en/tenshimoe/TenshiMoe.kt +++ b/src/en/tenshimoe/src/eu/kanade/tachiyomi/animeextension/en/tenshimoe/TenshiMoe.kt @@ -33,6 +33,8 @@ class TenshiMoe : ParsedAnimeHttpSource() { override val supportsLatest = true + override val client: OkHttpClient = network.cloudflareClient + override fun popularAnimeSelector(): String = "ul.anime-loop.loop li a" override fun popularAnimeRequest(page: Int): Request = GET("$baseUrl/anime?s=vdy-d&page=$page") From 4bbab33c2cf1c91bcbfe299b1f4f5146ad72ad79 Mon Sep 17 00:00:00 2001 From: jmir1 <43830312+jmir1@users.noreply.github.com> Date: Sat, 26 Jun 2021 17:24:11 +0200 Subject: [PATCH 02/10] bruh --- src/en/tenshimoe/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/en/tenshimoe/build.gradle b/src/en/tenshimoe/build.gradle index e10727aa5..56711a3bb 100644 --- a/src/en/tenshimoe/build.gradle +++ b/src/en/tenshimoe/build.gradle @@ -5,7 +5,7 @@ ext { extName = 'tenshi.moe' pkgNameSuffix = 'en.tenshimoe' extClass = '.TenshiMoe' - extVersionCode = 15 + extVersionCode = 16 libVersion = '11' } dependencies { @@ -14,4 +14,4 @@ dependencies { implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion") } -apply from: "$rootDir/common.gradle" \ No newline at end of file +apply from: "$rootDir/common.gradle" From db340466c0258d9e6a78e10b22de0f37a0a49313 Mon Sep 17 00:00:00 2001 From: jmir1 <43830312+jmir1@users.noreply.github.com> Date: Sat, 26 Jun 2021 17:28:05 +0200 Subject: [PATCH 03/10] hahaha kill me --- .../eu/kanade/tachiyomi/animeextension/en/tenshimoe/TenshiMoe.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/en/tenshimoe/src/eu/kanade/tachiyomi/animeextension/en/tenshimoe/TenshiMoe.kt b/src/en/tenshimoe/src/eu/kanade/tachiyomi/animeextension/en/tenshimoe/TenshiMoe.kt index 518da2431..f2fa54161 100644 --- a/src/en/tenshimoe/src/eu/kanade/tachiyomi/animeextension/en/tenshimoe/TenshiMoe.kt +++ b/src/en/tenshimoe/src/eu/kanade/tachiyomi/animeextension/en/tenshimoe/TenshiMoe.kt @@ -13,6 +13,7 @@ import eu.kanade.tachiyomi.network.await import eu.kanade.tachiyomi.util.asJsoup import kotlinx.coroutines.runBlocking import okhttp3.Headers +import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.Response import org.jsoup.nodes.Document From 8f7ee6e6d3ead3457711900c83a5e8ab54117f71 Mon Sep 17 00:00:00 2001 From: jmir1 <43830312+jmir1@users.noreply.github.com> Date: Sat, 26 Jun 2021 18:13:53 +0200 Subject: [PATCH 04/10] idek --- .../kanade/tachiyomi/animeextension/en/tenshimoe/TenshiMoe.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/en/tenshimoe/src/eu/kanade/tachiyomi/animeextension/en/tenshimoe/TenshiMoe.kt b/src/en/tenshimoe/src/eu/kanade/tachiyomi/animeextension/en/tenshimoe/TenshiMoe.kt index f2fa54161..7ca810d5f 100644 --- a/src/en/tenshimoe/src/eu/kanade/tachiyomi/animeextension/en/tenshimoe/TenshiMoe.kt +++ b/src/en/tenshimoe/src/eu/kanade/tachiyomi/animeextension/en/tenshimoe/TenshiMoe.kt @@ -100,8 +100,7 @@ class TenshiMoe : ParsedAnimeHttpSource() { private suspend fun linkRequest(response: Response): List { val elements = response.asJsoup() val link = elements.select("iframe").attr("src") - val dlResponse = client.newCall(GET(link, Headers.headersOf("referer", response.request.url.toString()))) - .await() + val dlResponse = client.newCall(GET(link, Headers.headersOf("referer", response.request.url.toString()))).await() val document = dlResponse.asJsoup() return linksFromElement(document.select(episodeLinkSelector()).first()) } From c8cc47527fedda2d0ecd1c08f7b94c33652549cd Mon Sep 17 00:00:00 2001 From: jmir1 <43830312+jmir1@users.noreply.github.com> Date: Sun, 27 Jun 2021 00:04:06 +0200 Subject: [PATCH 05/10] [skip ci] gogo hotfix pt.1 --- .../kanade/tachiyomi/animeextension/en/gogoanime/GogoAnime.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/en/gogoanime/src/eu/kanade/tachiyomi/animeextension/en/gogoanime/GogoAnime.kt b/src/en/gogoanime/src/eu/kanade/tachiyomi/animeextension/en/gogoanime/GogoAnime.kt index c626c201f..d978f925e 100644 --- a/src/en/gogoanime/src/eu/kanade/tachiyomi/animeextension/en/gogoanime/GogoAnime.kt +++ b/src/en/gogoanime/src/eu/kanade/tachiyomi/animeextension/en/gogoanime/GogoAnime.kt @@ -67,7 +67,7 @@ class GogoAnime : ParsedAnimeHttpSource() { private suspend fun linkRequest(response: Response): List { val elements = response.asJsoup() - val link = elements.select("li.dowloads a").attr("href") + val link = elements.select("li.dowloads a").attr("href").replace("streamani.net", "gogo-stream.com") val dlResponse = client.newCall(GET(link)) .await() val document = dlResponse.asJsoup() From 2daecef70a673382d5bea67e09249c676a763a95 Mon Sep 17 00:00:00 2001 From: jmir1 <43830312+jmir1@users.noreply.github.com> Date: Sun, 27 Jun 2021 00:04:36 +0200 Subject: [PATCH 06/10] gogo: hotfix to bypass cloudflare protection --- src/en/gogoanime/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/en/gogoanime/build.gradle b/src/en/gogoanime/build.gradle index d0aad62a4..ade0c8957 100644 --- a/src/en/gogoanime/build.gradle +++ b/src/en/gogoanime/build.gradle @@ -5,7 +5,7 @@ ext { extName = 'Gogoanime' pkgNameSuffix = 'en.gogoanime' extClass = '.GogoAnime' - extVersionCode = 2 + extVersionCode = 3 libVersion = '11' } dependencies { @@ -14,4 +14,4 @@ dependencies { implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion") } -apply from: "$rootDir/common.gradle" \ No newline at end of file +apply from: "$rootDir/common.gradle" From ce9849242d4d507ab1d27eccc13b5fcba1ac4edb Mon Sep 17 00:00:00 2001 From: jmir1 Date: Tue, 29 Jun 2021 10:38:36 +0200 Subject: [PATCH 07/10] gogoanime: hotfix TODO: get google links, parse m3u file --- src/en/gogoanime/build.gradle | 2 +- .../animeextension/en/gogoanime/GogoAnime.kt | 31 ++++++++++++++----- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/en/gogoanime/build.gradle b/src/en/gogoanime/build.gradle index d0aad62a4..9163b98c1 100644 --- a/src/en/gogoanime/build.gradle +++ b/src/en/gogoanime/build.gradle @@ -5,7 +5,7 @@ ext { extName = 'Gogoanime' pkgNameSuffix = 'en.gogoanime' extClass = '.GogoAnime' - extVersionCode = 2 + extVersionCode = 3 libVersion = '11' } dependencies { diff --git a/src/en/gogoanime/src/eu/kanade/tachiyomi/animeextension/en/gogoanime/GogoAnime.kt b/src/en/gogoanime/src/eu/kanade/tachiyomi/animeextension/en/gogoanime/GogoAnime.kt index c626c201f..b93179061 100644 --- a/src/en/gogoanime/src/eu/kanade/tachiyomi/animeextension/en/gogoanime/GogoAnime.kt +++ b/src/en/gogoanime/src/eu/kanade/tachiyomi/animeextension/en/gogoanime/GogoAnime.kt @@ -1,5 +1,7 @@ package eu.kanade.tachiyomi.animeextension.en.gogoanime +import android.util.Log +import com.google.gson.JsonParser import eu.kanade.tachiyomi.animesource.model.AnimeFilterList import eu.kanade.tachiyomi.animesource.model.Link import eu.kanade.tachiyomi.animesource.model.SAnime @@ -10,6 +12,7 @@ import eu.kanade.tachiyomi.network.asObservableSuccess import eu.kanade.tachiyomi.network.await import eu.kanade.tachiyomi.util.asJsoup import kotlinx.coroutines.runBlocking +import okhttp3.Headers import okhttp3.Request import okhttp3.Response import org.jsoup.nodes.Document @@ -67,8 +70,8 @@ class GogoAnime : ParsedAnimeHttpSource() { private suspend fun linkRequest(response: Response): List { val elements = response.asJsoup() - val link = elements.select("li.dowloads a").attr("href") - val dlResponse = client.newCall(GET(link)) + val link = elements.select("a[data-video*=streamani.net/load.php]").attr("data-video") + val dlResponse = client.newCall(GET("https:$link", Headers.headersOf("referer", "https://www1.gogoanime.ai"))) .await() val document = dlResponse.asJsoup() return linksFromElement(document.select(episodeLinkSelector()).first()) @@ -84,14 +87,28 @@ class GogoAnime : ParsedAnimeHttpSource() { return episode } - override fun episodeLinkSelector() = "div.mirror_link:has(a[download])" + override fun episodeLinkSelector() = "div.videocontent script" override fun linksFromElement(element: Element): List { val links = mutableListOf() - val linkElements = element.select("a[download]") - for (e in linkElements) { - val quality = e.text().substringAfter("Download (").replace("P - mp4)", "p") - links.add(Link(e.attr("href"), quality)) + val content = element.data() + Log.i("links", content) + var hit = content.indexOf("playerInstance.setup(") + while (hit >= 0) { + val objectString = + element.data().substring(hit).substringAfter("playerInstance.setup(").substringBefore(");") + val jsonObject = + JsonParser.parseString(objectString).asJsonObject["sources"].asJsonArray[0].asJsonObject + var link = jsonObject["file"].asString + if (link.contains("m3u8")) { + val toFind = link.substringAfter("/videos/hls/").substringBefore("/") + val toRemove = link.substringAfter("/videos/hls/").substringBeforeLast(toFind) + link = link.replace("/videos/hls/$toRemove", "/videos/hls/") + } + val quality = jsonObject["label"].asString + Log.i("links:", "$link - $quality") + links.add(Link(link, quality)) + hit = content.indexOf("playerInstance.setup(", hit + 1) } return links } From e0d6cc90ae4c176ec172a7e90dbdd2d76b6e8386 Mon Sep 17 00:00:00 2001 From: jmir1 <43830312+jmir1@users.noreply.github.com> Date: Tue, 29 Jun 2021 10:49:34 +0200 Subject: [PATCH 08/10] dummy commit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c1cdd1841..548494da7 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ |-------|---------| | ![CI](https://github.com/jmir1/aniyomi-extensions/workflows/CI/badge.svg?event=push) | [![Discord](https://img.shields.io/discord/841701076242530374?label=discord&labelColor=7289da&color=2c2f33&style=flat)](https://discord.gg/F32UjdJZrR) | -# ![app icon](./.github/readme-images/app-icon.png)Tachiyomi Extensions +# ![app icon](./.github/readme-images/app-icon.png)Aniyomi Extensions Tachiyomi is a free, cool, awesome and open source manga reader for Android 5.0 and above. This repository contains the available extension catalogues for the [Aniyomi](https://github.com/jmir1/aniyomi) app. From d1a252ef81ab105d9d335eb5c8073a362505c020 Mon Sep 17 00:00:00 2001 From: jmir1 <43830312+jmir1@users.noreply.github.com> Date: Tue, 29 Jun 2021 10:54:15 +0200 Subject: [PATCH 09/10] oops --- src/en/gogoanime/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/en/gogoanime/build.gradle b/src/en/gogoanime/build.gradle index ade0c8957..66483bb20 100644 --- a/src/en/gogoanime/build.gradle +++ b/src/en/gogoanime/build.gradle @@ -5,7 +5,7 @@ ext { extName = 'Gogoanime' pkgNameSuffix = 'en.gogoanime' extClass = '.GogoAnime' - extVersionCode = 3 + extVersionCode = 4 libVersion = '11' } dependencies { From 34ce256bc29050635c14da0465f05a1575f7ff8a Mon Sep 17 00:00:00 2001 From: jmir1 Date: Tue, 29 Jun 2021 14:51:12 +0200 Subject: [PATCH 10/10] gogo: fix qualities --- src/en/gogoanime/build.gradle | 2 +- .../animeextension/en/gogoanime/GogoAnime.kt | 29 +++++++++++++++++-- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/en/gogoanime/build.gradle b/src/en/gogoanime/build.gradle index 66483bb20..0f548c326 100644 --- a/src/en/gogoanime/build.gradle +++ b/src/en/gogoanime/build.gradle @@ -5,7 +5,7 @@ ext { extName = 'Gogoanime' pkgNameSuffix = 'en.gogoanime' extClass = '.GogoAnime' - extVersionCode = 4 + extVersionCode = 5 libVersion = '11' } dependencies { diff --git a/src/en/gogoanime/src/eu/kanade/tachiyomi/animeextension/en/gogoanime/GogoAnime.kt b/src/en/gogoanime/src/eu/kanade/tachiyomi/animeextension/en/gogoanime/GogoAnime.kt index b93179061..059e7fd81 100644 --- a/src/en/gogoanime/src/eu/kanade/tachiyomi/animeextension/en/gogoanime/GogoAnime.kt +++ b/src/en/gogoanime/src/eu/kanade/tachiyomi/animeextension/en/gogoanime/GogoAnime.kt @@ -23,7 +23,7 @@ class GogoAnime : ParsedAnimeHttpSource() { override val name = "Gogoanime" - override val baseUrl = "https://www1.gogoanime.ai" + override val baseUrl = "https://gogoanime.pe" override val lang = "en" @@ -71,7 +71,7 @@ class GogoAnime : ParsedAnimeHttpSource() { private suspend fun linkRequest(response: Response): List { val elements = response.asJsoup() val link = elements.select("a[data-video*=streamani.net/load.php]").attr("data-video") - val dlResponse = client.newCall(GET("https:$link", Headers.headersOf("referer", "https://www1.gogoanime.ai"))) + val dlResponse = client.newCall(GET("https:$link", Headers.headersOf("referer", baseUrl))) .await() val document = dlResponse.asJsoup() return linksFromElement(document.select(episodeLinkSelector()).first()) @@ -107,12 +107,35 @@ class GogoAnime : ParsedAnimeHttpSource() { } val quality = jsonObject["label"].asString Log.i("links:", "$link - $quality") - links.add(Link(link, quality)) + if (links.isEmpty() || !links.last().url.contains(link.substringAfterLast("/"))) { + if (link.contains("m3u8")) { + val individualLinks = runBlocking { getIndividualLinks(link) } + individualLinks.forEach { links.add(it) } + } else { + links.add(Link(link, quality)) + } + } hit = content.indexOf("playerInstance.setup(", hit + 1) } return links } + private suspend fun getIndividualLinks(link: String): List { + val response = client.newCall(GET(link)).await().body!!.string() + Log.i("links", response) + val links = response.split("\n").filter { !it.startsWith("#") && it.isNotEmpty() }.toMutableList() + val qualities = response.split("\n").filter { it.startsWith("#EXT-X-STREAM-INF") }.toMutableList() + Log.i("links", links.lastIndex.toString() + qualities.lastIndex.toString()) + val linkList = mutableListOf() + if (qualities.lastIndex != links.lastIndex) return emptyList() + for (i in 0..qualities.lastIndex) { + links[i] = link.substringBeforeLast("/") + "/" + links[i] + qualities[i] = qualities[i].substringAfter("NAME=").replace("\"", "") + linkList.add(Link(links[i], qualities[i])) + } + return linkList.reversed() + } + override fun searchAnimeFromElement(element: Element): SAnime { val anime = SAnime.create() anime.setUrlWithoutDomain(element.attr("href"))