From f5022df5e33dbeeb509431544f5e10d9f899462a Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 17 Apr 2025 18:55:01 +0800 Subject: [PATCH] Revert "src(en/gogoanime) dead" This reverts commit 4c49e1d097834905481f11af7ef6a8ba646b9032. --- src/en/gogoanime/build.gradle | 14 + .../gogoanime/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2102 bytes .../gogoanime/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1235 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3130 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 5462 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 8180 bytes .../animeextension/en/gogoanime/GogoAnime.kt | 299 +++++++++++++ .../en/gogoanime/GogoAnimeFilters.kt | 414 ++++++++++++++++++ 8 files changed, 727 insertions(+) create mode 100644 src/en/gogoanime/build.gradle create mode 100644 src/en/gogoanime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/gogoanime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/gogoanime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/gogoanime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/gogoanime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/gogoanime/src/eu/kanade/tachiyomi/animeextension/en/gogoanime/GogoAnime.kt create mode 100644 src/en/gogoanime/src/eu/kanade/tachiyomi/animeextension/en/gogoanime/GogoAnimeFilters.kt diff --git a/src/en/gogoanime/build.gradle b/src/en/gogoanime/build.gradle new file mode 100644 index 00000000..9ac6d8eb --- /dev/null +++ b/src/en/gogoanime/build.gradle @@ -0,0 +1,14 @@ +ext { + extName = 'Gogoanime' + extClass = '.GogoAnime' + extVersionCode = 87 +} + +apply from: "$rootDir/common.gradle" + +dependencies { + implementation(project(':lib:streamwish-extractor')) + implementation(project(':lib:mp4upload-extractor')) + implementation(project(':lib:dood-extractor')) + implementation(project(':lib:gogostream-extractor')) +} \ No newline at end of file diff --git a/src/en/gogoanime/res/mipmap-hdpi/ic_launcher.png b/src/en/gogoanime/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..9e4d2f6bb818cb2aa82008e3a11ea9f3e888f908 GIT binary patch literal 2102 zcmV-62+8+}P)7;tYh!DwwrP`Q(k9c*YNC#b8Z(WKGaZMf zHi;&Undq3QCRM4{x>hXKU|edf3j!(%zK6*6c)aa&-UW$NLJK4|LVo72U@%`vjImhWL)fb&-2X_^tY;Q^Kt#?;g=nU?P9qn@ii4x za|AuqsDczw1u38kQa}}?fGS7p3Fq?%qUw!nO}V`T9ohYDvSn6yfn!!vNDsz?#%XLcpr0H#NfVX1x*-k6+2cW z3G|YDe&F3C`DaX|Rvdi4F8zbCkz)Pg1UdbUu12x%ox1#tZ(79Kh4GE+bVdqN+6nr0 z6b$Yr=+{|Dof8FCV~YjpT5GSRL|QeB=woKa!eYMF*UZQPW>#&fkZZeA5#-aIRm_?e zg$POf@XcZ}hFF=HZsmilx-wh#dzhSVqhGR?Lj^(j+0z&&r_>ec!pr+X7Dz-fOzi+nl&w&r$$EbURDKfyy&33GDt|k)F*AAk+4}b{PMfe>^klx z`-GRd&&8nAfIlF(>an3SN_0umBLzcpebFQP@^o?^UbJr`T!l)G_BB zH}0|^LwlJR(948IC-M5~E99ORa(&|TW&Y+oN;`v>5}yZ`-$N&po&CB9o_w??i#}Ni zF3)Yp*_>^k@EBxofrGnC|3_iTWM)M5=d!1gy{>!~q>jRE(va;hB4^wykY9eYkV>1{ zJZ$r6e$9e7CO>W=KC*GuCWFM(F;>!g7>SG0^4iM|CZ}6(T1R-Fse@D7C@*|w)Ysk5 z8DnhB|4B5%`d+tVlY16+oq!|<9$zg^y_xALgUK~kkn{7!x02H)GQ;kBn9uu41PPm~Cn?Vx!yE}?4OPvjQqk0-e zepUxzHcBG3qh5&86yeYAB;4B{5yv(piCNR_!m2}%7%d!MWQvGwOGLXJOGWHg?+K<2 zYSlE~W-Vyl5+@7aZ_kNBAGxP|SYx$(zOg;y2G!l=tCb;K2Wp74YB`qY{!sgYtR5 zt_BVt_R48jMTn0!R`SvH!F-y7bRZ8=Sp#K_Z$L|Ebqo4zsgsQ17Nnkeyz-Wt_!upA zi-xjlLGLl=$i~LlG@!!Oj-ey203!FmO0Nx zVl`_>8CFQBen>JHpj|fu54gL0M&pgjlWIMI)oN%$yKGT2Et}NN9={3kuIftKW#@_w$R0OEvQDYzO(p z0nT0u5Mj|!c&ScWO%VDFDPZtuE5BRj#C0_!cfqo%5H-F!LF*PeIKH)t17FoW#1)qX znfZDgxre+QI#ri`{w-^AwqHL`$f)P`HumtJ;!;cdt}dCpJgL_OHG zL|VQMd(2P^%YP9=pDuUiQ#vi0#l{Q{zgSi^H2*NmJ}Jj$mY6%k&bpn|{%yU_%$Wp75eq$&~=TI~%xI8pNQJC@u{) z4A@~}A~kYgr4^xuJV%s9o*}y==&{)~7_<_H&-gfWqSYT?YVuX%!Fd;JId}J6>_I~n zq<|_&0acI!svreaK?z5lIf8C) zxBvdb+f>BO5wzg}7nIf73SuATZ#_46dmyI%d-G4!3%m9Y?l-P|Z$7+=xD%LLpH@*( gQBhG*dB_0%3(vUQh+>gFKmY&$07*qoM6N<$g4>$-%>V!Z literal 0 HcmV?d00001 diff --git a/src/en/gogoanime/res/mipmap-mdpi/ic_launcher.png b/src/en/gogoanime/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..1bd68c8c23b8ee80a13fa2c498eec05f7712e88f GIT binary patch literal 1235 zcmV;^1T6cBP)6@ng|k5ASNOziIRv0qr9jP<%I`) zKujc2z(yp(15pG55+vcOQjpM;ZHqL8Qnu}0W_HJP79o~h*rml4vcF`qvnS`A`Tx&3 z^Ue8Y$dVU7{zGA@A}6Ys%)mWE)OJ|hEc0#n9X)9ErP{cgbR5LsC3z-bkz9cN|slU5!ZVZvz>m|x?dAV<&i zYAZFB7OE;NeZF3@&0GiINVhXl)bZR?HaY__@^eMn12O9Mbh7d#H~vDAh%f!MFgwq#@eR}}H*LM(C09Ws8>eCf@D@;Zm zRb?hxBPyj{JwN{1#oTEQ>=uFYA_-THo{=SzW@bpSM58~X_2zux36@S>fT1nG>iRuI zyf%tWZuV_I2;n=^($SYZU~r*P`_1==YJQ$UJ1@x5s|K^6oqL_4>avSB+AMrrt!dh! z&f5Kjy5vxu`d09W>RURicfak4go;TFthkny-NYcL$hzeoR2Aya$ESDVXcN<_%oG(! zOs=%DbAOjs-WgOGXn@ipBc~c=tWg!0TSPL#+e=+k6dIAkQCbc)VVPFVRjZx{9~#Q; z&EHf1-um8`?wPJndKad36A#MOb8f$nv1Jlpf8gcVmIAGOpj%|^8*avrlz4H{jp$NU zE^+qqP#zs-L@(;N+EBvNqfNXz!@-ym37r7XjIrPi$eeh0Jtyhl)72kw^yO74YfAYZ z@a2fCUFPPGW(EIwg~O-9%vs`M!#f@peSC=-)fOUhluK9Qvoa)K&*#fMv>Xf3*rYIL zqJ^%mm^O1RyTF=tm)UVRp5p3zLdl+^$dk`OYeza`n)(bh94x{j>8Pk_#OoAjZi_N_ z#5pF8GV{ZlT=pIhV=@YKhGJU%uU2~baAOB6mR)4y>RjyxuYJCm5krjRyG3SBw^KMU zK7PtS32d6;Q#P<_v5Rdx0$MbAeYS(|_H|=2=(o$>$Ii#W!+U8FZMn0yRCuJK?cT^Nz8onFJ4*G#%r@2 z3@bG7TSI)Q1iE8PUD!gtN5F2;AuI53iGj~H$4Aqbr|10kfL1RetGMkVqpB^q%mPDw z2Ikk;cp&%Aqxo&4PE)0rk~Ak$ayp_3Q=~XGlYqELrXvz~3g=%EnF^@_+yU002ovPDHLkV1kMZRha+) literal 0 HcmV?d00001 diff --git a/src/en/gogoanime/res/mipmap-xhdpi/ic_launcher.png b/src/en/gogoanime/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4f2d6d9784c0122c139b9d3795c113a0e03a1ca0 GIT binary patch literal 3130 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 YYe!tF`-zTk|9%31rYh_y_AxyCKjhdCaR2}S literal 0 HcmV?d00001 diff --git a/src/en/gogoanime/res/mipmap-xxhdpi/ic_launcher.png b/src/en/gogoanime/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..1a6056f75e882ca2ea0c157a2710376b0a9de27f GIT binary patch literal 5462 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 Gy!{W6QI~4~ literal 0 HcmV?d00001 diff --git a/src/en/gogoanime/res/mipmap-xxxhdpi/ic_launcher.png b/src/en/gogoanime/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..67e413415f2fd1da173c9a824980a2eb7358cdeb GIT binary patch literal 8180 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 literal 0 HcmV?d00001 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 new file mode 100644 index 00000000..b05f103c --- /dev/null +++ b/src/en/gogoanime/src/eu/kanade/tachiyomi/animeextension/en/gogoanime/GogoAnime.kt @@ -0,0 +1,299 @@ +package eu.kanade.tachiyomi.animeextension.en.gogoanime + +import android.app.Application +import androidx.preference.ListPreference +import androidx.preference.MultiSelectListPreference +import androidx.preference.PreferenceScreen +import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource +import eu.kanade.tachiyomi.animesource.model.AnimeFilterList +import eu.kanade.tachiyomi.animesource.model.SAnime +import eu.kanade.tachiyomi.animesource.model.SEpisode +import eu.kanade.tachiyomi.animesource.model.Video +import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource +import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor +import eu.kanade.tachiyomi.lib.gogostreamextractor.GogoStreamExtractor +import eu.kanade.tachiyomi.lib.mp4uploadextractor.Mp4uploadExtractor +import eu.kanade.tachiyomi.lib.streamwishextractor.StreamWishExtractor +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.util.asJsoup +import eu.kanade.tachiyomi.util.parallelCatchingFlatMapBlocking +import okhttp3.Request +import okhttp3.Response +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get + +class GogoAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() { + + override val name = "Gogoanime" + + // TODO: Check frequency of url changes to potentially + // add back overridable baseurl preference + override val baseUrl = "https://anitaku.to" + + override val lang = "en" + + override val supportsLatest = true + + override fun headersBuilder() = super.headersBuilder() + .add("Origin", baseUrl) + .add("Referer", "$baseUrl/") + + private val preferences by lazy { + Injekt.get().getSharedPreferences("source_$id", 0x0000) + } + + // ============================== Popular =============================== + override fun popularAnimeRequest(page: Int): Request = GET("$baseUrl/popular.html?page=$page", headers) + + override fun popularAnimeSelector(): String = "div.img a" + + override fun popularAnimeFromElement(element: Element): SAnime = SAnime.create().apply { + setUrlWithoutDomain(element.attr("href")) + thumbnail_url = element.selectFirst("img")!!.attr("src") + title = element.attr("title") + } + + override fun popularAnimeNextPageSelector(): String = "ul.pagination-list li:last-child:not(.selected)" + + // =============================== Latest =============================== + override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/home.html?page=$page", headers) + + override fun latestUpdatesSelector(): String = "div.img a" + + override fun latestUpdatesFromElement(element: Element) = SAnime.create().apply { + thumbnail_url = element.selectFirst("img")?.attr("src") + title = element.attr("title") + val slug = element.attr("href").substringAfter(baseUrl) + .trimStart('/') + .substringBefore("-episode-") + setUrlWithoutDomain("/category/$slug") + } + + override fun latestUpdatesNextPageSelector(): String = popularAnimeNextPageSelector() + + // =============================== Search =============================== + override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request { + val params = GogoAnimeFilters.getSearchParameters(filters) + + return when { + params.genre.isNotEmpty() -> GET("$baseUrl/genre/${params.genre}?page=$page", headers) + params.recent.isNotEmpty() -> GET("$AJAX_URL/page-recent-release.html?page=$page&type=${params.recent}", headers) + params.season.isNotEmpty() -> GET("$baseUrl/${params.season}?page=$page", headers) + else -> GET("$baseUrl/filter.html?keyword=$query&${params.filter}&page=$page", headers) + } + } + + override fun searchAnimeSelector(): String = popularAnimeSelector() + + override fun searchAnimeFromElement(element: Element): SAnime = popularAnimeFromElement(element) + + override fun searchAnimeNextPageSelector(): String = popularAnimeNextPageSelector() + + // ============================== Filters =============================== + override fun getFilterList(): AnimeFilterList = GogoAnimeFilters.FILTER_LIST + + // =========================== Anime Details ============================ + override fun animeDetailsParse(document: Document): SAnime { + val infoDocument = document.selectFirst("div.anime-info a[href]")?.let { + client.newCall(GET(it.absUrl("href"), headers)).execute().asJsoup() + } ?: document + + return SAnime.create().apply { + title = infoDocument.selectFirst("div.anime_info_body_bg > h1")!!.text() + genre = infoDocument.getInfo("Genre:") + status = parseStatus(infoDocument.getInfo("Status:").orEmpty()) + + description = buildString { + val summary = infoDocument.selectFirst("div.anime_info_body_bg > div.description") + append(summary?.text()) + + // add alternative name to anime description + infoDocument.getInfo("Other name:")?.also { + if (isNotBlank()) append("\n\n") + append("Other name(s): $it") + } + } + } + } + + // ============================== Episodes ============================== + private fun episodesRequest(totalEpisodes: String, id: String): List { + val request = GET("$AJAX_URL/load-list-episode?ep_start=0&ep_end=$totalEpisodes&id=$id", headers) + val epResponse = client.newCall(request).execute() + val document = epResponse.asJsoup() + return document.select("a").map(::episodeFromElement) + } + + override fun episodeListParse(response: Response): List { + val document = response.asJsoup() + val totalEpisodes = document.select(episodeListSelector()).last()!!.attr("ep_end") + val id = document.select("input#movie_id").attr("value") + return episodesRequest(totalEpisodes, id) + } + + override fun episodeListSelector() = "ul#episode_page li a" + + override fun episodeFromElement(element: Element): SEpisode { + val ep = element.selectFirst("div.name")!!.ownText().substringAfter(" ") + return SEpisode.create().apply { + setUrlWithoutDomain(element.attr("abs:href")) + episode_number = ep.toFloat() + name = "Episode $ep" + } + } + + // ============================ Video Links ============================= + private val gogoExtractor by lazy { GogoStreamExtractor(client) } + private val streamwishExtractor by lazy { StreamWishExtractor(client, headers) } + private val doodExtractor by lazy { DoodExtractor(client) } + private val mp4uploadExtractor by lazy { Mp4uploadExtractor(client) } + + override fun videoListParse(response: Response): List