From 33fcaac8076bb7efb29b5bf94a501fe5296e9dd8 Mon Sep 17 00:00:00 2001 From: kodjomoustapha <107993382+kodjodevf@users.noreply.github.com> Date: Thu, 9 May 2024 14:31:43 +0100 Subject: [PATCH] fix #55 --- dart/anime/anime_source_list.dart | 2 - dart/anime/src/de/aniflix/aniflix.dart | 240 ------------------------- dart/anime/src/de/aniflix/icon.png | Bin 3487 -> 0 bytes dart/anime/src/de/aniflix/source.dart | 16 -- dart/manga/src/all/comick/comick.dart | 6 +- dart/manga/src/all/comick/sources.dart | 2 +- 6 files changed, 4 insertions(+), 262 deletions(-) delete mode 100644 dart/anime/src/de/aniflix/aniflix.dart delete mode 100644 dart/anime/src/de/aniflix/icon.png delete mode 100644 dart/anime/src/de/aniflix/source.dart diff --git a/dart/anime/anime_source_list.dart b/dart/anime/anime_source_list.dart index 6e6e4173..4fcf9782 100644 --- a/dart/anime/anime_source_list.dart +++ b/dart/anime/anime_source_list.dart @@ -5,7 +5,6 @@ import 'multisrc/zorotheme/sources.dart'; import 'src/all/animeworldindia/sources.dart'; import 'src/all/nyaa/source.dart'; import 'src/ar/okanime/source.dart'; -import 'src/de/aniflix/source.dart'; import 'src/de/animetoast/source.dart'; import 'src/en/animepahe/source.dart'; import 'src/en/aniwave/source.dart'; @@ -47,7 +46,6 @@ List dartAnimesourceList = [ yomoviesSource, animesamaSource, nineanimetv, - aniflix, ...animeworldindiaSourcesList, nyaaSource, animepaheSource, diff --git a/dart/anime/src/de/aniflix/aniflix.dart b/dart/anime/src/de/aniflix/aniflix.dart deleted file mode 100644 index 3195d02b..00000000 --- a/dart/anime/src/de/aniflix/aniflix.dart +++ /dev/null @@ -1,240 +0,0 @@ -import 'package:mangayomi/bridge_lib.dart'; -import 'dart:convert'; - -class AniFlix extends MProvider { - AniFlix({required this.source}); - - MSource source; - - final Client client = Client(source); - - @override - Future getPopular(int page) async { - final headers = getHeader(source.baseUrl); - final res = (await client.get( - Uri.parse("${source.baseUrl}/api/show/new/${page - 1}"), - headers: headers)) - .body; - - return parseAnimeList(res, true); - } - - @override - Future getLatestUpdates(int page) async { - final headers = getHeader(source.baseUrl); - final res = (await client.get( - Uri.parse("${source.baseUrl}/api/show/airing/${page - 1}"), - headers: headers)) - .body; - final datas = json.decode(res); - List animeList = []; - List ids = []; - for (var data in datas) { - final anim = data["season"]["show"]; - if (!ids.contains(anim["id"])) { - ids.add(anim["id"]); - MManga anime = MManga(); - anime.name = anim["name"]; - anime.imageUrl = - "${source.baseUrl}/storage/" + (anim["cover_portrait"] ?? ""); - anime.link = - getUrlWithoutDomain("${source.baseUrl}/api/show/${anim['url']}"); - anime.description = anim["description"]; - if (anim["airing"] == 0) { - anime.status = MStatus.completed; - } else if (anim["airing"] == 1) { - anime.status = MStatus.ongoing; - } - animeList.add(anime); - } - } - return MPages(animeList, true); - } - - @override - Future search(String query, int page, FilterList filterList) async { - final res = await client.post( - Uri.parse("${source.baseUrl}/api/show/search"), - headers: {'Referer': source.baseUrl}, - body: {"search": query}); - return parseAnimeList(res.body, false); - } - - @override - Future getDetail(String url) async { - final res = (await client.get(Uri.parse("${source.baseUrl}$url"))).body; - MManga anime = MManga(); - final jsonRes = json.decode(res); - anime.name = jsonRes["name"]; - if (jsonRes["cover_portrait"] != null) { - anime.imageUrl = "${source.baseUrl}/storage/" + jsonRes["cover_portrait"]; - } - anime.description = jsonRes["description"]; - anime.genre = (jsonRes["genres"] as List>) - .map((e) => e["name"]) - .toList(); - var seasons = jsonRes["seasons"]; - final animeUrl = jsonRes["url"]; - List? episodesList = []; - for (var season in seasons) { - List> episodes = season["episodes"]; - int page = 1; - final res = (await client.get(Uri.parse( - "${source.baseUrl}/api/show/$animeUrl/${season["id"]}/$page"))) - .body; - - bool hasMoreResult = - (json.decode(res)["episodes"] as List>) - .isNotEmpty; - - while (hasMoreResult) { - final res = (await client.get(Uri.parse( - "${source.baseUrl}/api/show/$animeUrl/${season["id"]}/$page"))) - .body; - final epList = - json.decode(res)["episodes"] as List>; - page++; - episodes.addAll(epList); - hasMoreResult = epList.isNotEmpty; - } - for (var episode in episodes) { - String name = episode["name"] ?? ""; - if (name.toLowerCase().contains("folge") || - name.toLowerCase().contains("episode")) { - name = ""; - } else { - name = ": $name"; - } - MChapter ep = MChapter(); - ep.name = "Staffel ${season["number"]} Folge ${episode["number"]}$name"; - ep.url = - "/api/episode/show/$animeUrl/season/${season["number"]}/episode/${episode["number"]}"; - episodesList.add(ep); - } - } - - anime.chapters = episodesList.reversed.toList(); - return anime; - } - - @override - Future> getVideoList(String url) async { - final res = (await client.get(Uri.parse("${source.baseUrl}$url"), - headers: getHeader(source.baseUrl))) - .body; - final jsonRes = json.decode(res)["streams"]; - List videos = []; - final hosterSelection = preferenceHosterSelection(source.id); - for (var stream in jsonRes) { - List a = []; - String quality = '${stream["hoster"]["name"]} - ${stream["lang"]}'; - String link = stream["link"]; - if ((link.contains("https://dood") || link.contains("https://d0")) && - hosterSelection.contains("doodstream")) { - a = await doodExtractor(link, quality); - } else if (link.contains("https://streamtape") && - hosterSelection.contains("streamtape")) { - a = await streamTapeExtractor(link, quality); - } else if (link.contains("https://voe.sx") && - hosterSelection.contains("voe")) { - a = await voeExtractor(link, quality); - } else if (link.contains("https://streamlare") && - hosterSelection.contains("streamlare")) { - a = await streamlareExtractor(link, quality, '', ''); - } - videos.addAll(a); - } - - return sortVideos(videos, source.id); - } - - MPages parseAnimeList(String res, bool hasNextPage) { - final datas = json.decode(res); - List animeList = []; - - for (var data in datas) { - MManga anime = MManga(); - anime.name = data["name"]; - anime.imageUrl = - "${source.baseUrl}/storage/" + (data["cover_portrait"] ?? ""); - anime.link = - getUrlWithoutDomain("${source.baseUrl}/api/show/${data['url']}"); - anime.description = data["description"]; - if (data["airing"] == 0) { - anime.status = MStatus.completed; - } else if (data["airing"] == 1) { - anime.status = MStatus.ongoing; - } - animeList.add(anime); - } - return MPages(animeList, hasNextPage); - } - - List sortVideos(List videos, int sourceId) { - String hoster = getPreferenceValue(sourceId, "preferred_hoster"); - String sub = getPreferenceValue(sourceId, "preferred_sub"); - videos.sort((MVideo a, MVideo b) { - int hosterMatchA = 0; - if (a.url.toLowerCase().contains(hoster.toLowerCase()) && - a.quality.toLowerCase().contains(sub.toLowerCase())) { - hosterMatchA = 1; - } - int hosterMatchB = 0; - if (b.url.toLowerCase().contains(hoster.toLowerCase()) && - b.quality.toLowerCase().contains(sub.toLowerCase())) { - hosterMatchB = 1; - } - return hosterMatchB - hosterMatchA; - }); - return videos; - } - - List preferenceHosterSelection(int sourceId) { - return getPreferenceValue(sourceId, "hoster_selectionn"); - } - - @override - List getSourcePreferences() { - return [ - ListPreference( - key: "preferred_hoster", - title: "Standard-Hoster", - summary: "", - valueIndex: 0, - entries: [ - "Streamtape", - "Doodstream", - "Voe", - "Streamlare" - ], - entryValues: [ - "https://streamtape.com", - "https://dood", - "https://voe.sx", - "https://streamlare.com" - ]), - ListPreference( - key: "preferred_sub", - title: "Standardmäßig Sub oder Dub?", - summary: "", - valueIndex: 0, - entries: ["Sub", "Dub"], - entryValues: ["Sub", "Dub"]), - MultiSelectListPreference( - key: "hoster_selectionn", - title: "Hoster auswählen", - summary: "", - entries: ["Streamtape", "Doodstream", "Voe", "Streamlare"], - entryValues: ["streamtape", "doodstream", "voe", "streamlare"], - values: ["streamtape", "doodstream", "voe", "streamlare"]), - ]; - } -} - -Map getHeader(String url) { - return {'Referer': url}; -} - -AniFlix main(MSource source) { - return AniFlix(source: source); -} diff --git a/dart/anime/src/de/aniflix/icon.png b/dart/anime/src/de/aniflix/icon.png deleted file mode 100644 index cd1812728b70621d623e0e8bbd27959bf389c3b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3487 zcmV;Q4Pf$#P)@9%I{RlYgn#W^a;bz63|e!q~ymx-pLCu zywEUzaBz@q+qUt}JMZ8)wf~J*UU`K#-uNdVTKw{ZAN&q4zx;AdnGcQ~o)1o(U|T`amNwB_C{-o6Scsxb zf{95GvB2XrC8|geae53zlrBU>ThmzS}IfG(G> zx@S~6B+uyhs#=%!##f4xxxMwtcZ2}XbJ?+D#|_III&_H6&d!E;)22N+hM z8XTnQ=*Lm3_7o@ya@4CBz{rY1pksko8fp~@b%GXEWvYIcNhsGR1%ZY)`lpx=xc~lz zY}~kU%>47`&*S?(OO`CTfd+t-f=3?NP?vx7@L?VpGT;h^l;D?sAvOu7#td{yNskFD zcKY`-iZ&_88~DqCu;L@udV<4&t|-XHCipE+@XG-W5>f_s&J;*ulVnV+1@NCkl8YrV zbqG*OvSY_{b(;HS%Rk5ndf0 zsw=ZxDn3<;w@Xnp)hYx(&A1R44wf{pUN2S3{&|bTs{=_iHAhK~6%4QTM+E(_rEDq$ z=-3~`TJT!m#Fk7=x(RA-ZsM6|o~cX!@WT%)0>6>{kLqYfO392FEv#9yrY_&#*Nf)@ zDaC$WYFNhx$Dun&^42>F72E%=Lb994MX=hd6+;^M>w!r49`MqPcp-Sj$4Bq+X%V{f zQ>-JldGn*pojbQK{p87$kq^_FqeqYO&_fT6Sw}XT1z_E}b-1oulXvO-dFGzE5QUv7 z#s1PrC2zIkva6+)UDI3G=sH}ja*W?{or(bW`^mEXZ@L08YW>un>xN6QLhP6(nD18k z29fxK*ZakUw+2lr0jZS7jvdd9DSUuar%o|z)+}buoOwe6T-Ra!`g$$t>B-Sql8|xv z0yq~Y!u*bxVr?qTTG!)LSi5I#ljDF9d>$A+(^bTz6hou7*X@n_fUXeiY>OATX=> z;(C0pLxzN)tCSG4SV$Hs1x9e7G>Vv%B0ow4$|2>mO@jLznM6Y6@YBG*4hRNAGj#}1 zO7i^kJCLKo!F)c?o;`b5wrtr=!_Q<0Bh9_{-dh(X=`e%??;|o2Jcq7gp(g*ufqpuF z)5nQYz;T@ru*r2RLfki!q|Xq7)l%}+7=rv!iyGBG5S9DCzc$4NeBc>3w5>(ck^ z*@KjdIdkSPJUq1#M?fPp^_#9;}{;CjED48`%YcT}G-}wo{INWb6Y1*z0S~2a|g$!-O;DNew#RI*hvuRMUZzx~mWFJmPa|Ho#Xk@tV*+tUf ze{>T4c)(|2Ks?%jC*XHeF2!mBMErs}>HYrQz~mo@G9eA{Jdf?$x8Jm!F^1mWUUu%> zS(n${-OcduFvb|poH@gS1q(>0)3sW1`7*Q4eF@WAK`ORQYh`n`1x!c=$SPUsK>fw+ z1z>a>xr7zx>W2Z}PNl&Zn$V=ttct_aX~Hl^D!%O*?sGDL!6{G9h{*Pz3k~lTrx*dt zm$x?@(=o=dckf=b)^v1q(BI!rCX->_ym@uy4jg!oQmI53hGRxaJv}{iIvH@HXy&0z zb3DW>K!@c(os5(`*3_H~P3tfs10W2d-#P@XBXTNQ5rvrxrNcs{lj+AWp1L%Gf5?Y- z zAuA^#O{%JAt4J`l^TMy??@a5zZ6A zvZj2gRHCP+r_##befM2DIy&m=JaFJW9uy9jv;iGJ7)F9Ccead)>^m}cx}(FycrZts z#2=LBbWQ9lj7ajRa=t=yI?#L&+_~f6ZZ@B$09spHSGjKHAkhgR+HsUjrM!j@Xl*DK zM=-{a$wX6-#+Zg3wPJCEFw{sX@jMqPMV(L4+E6GI`9A^;NMrPn?-w=?4h|lnsw+2X z8W02_K~T79xk6!lLxx&wip3G`M%cBXmHp{ZLA^RtPau2;ow7e9>KI z?}afYFvj$SVQ^$*#D8sMWaz(v0pKc=^d-G=IS;r8XabrX$C>83>A6bb-o-vagdwF; zsdzaEf _aniflix; -const _aniflixVersion = "0.0.3"; -const _aniflixCodeUrl = - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/de/aniflix/aniflix.dart"; -Source _aniflix = Source( - name: "Aniflix", - baseUrl: "https://aniflix.cc", - lang: "de", - typeSource: "single", - iconUrl: - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/de/aniflix/icon.png", - sourceCodeUrl: _aniflixCodeUrl, - version: _aniflixVersion, - isManga: false); diff --git a/dart/manga/src/all/comick/comick.dart b/dart/manga/src/all/comick/comick.dart index 1354ef50..8a51c7cb 100644 --- a/dart/manga/src/all/comick/comick.dart +++ b/dart/manga/src/all/comick/comick.dart @@ -1,5 +1,4 @@ import 'package:mangayomi/bridge_lib.dart'; -import 'dart:convert'; class ComickFun extends MProvider { ComickFun({required this.source}); @@ -123,6 +122,7 @@ class ComickFun extends MProvider { "${source.apiUrl}${url.replaceAll("#", '')}?tachiyomi=true"), headers: headers)) .body; + final lang = "${source.lang != "all" ? "&lang=${source.lang}" : ""}"; MManga manga = MManga(); manga.author = jsonPathToString(res, r'$.authors[*].name', ''); manga.genre = jsonPathToString( @@ -132,13 +132,13 @@ class ComickFun extends MProvider { manga.status = parseStatus(jsonPathToString(res, r'$..comic.status', ''), statusList); final chapUrlReq = - "${source.apiUrl}${url.replaceAll("#", '')}chapters?lang=${source.lang}&tachiyomi=true&page=1"; + "${source.apiUrl}${url.replaceAll("#", '')}chapters?${lang}&tachiyomi=true&page=1"; final request = (await client.get(Uri.parse(chapUrlReq), headers: headers)).body; var total = jsonPathToString(request, r'$.total', ''); final chapterLimit = int.parse(total); final newChapUrlReq = - "${source.apiUrl}${url.replaceAll("#", '')}chapters?limit=$chapterLimit&lang=${source.lang}&tachiyomi=true&page=1"; + "${source.apiUrl}${url.replaceAll("#", '')}chapters?limit=$chapterLimit${lang}&tachiyomi=true&page=1"; final newRequest = (await client.get(Uri.parse(newChapUrlReq), headers: headers)).body; diff --git a/dart/manga/src/all/comick/sources.dart b/dart/manga/src/all/comick/sources.dart index 6d0915a0..1fe49c0a 100644 --- a/dart/manga/src/all/comick/sources.dart +++ b/dart/manga/src/all/comick/sources.dart @@ -1,6 +1,6 @@ import '../../../../../model/source.dart'; -const _comickVersion = "0.0.7"; +const _comickVersion = "0.0.75"; const _comickSourceCodeUrl = "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/manga/src/all/comick/comick.dart";