From 1eac67c0540c6393e62b3230505f9a1dab3ca71c Mon Sep 17 00:00:00 2001 From: Claudemirovsky <63046606+Claudemirovsky@users.noreply.github.com> Date: Wed, 13 Sep 2023 04:13:42 -0300 Subject: [PATCH] feat(src/tr): New source: Animeler (#2186) --- src/tr/animeler/AndroidManifest.xml | 22 + src/tr/animeler/build.gradle | 28 + .../animeler/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3730 bytes .../animeler/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1948 bytes .../animeler/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5901 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 12033 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 19115 bytes .../animeextension/tr/animeler/Animeler.kt | 376 ++++++++++ .../tr/animeler/AnimelerFilters.kt | 683 ++++++++++++++++++ .../tr/animeler/AnimelerUrlActivity.kt | 41 ++ .../tr/animeler/dto/AnimelerDto.kt | 107 +++ 11 files changed, 1257 insertions(+) create mode 100644 src/tr/animeler/AndroidManifest.xml create mode 100644 src/tr/animeler/build.gradle create mode 100644 src/tr/animeler/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/tr/animeler/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/tr/animeler/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/tr/animeler/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/tr/animeler/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/tr/animeler/src/eu/kanade/tachiyomi/animeextension/tr/animeler/Animeler.kt create mode 100644 src/tr/animeler/src/eu/kanade/tachiyomi/animeextension/tr/animeler/AnimelerFilters.kt create mode 100644 src/tr/animeler/src/eu/kanade/tachiyomi/animeextension/tr/animeler/AnimelerUrlActivity.kt create mode 100644 src/tr/animeler/src/eu/kanade/tachiyomi/animeextension/tr/animeler/dto/AnimelerDto.kt diff --git a/src/tr/animeler/AndroidManifest.xml b/src/tr/animeler/AndroidManifest.xml new file mode 100644 index 000000000..1460a1343 --- /dev/null +++ b/src/tr/animeler/AndroidManifest.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + diff --git a/src/tr/animeler/build.gradle b/src/tr/animeler/build.gradle new file mode 100644 index 000000000..82062f7d6 --- /dev/null +++ b/src/tr/animeler/build.gradle @@ -0,0 +1,28 @@ +plugins { + alias(libs.plugins.android.application) + alias(libs.plugins.kotlin.android) + alias(libs.plugins.kotlin.serialization) +} + +ext { + extName = 'Animeler' + pkgNameSuffix = 'tr.animeler' + extClass = '.Animeler' + extVersionCode = 1 + libVersion = '13' +} + +dependencies { + implementation(project(":lib-dood-extractor")) + implementation(project(":lib-filemoon-extractor")) + implementation(project(":lib-gdriveplayer-extractor")) + implementation(project(":lib-sibnet-extractor")) + implementation(project(":lib-streamlare-extractor")) + implementation(project(":lib-okru-extractor")) + implementation(project(":lib-streamtape-extractor")) + implementation(project(":lib-uqload-extractor")) + implementation(project(":lib-voe-extractor")) + implementation(project(":lib-vudeo-extractor")) +} + +apply from: "$rootDir/common.gradle" diff --git a/src/tr/animeler/res/mipmap-hdpi/ic_launcher.png b/src/tr/animeler/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..2204aaea19afa9b74271330f22e9dfa88933d281 GIT binary patch literal 3730 zcmV;D4sG#?P)Gm=d4-1WJHp6jB0I0<^jyQc_S!K_vyPjzCF4tK(OSK}Ar| zI~`&wAER8xtLUUmkD{ZD6XZN>Qw3~ zESoSG49`(}U-S8VmokttfTVZz+O=!%rGr1DN=x8m zQ^`tT6$-If#w%@yVVJnZV)?Ph9%D}ncRgUfY&l}Z&$BoZ}b(>#?} z29Q8sEOxtnD%X&=8aFEhY_Y+uustXB*+(Uk0i>ZXRs!T&3`ofcCFdIX;1n~Ctq{bL zQFu`sl7i-P0#fQ?%Z-?W6A%Ld@LO+!I5GtBn0L~rwJ7!)YAW}LhZ5IQTAb@pLf~~3rW41z7 zQww%uC#jEv|F6GCeBkV5Rd76#{&}!v6%bt)k(hlWfk3K}AmzKmD>qd%Y!L@ZDNh%BM{}Yk{$`%j| z33Srq2HUs}hK?Nw4V)s?JVNR56j)~+5_8k!hM}UV=S_o))&NG(BI%_*=EpKJOx@|BGc;V${;d}N0 z0#Farj@x0;lz}(e;I*i+aBx33M>RC-Hd6-53eT^;jd=eVO88QIQfr{n>cQ7EAwDw> zacuZ1IO+>S$5XK=De+29J@3L(Xx$9!jeEg|Sp=rfQ@o2KJk<}rvJs*F<8*T-k&1@X z*O20_aNRaUPW%(8P#}AdHX4m@8pVVy?}n|q1O6AE15be%5V+1q^*<9Xt!?p{;0y`RV6@g$0OJP9z%|z&STS#U?O*?pZ_!UxUhE z0&lj10}FvSK*tayM-^P7ClGw;+4KOB3^d$__HwgjUqU95kh?}66KZPFAPEBuw%aaJrF%J&~3N@jNXd+KlZ|Oatb5& zUJqZR8r;|zxSk$pFN`2Uu9tfM9@Ly*v9QUBiHd2kbF*O2odp|>LFH@&8k@n*xDiZ7 z;2AguYu6s|(FxFtC;>!D=ujVkqn2xtF-W+KaA$4k0a%oMc>h% zAu)9+J0SYo+yi6;On^k4lH!u1eWUa zApv#wp91d=q3!A^ZYs^TP1f1>p8RESsq1m|`ZB-u!=Zzxj)Wh+3AA)p^k5t`?uARKre{Kbe zJP)?*Iz+4M(co(V8;p@!yy*YVHmCy$*p9m3c&r}@1COb@*TWa>N7d^TYs@B$@6e-h zzZ(f11@c%DJONE;Sg2h=jPAPu&cBlTMMRn}Q6DA(82(;2Y=7h#qekbH|TDL(7iVnT-h5>Jc!Ba0~#w8(h%L z#?U%Yg^PETgC80Ln`GhJxen%jKWwMH@NKr!U5p^Em2%^im~YUb^58VWPJ&)Q*H&|s+Ne#Fk7LB(f&gf%@H zT&kIc*BZw5=d2jn6vKsAeoeFe1(bJv3~K@#5GrHSOC=s^jM@g_ed>N1rPEW09HW@C z)@5sd55i|?-a{K5Sep2X30i9<$&CaxL9#<{Fk-{bi)$5$M`>r0;li`U0%&@1?mA;2%1Y{;u2pKAOnTT<0H`C!l=u z1{l|LA<%aiDT3c$V@S~pr~h0u(6kZul56Quc9!aIdjIGC9wWCx_T z+Fcq;HN;tJB)xzjKm>!slI}jxf;Ex{9r9gxBu}Mn}j>mL}BX$D}l_wH=A` zy-3DmU}@dOiDVTWXUHN>WWbV@(x|7VVqo=1(x@1tARErE-yNhWw8bvN9*O5Y?Q9bmAIYK zz7+sX9#Ekd%~xNE(Zv|r3jiQjH9H{MpLb1NOsPA`#Tq%a%2}`AcwvAFQByILq(pIr z^hp7bzKlw$xT$d_*7Om71wKu5_4>0m*xYYFBp2*^uprQPy8LA{O7j)NFR$0oH{f^2{s4Uq?Ei8uAx{(T}1jgci$kktsi>=Jwg3glQ{F}>X%9V#%q-G?yk{}tW z7^rBeNXn8Pta~RvP$%uPq5qfCKqy6;R*v*Jot%Et19kKpZQ!|5BtV($tNgwA|EwVa zl3+-=*w`B->jQNe^CTdWY9vKvKL3B3uB_LKAIFryEP00Yo$5Nu&?u-?0we>e1gHc^ wfgk0mQc_S!K_vyPjzCF4tK(OSK{EXQ3(`+#-=Nr&J^%m!07*qoM6N<$g2Kb@LI3~& literal 0 HcmV?d00001 diff --git a/src/tr/animeler/res/mipmap-mdpi/ic_launcher.png b/src/tr/animeler/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..601314a568c2326984a16571c0299b06d50f92d6 GIT binary patch literal 1948 zcmV;N2V?k&P)5D4*WViSlT zfcUp*@B@T|Itpw;71|gQRAYm6ZQ2T0mNsd#ku{A|FLvUO>(A@^wfDMlWIMKV?WCfW zV(FFdvCld8dEV!J-*fJ{3~urdbCcu827&*#f*T5KD6mEk)P|7JW|wS@Q(u?i8qI2$ zUY>oKz{tpmpsMQ6BuV;;uIoOsQlIj7?R90lw(s?7(>)V*yZxA^Y0t%Cv5bMCOu#ZQ zFz|~^Ci85WStHYD&Z{-{4-&S; zWdeS`f0=;UJZR?WwW?rZd}9KY-n~(Cf^bz6@cDdA6yhkBIa;4UD+;Uzz7@~5+IK|=c|4vNV{?EH+yb>&0K+g~ z7UST0dZ2my(5bCwGo?+47X1WFhX6g9fF>8g_6`6xI~X!(8gw%G(ipTtuH>xJri8X8 z>!C))T2-xpK>!vW?kB$u-suG*b70SoV)*GJm>4|`DJKDr4yY63V6Aqrsse1^33g~0 zS}_k;t);nHw->43{2a>F%d|uiX(CfwmK)W7Gb%JB;C8#0b3i!!4KPz5;oyPK<6?Lg zGv_}5cgGG|xU(hCTXyY6;lf!$%Mw5p()*`i-@XUwH-A_1w4tPyNiBQ6)g%XJfo{w# z6|O0`w6UxJZ(LR@U=S#GwBNN4&Vm&|O+rLW!?o{TB#|RP6b!rry~#ezY2%O!2?T|H zSbJ|p+|5Hz#i9EHNdM(1ij)5VKfD9hu1(Mt8R>r&_ zFALox*z&?CEBM z|9w!z7{YJ81n)hMLGAKEw{X`KC1Qnh|3u$6U&I}+BoX=IX86xVG4X64a%WDUaCsbC zHh&!-rB5Jx;?-&bf*{0<2^@PLfYaLr?VVE)0yMd*B9jr}eee;;ckV{$-7JL31x!7+ z7d^)>!IF@Wz0Hex%Otw^9msY89bp;5R06`-JYt82kRGt1@8~7S9y?+W4WW2(3~4!x zk@J1fcn;CSTi`i83(dyi%!fY#7wp03m?x3%^TP3Q0`c1&@J(b8ePjqduU*1P{nwDE z#%l<;+%fNw@4>QpEA-c2LuTRvK6~g8c5UjzD}O!?OFjd6+iq-?_5!koxkm@#3g_WD z6{dJ)pm=TI;}W978aiYTY*%y04f|o6NrTH4z)A|(tb&CDJ;)^ghfvf9j&}35*)+tR zL2!#1ObTZqo;Zeq?;pd^i<6kX&kD^+Av>xNkrc$cLy(*r&b>#E0&=mY3Jq_IdA9B& zsZK(Z@>C6VJo?z?W!5IeuQt;uu3_f$ki(GF9f`9!OSH3!g zTiy(#xJf|dKqtEY9zmg7DDBl5NyY3=9a1ua!EraVkdJ_im_F!)%&F)<&tme*AE3n- z(S7TKh*CY-{qG^X$NwG{cL4h??58kez?0hly?+srzrD0Fi358di185-G9{u$B~sU9 z1iC}$aCxBj^kZ@Cefai21u;H_F8c^BFTRED+rI#DW)$djg9&uQHLrn{Gw4Vqpxib@ zj?gjZ*AY4s$Gme6$*F&#Yx`lOw5#Y%4{D{At3Y`q&1X@q>~_i6$ThhxQNu66~joUj@2+QnzJ z6OMZSuL6E$2vrhjoN&7kcV78pL8%k}0uTsERyZk)Q zPt$klXtB}9ESW|j(@4QKNQg9MkgRkvXPBGL8((Hw_G`71nFU=BTr(nVfUX>Jlp5b5 z6U&FYHfr<|i67Im@I!Rtwv?z>dDhYE##Dyq-yr)DS(vO)CSZI!$>?Di0-1%(c+qhq zeT=gKnap@EkR&rs4D`x3G{&_7oL>TeqrCtu9f&NEpc92_kK8vJ$d(n~AkebQ)_K5& i0_*J1mZ!Vv75EgVI1j-Qf=e&}0000b2uMjw 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 literal 0 HcmV?d00001 diff --git a/src/tr/animeler/src/eu/kanade/tachiyomi/animeextension/tr/animeler/Animeler.kt b/src/tr/animeler/src/eu/kanade/tachiyomi/animeextension/tr/animeler/Animeler.kt new file mode 100644 index 000000000..adb7a33e5 --- /dev/null +++ b/src/tr/animeler/src/eu/kanade/tachiyomi/animeextension/tr/animeler/Animeler.kt @@ -0,0 +1,376 @@ +package eu.kanade.tachiyomi.animeextension.tr.animeler + +import android.app.Application +import androidx.preference.ListPreference +import androidx.preference.MultiSelectListPreference +import androidx.preference.PreferenceScreen +import eu.kanade.tachiyomi.animeextension.tr.animeler.dto.EpisodeDto +import eu.kanade.tachiyomi.animeextension.tr.animeler.dto.FullAnimeDto +import eu.kanade.tachiyomi.animeextension.tr.animeler.dto.SearchRequestDto +import eu.kanade.tachiyomi.animeextension.tr.animeler.dto.SearchResponseDto +import eu.kanade.tachiyomi.animeextension.tr.animeler.dto.SingleDto +import eu.kanade.tachiyomi.animeextension.tr.animeler.dto.SourcesDto +import eu.kanade.tachiyomi.animeextension.tr.animeler.dto.VideoDto +import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource +import eu.kanade.tachiyomi.animesource.model.AnimeFilterList +import eu.kanade.tachiyomi.animesource.model.AnimesPage +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.AnimeHttpSource +import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor +import eu.kanade.tachiyomi.lib.filemoonextractor.FilemoonExtractor +import eu.kanade.tachiyomi.lib.gdriveplayerextractor.GdrivePlayerExtractor +import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor +import eu.kanade.tachiyomi.lib.sibnetextractor.SibnetExtractor +import eu.kanade.tachiyomi.lib.streamlareextractor.StreamlareExtractor +import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor +import eu.kanade.tachiyomi.lib.uqloadextractor.UqloadExtractor +import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor +import eu.kanade.tachiyomi.lib.vudeoextractor.VudeoExtractor +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.POST +import eu.kanade.tachiyomi.network.asObservableSuccess +import eu.kanade.tachiyomi.util.asJsoup +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.async +import kotlinx.coroutines.awaitAll +import kotlinx.coroutines.runBlocking +import kotlinx.serialization.decodeFromString +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json +import okhttp3.FormBody +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.MediaType.Companion.toMediaType +import okhttp3.Request +import okhttp3.RequestBody.Companion.toRequestBody +import okhttp3.Response +import rx.Observable +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get +import uy.kohesive.injekt.injectLazy +import java.text.SimpleDateFormat +import java.util.Locale + +class Animeler : AnimeHttpSource(), ConfigurableAnimeSource { + + override val name = "Animeler" + + override val baseUrl = "https://animeler.me" + + override val lang = "tr" + + override val supportsLatest = true + + private val json: Json by injectLazy() + + private val preferences by lazy { + Injekt.get().getSharedPreferences("source_$id", 0x0000) + } + + // ============================== Popular =============================== + override fun popularAnimeRequest(page: Int) = searchOrderBy("total_kiranime_views", page) + + override fun popularAnimeParse(response: Response): AnimesPage { + val results = response.parseAs() + val animes = results.data.map { + SAnime.create().apply { + setUrlWithoutDomain(it.url) + thumbnail_url = it.image + title = it.title + } + } + val page = response.request.url.queryParameter("page")?.toIntOrNull() ?: 1 + val hasNextPage = page < results.pages + return AnimesPage(animes, hasNextPage) + } + + // =============================== Latest =============================== + override fun latestUpdatesRequest(page: Int) = searchOrderBy("kiranime_anime_updated", page) + + override fun latestUpdatesParse(response: Response) = popularAnimeParse(response) + + // =============================== Search =============================== + override fun fetchSearchAnime(page: Int, query: String, filters: AnimeFilterList): Observable { + return if (query.startsWith(PREFIX_SEARCH)) { // URL intent handler + val id = query.removePrefix(PREFIX_SEARCH) + client.newCall(GET("$baseUrl/anime/$id")) + .asObservableSuccess() + .map(::searchAnimeByIdParse) + } else { + super.fetchSearchAnime(page, query, filters) + } + } + + private fun searchAnimeByIdParse(response: Response): AnimesPage { + val details = animeDetailsParse(response) + return AnimesPage(listOf(details), false) + } + + override fun getFilterList() = AnimelerFilters.FILTER_LIST + + override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request { + val params = AnimelerFilters.getSearchParameters(filters) + val (meta, orderBy) = when (params.orderBy) { + "date", "title" -> Pair(null, params.orderBy) + else -> Pair(params.orderBy, "meta_value_num") + } + + val single = SingleDto( + paged = page, + key = meta, + order = params.order, + orderBy = orderBy, + season = params.season.ifEmpty { null }, + year = params.year.ifEmpty { null }, + ) + + val taxonomies = with(params) { + listOf(genres, status, producers, studios, types).filter { + it.terms.isNotEmpty() + } + } + + val requestDto = SearchRequestDto(single, query, query, taxonomies) + val requestData = json.encodeToString(requestDto) + return searchRequest(requestData, page) + } + + override fun searchAnimeParse(response: Response) = popularAnimeParse(response) + + private fun searchOrderBy(order: String, page: Int): Request { + val body = """ + { + "keyword": "", + "query": "", + "single": { + "paged": $page, + "orderby": "meta_value_num", + "meta_key": "$order", + "order": "desc" + }, + "tax": [] + } + """.trimIndent() + return searchRequest(body, page) + } + + private fun searchRequest(data: String, page: Int): Request { + val body = data.toRequestBody("application/json".toMediaType()) + return POST("$baseUrl/wp-json/kiranime/v1/anime/advancedsearch?_locale=user&page=$page", headers, body) + } + + // =========================== Anime Details ============================ + override fun animeDetailsParse(response: Response) = SAnime.create().apply { + val body = response.use { it.body.string() } + .substringAfter("var anime = ") + .substringBefore("}<") + "}" + val animeDto = json.decodeFromString(body) + + setUrlWithoutDomain(animeDto.url) + thumbnail_url = animeDto.image + title = animeDto.title + artist = animeDto.studios + author = animeDto.producers + genre = animeDto.genres + status = when { + animeDto.meta.aired.orEmpty().contains(" to ") -> SAnime.COMPLETED + else -> SAnime.UNKNOWN + } + + description = buildString { + animeDto.post.post_content?.also { append(it + "\n") } + + with(animeDto.meta) { + score?.takeIf(String::isNotBlank)?.also { append("\nScore: $it") } + native?.takeIf(String::isNotBlank)?.also { append("\nNative: $it") } + synonyms?.takeIf(String::isNotBlank)?.also { append("\nDiğer İsimleri: $it") } + rate?.takeIf(String::isNotBlank)?.also { append("\nRate: $it") } + premiered?.takeIf(String::isNotBlank)?.also { append("\nPremiered: $it") } + aired?.takeIf(String::isNotBlank)?.also { append("\nYayınlandı: $it") } + duration?.takeIf(String::isNotBlank)?.also { append("\nSüre: $it") } + } + } + } + + // ============================== Episodes ============================== + override fun episodeListParse(response: Response): List { + val body = response.use { it.body.string() } + .substringAfter("var episodes = ") + .substringBefore("];") + "]" + + val episodes = json.decodeFromString>(body) + + return episodes.reversed().map { + SEpisode.create().apply { + setUrlWithoutDomain(it.url) + name = "Bölüm " + it.meta.number + episode_number = it.meta.number.toFloat() + date_upload = it.date.toDate() + } + } + } + + // ============================ Video Links ============================= + private val doodExtractor by lazy { DoodExtractor(client) } + private val filemoonExtractor by lazy { FilemoonExtractor(client) } + private val gdrivePlayerExtractor by lazy { GdrivePlayerExtractor(client) } + private val okruExtractor by lazy { OkruExtractor(client) } + private val sibnetExtractor by lazy { SibnetExtractor(client) } + private val streamlareExtractor by lazy { StreamlareExtractor(client) } + private val streamtapeExtractor by lazy { StreamTapeExtractor(client) } + private val uqloadExtractor by lazy { UqloadExtractor(client) } + private val voeExtractor by lazy { VoeExtractor(client) } + private val vudeoExtractor by lazy { VudeoExtractor(client) } + + override fun videoListParse(response: Response): List