From abc8dde439bb0f330df3696cdb3965b780e1eefb Mon Sep 17 00:00:00 2001 From: kodjomoustapha <107993382+kodjodevf@users.noreply.github.com> Date: Thu, 28 Mar 2024 11:48:51 +0100 Subject: [PATCH] + --- .github/ISSUE_TEMPLATE/config.yml | 8 - .github/ISSUE_TEMPLATE/report_issue.yml | 100 - .github/ISSUE_TEMPLATE/request_feature.yml | 55 - .github/ISSUE_TEMPLATE/request_source.yml | 52 - .github/workflows/gen_index.yml | 31 - 1.png | Bin 0 -> 127613 bytes 2.png | Bin 0 -> 46762 bytes 3.png | Bin 0 -> 53131 bytes 4.png | Bin 0 -> 124878 bytes 5.png | Bin 0 -> 38573 bytes 6.png | Bin 0 -> 205644 bytes CONTRIBUTING-JS.md | 205 -- CONTRIBUTING.md | 360 ---- LICENSE | 177 -- README.md | 32 - dart/anime/anime_source_list.dart | 56 - .../datalifeengine/datalifeengine.dart | 332 ---- .../multisrc/datalifeengine/sources.dart | 19 - .../src/frenchanime/frenchanime.dart | 13 - .../datalifeengine/src/frenchanime/icon.png | Bin 5173 -> 0 bytes .../datalifeengine/src/wiflix/icon.png | Bin 4635 -> 0 bytes .../datalifeengine/src/wiflix/wiflix.dart | 13 - dart/anime/multisrc/dopeflix/dopeflix.dart | 547 ------ dart/anime/multisrc/dopeflix/sources.dart | 19 - .../dopeflix/src/dopebox/dopebox.dart | 13 - .../multisrc/dopeflix/src/dopebox/icon.png | Bin 4126 -> 0 bytes .../multisrc/dopeflix/src/sflix/icon.png | Bin 6778 -> 0 bytes .../multisrc/dopeflix/src/sflix/sflix.dart | 13 - dart/anime/multisrc/zorotheme/sources.dart | 19 - .../zorotheme/src/hianime/hianime.dart | 14 - .../multisrc/zorotheme/src/hianime/icon.png | Bin 5120 -> 0 bytes .../multisrc/zorotheme/src/kaido/icon.png | Bin 23349 -> 0 bytes .../multisrc/zorotheme/src/kaido/kaido.dart | 13 - dart/anime/multisrc/zorotheme/zorotheme.dart | 633 ------- .../all/animeworldindia/animeworldindia.dart | 395 ---- dart/anime/src/all/animeworldindia/icon.png | Bin 7536 -> 0 bytes .../src/all/animeworldindia/sources.dart | 33 - dart/anime/src/all/nyaa/icon.png | Bin 3187 -> 0 bytes dart/anime/src/all/nyaa/nyaa.dart | 128 -- dart/anime/src/all/nyaa/source.dart | 19 - dart/anime/src/ar/okanime/icon.png | Bin 5358 -> 0 bytes dart/anime/src/ar/okanime/okanime.dart | 223 --- dart/anime/src/ar/okanime/source.dart | 16 - 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/anime/src/de/animetoast/animetoast.dart | 234 --- dart/anime/src/de/animetoast/icon.png | Bin 5171 -> 0 bytes dart/anime/src/de/animetoast/source.dart | 16 - dart/anime/src/en/animepahe/animepahe.dart | 317 ---- dart/anime/src/en/animepahe/icon.png | Bin 1934 -> 0 bytes dart/anime/src/en/animepahe/source.dart | 16 - dart/anime/src/en/aniwave/aniwave.dart | 688 ------- dart/anime/src/en/aniwave/icon.png | Bin 3775 -> 0 bytes dart/anime/src/en/aniwave/source.dart | 16 - dart/anime/src/en/dramacool/dramacool.dart | 210 --- dart/anime/src/en/dramacool/icon.png | Bin 6955 -> 0 bytes dart/anime/src/en/dramacool/source.dart | 16 - dart/anime/src/en/gogoanime/gogoanime.dart | 1137 ----------- dart/anime/src/en/gogoanime/icon.png | Bin 2993 -> 0 bytes dart/anime/src/en/gogoanime/source.dart | 16 - dart/anime/src/en/kisskh/icon.png | Bin 3012 -> 0 bytes dart/anime/src/en/kisskh/kisskh.dart | 157 -- dart/anime/src/en/kisskh/source.dart | 16 - dart/anime/src/en/nineanimetv/icon.png | Bin 6623 -> 0 bytes .../anime/src/en/nineanimetv/nineanimetv.dart | 546 ------ dart/anime/src/en/nineanimetv/source.dart | 16 - dart/anime/src/en/uhdmovies/icon.png | Bin 3627 -> 0 bytes dart/anime/src/en/uhdmovies/source.dart | 16 - dart/anime/src/en/uhdmovies/uhdmovies.dart | 234 --- dart/anime/src/fr/animesama/animesama.dart | 409 ---- dart/anime/src/fr/animesama/icon.png | Bin 4666 -> 0 bytes dart/anime/src/fr/animesama/source.dart | 16 - .../anime/src/fr/animesultra/animesultra.dart | 158 -- dart/anime/src/fr/animesultra/icon.png | Bin 9789 -> 0 bytes dart/anime/src/fr/animesultra/source.dart | 17 - dart/anime/src/fr/franime/franime.dart | 342 ---- dart/anime/src/fr/franime/icon.png | Bin 3369 -> 0 bytes dart/anime/src/fr/franime/source.dart | 18 - dart/anime/src/fr/otakufr/icon.png | Bin 15379 -> 0 bytes dart/anime/src/fr/otakufr/otakufr.dart | 442 ----- dart/anime/src/fr/otakufr/source.dart | 17 - dart/anime/src/hi/yomovies/icon.png | Bin 3499 -> 0 bytes dart/anime/src/hi/yomovies/source.dart | 16 - dart/anime/src/hi/yomovies/yomovies.dart | 340 ---- dart/anime/src/id/nimegami/icon.png | Bin 3651 -> 0 bytes dart/anime/src/id/nimegami/nimegami.dart | 182 -- dart/anime/src/id/nimegami/source.dart | 16 - dart/anime/src/id/oploverz/icon.png | Bin 14655 -> 0 bytes dart/anime/src/id/oploverz/oploverz.dart | 154 -- dart/anime/src/id/oploverz/source.dart | 16 - dart/anime/src/id/otakudesu/icon.png | Bin 6422 -> 0 bytes dart/anime/src/id/otakudesu/otakudesu.dart | 241 --- dart/anime/src/id/otakudesu/source.dart | 16 - .../anime/src/it/animesaturn/animesaturn.dart | 359 ---- dart/anime/src/it/animesaturn/icon.png | Bin 6664 -> 0 bytes dart/anime/src/it/animesaturn/source.dart | 16 - .../src/pt/animesvision/animesvision.dart | 287 --- dart/anime/src/pt/animesvision/icon.png | Bin 3437 -> 0 bytes dart/anime/src/pt/animesvision/source.dart | 16 - dart/anime/src/sq/filma24/filma24.dart | 291 --- dart/anime/src/sq/filma24/icon.png | Bin 8984 -> 0 bytes dart/anime/src/sq/filma24/source.dart | 16 - dart/manga/manga_source_list.dart | 26 - dart/manga/multisrc/heancms/heancms.dart | 246 --- dart/manga/multisrc/heancms/sources.dart | 22 - .../multisrc/heancms/src/omegascans/icon.png | Bin 6648 -> 0 bytes .../heancms/src/omegascans/omegascans.dart | 16 - .../multisrc/heancms/src/perfscan/icon.png | Bin 5069 -> 0 bytes .../heancms/src/perfscan/perfscan.dart | 15 - .../multisrc/heancms/src/yugenmangas/icon.png | Bin 2278 -> 0 bytes .../heancms/src/yugenmangas/yugenmangas.dart | 16 - dart/manga/multisrc/madara/madara.dart | 318 ---- dart/manga/multisrc/madara/sources.dart | 505 ----- .../madara/src/adultwebtoon/adultwebtoon.dart | 14 - .../multisrc/madara/src/adultwebtoon/icon.png | Bin 4831 -> 0 bytes .../src/akumanotenshi/akumanotenshi.dart | 14 - .../madara/src/akumanotenshi/icon.png | Bin 3072 -> 0 bytes .../multisrc/madara/src/anikiga/anikiga.dart | 14 - .../multisrc/madara/src/anikiga/icon.png | Bin 6250 -> 0 bytes .../madara/src/apollcomics/apollcomics.dart | 14 - .../multisrc/madara/src/apollcomics/icon.png | Bin 3383 -> 0 bytes .../madara/src/apolltoons/apolltoons.dart | 14 - .../multisrc/madara/src/apolltoons/icon.png | Bin 6235 -> 0 bytes .../madara/src/araznovel/araznovel.dart | 14 - .../multisrc/madara/src/araznovel/icon.png | Bin 8169 -> 0 bytes .../madara/src/arthurscan/arthurscan.dart | 14 - .../multisrc/madara/src/arthurscan/icon.png | Bin 6928 -> 0 bytes .../madara/src/astralmanga/astralmanga.dart | 14 - .../multisrc/madara/src/astralmanga/icon.png | Bin 4131 -> 0 bytes .../madara/src/asurascansus/asurascansus.dart | 14 - .../multisrc/madara/src/asurascansus/icon.png | Bin 6312 -> 0 bytes .../multisrc/madara/src/bakamh/bakamh.dart | 14 - .../manga/multisrc/madara/src/bakamh/icon.png | Bin 3958 -> 0 bytes .../madara/src/bananamanga/bananamanga.dart | 14 - .../multisrc/madara/src/bananamanga/icon.png | Bin 4601 -> 0 bytes .../madara/src/barmanga/barmanga.dart | 14 - .../multisrc/madara/src/barmanga/icon.png | Bin 7763 -> 0 bytes .../madara/src/bestmanga/bestmanga.dart | 14 - .../multisrc/madara/src/bestmanga/icon.png | Bin 9651 -> 0 bytes .../madara/src/birdtoon/birdtoon.dart | 14 - .../multisrc/madara/src/birdtoon/icon.png | Bin 5396 -> 0 bytes .../madara/src/cerisescans/cerisescans.dart | 14 - .../multisrc/madara/src/cerisescans/icon.png | Bin 3582 -> 0 bytes .../madara/src/chibimanga/chibimanga.dart | 14 - .../multisrc/madara/src/chibimanga/icon.png | Bin 3418 -> 0 bytes .../madara/src/clovermanga/clovermanga.dart | 14 - .../multisrc/madara/src/clovermanga/icon.png | Bin 3790 -> 0 bytes .../multisrc/madara/src/cocorip/cocorip.dart | 14 - .../multisrc/madara/src/cocorip/icon.png | Bin 2124 -> 0 bytes .../madara/src/coffeemanga/coffeemanga.dart | 14 - .../multisrc/madara/src/coffeemanga/icon.png | Bin 5010 -> 0 bytes .../madara/src/comicarab/comicarab.dart | 14 - .../multisrc/madara/src/comicarab/icon.png | Bin 11090 -> 0 bytes .../madara/src/comicznetv2/comicznetv2.dart | 14 - .../multisrc/madara/src/comicznetv2/icon.png | Bin 4332 -> 0 bytes .../src/decadencescans/decadencescans.dart | 14 - .../madara/src/decadencescans/icon.png | Bin 14639 -> 0 bytes .../madara/src/dessertscan/dessertscan.dart | 14 - .../multisrc/madara/src/dessertscan/icon.png | Bin 3072 -> 0 bytes .../madara/src/doodmanga/doodmanga.dart | 14 - .../multisrc/madara/src/doodmanga/icon.png | Bin 3894 -> 0 bytes .../madara/src/elitemanga/elitemanga.dart | 14 - .../multisrc/madara/src/elitemanga/icon.png | Bin 5313 -> 0 bytes .../madara/src/emperorscan/emperorscan.dart | 14 - .../multisrc/madara/src/emperorscan/icon.png | Bin 12413 -> 0 bytes .../madara/src/evascans/evascans.dart | 14 - .../multisrc/madara/src/evascans/icon.png | Bin 7997 -> 0 bytes .../madara/src/factmanga/factmanga.dart | 14 - .../multisrc/madara/src/factmanga/icon.png | Bin 5526 -> 0 bytes .../madara/src/falconmanga/falconmanga.dart | 14 - .../multisrc/madara/src/falconmanga/icon.png | Bin 2338 -> 0 bytes .../madara/src/finalscans/finalscans.dart | 14 - .../multisrc/madara/src/finalscans/icon.png | Bin 9323 -> 0 bytes .../firstkissdashmanga.dart | 14 - .../madara/src/firstkissdashmanga/icon.png | Bin 13021 -> 0 bytes .../madara/src/firstmanhwa/firstmanhwa.dart | 14 - .../multisrc/madara/src/firstmanhwa/icon.png | Bin 5525 -> 0 bytes .../src/flextapescans/flextapescans.dart | 14 - .../madara/src/flextapescans/icon.png | Bin 10842 -> 0 bytes .../madara/src/freemanga/freemanga.dart | 14 - .../multisrc/madara/src/freemanga/icon.png | Bin 5250 -> 0 bytes .../madara/src/freemangatop/freemangatop.dart | 14 - .../multisrc/madara/src/freemangatop/icon.png | Bin 3072 -> 0 bytes .../multisrc/madara/src/frscan/frscan.dart | 14 - .../manga/multisrc/madara/src/frscan/icon.png | Bin 6670 -> 0 bytes .../madara/src/ghostscan/ghostscan.dart | 14 - .../multisrc/madara/src/ghostscan/icon.png | Bin 3072 -> 0 bytes .../src/girlslovemanga/girlslovemanga.dart | 14 - .../madara/src/girlslovemanga/icon.png | Bin 16818 -> 0 bytes .../madara/src/glorymanga/glorymanga.dart | 14 - .../multisrc/madara/src/glorymanga/icon.png | Bin 6891 -> 0 bytes .../madara/src/gooffansub/gooffansub.dart | 14 - .../multisrc/madara/src/gooffansub/icon.png | Bin 8072 -> 0 bytes .../madara/src/harimanga/harimanga.dart | 14 - .../multisrc/madara/src/harimanga/icon.png | Bin 3708 -> 0 bytes .../madara/src/hentai3z/hentai3z.dart | 14 - .../multisrc/madara/src/hentai3z/icon.png | Bin 13907 -> 0 bytes .../madara/src/hentaicube/hentaicube.dart | 14 - .../multisrc/madara/src/hentaicube/icon.png | Bin 6003 -> 0 bytes .../madara/src/hentaimanga/hentaimanga.dart | 14 - .../multisrc/madara/src/hentaimanga/icon.png | Bin 2360 -> 0 bytes .../madara/src/hentaiteca/hentaiteca.dart | 14 - .../multisrc/madara/src/hentaiteca/icon.png | Bin 3072 -> 0 bytes .../src/hentaiwebtoon/hentaiwebtoon.dart | 14 - .../madara/src/hentaiwebtoon/icon.png | Bin 3246 -> 0 bytes .../madara/src/hentaixcomic/hentaixcomic.dart | 14 - .../multisrc/madara/src/hentaixcomic/icon.png | Bin 5474 -> 0 bytes .../madara/src/hentaixyuri/hentaixyuri.dart | 14 - .../multisrc/madara/src/hentaixyuri/icon.png | Bin 5531 -> 0 bytes .../madara/src/hentaizone/hentaizone.dart | 13 - .../multisrc/madara/src/hentaizone/icon.png | Bin 2091 -> 0 bytes .../madara/src/hipercool/hipercool.dart | 14 - .../multisrc/madara/src/hipercool/icon.png | Bin 2712 -> 0 bytes .../madara/src/hiperdex/hiperdex.dart | 14 - .../multisrc/madara/src/hiperdex/icon.png | Bin 4465 -> 0 bytes dart/manga/multisrc/madara/src/hm2d/hm2d.dart | 14 - dart/manga/multisrc/madara/src/hm2d/icon.png | Bin 5226 -> 0 bytes .../madara/src/immortalupdates/icon.png | Bin 5089 -> 0 bytes .../src/immortalupdates/immortalupdates.dart | 14 - .../multisrc/madara/src/imperioscans/icon.png | Bin 7005 -> 0 bytes .../madara/src/imperioscans/imperioscans.dart | 14 - .../multisrc/madara/src/inmortalscan/icon.png | Bin 3828 -> 0 bytes .../madara/src/inmortalscan/inmortalscan.dart | 14 - .../madara/src/isekaiscanmanga/icon.png | Bin 7402 -> 0 bytes .../src/isekaiscanmanga/isekaiscanmanga.dart | 14 - .../multisrc/madara/src/jiangzaitoon/icon.png | Bin 7370 -> 0 bytes .../madara/src/jiangzaitoon/jiangzaitoon.dart | 14 - .../multisrc/madara/src/jimanga/icon.png | Bin 3072 -> 0 bytes .../multisrc/madara/src/jimanga/jimanga.dart | 14 - .../madara/src/kakuseiproject/icon.png | Bin 3072 -> 0 bytes .../src/kakuseiproject/kakuseiproject.dart | 14 - .../madara/src/kamisamaexplorer/icon.png | Bin 5339 -> 0 bytes .../kamisamaexplorer/kamisamaexplorer.dart | 14 - .../multisrc/madara/src/komikchan/icon.png | Bin 2731 -> 0 bytes .../madara/src/komikchan/komikchan.dart | 14 - .../multisrc/madara/src/ksgroupscans/icon.png | Bin 5296 -> 0 bytes .../madara/src/ksgroupscans/ksgroupscans.dart | 14 - .../madara/src/ladyestelarscan/icon.png | Bin 3072 -> 0 bytes .../src/ladyestelarscan/ladyestelarscan.dart | 14 - .../madara/src/leviatanscans/icon.png | Bin 4703 -> 0 bytes .../src/leviatanscans/leviatanscans.dart | 14 - .../madara/src/lhtranslation/icon.png | Bin 4576 -> 0 bytes .../src/lhtranslation/lhtranslation.dart | 14 - .../madara/src/linkstartscan/icon.png | Bin 3072 -> 0 bytes .../src/linkstartscan/linkstartscan.dart | 14 - .../multisrc/madara/src/lolicon/icon.png | Bin 3867 -> 0 bytes .../multisrc/madara/src/lolicon/lolicon.dart | 14 - .../multisrc/madara/src/luffymanga/icon.png | Bin 4318 -> 0 bytes .../madara/src/luffymanga/luffymanga.dart | 14 - .../multisrc/madara/src/maidscan/icon.png | Bin 3072 -> 0 bytes .../madara/src/maidscan/maidscan.dart | 14 - .../multisrc/madara/src/manga18h/icon.png | Bin 3072 -> 0 bytes .../madara/src/manga18h/manga18h.dart | 14 - .../multisrc/madara/src/manga3asq/icon.png | Bin 5124 -> 0 bytes .../madara/src/manga3asq/manga3asq.dart | 14 - .../multisrc/madara/src/mangabee/icon.png | Bin 6229 -> 0 bytes .../madara/src/mangabee/mangabee.dart | 14 - .../multisrc/madara/src/mangaclash/icon.png | Bin 2394 -> 0 bytes .../madara/src/mangaclash/mangaclash.dart | 14 - .../madara/src/mangadistrict/icon.png | Bin 6520 -> 0 bytes .../src/mangadistrict/mangadistrict.dart | 14 - .../multisrc/madara/src/mangadiyari/icon.png | Bin 7436 -> 0 bytes .../madara/src/mangadiyari/mangadiyari.dart | 14 - .../multisrc/madara/src/mangafenix/icon.png | Bin 10303 -> 0 bytes .../madara/src/mangafenix/mangafenix.dart | 14 - .../madara/src/mangafreakonline/icon.png | Bin 6249 -> 0 bytes .../mangafreakonline/mangafreakonline.dart | 14 - .../multisrc/madara/src/mangagalaxy/icon.png | Bin 5242 -> 0 bytes .../madara/src/mangagalaxy/mangagalaxy.dart | 14 - .../multisrc/madara/src/mangagoyaoi/icon.png | Bin 5255 -> 0 bytes .../madara/src/mangagoyaoi/mangagoyaoi.dart | 14 - .../multisrc/madara/src/mangagreat/icon.png | Bin 9170 -> 0 bytes .../madara/src/mangagreat/mangagreat.dart | 14 - .../multisrc/madara/src/mangakomi/icon.png | Bin 3693 -> 0 bytes .../madara/src/mangakomi/mangakomi.dart | 14 - .../multisrc/madara/src/mangaland/icon.png | Bin 6306 -> 0 bytes .../madara/src/mangaland/mangaland.dart | 14 - .../multisrc/madara/src/mangananquim/icon.png | Bin 3072 -> 0 bytes .../madara/src/mangananquim/mangananquim.dart | 14 - .../multisrc/madara/src/mangaowlone/icon.png | Bin 3072 -> 0 bytes .../madara/src/mangaowlone/mangaowlone.dart | 14 - .../multisrc/madara/src/mangapure/icon.png | Bin 3614 -> 0 bytes .../madara/src/mangapure/mangapure.dart | 14 - .../madara/src/mangaqueencom/icon.png | Bin 5312 -> 0 bytes .../src/mangaqueencom/mangaqueencom.dart | 14 - .../multisrc/madara/src/mangaread/icon.png | Bin 4054 -> 0 bytes .../madara/src/mangaread/mangaread.dart | 14 - .../multisrc/madara/src/mangareadorg/icon.png | Bin 7408 -> 0 bytes .../madara/src/mangareadorg/mangareadorg.dart | 14 - .../multisrc/madara/src/mangarolls/icon.png | Bin 6450 -> 0 bytes .../madara/src/mangarolls/mangarolls.dart | 14 - .../multisrc/madara/src/mangarubycom/icon.png | Bin 3072 -> 0 bytes .../madara/src/mangarubycom/mangarubycom.dart | 14 - .../multisrc/madara/src/mangaryu/icon.png | Bin 6967 -> 0 bytes .../madara/src/mangaryu/mangaryu.dart | 14 - .../multisrc/madara/src/mangasehri/icon.png | Bin 5715 -> 0 bytes .../madara/src/mangasehri/mangasehri.dart | 14 - .../madara/src/mangasorigines/icon.png | Bin 6973 -> 0 bytes .../src/mangasorigines/mangasorigines.dart | 14 - .../madara/src/mangasoverall/icon.png | Bin 3072 -> 0 bytes .../src/mangasoverall/mangasoverall.dart | 14 - .../multisrc/madara/src/mangasushi/icon.png | Bin 7233 -> 0 bytes .../madara/src/mangasushi/mangasushi.dart | 14 - .../multisrc/madara/src/mangatxgg/icon.png | Bin 3072 -> 0 bytes .../madara/src/mangatxgg/mangatxgg.dart | 14 - .../madara/src/mangatxunoriginal/icon.png | Bin 3590 -> 0 bytes .../mangatxunoriginal/mangatxunoriginal.dart | 14 - .../multisrc/madara/src/mangatyrant/icon.png | Bin 7294 -> 0 bytes .../madara/src/mangatyrant/mangatyrant.dart | 14 - .../multisrc/madara/src/mangaus/icon.png | Bin 4889 -> 0 bytes .../multisrc/madara/src/mangaus/mangaus.dart | 14 - .../multisrc/madara/src/mangaweebs/icon.png | Bin 7275 -> 0 bytes .../madara/src/mangaweebs/mangaweebs.dart | 14 - .../multisrc/madara/src/mangaxico/icon.png | Bin 3791 -> 0 bytes .../madara/src/mangaxico/mangaxico.dart | 14 - .../multisrc/madara/src/manhuaes/icon.png | Bin 5027 -> 0 bytes .../madara/src/manhuaes/manhuaes.dart | 14 - .../multisrc/madara/src/manhuaus/icon.png | Bin 10242 -> 0 bytes .../madara/src/manhuaus/manhuaus.dart | 14 - .../multisrc/madara/src/manhuazone/icon.png | Bin 3585 -> 0 bytes .../madara/src/manhuazone/manhuazone.dart | 14 - .../multisrc/madara/src/manhuazonghe/icon.png | Bin 7511 -> 0 bytes .../madara/src/manhuazonghe/manhuazonghe.dart | 14 - .../multisrc/madara/src/manhwa18app/icon.png | Bin 3406 -> 0 bytes .../madara/src/manhwa18app/manhwa18app.dart | 14 - .../multisrc/madara/src/manhwa18org/icon.png | Bin 4054 -> 0 bytes .../madara/src/manhwa18org/manhwa18org.dart | 14 - .../multisrc/madara/src/manhwa68/icon.png | Bin 5417 -> 0 bytes .../madara/src/manhwa68/manhwa68.dart | 14 - .../multisrc/madara/src/manhwaclan/icon.png | Bin 4281 -> 0 bytes .../madara/src/manhwaclan/manhwaclan.dart | 14 - .../multisrc/madara/src/manhwafull/icon.png | Bin 6684 -> 0 bytes .../madara/src/manhwafull/manhwafull.dart | 14 - .../madara/src/manhwahentaime/icon.png | Bin 5990 -> 0 bytes .../src/manhwahentaime/manhwahentaime.dart | 14 - .../multisrc/madara/src/manhwamanhua/icon.png | Bin 6114 -> 0 bytes .../madara/src/manhwamanhua/manhwamanhua.dart | 14 - .../multisrc/madara/src/manhwanew/icon.png | Bin 4491 -> 0 bytes .../madara/src/manhwanew/manhwanew.dart | 14 - .../multisrc/madara/src/manhwaworld/icon.png | Bin 6757 -> 0 bytes .../madara/src/manhwaworld/manhwaworld.dart | 14 - .../multisrc/madara/src/mantrazscan/icon.png | Bin 4957 -> 0 bytes .../madara/src/mantrazscan/mantrazscan.dart | 14 - .../multisrc/madara/src/milftoon/icon.png | Bin 4555 -> 0 bytes .../madara/src/milftoon/milftoon.dart | 14 - .../madara/src/momonohanascan/icon.png | Bin 6417 -> 0 bytes .../src/momonohanascan/momonohanascan.dart | 14 - .../multisrc/madara/src/monarcamanga/icon.png | Bin 9446 -> 0 bytes .../madara/src/monarcamanga/monarcamanga.dart | 14 - .../madara/src/moonloversscan/icon.png | Bin 3072 -> 0 bytes .../src/moonloversscan/moonloversscan.dart | 14 - .../madara/src/moonwitchinlove/icon.png | Bin 3072 -> 0 bytes .../src/moonwitchinlove/moonwitchinlove.dart | 14 - .../multisrc/madara/src/murimscan/icon.png | Bin 6459 -> 0 bytes .../madara/src/murimscan/murimscan.dart | 14 - .../multisrc/madara/src/nekopostco/icon.png | Bin 7160 -> 0 bytes .../madara/src/nekopostco/nekopostco.dart | 14 - .../madara/src/nijitranslations/icon.png | Bin 7747 -> 0 bytes .../nijitranslations/nijitranslations.dart | 14 - .../multisrc/madara/src/novelcrow/icon.png | Bin 6748 -> 0 bytes .../madara/src/novelcrow/novelcrow.dart | 14 - .../multisrc/madara/src/pantheonscan/icon.png | Bin 2232 -> 0 bytes .../madara/src/pantheonscan/pantheonscan.dart | 14 - .../multisrc/madara/src/pawmanga/icon.png | Bin 7176 -> 0 bytes .../madara/src/pawmanga/pawmanga.dart | 14 - .../madara/src/pinkseaunicorn/icon.png | Bin 3072 -> 0 bytes .../src/pinkseaunicorn/pinkseaunicorn.dart | 14 - .../multisrc/madara/src/pojokmanga/icon.png | Bin 3713 -> 0 bytes .../madara/src/pojokmanga/pojokmanga.dart | 14 - .../multisrc/madara/src/portalyaoi/icon.png | Bin 3072 -> 0 bytes .../madara/src/portalyaoi/portalyaoi.dart | 14 - .../madara/src/prismahentais/icon.png | Bin 3072 -> 0 bytes .../src/prismahentais/prismahentais.dart | 14 - .../madara/src/projetoscanlator/icon.png | Bin 13675 -> 0 bytes .../projetoscanlator/projetoscanlator.dart | 14 - .../madara/src/ragnarokscanlation/icon.png | Bin 3072 -> 0 bytes .../ragnarokscanlation.dart | 14 - .../madara/src/rainbowfairyscan/icon.png | Bin 3072 -> 0 bytes .../rainbowfairyscan/rainbowfairyscan.dart | 14 - .../multisrc/madara/src/randomscan/icon.png | Bin 6588 -> 0 bytes .../madara/src/randomscan/randomscan.dart | 14 - .../multisrc/madara/src/readergen/icon.png | Bin 3194 -> 0 bytes .../madara/src/readergen/readergen.dart | 14 - .../multisrc/madara/src/richtoscan/icon.png | Bin 3072 -> 0 bytes .../madara/src/richtoscan/richtoscan.dart | 14 - .../madara/src/rightdarkscan/icon.png | Bin 10165 -> 0 bytes .../src/rightdarkscan/rightdarkscan.dart | 14 - .../multisrc/madara/src/rio2manga/icon.png | Bin 5106 -> 0 bytes .../madara/src/rio2manga/rio2manga.dart | 14 - .../madara/src/romantikmanga/icon.png | Bin 8743 -> 0 bytes .../src/romantikmanga/romantikmanga.dart | 14 - .../multisrc/madara/src/s2manga/icon.png | Bin 9482 -> 0 bytes .../multisrc/madara/src/s2manga/s2manga.dart | 14 - .../multisrc/madara/src/samuraiscan/icon.png | Bin 7274 -> 0 bytes .../madara/src/samuraiscan/samuraiscan.dart | 14 - .../madara/src/scambertraslator/icon.png | Bin 5877 -> 0 bytes .../scambertraslator/scambertraslator.dart | 14 - .../multisrc/madara/src/scantradvf/icon.png | Bin 4566 -> 0 bytes .../madara/src/scantradvf/scantradvf.dart | 14 - .../multisrc/madara/src/shadowtrad/icon.png | Bin 3194 -> 0 bytes .../madara/src/shadowtrad/shadowtrad.dart | 14 - .../multisrc/madara/src/shibamanga/icon.png | Bin 5338 -> 0 bytes .../madara/src/shibamanga/shibamanga.dart | 14 - .../multisrc/madara/src/sinensis/icon.png | Bin 4423 -> 0 bytes .../madara/src/sinensis/sinensis.dart | 14 - .../madara/src/sweettimescan/icon.png | Bin 6691 -> 0 bytes .../src/sweettimescan/sweettimescan.dart | 14 - .../multisrc/madara/src/taberumangas/icon.png | Bin 3072 -> 0 bytes .../madara/src/taberumangas/taberumangas.dart | 14 - .../multisrc/madara/src/tankouhentai/icon.png | Bin 3072 -> 0 bytes .../madara/src/tankouhentai/tankouhentai.dart | 14 - .../multisrc/madara/src/tatakaescan/icon.png | Bin 2828 -> 0 bytes .../madara/src/tatakaescan/tatakaescan.dart | 14 - .../multisrc/madara/src/taurusfansub/icon.png | Bin 6649 -> 0 bytes .../madara/src/taurusfansub/taurusfansub.dart | 14 - .../src/thebeginningaftertheend/icon.png | Bin 6093 -> 0 bytes .../thebeginningaftertheend.dart | 14 - .../multisrc/madara/src/toonizy/icon.png | Bin 3897 -> 0 bytes .../multisrc/madara/src/toonizy/toonizy.dart | 14 - .../madara/src/tortugaceviri/icon.png | Bin 8871 -> 0 bytes .../src/tortugaceviri/tortugaceviri.dart | 14 - .../multisrc/madara/src/valkyriescan/icon.png | Bin 3072 -> 0 bytes .../madara/src/valkyriescan/valkyriescan.dart | 14 - .../multisrc/madara/src/vermanhwas/icon.png | Bin 7861 -> 0 bytes .../madara/src/vermanhwas/vermanhwas.dart | 14 - .../multisrc/madara/src/vinmanga/icon.png | Bin 13935 -> 0 bytes .../madara/src/vinmanga/vinmanga.dart | 14 - .../madara/src/wickedwitchscan/icon.png | Bin 3072 -> 0 bytes .../src/wickedwitchscan/wickedwitchscan.dart | 14 - .../multisrc/madara/src/winterscan/icon.png | Bin 6196 -> 0 bytes .../madara/src/winterscan/winterscan.dart | 14 - .../madara/src/wonderlandscan/icon.png | Bin 3072 -> 0 bytes .../src/wonderlandscan/wonderlandscan.dart | 14 - .../multisrc/madara/src/yanpfansub/icon.png | Bin 3072 -> 0 bytes .../madara/src/yanpfansub/yanpfansub.dart | 14 - .../multisrc/madara/src/yaoicomics/icon.png | Bin 3072 -> 0 bytes .../madara/src/yaoicomics/yaoicomics.dart | 14 - .../multisrc/madara/src/yuriverso/icon.png | Bin 6902 -> 0 bytes .../madara/src/yuriverso/yuriverso.dart | 14 - .../multisrc/madara/src/zeroscan/icon.png | Bin 3072 -> 0 bytes .../madara/src/zeroscan/zeroscan.dart | 14 - dart/manga/multisrc/mangabox/mangabox.dart | 413 ---- dart/manga/multisrc/mangabox/sources.dart | 25 - .../multisrc/mangabox/src/mangabat/icon.png | Bin 3800 -> 0 bytes .../mangabox/src/mangabat/mangabat.dart | 14 - .../multisrc/mangabox/src/mangairo/icon.png | Bin 3702 -> 0 bytes .../mangabox/src/mangairo/mangaeiro.dart | 15 - .../mangabox/src/mangakakalot/icon.png | Bin 9205 -> 0 bytes .../src/mangakakalot/mangakakalot.dart | 14 - .../multisrc/mangabox/src/manganato/icon.png | Bin 4127 -> 0 bytes .../mangabox/src/manganato/manganato.dart | 14 - .../multisrc/mangareader/mangareader.dart | 322 ---- dart/manga/multisrc/mangareader/sources.dart | 130 -- .../src/asurascans/asurascans.dart | 14 - .../mangareader/src/asurascans/icon.png | Bin 6312 -> 0 bytes .../src/azurescans/azurescans.dart | 14 - .../mangareader/src/azurescans/icon.png | Bin 2787 -> 0 bytes .../src/beastscans/beastscans.dart | 14 - .../mangareader/src/beastscans/icon.png | Bin 8788 -> 0 bytes .../src/cosmicscans/cosmicscans.dart | 14 - .../mangareader/src/cosmicscans/icon.png | Bin 6937 -> 0 bytes .../src/cosmicscansid/cosmicscansid.dart | 14 - .../mangareader/src/cosmicscansid/icon.png | Bin 5574 -> 0 bytes .../mangareader/src/dojingnet/dojingnet.dart | 15 - .../mangareader/src/dojingnet/icon.png | Bin 3459 -> 0 bytes .../src/duniakomikid/duniakomikid.dart | 14 - .../mangareader/src/duniakomikid/icon.png | Bin 5954 -> 0 bytes .../src/geceninlordu/geceninlordu.dart | 14 - .../mangareader/src/geceninlordu/icon.png | Bin 4348 -> 0 bytes .../src/infernalvoidscans/icon.png | Bin 4956 -> 0 bytes .../infernalvoidscans/infernalvoidscans.dart | 14 - .../mangareader/src/kanzenin/icon.png | Bin 4348 -> 0 bytes .../mangareader/src/kanzenin/kanzenin.dart | 15 - .../mangareader/src/katakomik/icon.png | Bin 5337 -> 0 bytes .../mangareader/src/katakomik/katakomik.dart | 14 - .../mangareader/src/komiklab/icon.png | Bin 7461 -> 0 bytes .../mangareader/src/komiklab/komiklab.dart | 14 - .../mangareader/src/komikmama/icon.png | Bin 3662 -> 0 bytes .../mangareader/src/komikmama/komikmama.dart | 14 - .../mangareader/src/komikstation/icon.png | Bin 6305 -> 0 bytes .../src/komikstation/komikstation.dart | 14 - .../mangareader/src/komikucom/icon.png | Bin 6268 -> 0 bytes .../mangareader/src/komikucom/komikucom.dart | 14 - .../multisrc/mangareader/src/kumapoi/icon.png | Bin 3393 -> 0 bytes .../mangareader/src/kumapoi/kumapoi.dart | 15 - .../mangareader/src/lelmanga/icon.png | Bin 4060 -> 0 bytes .../mangareader/src/lelmanga/lelmanga.dart | 14 - .../mangareader/src/magusmanga/icon.png | Bin 8405 -> 0 bytes .../src/magusmanga/magusmanga.dart | 14 - .../mangareader/src/mangacim/icon.png | Bin 11028 -> 0 bytes .../mangareader/src/mangacim/mangacim.dart | 14 - .../mangareader/src/mangaindome/icon.png | Bin 7961 -> 0 bytes .../src/mangaindome/mangaindome.dart | 14 - .../mangareader/src/mangatale/icon.png | Bin 3733 -> 0 bytes .../mangareader/src/mangatale/mangatale.dart | 14 - .../multisrc/mangareader/src/mangawt/icon.png | Bin 9396 -> 0 bytes .../mangareader/src/mangawt/mangawt.dart | 14 - .../multisrc/mangareader/src/manhwax/icon.png | Bin 4348 -> 0 bytes .../mangareader/src/manhwax/manhwax.dart | 15 - .../mangareader/src/melokomik/icon.png | Bin 6295 -> 0 bytes .../mangareader/src/melokomik/melokomik.dart | 14 - .../mangareader/src/mihentai/icon.png | Bin 2466 -> 0 bytes .../mangareader/src/mihentai/mihentai.dart | 15 - .../mangareader/src/origamiorpheans/icon.png | Bin 4279 -> 0 bytes .../src/origamiorpheans/origamiorpheans.dart | 14 - .../mangareader/src/phenixscans/icon.png | Bin 6290 -> 0 bytes .../src/phenixscans/phenixscans.dart | 14 - .../multisrc/mangareader/src/piscans/icon.png | Bin 3202 -> 0 bytes .../mangareader/src/piscans/piscans.dart | 14 - .../mangareader/src/raikiscan/icon.png | Bin 7587 -> 0 bytes .../mangareader/src/raikiscan/raikiscan.dart | 13 - .../mangareader/src/ravenscans/icon.png | Bin 6171 -> 0 bytes .../src/ravenscans/ravenscans.dart | 14 - .../mangareader/src/shadowmangas/icon.png | Bin 14192 -> 0 bytes .../src/shadowmangas/shadowmangas.dart | 14 - .../mangareader/src/suryascans/icon.png | Bin 12239 -> 0 bytes .../src/suryascans/suryascans.dart | 14 - .../mangareader/src/sushiscan/icon.png | Bin 9191 -> 0 bytes .../mangareader/src/sushiscan/sushiscan.dart | 14 - .../mangareader/src/sushiscans/icon.png | Bin 24012 -> 0 bytes .../src/sushiscans/sushiscans.dart | 14 - .../mangareader/src/tarotscans/icon.png | Bin 8473 -> 0 bytes .../src/tarotscans/tarotscans.dart | 13 - .../mangareader/src/tukangkomik/icon.png | Bin 3873 -> 0 bytes .../src/tukangkomik/tukangkomik.dart | 13 - .../mangareader/src/turktoon/icon.png | Bin 8923 -> 0 bytes .../mangareader/src/turktoon/turktoon.dart | 13 - .../mangareader/src/uzaymanga/icon.png | Bin 3619 -> 0 bytes .../mangareader/src/uzaymanga/uzaymanga.dart | 13 - .../mangareader/src/xcalibrscans/icon.png | Bin 6515 -> 0 bytes .../src/xcalibrscans/xcalibrscans.dart | 14 - dart/manga/multisrc/mmrcms/mmrcms.dart | 323 ---- dart/manga/multisrc/mmrcms/sources.dart | 37 - .../multisrc/mmrcms/src/jpmangas/icon.png | Bin 2980 -> 0 bytes .../mmrcms/src/jpmangas/jpmangas.dart | 14 - .../multisrc/mmrcms/src/komikid/icon.png | Bin 2980 -> 0 bytes .../multisrc/mmrcms/src/komikid/komikid.dart | 14 - .../multisrc/mmrcms/src/lelscanvf/icon.png | Bin 2980 -> 0 bytes .../mmrcms/src/lelscanvf/lelscanvf.dart | 14 - .../multisrc/mmrcms/src/mangafr/icon.png | Bin 2980 -> 0 bytes .../multisrc/mmrcms/src/mangafr/mangafr.dart | 14 - .../multisrc/mmrcms/src/mangaid/icon.png | Bin 7655 -> 0 bytes .../multisrc/mmrcms/src/mangaid/mangaid.dart | 14 - dart/manga/multisrc/mmrcms/src/onma/icon.png | Bin 4408 -> 0 bytes dart/manga/multisrc/mmrcms/src/onma/onma.dart | 14 - .../mmrcms/src/readcomicsonline/icon.png | Bin 2980 -> 0 bytes .../readcomicsonline/readcomicsonline.dart | 14 - .../manga/multisrc/mmrcms/src/scanvf/icon.png | Bin 9624 -> 0 bytes .../multisrc/mmrcms/src/scanvf/scanvf.dart | 14 - dart/manga/multisrc/nepnep/nepnep.dart | 411 ---- dart/manga/multisrc/nepnep/sources.dart | 20 - .../multisrc/nepnep/src/mangalife/icon.png | Bin 2762 -> 0 bytes .../nepnep/src/mangalife/mangalife.dart | 14 - .../multisrc/nepnep/src/mangasee/icon.png | Bin 3022 -> 0 bytes .../nepnep/src/mangasee/mangasee.dart | 14 - dart/manga/src/all/batoto/batoto.dart | 1676 ----------------- dart/manga/src/all/batoto/icon.png | Bin 3699 -> 0 bytes dart/manga/src/all/batoto/sources.dart | 132 -- dart/manga/src/all/comick/comick.dart | 658 ------- dart/manga/src/all/comick/icon.png | Bin 6033 -> 0 bytes dart/manga/src/all/comick/sources.dart | 71 - dart/manga/src/all/mangadex/icon.png | Bin 4024 -> 0 bytes dart/manga/src/all/mangadex/mangadex.dart | 595 ------ dart/manga/src/all/mangadex/sources.dart | 74 - dart/manga/src/all/nhentai/icon.png | Bin 3071 -> 0 bytes dart/manga/src/all/nhentai/nhentai.dart | 245 --- dart/manga/src/all/nhentai/sources.dart | 26 - dart/manga/src/en/mangahere/icon.png | Bin 7902 -> 0 bytes dart/manga/src/en/mangahere/mangahere.dart | 341 ---- dart/manga/src/en/mangahere/source.dart | 18 - index.json | 1 - javascript/anime/src/de/aniworld.js | 252 --- javascript/anime/src/en/allanime.js | 481 ----- javascript/icon/de.aniworld.png | Bin 4090 -> 0 bytes javascript/icon/en.allanime.png | Bin 5389 -> 0 bytes model/source.dart | 106 -- source_generator.dart | 71 - 578 files changed, 21460 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/config.yml delete mode 100644 .github/ISSUE_TEMPLATE/report_issue.yml delete mode 100644 .github/ISSUE_TEMPLATE/request_feature.yml delete mode 100644 .github/ISSUE_TEMPLATE/request_source.yml delete mode 100644 .github/workflows/gen_index.yml create mode 100644 1.png create mode 100644 2.png create mode 100644 3.png create mode 100644 4.png create mode 100644 5.png create mode 100644 6.png delete mode 100644 CONTRIBUTING-JS.md delete mode 100644 CONTRIBUTING.md delete mode 100644 LICENSE delete mode 100644 README.md delete mode 100644 dart/anime/anime_source_list.dart delete mode 100644 dart/anime/multisrc/datalifeengine/datalifeengine.dart delete mode 100644 dart/anime/multisrc/datalifeengine/sources.dart delete mode 100644 dart/anime/multisrc/datalifeengine/src/frenchanime/frenchanime.dart delete mode 100644 dart/anime/multisrc/datalifeengine/src/frenchanime/icon.png delete mode 100644 dart/anime/multisrc/datalifeengine/src/wiflix/icon.png delete mode 100644 dart/anime/multisrc/datalifeengine/src/wiflix/wiflix.dart delete mode 100644 dart/anime/multisrc/dopeflix/dopeflix.dart delete mode 100644 dart/anime/multisrc/dopeflix/sources.dart delete mode 100644 dart/anime/multisrc/dopeflix/src/dopebox/dopebox.dart delete mode 100644 dart/anime/multisrc/dopeflix/src/dopebox/icon.png delete mode 100644 dart/anime/multisrc/dopeflix/src/sflix/icon.png delete mode 100644 dart/anime/multisrc/dopeflix/src/sflix/sflix.dart delete mode 100644 dart/anime/multisrc/zorotheme/sources.dart delete mode 100644 dart/anime/multisrc/zorotheme/src/hianime/hianime.dart delete mode 100644 dart/anime/multisrc/zorotheme/src/hianime/icon.png delete mode 100644 dart/anime/multisrc/zorotheme/src/kaido/icon.png delete mode 100644 dart/anime/multisrc/zorotheme/src/kaido/kaido.dart delete mode 100644 dart/anime/multisrc/zorotheme/zorotheme.dart delete mode 100644 dart/anime/src/all/animeworldindia/animeworldindia.dart delete mode 100644 dart/anime/src/all/animeworldindia/icon.png delete mode 100644 dart/anime/src/all/animeworldindia/sources.dart delete mode 100644 dart/anime/src/all/nyaa/icon.png delete mode 100644 dart/anime/src/all/nyaa/nyaa.dart delete mode 100644 dart/anime/src/all/nyaa/source.dart delete mode 100644 dart/anime/src/ar/okanime/icon.png delete mode 100644 dart/anime/src/ar/okanime/okanime.dart delete mode 100644 dart/anime/src/ar/okanime/source.dart 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 delete mode 100644 dart/anime/src/de/animetoast/animetoast.dart delete mode 100644 dart/anime/src/de/animetoast/icon.png delete mode 100644 dart/anime/src/de/animetoast/source.dart delete mode 100644 dart/anime/src/en/animepahe/animepahe.dart delete mode 100644 dart/anime/src/en/animepahe/icon.png delete mode 100644 dart/anime/src/en/animepahe/source.dart delete mode 100644 dart/anime/src/en/aniwave/aniwave.dart delete mode 100644 dart/anime/src/en/aniwave/icon.png delete mode 100644 dart/anime/src/en/aniwave/source.dart delete mode 100644 dart/anime/src/en/dramacool/dramacool.dart delete mode 100644 dart/anime/src/en/dramacool/icon.png delete mode 100644 dart/anime/src/en/dramacool/source.dart delete mode 100644 dart/anime/src/en/gogoanime/gogoanime.dart delete mode 100644 dart/anime/src/en/gogoanime/icon.png delete mode 100644 dart/anime/src/en/gogoanime/source.dart delete mode 100644 dart/anime/src/en/kisskh/icon.png delete mode 100644 dart/anime/src/en/kisskh/kisskh.dart delete mode 100644 dart/anime/src/en/kisskh/source.dart delete mode 100644 dart/anime/src/en/nineanimetv/icon.png delete mode 100644 dart/anime/src/en/nineanimetv/nineanimetv.dart delete mode 100644 dart/anime/src/en/nineanimetv/source.dart delete mode 100644 dart/anime/src/en/uhdmovies/icon.png delete mode 100644 dart/anime/src/en/uhdmovies/source.dart delete mode 100644 dart/anime/src/en/uhdmovies/uhdmovies.dart delete mode 100644 dart/anime/src/fr/animesama/animesama.dart delete mode 100644 dart/anime/src/fr/animesama/icon.png delete mode 100644 dart/anime/src/fr/animesama/source.dart delete mode 100644 dart/anime/src/fr/animesultra/animesultra.dart delete mode 100644 dart/anime/src/fr/animesultra/icon.png delete mode 100644 dart/anime/src/fr/animesultra/source.dart delete mode 100644 dart/anime/src/fr/franime/franime.dart delete mode 100644 dart/anime/src/fr/franime/icon.png delete mode 100644 dart/anime/src/fr/franime/source.dart delete mode 100644 dart/anime/src/fr/otakufr/icon.png delete mode 100644 dart/anime/src/fr/otakufr/otakufr.dart delete mode 100644 dart/anime/src/fr/otakufr/source.dart delete mode 100644 dart/anime/src/hi/yomovies/icon.png delete mode 100644 dart/anime/src/hi/yomovies/source.dart delete mode 100644 dart/anime/src/hi/yomovies/yomovies.dart delete mode 100644 dart/anime/src/id/nimegami/icon.png delete mode 100644 dart/anime/src/id/nimegami/nimegami.dart delete mode 100644 dart/anime/src/id/nimegami/source.dart delete mode 100644 dart/anime/src/id/oploverz/icon.png delete mode 100644 dart/anime/src/id/oploverz/oploverz.dart delete mode 100644 dart/anime/src/id/oploverz/source.dart delete mode 100644 dart/anime/src/id/otakudesu/icon.png delete mode 100644 dart/anime/src/id/otakudesu/otakudesu.dart delete mode 100644 dart/anime/src/id/otakudesu/source.dart delete mode 100644 dart/anime/src/it/animesaturn/animesaturn.dart delete mode 100644 dart/anime/src/it/animesaturn/icon.png delete mode 100644 dart/anime/src/it/animesaturn/source.dart delete mode 100644 dart/anime/src/pt/animesvision/animesvision.dart delete mode 100644 dart/anime/src/pt/animesvision/icon.png delete mode 100644 dart/anime/src/pt/animesvision/source.dart delete mode 100644 dart/anime/src/sq/filma24/filma24.dart delete mode 100644 dart/anime/src/sq/filma24/icon.png delete mode 100644 dart/anime/src/sq/filma24/source.dart delete mode 100644 dart/manga/manga_source_list.dart delete mode 100644 dart/manga/multisrc/heancms/heancms.dart delete mode 100644 dart/manga/multisrc/heancms/sources.dart delete mode 100644 dart/manga/multisrc/heancms/src/omegascans/icon.png delete mode 100644 dart/manga/multisrc/heancms/src/omegascans/omegascans.dart delete mode 100644 dart/manga/multisrc/heancms/src/perfscan/icon.png delete mode 100644 dart/manga/multisrc/heancms/src/perfscan/perfscan.dart delete mode 100644 dart/manga/multisrc/heancms/src/yugenmangas/icon.png delete mode 100644 dart/manga/multisrc/heancms/src/yugenmangas/yugenmangas.dart delete mode 100644 dart/manga/multisrc/madara/madara.dart delete mode 100644 dart/manga/multisrc/madara/sources.dart delete mode 100644 dart/manga/multisrc/madara/src/adultwebtoon/adultwebtoon.dart delete mode 100644 dart/manga/multisrc/madara/src/adultwebtoon/icon.png delete mode 100644 dart/manga/multisrc/madara/src/akumanotenshi/akumanotenshi.dart delete mode 100644 dart/manga/multisrc/madara/src/akumanotenshi/icon.png delete mode 100644 dart/manga/multisrc/madara/src/anikiga/anikiga.dart delete mode 100644 dart/manga/multisrc/madara/src/anikiga/icon.png delete mode 100644 dart/manga/multisrc/madara/src/apollcomics/apollcomics.dart delete mode 100644 dart/manga/multisrc/madara/src/apollcomics/icon.png delete mode 100644 dart/manga/multisrc/madara/src/apolltoons/apolltoons.dart delete mode 100644 dart/manga/multisrc/madara/src/apolltoons/icon.png delete mode 100644 dart/manga/multisrc/madara/src/araznovel/araznovel.dart delete mode 100644 dart/manga/multisrc/madara/src/araznovel/icon.png delete mode 100644 dart/manga/multisrc/madara/src/arthurscan/arthurscan.dart delete mode 100644 dart/manga/multisrc/madara/src/arthurscan/icon.png delete mode 100644 dart/manga/multisrc/madara/src/astralmanga/astralmanga.dart delete mode 100644 dart/manga/multisrc/madara/src/astralmanga/icon.png delete mode 100644 dart/manga/multisrc/madara/src/asurascansus/asurascansus.dart delete mode 100644 dart/manga/multisrc/madara/src/asurascansus/icon.png delete mode 100644 dart/manga/multisrc/madara/src/bakamh/bakamh.dart delete mode 100644 dart/manga/multisrc/madara/src/bakamh/icon.png delete mode 100644 dart/manga/multisrc/madara/src/bananamanga/bananamanga.dart delete mode 100644 dart/manga/multisrc/madara/src/bananamanga/icon.png delete mode 100644 dart/manga/multisrc/madara/src/barmanga/barmanga.dart delete mode 100644 dart/manga/multisrc/madara/src/barmanga/icon.png delete mode 100644 dart/manga/multisrc/madara/src/bestmanga/bestmanga.dart delete mode 100644 dart/manga/multisrc/madara/src/bestmanga/icon.png delete mode 100644 dart/manga/multisrc/madara/src/birdtoon/birdtoon.dart delete mode 100644 dart/manga/multisrc/madara/src/birdtoon/icon.png delete mode 100644 dart/manga/multisrc/madara/src/cerisescans/cerisescans.dart delete mode 100644 dart/manga/multisrc/madara/src/cerisescans/icon.png delete mode 100644 dart/manga/multisrc/madara/src/chibimanga/chibimanga.dart delete mode 100644 dart/manga/multisrc/madara/src/chibimanga/icon.png delete mode 100644 dart/manga/multisrc/madara/src/clovermanga/clovermanga.dart delete mode 100644 dart/manga/multisrc/madara/src/clovermanga/icon.png delete mode 100644 dart/manga/multisrc/madara/src/cocorip/cocorip.dart delete mode 100644 dart/manga/multisrc/madara/src/cocorip/icon.png delete mode 100644 dart/manga/multisrc/madara/src/coffeemanga/coffeemanga.dart delete mode 100644 dart/manga/multisrc/madara/src/coffeemanga/icon.png delete mode 100644 dart/manga/multisrc/madara/src/comicarab/comicarab.dart delete mode 100644 dart/manga/multisrc/madara/src/comicarab/icon.png delete mode 100644 dart/manga/multisrc/madara/src/comicznetv2/comicznetv2.dart delete mode 100644 dart/manga/multisrc/madara/src/comicznetv2/icon.png delete mode 100644 dart/manga/multisrc/madara/src/decadencescans/decadencescans.dart delete mode 100644 dart/manga/multisrc/madara/src/decadencescans/icon.png delete mode 100644 dart/manga/multisrc/madara/src/dessertscan/dessertscan.dart delete mode 100644 dart/manga/multisrc/madara/src/dessertscan/icon.png delete mode 100644 dart/manga/multisrc/madara/src/doodmanga/doodmanga.dart delete mode 100644 dart/manga/multisrc/madara/src/doodmanga/icon.png delete mode 100644 dart/manga/multisrc/madara/src/elitemanga/elitemanga.dart delete mode 100644 dart/manga/multisrc/madara/src/elitemanga/icon.png delete mode 100644 dart/manga/multisrc/madara/src/emperorscan/emperorscan.dart delete mode 100644 dart/manga/multisrc/madara/src/emperorscan/icon.png delete mode 100644 dart/manga/multisrc/madara/src/evascans/evascans.dart delete mode 100644 dart/manga/multisrc/madara/src/evascans/icon.png delete mode 100644 dart/manga/multisrc/madara/src/factmanga/factmanga.dart delete mode 100644 dart/manga/multisrc/madara/src/factmanga/icon.png delete mode 100644 dart/manga/multisrc/madara/src/falconmanga/falconmanga.dart delete mode 100644 dart/manga/multisrc/madara/src/falconmanga/icon.png delete mode 100644 dart/manga/multisrc/madara/src/finalscans/finalscans.dart delete mode 100644 dart/manga/multisrc/madara/src/finalscans/icon.png delete mode 100644 dart/manga/multisrc/madara/src/firstkissdashmanga/firstkissdashmanga.dart delete mode 100644 dart/manga/multisrc/madara/src/firstkissdashmanga/icon.png delete mode 100644 dart/manga/multisrc/madara/src/firstmanhwa/firstmanhwa.dart delete mode 100644 dart/manga/multisrc/madara/src/firstmanhwa/icon.png delete mode 100644 dart/manga/multisrc/madara/src/flextapescans/flextapescans.dart delete mode 100644 dart/manga/multisrc/madara/src/flextapescans/icon.png delete mode 100644 dart/manga/multisrc/madara/src/freemanga/freemanga.dart delete mode 100644 dart/manga/multisrc/madara/src/freemanga/icon.png delete mode 100644 dart/manga/multisrc/madara/src/freemangatop/freemangatop.dart delete mode 100644 dart/manga/multisrc/madara/src/freemangatop/icon.png delete mode 100644 dart/manga/multisrc/madara/src/frscan/frscan.dart delete mode 100644 dart/manga/multisrc/madara/src/frscan/icon.png delete mode 100644 dart/manga/multisrc/madara/src/ghostscan/ghostscan.dart delete mode 100644 dart/manga/multisrc/madara/src/ghostscan/icon.png delete mode 100644 dart/manga/multisrc/madara/src/girlslovemanga/girlslovemanga.dart delete mode 100644 dart/manga/multisrc/madara/src/girlslovemanga/icon.png delete mode 100644 dart/manga/multisrc/madara/src/glorymanga/glorymanga.dart delete mode 100644 dart/manga/multisrc/madara/src/glorymanga/icon.png delete mode 100644 dart/manga/multisrc/madara/src/gooffansub/gooffansub.dart delete mode 100644 dart/manga/multisrc/madara/src/gooffansub/icon.png delete mode 100644 dart/manga/multisrc/madara/src/harimanga/harimanga.dart delete mode 100644 dart/manga/multisrc/madara/src/harimanga/icon.png delete mode 100644 dart/manga/multisrc/madara/src/hentai3z/hentai3z.dart delete mode 100644 dart/manga/multisrc/madara/src/hentai3z/icon.png delete mode 100644 dart/manga/multisrc/madara/src/hentaicube/hentaicube.dart delete mode 100644 dart/manga/multisrc/madara/src/hentaicube/icon.png delete mode 100644 dart/manga/multisrc/madara/src/hentaimanga/hentaimanga.dart delete mode 100644 dart/manga/multisrc/madara/src/hentaimanga/icon.png delete mode 100644 dart/manga/multisrc/madara/src/hentaiteca/hentaiteca.dart delete mode 100644 dart/manga/multisrc/madara/src/hentaiteca/icon.png delete mode 100644 dart/manga/multisrc/madara/src/hentaiwebtoon/hentaiwebtoon.dart delete mode 100644 dart/manga/multisrc/madara/src/hentaiwebtoon/icon.png delete mode 100644 dart/manga/multisrc/madara/src/hentaixcomic/hentaixcomic.dart delete mode 100644 dart/manga/multisrc/madara/src/hentaixcomic/icon.png delete mode 100644 dart/manga/multisrc/madara/src/hentaixyuri/hentaixyuri.dart delete mode 100644 dart/manga/multisrc/madara/src/hentaixyuri/icon.png delete mode 100644 dart/manga/multisrc/madara/src/hentaizone/hentaizone.dart delete mode 100644 dart/manga/multisrc/madara/src/hentaizone/icon.png delete mode 100644 dart/manga/multisrc/madara/src/hipercool/hipercool.dart delete mode 100644 dart/manga/multisrc/madara/src/hipercool/icon.png delete mode 100644 dart/manga/multisrc/madara/src/hiperdex/hiperdex.dart delete mode 100644 dart/manga/multisrc/madara/src/hiperdex/icon.png delete mode 100644 dart/manga/multisrc/madara/src/hm2d/hm2d.dart delete mode 100644 dart/manga/multisrc/madara/src/hm2d/icon.png delete mode 100644 dart/manga/multisrc/madara/src/immortalupdates/icon.png delete mode 100644 dart/manga/multisrc/madara/src/immortalupdates/immortalupdates.dart delete mode 100644 dart/manga/multisrc/madara/src/imperioscans/icon.png delete mode 100644 dart/manga/multisrc/madara/src/imperioscans/imperioscans.dart delete mode 100644 dart/manga/multisrc/madara/src/inmortalscan/icon.png delete mode 100644 dart/manga/multisrc/madara/src/inmortalscan/inmortalscan.dart delete mode 100644 dart/manga/multisrc/madara/src/isekaiscanmanga/icon.png delete mode 100644 dart/manga/multisrc/madara/src/isekaiscanmanga/isekaiscanmanga.dart delete mode 100644 dart/manga/multisrc/madara/src/jiangzaitoon/icon.png delete mode 100644 dart/manga/multisrc/madara/src/jiangzaitoon/jiangzaitoon.dart delete mode 100644 dart/manga/multisrc/madara/src/jimanga/icon.png delete mode 100644 dart/manga/multisrc/madara/src/jimanga/jimanga.dart delete mode 100644 dart/manga/multisrc/madara/src/kakuseiproject/icon.png delete mode 100644 dart/manga/multisrc/madara/src/kakuseiproject/kakuseiproject.dart delete mode 100644 dart/manga/multisrc/madara/src/kamisamaexplorer/icon.png delete mode 100644 dart/manga/multisrc/madara/src/kamisamaexplorer/kamisamaexplorer.dart delete mode 100644 dart/manga/multisrc/madara/src/komikchan/icon.png delete mode 100644 dart/manga/multisrc/madara/src/komikchan/komikchan.dart delete mode 100644 dart/manga/multisrc/madara/src/ksgroupscans/icon.png delete mode 100644 dart/manga/multisrc/madara/src/ksgroupscans/ksgroupscans.dart delete mode 100644 dart/manga/multisrc/madara/src/ladyestelarscan/icon.png delete mode 100644 dart/manga/multisrc/madara/src/ladyestelarscan/ladyestelarscan.dart delete mode 100644 dart/manga/multisrc/madara/src/leviatanscans/icon.png delete mode 100644 dart/manga/multisrc/madara/src/leviatanscans/leviatanscans.dart delete mode 100644 dart/manga/multisrc/madara/src/lhtranslation/icon.png delete mode 100644 dart/manga/multisrc/madara/src/lhtranslation/lhtranslation.dart delete mode 100644 dart/manga/multisrc/madara/src/linkstartscan/icon.png delete mode 100644 dart/manga/multisrc/madara/src/linkstartscan/linkstartscan.dart delete mode 100644 dart/manga/multisrc/madara/src/lolicon/icon.png delete mode 100644 dart/manga/multisrc/madara/src/lolicon/lolicon.dart delete mode 100644 dart/manga/multisrc/madara/src/luffymanga/icon.png delete mode 100644 dart/manga/multisrc/madara/src/luffymanga/luffymanga.dart delete mode 100644 dart/manga/multisrc/madara/src/maidscan/icon.png delete mode 100644 dart/manga/multisrc/madara/src/maidscan/maidscan.dart delete mode 100644 dart/manga/multisrc/madara/src/manga18h/icon.png delete mode 100644 dart/manga/multisrc/madara/src/manga18h/manga18h.dart delete mode 100644 dart/manga/multisrc/madara/src/manga3asq/icon.png delete mode 100644 dart/manga/multisrc/madara/src/manga3asq/manga3asq.dart delete mode 100644 dart/manga/multisrc/madara/src/mangabee/icon.png delete mode 100644 dart/manga/multisrc/madara/src/mangabee/mangabee.dart delete mode 100644 dart/manga/multisrc/madara/src/mangaclash/icon.png delete mode 100644 dart/manga/multisrc/madara/src/mangaclash/mangaclash.dart delete mode 100644 dart/manga/multisrc/madara/src/mangadistrict/icon.png delete mode 100644 dart/manga/multisrc/madara/src/mangadistrict/mangadistrict.dart delete mode 100644 dart/manga/multisrc/madara/src/mangadiyari/icon.png delete mode 100644 dart/manga/multisrc/madara/src/mangadiyari/mangadiyari.dart delete mode 100644 dart/manga/multisrc/madara/src/mangafenix/icon.png delete mode 100644 dart/manga/multisrc/madara/src/mangafenix/mangafenix.dart delete mode 100644 dart/manga/multisrc/madara/src/mangafreakonline/icon.png delete mode 100644 dart/manga/multisrc/madara/src/mangafreakonline/mangafreakonline.dart delete mode 100644 dart/manga/multisrc/madara/src/mangagalaxy/icon.png delete mode 100644 dart/manga/multisrc/madara/src/mangagalaxy/mangagalaxy.dart delete mode 100644 dart/manga/multisrc/madara/src/mangagoyaoi/icon.png delete mode 100644 dart/manga/multisrc/madara/src/mangagoyaoi/mangagoyaoi.dart delete mode 100644 dart/manga/multisrc/madara/src/mangagreat/icon.png delete mode 100644 dart/manga/multisrc/madara/src/mangagreat/mangagreat.dart delete mode 100644 dart/manga/multisrc/madara/src/mangakomi/icon.png delete mode 100644 dart/manga/multisrc/madara/src/mangakomi/mangakomi.dart delete mode 100644 dart/manga/multisrc/madara/src/mangaland/icon.png delete mode 100644 dart/manga/multisrc/madara/src/mangaland/mangaland.dart delete mode 100644 dart/manga/multisrc/madara/src/mangananquim/icon.png delete mode 100644 dart/manga/multisrc/madara/src/mangananquim/mangananquim.dart delete mode 100644 dart/manga/multisrc/madara/src/mangaowlone/icon.png delete mode 100644 dart/manga/multisrc/madara/src/mangaowlone/mangaowlone.dart delete mode 100644 dart/manga/multisrc/madara/src/mangapure/icon.png delete mode 100644 dart/manga/multisrc/madara/src/mangapure/mangapure.dart delete mode 100644 dart/manga/multisrc/madara/src/mangaqueencom/icon.png delete mode 100644 dart/manga/multisrc/madara/src/mangaqueencom/mangaqueencom.dart delete mode 100644 dart/manga/multisrc/madara/src/mangaread/icon.png delete mode 100644 dart/manga/multisrc/madara/src/mangaread/mangaread.dart delete mode 100644 dart/manga/multisrc/madara/src/mangareadorg/icon.png delete mode 100644 dart/manga/multisrc/madara/src/mangareadorg/mangareadorg.dart delete mode 100644 dart/manga/multisrc/madara/src/mangarolls/icon.png delete mode 100644 dart/manga/multisrc/madara/src/mangarolls/mangarolls.dart delete mode 100644 dart/manga/multisrc/madara/src/mangarubycom/icon.png delete mode 100644 dart/manga/multisrc/madara/src/mangarubycom/mangarubycom.dart delete mode 100644 dart/manga/multisrc/madara/src/mangaryu/icon.png delete mode 100644 dart/manga/multisrc/madara/src/mangaryu/mangaryu.dart delete mode 100644 dart/manga/multisrc/madara/src/mangasehri/icon.png delete mode 100644 dart/manga/multisrc/madara/src/mangasehri/mangasehri.dart delete mode 100644 dart/manga/multisrc/madara/src/mangasorigines/icon.png delete mode 100644 dart/manga/multisrc/madara/src/mangasorigines/mangasorigines.dart delete mode 100644 dart/manga/multisrc/madara/src/mangasoverall/icon.png delete mode 100644 dart/manga/multisrc/madara/src/mangasoverall/mangasoverall.dart delete mode 100644 dart/manga/multisrc/madara/src/mangasushi/icon.png delete mode 100644 dart/manga/multisrc/madara/src/mangasushi/mangasushi.dart delete mode 100644 dart/manga/multisrc/madara/src/mangatxgg/icon.png delete mode 100644 dart/manga/multisrc/madara/src/mangatxgg/mangatxgg.dart delete mode 100644 dart/manga/multisrc/madara/src/mangatxunoriginal/icon.png delete mode 100644 dart/manga/multisrc/madara/src/mangatxunoriginal/mangatxunoriginal.dart delete mode 100644 dart/manga/multisrc/madara/src/mangatyrant/icon.png delete mode 100644 dart/manga/multisrc/madara/src/mangatyrant/mangatyrant.dart delete mode 100644 dart/manga/multisrc/madara/src/mangaus/icon.png delete mode 100644 dart/manga/multisrc/madara/src/mangaus/mangaus.dart delete mode 100644 dart/manga/multisrc/madara/src/mangaweebs/icon.png delete mode 100644 dart/manga/multisrc/madara/src/mangaweebs/mangaweebs.dart delete mode 100644 dart/manga/multisrc/madara/src/mangaxico/icon.png delete mode 100644 dart/manga/multisrc/madara/src/mangaxico/mangaxico.dart delete mode 100644 dart/manga/multisrc/madara/src/manhuaes/icon.png delete mode 100644 dart/manga/multisrc/madara/src/manhuaes/manhuaes.dart delete mode 100644 dart/manga/multisrc/madara/src/manhuaus/icon.png delete mode 100644 dart/manga/multisrc/madara/src/manhuaus/manhuaus.dart delete mode 100644 dart/manga/multisrc/madara/src/manhuazone/icon.png delete mode 100644 dart/manga/multisrc/madara/src/manhuazone/manhuazone.dart delete mode 100644 dart/manga/multisrc/madara/src/manhuazonghe/icon.png delete mode 100644 dart/manga/multisrc/madara/src/manhuazonghe/manhuazonghe.dart delete mode 100644 dart/manga/multisrc/madara/src/manhwa18app/icon.png delete mode 100644 dart/manga/multisrc/madara/src/manhwa18app/manhwa18app.dart delete mode 100644 dart/manga/multisrc/madara/src/manhwa18org/icon.png delete mode 100644 dart/manga/multisrc/madara/src/manhwa18org/manhwa18org.dart delete mode 100644 dart/manga/multisrc/madara/src/manhwa68/icon.png delete mode 100644 dart/manga/multisrc/madara/src/manhwa68/manhwa68.dart delete mode 100644 dart/manga/multisrc/madara/src/manhwaclan/icon.png delete mode 100644 dart/manga/multisrc/madara/src/manhwaclan/manhwaclan.dart delete mode 100644 dart/manga/multisrc/madara/src/manhwafull/icon.png delete mode 100644 dart/manga/multisrc/madara/src/manhwafull/manhwafull.dart delete mode 100644 dart/manga/multisrc/madara/src/manhwahentaime/icon.png delete mode 100644 dart/manga/multisrc/madara/src/manhwahentaime/manhwahentaime.dart delete mode 100644 dart/manga/multisrc/madara/src/manhwamanhua/icon.png delete mode 100644 dart/manga/multisrc/madara/src/manhwamanhua/manhwamanhua.dart delete mode 100644 dart/manga/multisrc/madara/src/manhwanew/icon.png delete mode 100644 dart/manga/multisrc/madara/src/manhwanew/manhwanew.dart delete mode 100644 dart/manga/multisrc/madara/src/manhwaworld/icon.png delete mode 100644 dart/manga/multisrc/madara/src/manhwaworld/manhwaworld.dart delete mode 100644 dart/manga/multisrc/madara/src/mantrazscan/icon.png delete mode 100644 dart/manga/multisrc/madara/src/mantrazscan/mantrazscan.dart delete mode 100644 dart/manga/multisrc/madara/src/milftoon/icon.png delete mode 100644 dart/manga/multisrc/madara/src/milftoon/milftoon.dart delete mode 100644 dart/manga/multisrc/madara/src/momonohanascan/icon.png delete mode 100644 dart/manga/multisrc/madara/src/momonohanascan/momonohanascan.dart delete mode 100644 dart/manga/multisrc/madara/src/monarcamanga/icon.png delete mode 100644 dart/manga/multisrc/madara/src/monarcamanga/monarcamanga.dart delete mode 100644 dart/manga/multisrc/madara/src/moonloversscan/icon.png delete mode 100644 dart/manga/multisrc/madara/src/moonloversscan/moonloversscan.dart delete mode 100644 dart/manga/multisrc/madara/src/moonwitchinlove/icon.png delete mode 100644 dart/manga/multisrc/madara/src/moonwitchinlove/moonwitchinlove.dart delete mode 100644 dart/manga/multisrc/madara/src/murimscan/icon.png delete mode 100644 dart/manga/multisrc/madara/src/murimscan/murimscan.dart delete mode 100644 dart/manga/multisrc/madara/src/nekopostco/icon.png delete mode 100644 dart/manga/multisrc/madara/src/nekopostco/nekopostco.dart delete mode 100644 dart/manga/multisrc/madara/src/nijitranslations/icon.png delete mode 100644 dart/manga/multisrc/madara/src/nijitranslations/nijitranslations.dart delete mode 100644 dart/manga/multisrc/madara/src/novelcrow/icon.png delete mode 100644 dart/manga/multisrc/madara/src/novelcrow/novelcrow.dart delete mode 100644 dart/manga/multisrc/madara/src/pantheonscan/icon.png delete mode 100644 dart/manga/multisrc/madara/src/pantheonscan/pantheonscan.dart delete mode 100644 dart/manga/multisrc/madara/src/pawmanga/icon.png delete mode 100644 dart/manga/multisrc/madara/src/pawmanga/pawmanga.dart delete mode 100644 dart/manga/multisrc/madara/src/pinkseaunicorn/icon.png delete mode 100644 dart/manga/multisrc/madara/src/pinkseaunicorn/pinkseaunicorn.dart delete mode 100644 dart/manga/multisrc/madara/src/pojokmanga/icon.png delete mode 100644 dart/manga/multisrc/madara/src/pojokmanga/pojokmanga.dart delete mode 100644 dart/manga/multisrc/madara/src/portalyaoi/icon.png delete mode 100644 dart/manga/multisrc/madara/src/portalyaoi/portalyaoi.dart delete mode 100644 dart/manga/multisrc/madara/src/prismahentais/icon.png delete mode 100644 dart/manga/multisrc/madara/src/prismahentais/prismahentais.dart delete mode 100644 dart/manga/multisrc/madara/src/projetoscanlator/icon.png delete mode 100644 dart/manga/multisrc/madara/src/projetoscanlator/projetoscanlator.dart delete mode 100644 dart/manga/multisrc/madara/src/ragnarokscanlation/icon.png delete mode 100644 dart/manga/multisrc/madara/src/ragnarokscanlation/ragnarokscanlation.dart delete mode 100644 dart/manga/multisrc/madara/src/rainbowfairyscan/icon.png delete mode 100644 dart/manga/multisrc/madara/src/rainbowfairyscan/rainbowfairyscan.dart delete mode 100644 dart/manga/multisrc/madara/src/randomscan/icon.png delete mode 100644 dart/manga/multisrc/madara/src/randomscan/randomscan.dart delete mode 100644 dart/manga/multisrc/madara/src/readergen/icon.png delete mode 100644 dart/manga/multisrc/madara/src/readergen/readergen.dart delete mode 100644 dart/manga/multisrc/madara/src/richtoscan/icon.png delete mode 100644 dart/manga/multisrc/madara/src/richtoscan/richtoscan.dart delete mode 100644 dart/manga/multisrc/madara/src/rightdarkscan/icon.png delete mode 100644 dart/manga/multisrc/madara/src/rightdarkscan/rightdarkscan.dart delete mode 100644 dart/manga/multisrc/madara/src/rio2manga/icon.png delete mode 100644 dart/manga/multisrc/madara/src/rio2manga/rio2manga.dart delete mode 100644 dart/manga/multisrc/madara/src/romantikmanga/icon.png delete mode 100644 dart/manga/multisrc/madara/src/romantikmanga/romantikmanga.dart delete mode 100644 dart/manga/multisrc/madara/src/s2manga/icon.png delete mode 100644 dart/manga/multisrc/madara/src/s2manga/s2manga.dart delete mode 100644 dart/manga/multisrc/madara/src/samuraiscan/icon.png delete mode 100644 dart/manga/multisrc/madara/src/samuraiscan/samuraiscan.dart delete mode 100644 dart/manga/multisrc/madara/src/scambertraslator/icon.png delete mode 100644 dart/manga/multisrc/madara/src/scambertraslator/scambertraslator.dart delete mode 100644 dart/manga/multisrc/madara/src/scantradvf/icon.png delete mode 100644 dart/manga/multisrc/madara/src/scantradvf/scantradvf.dart delete mode 100644 dart/manga/multisrc/madara/src/shadowtrad/icon.png delete mode 100644 dart/manga/multisrc/madara/src/shadowtrad/shadowtrad.dart delete mode 100644 dart/manga/multisrc/madara/src/shibamanga/icon.png delete mode 100644 dart/manga/multisrc/madara/src/shibamanga/shibamanga.dart delete mode 100644 dart/manga/multisrc/madara/src/sinensis/icon.png delete mode 100644 dart/manga/multisrc/madara/src/sinensis/sinensis.dart delete mode 100644 dart/manga/multisrc/madara/src/sweettimescan/icon.png delete mode 100644 dart/manga/multisrc/madara/src/sweettimescan/sweettimescan.dart delete mode 100644 dart/manga/multisrc/madara/src/taberumangas/icon.png delete mode 100644 dart/manga/multisrc/madara/src/taberumangas/taberumangas.dart delete mode 100644 dart/manga/multisrc/madara/src/tankouhentai/icon.png delete mode 100644 dart/manga/multisrc/madara/src/tankouhentai/tankouhentai.dart delete mode 100644 dart/manga/multisrc/madara/src/tatakaescan/icon.png delete mode 100644 dart/manga/multisrc/madara/src/tatakaescan/tatakaescan.dart delete mode 100644 dart/manga/multisrc/madara/src/taurusfansub/icon.png delete mode 100644 dart/manga/multisrc/madara/src/taurusfansub/taurusfansub.dart delete mode 100644 dart/manga/multisrc/madara/src/thebeginningaftertheend/icon.png delete mode 100644 dart/manga/multisrc/madara/src/thebeginningaftertheend/thebeginningaftertheend.dart delete mode 100644 dart/manga/multisrc/madara/src/toonizy/icon.png delete mode 100644 dart/manga/multisrc/madara/src/toonizy/toonizy.dart delete mode 100644 dart/manga/multisrc/madara/src/tortugaceviri/icon.png delete mode 100644 dart/manga/multisrc/madara/src/tortugaceviri/tortugaceviri.dart delete mode 100644 dart/manga/multisrc/madara/src/valkyriescan/icon.png delete mode 100644 dart/manga/multisrc/madara/src/valkyriescan/valkyriescan.dart delete mode 100644 dart/manga/multisrc/madara/src/vermanhwas/icon.png delete mode 100644 dart/manga/multisrc/madara/src/vermanhwas/vermanhwas.dart delete mode 100644 dart/manga/multisrc/madara/src/vinmanga/icon.png delete mode 100644 dart/manga/multisrc/madara/src/vinmanga/vinmanga.dart delete mode 100644 dart/manga/multisrc/madara/src/wickedwitchscan/icon.png delete mode 100644 dart/manga/multisrc/madara/src/wickedwitchscan/wickedwitchscan.dart delete mode 100644 dart/manga/multisrc/madara/src/winterscan/icon.png delete mode 100644 dart/manga/multisrc/madara/src/winterscan/winterscan.dart delete mode 100644 dart/manga/multisrc/madara/src/wonderlandscan/icon.png delete mode 100644 dart/manga/multisrc/madara/src/wonderlandscan/wonderlandscan.dart delete mode 100644 dart/manga/multisrc/madara/src/yanpfansub/icon.png delete mode 100644 dart/manga/multisrc/madara/src/yanpfansub/yanpfansub.dart delete mode 100644 dart/manga/multisrc/madara/src/yaoicomics/icon.png delete mode 100644 dart/manga/multisrc/madara/src/yaoicomics/yaoicomics.dart delete mode 100644 dart/manga/multisrc/madara/src/yuriverso/icon.png delete mode 100644 dart/manga/multisrc/madara/src/yuriverso/yuriverso.dart delete mode 100644 dart/manga/multisrc/madara/src/zeroscan/icon.png delete mode 100644 dart/manga/multisrc/madara/src/zeroscan/zeroscan.dart delete mode 100644 dart/manga/multisrc/mangabox/mangabox.dart delete mode 100644 dart/manga/multisrc/mangabox/sources.dart delete mode 100644 dart/manga/multisrc/mangabox/src/mangabat/icon.png delete mode 100644 dart/manga/multisrc/mangabox/src/mangabat/mangabat.dart delete mode 100644 dart/manga/multisrc/mangabox/src/mangairo/icon.png delete mode 100644 dart/manga/multisrc/mangabox/src/mangairo/mangaeiro.dart delete mode 100644 dart/manga/multisrc/mangabox/src/mangakakalot/icon.png delete mode 100644 dart/manga/multisrc/mangabox/src/mangakakalot/mangakakalot.dart delete mode 100644 dart/manga/multisrc/mangabox/src/manganato/icon.png delete mode 100644 dart/manga/multisrc/mangabox/src/manganato/manganato.dart delete mode 100644 dart/manga/multisrc/mangareader/mangareader.dart delete mode 100644 dart/manga/multisrc/mangareader/sources.dart delete mode 100644 dart/manga/multisrc/mangareader/src/asurascans/asurascans.dart delete mode 100644 dart/manga/multisrc/mangareader/src/asurascans/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/azurescans/azurescans.dart delete mode 100644 dart/manga/multisrc/mangareader/src/azurescans/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/beastscans/beastscans.dart delete mode 100644 dart/manga/multisrc/mangareader/src/beastscans/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/cosmicscans/cosmicscans.dart delete mode 100644 dart/manga/multisrc/mangareader/src/cosmicscans/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/cosmicscansid/cosmicscansid.dart delete mode 100644 dart/manga/multisrc/mangareader/src/cosmicscansid/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/dojingnet/dojingnet.dart delete mode 100644 dart/manga/multisrc/mangareader/src/dojingnet/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/duniakomikid/duniakomikid.dart delete mode 100644 dart/manga/multisrc/mangareader/src/duniakomikid/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/geceninlordu/geceninlordu.dart delete mode 100644 dart/manga/multisrc/mangareader/src/geceninlordu/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/infernalvoidscans/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/infernalvoidscans/infernalvoidscans.dart delete mode 100644 dart/manga/multisrc/mangareader/src/kanzenin/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/kanzenin/kanzenin.dart delete mode 100644 dart/manga/multisrc/mangareader/src/katakomik/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/katakomik/katakomik.dart delete mode 100644 dart/manga/multisrc/mangareader/src/komiklab/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/komiklab/komiklab.dart delete mode 100644 dart/manga/multisrc/mangareader/src/komikmama/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/komikmama/komikmama.dart delete mode 100644 dart/manga/multisrc/mangareader/src/komikstation/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/komikstation/komikstation.dart delete mode 100644 dart/manga/multisrc/mangareader/src/komikucom/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/komikucom/komikucom.dart delete mode 100644 dart/manga/multisrc/mangareader/src/kumapoi/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/kumapoi/kumapoi.dart delete mode 100644 dart/manga/multisrc/mangareader/src/lelmanga/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/lelmanga/lelmanga.dart delete mode 100644 dart/manga/multisrc/mangareader/src/magusmanga/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/magusmanga/magusmanga.dart delete mode 100644 dart/manga/multisrc/mangareader/src/mangacim/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/mangacim/mangacim.dart delete mode 100644 dart/manga/multisrc/mangareader/src/mangaindome/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/mangaindome/mangaindome.dart delete mode 100644 dart/manga/multisrc/mangareader/src/mangatale/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/mangatale/mangatale.dart delete mode 100644 dart/manga/multisrc/mangareader/src/mangawt/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/mangawt/mangawt.dart delete mode 100644 dart/manga/multisrc/mangareader/src/manhwax/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/manhwax/manhwax.dart delete mode 100644 dart/manga/multisrc/mangareader/src/melokomik/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/melokomik/melokomik.dart delete mode 100644 dart/manga/multisrc/mangareader/src/mihentai/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/mihentai/mihentai.dart delete mode 100644 dart/manga/multisrc/mangareader/src/origamiorpheans/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/origamiorpheans/origamiorpheans.dart delete mode 100644 dart/manga/multisrc/mangareader/src/phenixscans/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/phenixscans/phenixscans.dart delete mode 100644 dart/manga/multisrc/mangareader/src/piscans/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/piscans/piscans.dart delete mode 100644 dart/manga/multisrc/mangareader/src/raikiscan/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/raikiscan/raikiscan.dart delete mode 100644 dart/manga/multisrc/mangareader/src/ravenscans/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/ravenscans/ravenscans.dart delete mode 100644 dart/manga/multisrc/mangareader/src/shadowmangas/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/shadowmangas/shadowmangas.dart delete mode 100644 dart/manga/multisrc/mangareader/src/suryascans/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/suryascans/suryascans.dart delete mode 100644 dart/manga/multisrc/mangareader/src/sushiscan/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/sushiscan/sushiscan.dart delete mode 100644 dart/manga/multisrc/mangareader/src/sushiscans/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/sushiscans/sushiscans.dart delete mode 100644 dart/manga/multisrc/mangareader/src/tarotscans/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/tarotscans/tarotscans.dart delete mode 100644 dart/manga/multisrc/mangareader/src/tukangkomik/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/tukangkomik/tukangkomik.dart delete mode 100644 dart/manga/multisrc/mangareader/src/turktoon/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/turktoon/turktoon.dart delete mode 100644 dart/manga/multisrc/mangareader/src/uzaymanga/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/uzaymanga/uzaymanga.dart delete mode 100644 dart/manga/multisrc/mangareader/src/xcalibrscans/icon.png delete mode 100644 dart/manga/multisrc/mangareader/src/xcalibrscans/xcalibrscans.dart delete mode 100644 dart/manga/multisrc/mmrcms/mmrcms.dart delete mode 100644 dart/manga/multisrc/mmrcms/sources.dart delete mode 100644 dart/manga/multisrc/mmrcms/src/jpmangas/icon.png delete mode 100644 dart/manga/multisrc/mmrcms/src/jpmangas/jpmangas.dart delete mode 100644 dart/manga/multisrc/mmrcms/src/komikid/icon.png delete mode 100644 dart/manga/multisrc/mmrcms/src/komikid/komikid.dart delete mode 100644 dart/manga/multisrc/mmrcms/src/lelscanvf/icon.png delete mode 100644 dart/manga/multisrc/mmrcms/src/lelscanvf/lelscanvf.dart delete mode 100644 dart/manga/multisrc/mmrcms/src/mangafr/icon.png delete mode 100644 dart/manga/multisrc/mmrcms/src/mangafr/mangafr.dart delete mode 100644 dart/manga/multisrc/mmrcms/src/mangaid/icon.png delete mode 100644 dart/manga/multisrc/mmrcms/src/mangaid/mangaid.dart delete mode 100644 dart/manga/multisrc/mmrcms/src/onma/icon.png delete mode 100644 dart/manga/multisrc/mmrcms/src/onma/onma.dart delete mode 100644 dart/manga/multisrc/mmrcms/src/readcomicsonline/icon.png delete mode 100644 dart/manga/multisrc/mmrcms/src/readcomicsonline/readcomicsonline.dart delete mode 100644 dart/manga/multisrc/mmrcms/src/scanvf/icon.png delete mode 100644 dart/manga/multisrc/mmrcms/src/scanvf/scanvf.dart delete mode 100644 dart/manga/multisrc/nepnep/nepnep.dart delete mode 100644 dart/manga/multisrc/nepnep/sources.dart delete mode 100644 dart/manga/multisrc/nepnep/src/mangalife/icon.png delete mode 100644 dart/manga/multisrc/nepnep/src/mangalife/mangalife.dart delete mode 100644 dart/manga/multisrc/nepnep/src/mangasee/icon.png delete mode 100644 dart/manga/multisrc/nepnep/src/mangasee/mangasee.dart delete mode 100644 dart/manga/src/all/batoto/batoto.dart delete mode 100644 dart/manga/src/all/batoto/icon.png delete mode 100644 dart/manga/src/all/batoto/sources.dart delete mode 100644 dart/manga/src/all/comick/comick.dart delete mode 100644 dart/manga/src/all/comick/icon.png delete mode 100644 dart/manga/src/all/comick/sources.dart delete mode 100644 dart/manga/src/all/mangadex/icon.png delete mode 100644 dart/manga/src/all/mangadex/mangadex.dart delete mode 100644 dart/manga/src/all/mangadex/sources.dart delete mode 100644 dart/manga/src/all/nhentai/icon.png delete mode 100644 dart/manga/src/all/nhentai/nhentai.dart delete mode 100644 dart/manga/src/all/nhentai/sources.dart delete mode 100644 dart/manga/src/en/mangahere/icon.png delete mode 100644 dart/manga/src/en/mangahere/mangahere.dart delete mode 100644 dart/manga/src/en/mangahere/source.dart delete mode 100644 index.json delete mode 100644 javascript/anime/src/de/aniworld.js delete mode 100644 javascript/anime/src/en/allanime.js delete mode 100644 javascript/icon/de.aniworld.png delete mode 100644 javascript/icon/en.allanime.png delete mode 100644 model/source.dart delete mode 100644 source_generator.dart diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index 6339a335..00000000 --- a/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1,8 +0,0 @@ -blank_issues_enabled: false -contact_links: - - name: ⚠️ Application issue - url: https://github.com/kodjodevf/mangayomi/issues/new/choose - about: Issues and requests about the app itself should be opened in the mangayomi repository instead - - name: Mangayomi app GitHub repository - url: https://github.com/kodjodevf/mangayomi - about: Issues about the app itself should be opened here instead. diff --git a/.github/ISSUE_TEMPLATE/report_issue.yml b/.github/ISSUE_TEMPLATE/report_issue.yml deleted file mode 100644 index 16ca391b..00000000 --- a/.github/ISSUE_TEMPLATE/report_issue.yml +++ /dev/null @@ -1,100 +0,0 @@ -name: 🐞 Issue report -description: Report a source issue in Mangayomi -labels: [Bug] -body: - - - type: input - id: source - attributes: - label: Source information - description: | - You can find the extension name and version in **Browse → Extensions**. - placeholder: | - Example: "Gogoanime 0.0.35 (English)" - validations: - required: true - - - type: input - id: language - attributes: - label: Source language - placeholder: | - Example: "English" - validations: - required: true - - - type: textarea - id: reproduce-steps - attributes: - label: Steps to reproduce - description: Provide an example of the issue. - placeholder: | - Example: - 1. First step - 2. Second step - 3. Issue here - validations: - required: true - - - type: textarea - id: expected-behavior - attributes: - label: Expected behavior - placeholder: | - Example: - "This should happen..." - validations: - required: true - - - type: textarea - id: actual-behavior - attributes: - label: Actual behavior - placeholder: | - Example: - "This happened instead..." - validations: - required: true - - - type: input - id: mangayomi-version - attributes: - label: Mangayomi version - description: | - You can find your Mangayomi version in **More → About**. - placeholder: | - Example: "0.0.67" - validations: - required: true - - - type: input - id: device - attributes: - label: Device - description: List your device, model and the OS version. - placeholder: | - Example: "Google Pixel 5 Android 11" - validations: - required: true - - - type: textarea - id: other-details - attributes: - label: Other details - placeholder: | - Additional details and attachments. - - - type: checkboxes - id: acknowledgements - attributes: - label: Acknowledgements - description: Your issue will be closed if you haven't done these steps. - options: - - label: I have searched the existing issues and this is a new ticket, **NOT** a duplicate or related to another open or closed issue. - required: true - - label: I have written a short but informative title. - required: true - - label: I have updated all installed extensions. - required: true - - label: If this is an issue with the app itself, I should be opening an issue in the [app repository](https://github.com/kodjodevf/mangayomi/issues/new/choose). - required: true diff --git a/.github/ISSUE_TEMPLATE/request_feature.yml b/.github/ISSUE_TEMPLATE/request_feature.yml deleted file mode 100644 index d10e5c99..00000000 --- a/.github/ISSUE_TEMPLATE/request_feature.yml +++ /dev/null @@ -1,55 +0,0 @@ -name: ⭐ Feature request -description: Suggest a feature to improve an existing source -labels: [Feature request] -body: - - - type: input - id: source - attributes: - label: Source name - description: | - You can find the extension name in **Browse → Extensions**. - placeholder: | - Example: "AniWatch" - validations: - required: true - - - type: input - id: language - attributes: - label: Source language - placeholder: | - Example: "English" - validations: - required: true - - - type: textarea - id: feature-description - attributes: - label: Describe your suggested feature - description: How can an existing extension be improved? - placeholder: | - Example: - "It should work like this..." - validations: - required: true - - - type: textarea - id: other-details - attributes: - label: Other details - placeholder: | - Additional details and attachments. - - - type: checkboxes - id: acknowledgements - attributes: - label: Acknowledgements - description: Your issue will be closed if you haven't done these steps. - options: - - label: I have searched the existing issues and this is a new ticket, **NOT** a duplicate or related to another open or closed issue. - required: true - - label: I have written a short but informative title. - required: true - - label: If this is an issue with the app itself, I should be opening an issue in the [app repository](https://github.com/kodjodevf/mangayomi/issues/new/choose). - required: true diff --git a/.github/ISSUE_TEMPLATE/request_source.yml b/.github/ISSUE_TEMPLATE/request_source.yml deleted file mode 100644 index 21ded8d6..00000000 --- a/.github/ISSUE_TEMPLATE/request_source.yml +++ /dev/null @@ -1,52 +0,0 @@ -name: 🌐 Source request -description: Suggest a new source for Mangayomi -labels: [Source request] -body: - - - type: input - id: name - attributes: - label: Source name - placeholder: | - Example: "Not Real Source" - validations: - required: true - - - type: input - id: link - attributes: - label: Source link - placeholder: | - Example: "https://notrealsource.org" - validations: - required: true - - - type: input - id: language - attributes: - label: Source language - placeholder: | - Example: "English" - validations: - required: true - - - type: textarea - id: other-details - attributes: - label: Other details - placeholder: | - Additional details and attachments. - Example: "+18/NSFW = yes" - - - type: checkboxes - id: acknowledgements - attributes: - label: Acknowledgements - description: Your issue will be closed if you haven't done these steps. - options: - - label: I have searched the existing issues and this is a new ticket, **NOT** a duplicate or related to another open or closed issue. - required: true - - label: I have written a title with source name. - required: true - - label: I have checked that the extension does not already exist by searching the [GitHub repository](https://github.com/kodjodevf/mangayomi-extensions/) and verified it does not appear in the code base. - required: true diff --git a/.github/workflows/gen_index.yml b/.github/workflows/gen_index.yml deleted file mode 100644 index b1a0709c..00000000 --- a/.github/workflows/gen_index.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: Generate json index - -on: - push: - branches: - - main - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Setup Dart - uses: dart-lang/setup-dart@9a04e6d73cca37bd455e0608d7e5092f881fd603 - - - name: Generage - run: | - dart run source_generator.dart - - - name: Commit and Push Changes - run: | - git config --local user.email "github-actions[bot]@users.noreply.github.com" - git config --local user.name "github-actions[bot]" - git checkout main - git add index.json - git add anime_index.json - git commit -m "Update extensions" - git push origin main --force \ No newline at end of file diff --git a/1.png b/1.png new file mode 100644 index 0000000000000000000000000000000000000000..bdd3cc519dc5e336bd3ac85822dce0108926489b GIT binary patch literal 127613 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 z z2%%SYWBhuyK%SS*V*a7>&vp;$KG1SKKEeL+DEyUvqnb(=k}NI#Jcv1CIC80{S|FbS76 z{Bg8TiYETX>2h?akSzgJi`BkvHK%7yg zK`yXAlhlb9IN=LRVZ{TBa`MS+m5sKrVkZR-1M8Ob{@z+;*AjAhOCM|kPA|yoqu^~- z6~ruy{Vt5n+M$lhH7~zUbYu-!LOYY3q_XM^gawO44xqn?_eemUYmURHG4%WS9!KvY zgm>G9R+^Vh8wjt%iN(RIl~sZAB|3zyYtCzLyIplO6+C&rSVA7}VAs7;CaJRQ>LbX6 z>B}swQ>Os^3$0{5A6Am40m^tb0%`GwMsFhZL2vl>fitK(o%wztgf<7{LIE(8xO-IN z%xiut>jfs2LDK3tQH#zQ6#MI4PxkDk?A{u^7sj4btHc~t8xbvU>y9Ffn{Ne4`Z2?xA#^ww7vv8~|b7ibGnn%$}mvL+x2vnC-m>Jr(>d+MB z3d>Mk?ShHpab;b@e%Xg5Tb?Q(*ndF}F?|PzLy4X7mvy=?#7oHo+ z#y%5Bu1A=o!tTRKb((hmeFA;3PmER__LI(f_tF-T_O2@he!LUAvoLLMq0T1ZS+nEd zxR~&mELc;o8JSiZCH)DX8*|*rIUdn{vU5XaOuB!~WO@so`NpR{!+2r`a~oin$9o5G zr=4kUg{fw%xIjS2oF}J5yCt1rxNDw0Exnxj`H`^V(h&hxVAh#JUF7}q5uA~2oJQmk zBZGU|D-Ta`-e%2BOcuUQLUJ?-C$fd4Lbb;0XZ_qh>Ps6#W~SWY?rn5d2iWmPNkC@x zK)2rC7fG`=Wk}!{RzbK4WON=Kz{_GPa&k9eQ!eUu$DIn`UY->QiZqIc2xL zD!Qd5C)qBy^YVKo{^j=!$)O`gVi4XB=)HH&+}@H+_i7jffA|yO_;A$S2N=(6>51_C zqm!-x_P%{$rIc^>;dyLu*t}V$0g^d&Z|)2O?p=;v=LMCo$-jV0a2Y%-Bq9;>j zRI!tVL*~+EQsg>MaKhZGj8)sJ1IGQ@!N~&I5(jEG(gNnGeSrPXh!o6_OGRkUyb3eK zpSu8tt;HON`owVxv`3-kY%6LtCP&*G$CkYS98n?UqsCP@4YjC{sd(qPa`<}k&&%U&+@J;uL%1ig? z`KpZ>&$C*wja#XNCo^g{GZWYhLd95bQ(sw(!qX(F6F%0k67{|ld>zRmjLp_Q`EsF4 z{+#9JeP@yAJhJ^cO>eZF$~m9l=Hpm9%_H;U+jKyuQ7ifzkD`NX?cvoi=S$Ld9d-{R zGeMwtMsxE~(dUtu-mu32Lg2Ei_EQkc%7imsOU0DUAvvq#Q$_XzzMX&3`IdM%jh`j; zUvDSXAL=Y6WDH-%NT>Q-qc@is=EZ~2S5r8o)V{ON>`nZo%8-~~=nI;t**eLR|GkY7 zS6|V&<_R9K$dE}(kla%T<4>^E$L?xQp<7qnLfh1;A`~b!T`euC3&BqDlxL%WWXy_7 z-vxFB&#Wt_VcTWVKa`h*)zL4y=37=;`fub4P#C40s@H&})09iIA|p1v={R|Gc(w5m ztitJUt-|wTPUsRV+q~>*)KEYbQV!WE@^{0N&bX|)!1Z(OgX@|A;U9x6S zYwUf?HUvrTEh(pcbVNZQ4WiF+gRJ^Yk2-oIsU2rHPMehNA*uit9huMk*h|oUx>@qa z(T+vN88|uKPSa-(y1wh{Ei8KC4D=c6%L@^v+z#wao5SB)c|ST*UL85{#-t^besohb zIbSOfau2EJCNr?GUNlvED&FpEIAYnz<7MvYP_BkzJqZQ@8pB z=!VfaYf^TYs0wsrOjf6Cy*mC7W&yMdy@KfOf!}B)`ZNaPrM7|Kkaf|NA~%iw^VPHj z3O=a6z9=wiBVj>#T*hZMJ-^|Gelj`#@Qy`I{ZHNvTfktTIU_nFDzZjLno9?PQrb?l z+j4Oy4jK=>Jj}=5zC~l!X62*>F0=fLb$Cc8Gl?kyY-7;+0qKS#`wJGr)&s6EMv%TB4?{atebpsq6R%p4iOediGq0>U%MG)eK?( ztiF49h)YBKvm8G7-(R2jrLUU(m;)kX0!6?J6|wxWU5ryXX;!*tF&P- zA=Jh`rFWNH@ly+^Q*p&tQ^Pz|Jl)0KKmn)22pE}dhknG5RJTs-c)bVFO}Cbql^tD7 zTLWJ_6f~r6!{sr*l@yyMIJ1zSb-%M}Oa(g6kqX~5ajUkgGOYKk4%J{hG8>6tH$IEk zNl|3eLg$`03AGu%q{=tUI=V%rpReLE!fxg?{Pm-;n?VAAyQHxmJa0wJ1tXpBg%u-X z?AZsGMGuBhbO=L-_@H`X9?PGH`5Zr+7~r&6H|nU>!8y|D)EG~KOE7UsHP6PU zPJ0RdIm@lUIjP-{Ved>1G=ugHH=vq#*W&F1L+chcZ2EGNp{dD$G=DGs`b~F{XOYEO zSlu|aBLEPdv>HO`TnicU9A=gfIJE>G&U~oCkGpTX3+$T@{yU025yGkje7zo-w5M@u z^cut-`X4{;c}X6CY^pxiMNURT<3G(vcsE#$1X9su05be%nSE2o!{LF=`h02LIk$N7 z(x)VBE#VA=G)LYf?|&jt03RQ)ys@A}2y3bwNidJjx*y}@IO3JO)VrO?QY$opJC340 zFb_(?-l^tEisIF#`uCLE^U1X+$As@v`pf%@2);xmbTw+&H<1`WeKf`^T!DnjR^d~6 z?Q^BNhWJV##sQ&Q3dyx5K3q6wqn|3uXbJuDqTe*MbGO%(@UUXn%g4H|gd0_OC78=q zwJKFMQ^*ah85LCKmoQ04;Y5wlk72y5Ix{6>F=7{huZ!6EO-93wAtym;f`ODo}zsq~btne=1xl1sNJ#=%{; z(7e@pqkFxqE8uY1QSGbRWNXKKVz}U@1!nNgsy2K1qrYU8+4RYy0YRPfRmbjzR(9>h zxvgJ`%B?3iD1cvFfupispnuIpc;FmYfJGHqEx6ti=xDBfAJiUkOvkXcVQs@^SnIAA zM1W-uqveS93gFq;09s|W%bk+vviDr|X2FeC!X>gBp^LPYxyOg%KHa@0{P7K`a%sTQ zzN;$TZ^oo7TrNJQF3RkZmP%?=jZ3LX)+#J93p=|7#e1ivRu(7Sdd{k!R`Dzz7eA|c zgg_iA#&Jg^=hX1gQ#~Z0$z$38Mbro)uD-k{OQ97M{&$D)D!mj0UmmUg{ zcm@|@zcSW%Uq@3WwOXbza=`2Aej64)d%acX#@eid@04+MM-pGpA!s1^u4Dn?QejaQ z43lHtf2b`6e|eGcgf#ZkW_6d=ZR4 zK}&t0Wvez`-Zo4(9dljx6jRi~21=nhde0RiNnR*PjX%*W;P11^^(2g?{fLED^^g?4 zK=6UxqR3+X4?xTKph;Q zmA{wMt@DFZ(7;V_Bs+X9c4clY20XmvmJv$q#F;AkcPU$9`ZX~XU3IkHN3W`}Z|S1g zgia5u8$CGZHGmXI62mCN1RqV_#Hmr51DL^a7q}J)Q_1*%-Edcle`n(?6fqzIbqrAf z!!9hAv>k9O%(KRid$-z^?RKuv9rK77l8xG2DiM=a_k6pOD=9d)zljj(nt?cxYFS8f zMwzb9i$+goHvydQi%PEuL8s?L-oH1_t)!jR59BRGOvcbm-BsTWjWd1>2c%(v&q5S7 zA@!w$uG3j$(kDC}d$4=ZzPqG;2Ku>=J4suLz{Pa|od|;Wkp+Z{F zu=iTPGN#^D7k?g2%*1Xe*T3Se0rpPiyqS?N8Ww$PLa8-9K|vHxn%j-d;*~$2I#7po zoG-?oIRGIcRXlVk?-XB2jzv)#H$gj8ogKE3jgTltVEyy`~IE% zY@0>@7^2}4HE!^xQpdtXJ^AVV-dCaxVx$eOYJ+SrH;Y;u48d3xLOF7u3TLa;b;ahe zs^Rv1H)AF!C78LcfE83pTLyHUE$Z;W4qFvC2tV}WC6^I_LcmMJ*)f+bgcTVS=j0n} zn77NXVx|qs^3R_B+DSJV$B z+b+cr`xB*h9y)6MJbXia_3)2Qy#y=&V^fsJebWcn7+o{MZ{`c7h7NA-ovd5-)b{kS zL~kd>A||yp_ArK5lgsJ}cMkw_YWJ?%@J}wce6Z?!K}gdL>g&mI}Q9 zTc6aKwgJdUxwbDOi5B)0zF{T+zTEd%$AHGT_+i|ixD z=MDaFvPf|Ehj9H+A0D0TamP0pi-tG^t39TCS{YCGQz3WQGo<<_7i7BjO$&QJa+UgR zu-aUAA?GmEJD&@5VYC*}-ZN2Bi8C*PCmJd^(cQytGSZm>$42*>Wtw3U%HG=V7o98< z)?7?W?mF7&%r){N*B35K*Jj%b&qlwqR8VElOjJ-T@tsLzIxDmMv26}-ncnkKQ>6&+ z1C4IN4;C&^l+qvmJ#rrEEuavTn@{C}C_c6GylcJfsLtxD=;blMZfkhd#~=gEM*zWI zQz$-I5wfu_@2f}gn@s%((Lmgr4hhWcRV0zu8{2rOFIpK%yx(UkrqJhsy!+^l!R?xyZ{Ua^IrT&w~#|J8Ei7!UI( zwnpDDu#U9sHH4Dx>`&k`Yh&Cu_0z6^x@&XiR(@Ut&8B_+buHn+e^>r{4ggB-{{lI< zP;eLd?1-^Zlc>~FsTy){=uV^HsX$9-l+di9i8~Y3yvd47#|;W;>nfW%YJf22|PklX{aCg z`Z5oPfjTyq$$6fD3M7${@Iz2{ZR0&mxvghyyz9eZ4$RkXefQ$A&&g*j&q>S+Ke& z0o}-4u0xFKc_Ox}b{{jWWAE^`SigyQ6B90V0GB*}89ZSrsLp&|@%}^VH2lE$P_YbSue+Lr>z$$wEMzqrK>PZvrqzvTDL(ke5r}UP6s_o9- zfcWWs6q+SO+moXYgk%R}K0VV(t5Rqq)vi@}qA&9g+eFxCYUm$;F$xt6H)b~RR2KMp#n160}fGVg?r zRW&I@_!fs1vzDRGvtUn5XBSa#r3^qcM>Ti#X-Kv;pfyoA5Zgc}R~I*`>C?&$6# zHWs6(R^5qM5@@xGxD$PB{z?JwCUA$yeDu7(<%C&jahWCd3;PvGskpZHsa5EXWmr=FE?*m3r(;r48*)DNnF~u zFo54#*)}!OQtS9;ASerl{Zfafi5EqsqOeCKdKpReB$FLs3m=PuF?`6NOI2R!D9^{8 zNdE=nVXbqi&|u2mISKgUNrnAmJ?dxq$r6x-a1Sh`9Dk`8bUk8KaLn~85cHMoi~Pgh zsW{MOh#KipV&sIv)b?fQXJ6{cCXnDunQ`Lbjv}j?4(rwBUb@6oY+%i#fXb(TnMK!8 zN$iBfCdy*gr!#O6hfgsCrVgjg`dV?^$WrgELc?){sfym;H)CQ4yV`aMZ#?{a4B%>1 zy|BDHTS^D+l<;1KtiKEI+lX;{(xRPwKUel%ke*u6kWA!}lE3heV9kNi;r2*MqT+Vc z8=NF1&VR2%8Lyn}MX11Fdpt7eipaX1Ux9PkWN@;LLymly=)oaT z-SzX`DBjPIjb-U_8jpkz5a-n=@+viuX`=DQwhpoXLtq&d>54}iSx?HU3wZG0Zs^pEJUyI*Z@U}~Z<~(9f*pPHR zu=o9&g=$r+_CRe0vKNI%<}6_5yDQ_#&`)W zSBG2}>1CmdqJZ9=kRP(7m5&XpHv%)6MCrHG$^>#}YC7TPDlSIwi&}>~X?R`LRV8X+ z8#)kHFc7u|e%zTEK2zW+_|L6<+CP6UTh0u~6x3Tr)hAhb-w!J=S7N$m@v7}@inOqX z4NsTT{6ocLB4-}mwp37Bbae*FHM$BHy&+{ORs?q*yiMuS^l@FY9x2q__V878)mh>5 zF`$t-9kl~|r_2d(1v?1x0ldUQvSTq{(tYldL{v$CR{g8i2FK`kcmkX50&opuW`Q;$ z?~Bjwx7-&ZFaHdi>vDeEP&8dHK0-J_z5AcpM=HHnPrlbRj zE{C8$g~RG<6la$+FYA8f4$eW_z3($7jvo+G3HW8u;&?+;ybYA?QY1B9$asCNw)olY#@=jRKVXB*e_TakQb|I zDml0iE#{~;e@*?Xe?Ph~dSlN0V`=>>d|f`lRmAqDHR}z0_hLRvwzI?IEo#iab!j+k zHf+sxjaMmBEJGEx95b=*c#U8nJQ(wGDpW@s0tw-ut%j5F=~6C>i~EIdHxRo(Yne|J;yc{RDaH-yt-K3g0u+1Jz}vZbW0Ap5a>|AD)gD&t}b zOl`q;J%q2#yQc!9wHvV4?C%{{Au04|3y;OPnyMRlmOsEdZaa}JaHw0o++{|2DD~BN z_KqfAyYq}z4;1fMmpa~dm>FG~>~g1P4+egt%6^Ft$~0Bse2Pb?HQj2kQ*XtnsfOt(! zn2sw#<{VCR2}7D8jP+-sp8}|H^_tKW#f@S?89+PXbg$z}pNMm}YPX*8Fo8pQ#cPk0NK1{i# zE(Nz4+5`s0@s6|v>Mri-YtXfZhmVDR^|lIq;9(m$mF~9LPmLLp*;>?7c%vt7ypmzh z$lI>XdaP8oklJ^-&@*W}|Sg`=gBqt8H%yJyBAR0g2xF(2`A0 z9@c8EExh;eP|%ojBvF)DEZE)!>>pLHw*ZqWbPqpHACyxX=~qD|@9M9O&(go6(=44|W@^f80A+#S0SYOOaD}K@r2-33t^_moUnAU-d0f z3r;ZK(RnapPg9SDef3fBIkBU6Z4(*iY6|@x466BTL%ktSekAYDB==xyEVf}}<6|-i z(Qi$K$KEv9r>Vvj@PE;>x`JzadCiqbep6DRt6=9gH6il8$nofxFDX4Xj{Mk>Jv|l! z#F)p<4Y_BXO?-Q#eA7c%B8&`r_S$N3U(4HuMBL%4JZ8ETp%jGhLHQByYb}AUGs@i5 zux}-y>E+6v+={R5r-ja;kiy4fZ`t?Q*h08}%Rf5q82m@tdd94s(%mHCnj*oyKO#G) zp*K^cI4_G{;jy#hs0<*}Z|tOrvwxP(k7mWLZR5O*@opf!DGJ6KToKWgZr$A&ei)We zxW7yNoYne?YY_S46j5D+*0=32#*b!S+VfNR?5^_9Su31{hI?%`>aOO@dDkwm^p^MOh^jbcRkm5ld(WE^}3hK#-E^I zyVh@DC$xieFh#+Z6lY0#*@R?)rKE<23y>(6Od(xB&v*AIp~Ep736+ABqTrMLSrF%9 zUC6>Xf8b4%a(umg;Oqq}a>4LIcShM@RtCj8Qllbo`1@t_{P;7cv)o50Z*)!KcE*-) zf6jMXONrY>ZNzc6=1WXuIP6JS0b+e~N58ox_A%)b0v%2=2)81a%(rW-JEJvCQ5pdO z9UU1c@WS{L*g#gc6O0kIbj(9?-iqv!uM2Opj)D!=@0;(=a6ttF-F;FvVOEa+H{Il3 zh7Huqv_^0rnKzHh*uMwp1n{#ztFoaQhtB~1%zEdZ=sZ4bFCScmHZ`dhZBO??^;?d@ z*KF@^R8ePYcR|J{p81>4cP>?KEP29nFc=HhQMo`@I0R*G=wn}~IUicwRYM-3d)V>J zhX?0o1kTOZ^31d9$r#nk3tuoEnZYjAmh)X3F4*55bj7>-z=Jmw)(18wv@EmAml9nz zY?r*iNt&bf1$m<}(=Wy+j>3Ll|DNBtnEwO(>Ys5( ziJ5F5uWUT1U0|+L^+O(Yg5~P&=4O*qOMIca6x{7V8wpVAC!-W=kEg>YpL<>-WX9K? zD6SpU7_OS#atp0&VKgNLJ1DU4M1`@{fvxwlH^x+80Zc}yU)mop$p`f%Xdr6T;pP}2>CFp5VL7Y~^6lYjha$-~TU_v!L1=y7?aCdkArjM|aE7*{h7o#R!43CK6z{rS>$Y0EgtXBnaNPXUcW zT^|kSJ(9vEc5@RE=tHgAgW26s1%k%v^P(sW?_#CQT^JCKGb$xV1W$BTS48iII(&Rf z8|l#XA6jY9lQ1Pn1 zjiW$NEb6NV`cUL&NzIv8>ro6ua&kqqJqT~-lkKLv9@&<`fXPPkAlSostG{NM=Wgvx zh76iDNLZ_+yWd?4_gA_CA!;$65I}%CBAK!FbeK~sovDO&;8HhjN9d_&yKj%qo#kxXF%P|5+H$U z9WZD)+3}EL;DSuV@NcSQ-SS`T&;PCp09^&dPaXZ~u>gr;*{wg#E$FE5`~Ue0Z1ELe zm+>JLsE%>UDJAgF$$yDT)ZSDLn>;Wa01$iAhb2eh{awTCZ*1KU4+;dD?(u;!>wy4K zF2Fu@;N9V$F@zjn>ev%hViP2IBI*9#)Se8+{^#FFwvUgqeldce@M7pTP7=Titgk_i=y23Kr-l3vi)W`aF9i*f*fcG zeNr{%!uU-)w&fA{DfOKjn$D0Zy?3Z28y}2zarOHnZsQb{4#QkcMu%DN^8KjS7oQ!O zIoyX94<3f zwU=1GQdd|;IlE}tuajF7RIKvA&a$1T9Dz#Jd&-Yd1LHnLWg3+FJ^B*+(xD1Mk&PvG0+Ja`q z&W0s+C#x*$AsD;(wBfb#yI?NYb5D>JB!1$?P3xPJdc6w4}Jj>jIkTPM^k13N_pnX-3 z@6L&~i58`3@kP4-U;*vh@r`d25`oyml~p(JQqq09why!Q z;)Aei92qXz_e^rn7nq@9rIE;2zS8|>5nFX5h?h9;sod0t6S3Np3G$m_X7a7*W}3T| z(yA&xj6spb}Hpto+4VGk#2g zZ@uMKd*YqevkCfkj@TO9bNx+l+bEyX&#l9M4p3>86%}6%(N5VY?~LutgR_Nc2E~g zu85>p3h5E_^@JaIUx~NViLEEbg?ZKKi7;$2r?Q2#H~;>nAYVeaa~dB=27lTbBD~3$ zY`fX#IW*jLHn0>D*@>pnJ<2G&b?MZpzP>J~bYgL^-nxru)9_$Q5N8HKv+vVWQ-tk& zL>H7C9BH=?9;mZW>U<=YtJ+oi!Fu7wmUj>=MtAU!gFiQI>;U;LGI0xr#6KYMDi}K( zO9BWOK$EeZEUIQk7F^c4I=E!VEp(6O^5cbOS{oxRl#5?fiYT?{!>TK zzCegF`BHsqy+l68ytL-m939v_W>8p^M0rPLz{wY}wUk`>$M}iIl>^*VNBJ8exb$j3 zmB&o_qw49=MKbT~g2o|o^~M3vtr47+ALy+5(5C;K{oCj5iC=ncr0^EJya zb+PFJ3j15HrXbnd%R(czI@y#$8bf@;_WQ4{wBESWRCC@ITtXNCIVva_`BBuJK7Osi zcAXp5zrG3}*wmo7{53!!8xynxIE%HO5XaUqpPvg?R|o~t%T-3n2?EC??lh2wZj=|7 zO>CVSA_*qLhpuFoAD_?_8cPlubv`%ZyAWHRrh#yX(1-RG?Th zWO*_4*w2fngx+HdxBEEc#btN<4i5!V=+ZyC(XIS1 zUfsXk|Nlz`=%f!f{T9onLVt5~5}Ncm?BEoys`uX!b9HxP%5d`V zW6km;dKK$Q89?4yfVf7$HOx=;1C-LrO$d&`>7vwsKLiJkJ(MAj?;3njt4+?A^$Sh4=Aqw5Z%{!XDJ;^SNqW{h>m@@N9MI? z2KJ5SK!j#4}NhPNo z8Y99C3muwrq2;qXZ}mn5m(iMc`naN5<~G6T*k8$VAfD)tHF|?fHP0>?;-L&quLp{K zm|)6v0a>(oq1?R|*2)5@KJ13q)aGuC@CJiUf;;QdKK$eDPj&dNBf4XBRjw#airuFh zdXekQQh^9~A2$GoqLdIb;YTD9>!n_iQ?XKesHu4V=DfH)vXQ4B| zi`G9Zpr$=21KpnqShn)vPK|{knl-tQe<`+hmKj#CaPXAa0j!O8g9`ZKTw`WN`Y)?^ z{BpP>a5(?#C+V4Q&qIA4T({?+vr*SWh1qzb?W)j6ZQNe~sQ~?C?%KERM|4-Ld2%W_ zpSn(Z4!sTgl}VJJ`A^bkf%LB~?DXy}?|8Qf0xI~|Yp?%Z%TAH&^T%l=#%XW7Zg`C_ zAWT8g=|QW$ZeQ~u_kTJ3H+kPH*a<9Ni zsXjk($8Gwa-$}Rsg&Nr{WZ4JURy6KG@9(91-*0DXPCw-Rb-?C-Uu8Y!GvN;^OHnd# zmhA=*)@8sc1{1(C8+TM+5*_8Hw|Lqtn$>brr=U3MPsD$F#+?3{peLG^$^{nUnDw%` zHxgtcB2-HS!fKv!!=cEJkC?EJ6Flm;F4Ab#yF8s|Tp~Q+OMz?78X^p)K`b&`gZ!8Y z(96(7jZNy8HC%4rC2d7M#u5M=-Ezz=3?)1ptTZV4#GJg$Fs<>BadTQmpB*>N0Z!04 zw4~)%4IFxDzp=*4(F;xcC1NR7y7!O@3JNq++?XbbR57+o&e;KL04OA5!jMxYmoXzA z?&JE>R;S4&gcODG=~2txoG@{zv}495ITC@lW}#Ok+a zuFijkij_8X%>fx2D0QyCx{CfaI^@y7WuLCv83V8u$I}|fBXGaOr_gW#BlGi?b)g(V zHlX6Hhc9EPW5BVVpK}dj*#Ok5NAX(XdMsq)B7>xK!Y<%_?c5!Jzmh_(PjWepoN}Dj zVXpe5W&CWhTPHzdQ)(6n+}qpx)a6Bvl5hiniy}K!kwBu> z!{5w(LKD}Fx4%<93rJ>6IAUdeUJgw3_&Ku6f+*(n^g692xdZ==^%PK@kPlz);p7yS zY?}Wj4V_DErA}p82>j@+XAQ40KQeD0?A$YPQ51U1n@$AIjdMYfxP~X@`}bMCz2sCB zFWopr?Erecam{TaOSexIu&DwsG<+g}l!09)5LyUqwN$@%0fm05y!&UjPQ_Tcyf~~- zHcRYX1x}eIK^<}c20Z1+@8HS%e<67Km;AyXNQxVR7%{3I3-Q8Kl7aE~4=a1@^Y5Vz z_rCzNM@dQG&tTijF~C|7>K42bGD225J;kZrd%m4t+xp8cc1u$Vvk+1I`%=!wjhuvV z#!mi5?5%_EeK2|6`xLC&!9~Y)OGy&FsQ^PnMl*2zy}eZi{^66QtTlESm9WaR^3;s1tcU*XRC_j(yh+2ri_ zUH}mS8d0!aJiqtz`+I#yQoRyU#+H)I!oAxbm0jMp<Uwc|oNQwnt-S}u}xPPr4PP*_7M3Rq&h(fj_7Ct(Sq@nycBp{Yj zKNp#T76|(5m$iObYpWh)1e=+Y>D#HJb_iU6vRVz*9SbLV%{fUkuEn24-WN+zy&K%J zKGkRPLZnXa+>lSpVbQi+-d%CXrOGfvgHhxXvMgiM(WX*NO6_iVOR3Uc-L2H-#u&wv zUkK!~g=Xyj#8^+jj%Wh-69@s26O*BrG8xP-0CajFMeow0ybdd_)JKc4t9g0YVI7II zB#WL@XhQ4m2H@K)EV-7qn3mF({(%V^S219IhQCfD{~WHigodhr_oj|q3eoI5Nq!tw z>~l^iTqYw3IKKw#v_9A&dH@T29$;CZC-pNQ4w9;XH|5`Ay9k{#5n>+zzNl38o0?&L zvh~M3n?Nj(zk6|bKrMkO8GyS0MBjifo9vxL1IFE@iEi;mN<@u+p9)lk;92NZmUU;U z<}8KnTP!A6V_Iq=%>T2KFOd(k5J0$w^8@zP1drJb??$&&0FfjEZlH~jQkE5ds6liz zPILb4zDPO?i0x=B4N(TKDcQl>$K3#~9Ej3wKOPB+TXoEI_buk->>YKA_Rjz!dB4HJ zS;)7&#uz6B_7uoSrgAg5DmsIp?S?FNp!A|JTNDxq6QqtPsa6KmH!U;J;!26YRV@{jwGNX9$;o zI&HIUbi}_ui;)K$uRQY0aes*wzx5sqCp9Q6LEMR9#l>9e1%M1WbFfDe!8l2`W5=*kvb+>J)Xb~kyNa{fqpa``E~-DOXL3=?oDSw^*xr$%KZYQ zT!!te@BJaEX>7yhT~G87N^Fq&bt?X%jb}wrRT#kC0H4!%z;c9itpV{0llnm*?K*SP z`o7p*)kwj(a7TieV~wBK
8i5T3?{zSH1YurWdp5_tCfB++Y&mecsNQ4KjdD?S9 z6+YMam157m>p3;#eBD6SRK}|YKTf{S75g!GKbk(&Ruw(%$f>bN%O1)*8XxpfrFig} zijT>dzVrB0iqfLLWlQBNZC~5{(q{d6br2_P&82CCFCl%L&{4ttB-yue{4E!D%OOLL zg)_QYzz4|)vUWh?)7)(z$rqHn!8GUOukhEvQN)0tw;lr$lUIcQLywBwuYgo#wv?W^ zD4(_dcEbwQR!=K`14`9sLr`ITjZDEwHR?^1SV1R>)iEsW@oj0cW{N}A^5x%8YjVeI z0I@+<=1ts}VLusp5NO3|l04cS?_d6WPrK#)&aYX3H0FGm0w^}4-$e0mb5h@Hb?PR@ z#eGNPw*I-H91X2w!IZsZ{_k!2M7K3tLvFS}O3btMe9`3X>b5TmN3Jp_IxQ7PE|(Mc zzJ#3cB}tk60>!^Ck;pqo65s1?`NhsDEAQ%ty%b<=^BoBF3L64`!FC5wcGv5l_i$e~ zq$Q&BA0lAS{Yr;i1unMx1p!cUqRQC$ndTc-I!$+Ao@zJrLKIWzOda5=MdPPGFK686 zKal7K^+T-D7wh=u7?1qI`j05To5AEOJ8gYd=?Z)D_FaSLiyDy0>m6-yWO|W_^fkW@nG`egsmr(I{B~LY_|T^vvbDx%Hmg!+ zT4%cT^qvxy$tb1}5R+8=WIx7@irQEIr#_jJPG&GU=uw_cr`&8jlD{w2vM z0$%6ZU%b}zQbdpBfsYH+9DUdgo4V3scS+IOrT8fBi{p!H(L_4ws3aN$i`JPtt8{DV zBy1Z!|JYYxuG2yxs=A*5Vg94D?eYw3V`;h9_}`4Z*G(&At>s!c;om6sEGe~`cboh6 zaY9}r8L_C_0ck8k^pffH%!28d0RgwOmVCy_DGq&gOL2dZ3+uF&eQBYW{rwgSyi|Fa zVEtvZqg&QSq4%sSF@;ZoQR_b30+k^9Kd$S}v%(dz4!0I0%=F(ouzbw=e&pf! zw5xw#e{`XwUq;-IC=hu2HIR*CK=>(*RWgzMi0O1E3mn4oTR!~~=#NC)0}gq7Ev7)} z7w^W}i<~p$crDlBT|;Age+kY%wh9TFuQZQP+m%3y{o9L5-qwBUo?k-`7x%A+_pY?Q zUS5{n^Eu=CgchJdTK(j|II<@zMho-Xwx)#pjVt6y){9Bqw;-YJ{xTY1jTVhrvIqW|GQ-CROCMV+|BQ zx#r*n^j8a=s~-9Flm5^_=BvC2^b-5_bI5E(VHXvE)z5TNdBLegJ&rC4?VbV>ugNnS z=53@3^C?}C>-$#MaCuzuBzDMNXV8oO5EcexGv?x^H{>#PB7|(C^YTGS{56W*`Od8S zm+#9Tlhj!-@_uOKLhEcjxn+z`%_CK>hyI}wS71YqvE)C92ZK+Bt1|nG3Q~dCeZWu0 z*=$(ys1^nTYd^|)TR3}){TQNz-}SP^B6$3 zdpW1y_wgrpAhK7r)Ydj%MeSwzE!Q501IdvG9Oj?EFG&>)sKmxxjP8d_-iG`2&pR#i6Gtb@PZh=SEb4+cZ%_7yZjb?4X=#z6Vw7)+w9A@PAq}>T{7d=24eCq4*@_r~v17>4 zu~J#TE*vF!%%qs0D3#)7S0cJneLtwnrHzQ`zh^dB~XUj*>Y0|sS zIL4B*PV#lmZ;!l^ql@C71K*I9NAfnPi%IlEo24=5l;mX`@U?AK8o&=W&Z%5FZvTRI zSzahBifM%a)#5FbWdePczj6f=Qi10rn0*bu2~{5ds0rh>g+f@T6spQur}Sf#5(^{$ zJ3wyDryYDE*JNy|vdy8RWR2qI!IeH@=}8qNJe>$j@^v zjW&r;xywG#B*tOJ37rxZm6A61he?10NDh*;*#lJ=**2-0te?xCB{Wryb?0cd6Ng6U z9^Z*$|4F}G{Z2Us`!h-Sq+O9a<}qRo+SjGD)fKT{8SMNjpzKlOFw~d8Qi+bIN0n<}%gHj5WE9kVS#t%6O|jSCVyM{9Pbk4h?x*X&WwJYD)Ac6@j?f z0E84dxe`4n<#FgU$3L1kE{~8p>#NkQ3(3Dhau1-AQ}p$?y!oqd%X|3a+fH`@V`yb% z)wCz~U>?+M{@YK3%VR{y@{97vJH*%i&r=2dv3LIe@QYVDjJh$wTQ78}J`<82G;5vK+tlh6VahGO#RD91bZBou)DXW+jcRkkSrmdA6QIC5P z3ru?KeBtG28*a_WElq z$MyP0TaGq&8_LB(UedX|{1CezK)($1#@NNe4{by5qDO$4)o*;v5VUPdjSIL4v8?a= zAT1E0FP(MhIkt+yIbqEFf{9}T6LAtUSX%S z(S^|&S%uDR%E}ct{fX+qy5YzvvR*x&)*n^+#b!;@!!p=? zTM_7muyg46qMmrao*d3Z2ltyAex28s`=|9&^3mlcpkY~pnOVuybx0fZb>JS`xHmZ2 z256S-Cj(pa3iu-DXxC!i^qzGZlY_C%8VuMID9b$Peov7i^LY|jql&aN*YtI!ibms;7C`mp=mYQ|(?Cne@qb2^XJxxBHU!)NLSZ@$T8DK2DrG z=^xRSc765UHl|i}!b_Q4KutGqu!cv+(O#s+pCsFO=;JIu7eLCjGcOl7Vlpjt?^yNt z&P;J4n*r20o|?eU9d55w*~{~Cig>t2^Iad?c+U%+#2($P5*xjyKZ3-Ddqagk?2$x4 z@h@%8XW&{rGTYUH?~bJ3NF>_|jKyW-5)INP}~$%(0$jiv>dW4E%-ESjzgFWTvXZ?1{CTtdKXehg;LwTd5VJCh#qVB$A@19ZRv z8mPtvxq((#yG!uv2X;DxQaUOvOaF2${6q(?!Z((<{@2-O775aa@ZhH3^Pm<_gyKOK zitjW>+|G^(loskYpjVfp`^`rHkbe?gcLOk;U|9N>-W4y%i3i>DTgQ_-)f_%(wFW#h zw*=Yl!-jUqCcr+SuY@FR;J5c&uqKA~_*G71te;REgr&8xm&%ohkf1fqa*^~=VLTAI zTl1gJOE@-QtOwv%l=xMHy7&U`=u&`Li~2x z3?#wA99+=BW>d# zrWn-tEoO@?JAw35gI&}PpY|AnPpemi!vgf+u3&yClRlIyNQYYAKqk;%Y&9mE@`lG1 zlAc*yP*HM$-TichDwlwCC)kSi;)i>jg~?vHCj|Zn$hSq0Q35cgGFJpi_n4MXkY( z&TO2GO5Seu^MZH9z>pNu^d}v4aG`3td(JwpfK3tblSId&4`IY>}u)Lp?ja^dO zKfy|s3^R#!DROZ#^E=C8&v+0|c+_dwV+EL5lgu`1E-1}ko)9pxKC`+4G`vPQx7d;n zmlql=&)@^km^~jiIS2y;g+kk&ww-N`Ab~uI>F_*ig&-&;8zT|SlZ&^}zTV*a(&Kjc zr%*+m$_}H$xv4s!)gU#|X+$I_bUsfj6jvYwUf=)SwAP_d^e|Q`4)|7MF>#u6i(3%_ zr*G@qa2wwtvMIOChD-y%^pHPLic+Mv(i@z01e@MT4G^dXp|?lFWTni3a35LD{a309F#A| zBe(kXTVKmpN`YE0+8!~}o+?8OaA_l^phxhrIeoa{;v&)X4I@WXK&1D9pubw*{kfl@5jX@2u2Yo@h_*g{%2K;{70?> zfHsuOafEzU-+XQT843rr18|JSTFAPof4I-z-o zJ!nhXKjRTJXFs^%_t;Ae>VGK16_BSZP82DZ3>t%pQq1wAl?NFwJ^JQi_AB3tQCwp) z?5=Q9r@tW&zz`zli{-~Vs4agyf{>rzg{t zNLe>e+j`}+SyDqxdrM$V{@0~zNngtG@>RG;-rD?60h!1iY_#4e7Z?zII{7;@{pyZ_ zHf?73vC9Q=;-Pz50=ddQR60IO^J>t%Y-d{Us6d?f9(u6+N0(bUpcf7lSi2sF1F%@i z9nm{$Y)sir&>@yM;P0%g1)c4?z2%U7rSBN{Bg+$uhkVWYoOUs>^{LITtwBznzp~k% zcve(HK7$<&>}z&Uh|_^Nb>P|<^w0Iy!#=$hAt^R3)1C#=4-va-k1QYKlg`Q-;We(4 z4pJ{B)O@~joSN$`6Th-}ILKM>_-xB_i|X^P#2`JL9VRcQOy^+8A$h2LsrJ1hr&Yhn zg5sJGt!e4*QGt>pyUuw!PYsqdB5lRmP0^Vl6|S#>YM>)3K)adyv>47=`F~)!O_|4H` z&}uyiumQTW9=t7v(viU{WuoAjXrMiY>r7|o0kStm#z*L9+vG(m$4~y^d%699=s2T; zXMi1iv>qI1df2{vXWP3AXwu6F>`$ttiwrJ}28QXywpe?2I+yOy5w5Qe&YEX>xncTm z*7-G_r5e<(B9PmrDS9HcAtt(QcS5W}sfL$zvKbMqmNe3vkGd~psAt&(m3iRlQ0srE z!cSn>NSRwog0okt&|&nAoQYNMW*#J#939VpftgBOlA1~d)8sUCfE}=3XSB&5l!!*) z#%)#eX8X5;1R}q1^4D53xhBaUOEXaDkX6Jmg5xK+-@Xx;jXp*DRWFbNa-(gOc`{HbI+cSzctnUl^6JVV`(^2jXTe)TI=rt=bG~azxt{{ia@0go!lObkJO_ zxjM@E{_5Y3|F-p2;P9XO@4GKCSciV~Hng_C=54>sug|(yY9`hfUR*D;j`!frt3CS* zvun489Qy5jkpBAxzZ`xrNkkk4*`u_W2QYBJvD=$aZ-6d=4`QkE>>Rhn0-~*_rG5}-&pzg z{L|;~yhZow&-p=r^}L9;bG{L1T~bXKH6a0^fR#u-dGYA$zLC$#5a_^?Tlz9F-He$syHTrv)pgnVGpg@x>$ehq8)xXW_;fzOIJVAHH6$j*H?kIpG7HA}&piUU037^VOAK z-uUI(hT*!mn$_r5kfyqG0)vFG-F-r zH(`}W&tT^^#~XN7G+h2DX?F3!L@AM$aBI(YlYqUQ`~2#b4vC-bd00GfWjq%)<*9Q< z6Vo4u+2_8U@*&G$K-V?!q=Pc+dgnWN$J)7I^#8U6gG^}`Pw3Zf3O&a~m?dgk( za-?I8%8NKsaV9aN7lmOQ>j5?DRLVlOR{P97YNbP%?4ZMFSTGZuD}7cgXr5jNhb(i&^6<$oDzPZF&jjLTjLSpaZ*KketR7JUOVB z$r@BZ-}e`J+RIW-VcYC~?214_$MzLMFHg^NrTIR+Iq+H+MQNV_6bfA{aVgz9`WKf^ z_jIRMxzX?GZf2?To)&f~z=+-0br!{wWPA;mO!{ai7ixwYNuViEr%Z=2q6NzE&h|n& z8DEEY&c8oIPht2qI<$87-Wt-tlXGc%7fVE=O}SGr*-y;hS+^{Q3;41{2}$za z5jw((b~CDtoVlnI*`viCD^=OGC;At!T@5}{r>pmRykpt=N7(MiOolJP^*y>4K4IeV zgo7N|*{Sj@{G92TKjB~R+qml);oTanR}uv4qD~UcOw|W^uR$YKtmBgH<3GFDJD6#q zeK^kr9ZV{p*tGKTqmm`Qd z7YDcTTDf6+zC`=mQtpNAr!XaLTDIPwR`swM0asp_nK0~bTN*Ci--1N(xP#7Bq0#QK z=>jiM6X=W)tSpK<;BV@xC6zs)Y7W=W&_w#$ymOv&WXEO@woX|_{^FG82eULJxb_cv zC^Va&&r$$OXgzpk=JX~TWPzjOXAcYV;IEq)^%uBh^5W4;bzTPz2GYz^homPnWERiN zup>Pv7Z@~;=v6JG-Q8Xm8Fd(J@JhMIlxjJffTwUDN7nP*{Y?RWD$M@4h!1h< z-9_n`H*xot6PR~UICO1x*E>ttC#LGcC3J6uwH$x>kIQ9m+X?EsT?RvH7m=D83m`A+ z2&;(PS!7~RdO4vTAc*zKX=f$&BDldrS@nW-B^ir{91j=H?hEALr*<=-A_`TqWDEJS z{&ZEHp$JT8UL9X|vcGU!bvF*#ThrdjtG2dO->PPlTI3{ezWOB6Uyxs`t+rU!sd`Il z;3XG4Qly8!K$mHrZf^YaNj5QRWMDd5m%Hi52rn5o@Lv++xXJ0@HLAXRMde%fWXS3# zCueFsXlkoWi2_TxqP-(U17x>m7Q7~*Sa{2+WOU|f0IP$gV`mhE1tCbEibK%S#>^^! zZXpx7!{olv+U*tB^rjET>s|dis?Ph;yn*0Q!#*pK4dPpXl6kqYfK$58l!EA$^_^Lf zSY2VNwdxZa=HwCvUNR-mjqs)XUX*D>Y`;b(GZ;x!{6vag#c)BvRI?4Hnt+;}c|2|)NZ(oEqSm`~DhO)MF8POl^mUh>ZjWoNyR?m zv+aDszX+PCQx8$Qx}F{JS4nfUNx$jSxmdC?drk4V#1I*9T8+Jq5FRZVGg(4k>H(dB z@d>}U*rR67DlGZ}Z8q>e2bzaoP*d=7nGGy0+R;Wl%1+jLZ7~yP7%+1-;lg+chw`b| zOi#YR#T6`!)dA#Pta`hF(k6I{Z&;XhpU*q#S|eki3qXx_-i}KBu2M5aS-k)X>-$dxRi)hJgb<-XDkCGzDH6EumrKbi znZ#Pzh(~^CldYeF)p8l#H`um9Rfkbl;GNDtP@A}?P9_M?%;6~s9SSEpr4lB)DfYn4 z*drZD1G!r1!tGKhtH_=@RIiThYAcBAT*=o`-M>6=?U{m#ux^3NC9nlBSi#Jc&~?SE%Q{0C-2?uwav89O(8<>fLZw?unuyyZQK>Pd*EG1zav_ms>ib!Z!8f}l@sGH33Fmv~ zrY@KV`_)Fhv}>OjPE@RVgpaJ&(6Cu=j$-2^g|%8RJ&`fDqR(4K!OL@b9aH6IS@)}|GSkKHAdqM=SSk=q@kQ&YQy8{|LWA1mZGT!Z_@%Jt zz1%r@osfCtb^L0$_Gs5&I)4<#Xn?tY&@uxBPn&IQCZxg0xFY~4x)%4XQdq86*t^}=HpN1wra`3jMfec%KRN6#=swfx7r13U-k;XA0T z>*7H9G^2PFX7n1LR1E^xTIvL5jI@l1&e|Yn6#F6Io{XEP%KNY5hs*w2yd*L@{Z&U{ z&MI#WIOn-qRRu$6W#e*-j~{sT)jt72tK+_uW+12Sihj9dN3#I)8`d_o!d&SJpSi@c zw9>J9JVh|LN6?b4tt0%@j`O8sFGf=HE%UxMoL!yVXSmX}xj!WM-IEWf=s}T%AVn+>vxLs6~~1LMbRHkbXNn zW5gG)hir`tx-*t1`jvKVor(reZmj4GEPXn9H#@nkeH>c0>6mlrE1ydT^miATEWl*Z zU7Xbf!r;Q*9#+N2RXVFN?NgME_!~9@{ZyAFnTVRb=4(za__XfNlF<+t$Z&D{p^em2 z5Nm1kX>@9>>1SrNkaxhXvM-v>N+AZP9}yop*=eK?C_@>aE6U&jKktGm7INi8lYJL+ z&zh=j}csxM+xR*S}R-C85|hRcaYi*r7PYgI1MEg2lOUAiL04q-T=yt`gB zqv1bvWbOxg+82nH^>e@;w*1 z*h8U6y}#?I9lu+X+)H$FIAt1#Rr4NV80X{u7#m>gM_< z4f!qM+QK%>UW?zwf%?*cMq0$Q$!+|(0i{iPY1=S1ZeNss1U``I$;!2G1; zf1H1^Km2cFy?@`y{s?Q-Z0~apq58z~`pK}g$b@-dYUgRYW>sa*gukVwRK&b5=c_L+*9# zO0N*aUg^*BuhLEAhSBMVN&R&FIS3eN?&tziIiaWhNol>T%@@*P&1E;F8>Cl+EqvpH zpx(z08W4Uxk*0VfLDGYAU7zwU>Upzf?q(aushY+yI!1c4iHQlRhJJY7H$K~}RxJYxqi}D^SWv5xiEt-T!;IO zOJrs3szTEYKF?!(4`E!fV?MR#cut)Th!^sE&k{Jar6*;) zMve4?g-u=~gR1(?W#!5@@2ye3RqC> zE8APDTc|AdR?NaBt3nnKwCG5mGl8ridr7(9OSU)p_#K&2%2dickd|5eS1fSg zUTdmQ=iQa3L3q)?FTS9F+!G7K?*!4jo+WlZW*5EK=XM3`ffznCJCu@jgGkRzg)yQK|Gf1!=M{5suGv$19|rp|%%XAd%XP ziC@2%i<&f>{UY0@jZZsQ;$yg|(cwa7lwR*=(S;;X;A+Y)8P=O zk@=5LLU*?Ai9&_0ktN$7c%1Dq*}G~6MmWrSrR$6tPwzXF1m20DFB_zdFP=g$Qg7@8=;FSR?Z?2 z{M;$UIJj%^0ZeB8KZer(c)bV*pmo>~T44Ti5_g~ng5y33NP~87wp@C#f}?Z$ZX5@N zFK9Cqri^y(sMnQ`Pte|_%SYkXL5Ke=7HI#vBxBPW2sA^_IUX9B+*E^MB3R8Y13o*9 zH6*ZVxsI~P{@b@WkMGe2GqTRRAG`UaDpEl8Jmo3|AeU@7gfAx(1wf#U=h4!daNna|2OYB} zhcBCWy*A+=arqjvdS995D@=I6t0q(v;eP~KFpuL44)@816nGnsZx zU-vwH3`+en8rLT;MWt!N(pOGBK44l~z0fDC6SF&QoVvzPMlwQg`Z&&%6&=1wmR+S* ziG*wJyC)IJspITTob22&CvS6(nNXZ#DFqi4ijrh^55+drd@ROEqz2$a2vpHwhMNL`tplO^SL4<4CNA-o_b_y9O#XYa?tRgHZ z%kA_z0m{Ldqz-dqsxd37eXQErJsE#ad7t^hlUvF-l>CQ*yH<;Fa>H2_INr{ckyjt; z>k$?I1zS=sZ=ipa7C7k0Otw$5cRAq@=TK?{_G16za{OQBEUoVgB?9Dge?l-f!-mJQ zOPD_Cisuv1eFa*@EC7Es`D-<S=?R&}q&Rc`=G*WGhH}2@__LbzT$dds@)4=_ zDYW2f;6BUx?fH@W8UA<0=9{vVeE=||OG2kZIywKfzx1hzmd@#0RoKCj`uZWI!x77b z`T2^m8%$moeGFIExheW70?MVsr#s zCRcQur>Ow}`p0f|?8o>ea(?Gk#9_GMK-flI?ak9_eZtUPW{d(Y5Z6qL!?UtlE>4f6 zWKBkY`5uX7C1;G+bD)6Y23~esb=FK*7D`>FSS*y5Wuw%7=Lt28cQ1TtpCT)TN?i@b z5Z-KP5lr2q64>MlD1*>wj}GUVbeG30T&bxpE5p61JC5=AQ{0E*RqAH!P<&CGhRc~c zM_*-bac*rtCd+(E39$p=bJlpsc<7|#&|V`j87tb5H-~lns8b-5565fJA5Bf7g#MxJ z9_Yf}RLjh<$3;-6$mo1;z?=wvJ~5~;#+B375mkXiaJTMgcSNNIBi@p5UT0TV^aljL z)S>kzH9jOhp(;Xsu<+V1x5W`xhXi0*rr#Q(-oz==knPgZQY1d{&1<(qDov#acMzDr zgItR}t%)vP=M|Yk9CpET0m$7C$b-zn`uDK#inNt z+&|x-t3)p#JOt5BIo0dBmtESqJ{AG4aWEz(CjBwt&b&vOkqL-K?foO&&u50$D*Jdl zskC_<+rq+2FVo3kj z-*WP>*tckw6oRi}(5y-^U{7jQftKZV6{FpxyM*X@*Ik!nNfI9v5{p;QrKbNgJP~4c zMB@K2p8AZM!}M@?`rQ3xxO}L1pnPq-;)d@)#JVK<@@4F58oHIQOpQ8zpc~IyR3wNomEFX>c@jDK;JH?D{${2Ih{=@=Hr!Bz z0ZWQNxRc&Um{0U(d}(Xj%$*sif3A+a2#61S%I!w=R~nl)FFD4V#;x%pg~hCRddB*n z3sD98W%O|(?O$Js3M$^iUpM+tnT@(ASCv1MZ;oa|n{s2}$NT*hc!r~A^9wab{&Nkl zBT$l3_it?2T)P{`BoL!|4LWPBVNQOwpV|a{Y z-a0SG>TjAL+pcfkuC$Uk;cz3A9ENnt8n=9SPQXHgJcZ{$8J_^brs@GpdmGnyUWcNx zrJDDIO*uF;iq@#pbDRqFc?l%FJT_WdRIG7V9oekB>E)?ioU!{vf) z1EtOURIk4rY#b2(NHrhi*i~0mjM3cn%%>@|S0L{jXwq!*dy)rUwR~n?0{JMvprERd z?@AQtt_b7Zq7sa(%&aV*fTPp;&386N94`wl4gA(_m5+bCq(t%86|IU~%WG|StL^At zes9$Du&Q&hmQHcH;ruY=_8q&fmGW0c@1OR4x8u2T-@rzch~8Azjfb9O%} zYLgp*sPsudkMp+4lt-TJf{#aXtDy|#I2kO8iUysP{mKi0F%H>fMRJ1ICk4)v<=C?OD6~D9R`%lAgliEQ%wOeLIrpMTY~iT$}AJ)xG)_v*;0L=#hl^gZHxLHx;8-TZWAjoRSu~M7sB4f!Dfcv zgFDPX&-l(c#a`t`McdZ7KwAkzwJ4%KJC_Crne{9#bRJAc{lJAg3wmILPX4eI1ivme zqO~Ap&r(TSk0{nTE?vk(m%OA@El|)q?FAmKIlLp2XrGzc=I1n|q(4@Uhms*zON&Mb zEIp#ErSdREb01FoH_|*vj0D+qILL?JZ@#d{yuTP?lMUZ|B50{H3d-V1S=BgNvWey8;B$omL~am}4R1{Zxh!iv(VE^4CJ*y1;lW(YIw>6(wm zyZK(;+&B!wzdGUO8I|{M-~kgKX6@(4?M2Md8}_pX(555mW+D>1fX-6HP-+xkqQD~}P;=9JLx?G?a! zz?z{*s}2uCDS!*(W~UsySOc>oF2K=MORKxW$Gr4f=Daz1mjMnX4=s#~g==y1!JBS4 zC&c-G48r&}7L6F{2`FI>q`rI}@!2Nsgb$SGgad$F*jGh0mtTXQYQ5&W$GqP9*}9D- zJ>$l-4@$@_^#bsqK)=t-k#{!$nSZWyz1K=cvOMDKwlede4bhnGEHUcH&Wb5$RmHgE zTDeo=Zfk|U^&4{iXL@S1etg7tD(x0`z`kOFEZiNgee2}P51F4|$O&&;oJpnFt}>LESYnh*!J`XnbRnL2W6B#6CGY!3Zy5&diLkf0t1|G+ZM51EMY%iSCh}Cr2(DO2_eQsY9Qa z=+5L!4F)k7CvK1!y-9{okRIQkI z@Ad!;Ha6gQaqR)Ui|H_WHtpT!<>{4AZ}L&|%EyDZFXoNp0jd-tO$NCj;}3yUD7n_y zBOW4w0L~ah91YI&^O$uOAt2%fQtt%MT3z{-Bn}QJinI|eI5A-veky2V_C$+sfX%F) z*?ZPB1X5?+K2=g5+>`VB6U~s*^RtLHlz`Xxh%my zOqGav^iuVy$PC@I{B>-4$p)IM;96Y*Wy1twa}TPN`|gILWBN!` zVztaf@wVst9j?suj3-n8if6}Mff8rqu0?9oWtBUgr`&8mu&VPVKQ<&UJ}>L9%-o6w z*qa{euTR6-0*Db@UrkY*%U(bJfN= zJs5*g_(De@l32oc>_YB{7OlWq_^A5KGf*RIm_A;T$Bx{LN3smZ+-CF0`FO1%xxO0@pxPL=5grDi4)Qh#VNDGc zYDG!209+K#?=goZ@xD_3k`WaDzj3UhMw{9$!7Xb2-2F+MPlHe+K!XvJJP#m#REtsu zQGkzbln<9MHJq*o%8Df~LuM%Uzp1K}?S}BA4hrk>Vi2Vwi22ok7D&HwLwa@T5Z@wk z=zankk&{nZOU*IKdQiA=E(_%{v-7O^Vo_1 zntA2%c^Xmn0#8rRJ=1$a&lmPLXSljqW8QYW++$_O8O*=o5<d?%Q9!+mZI3`XPwfh{5UlaXa^a zM0Q-rzI3_H2_9ivI%xh2V?Tc59g8&L{|*@dmR%6R7a32TbWGju>V#V41}#+;Uy->;p#n8{9rBUt^- zskqITy^?i|{i7#mDZcXuzDZfx8vqFd9DUOUHfXHlU6p5(dzqKpjG@b1n)sGgm2Gx} zCrE|~q|y~y%-d@7QlWn=8~n!T1gbRX!d(weuAR1~HpQou&Yq?g->c&+n*W}h?5BQ3 zW3M2L{bMILLZ3XZQ9esponNs`a&Ks7sr+ENQwu&1;}FqoJ3IQ0ZvtZ=DLWfs%V9RB zVy_%E@_#uw+wQbK{`;*R@z?CZphSZYS12;Q+GZDF@4+op>bW(|M6+?XboA@ouu_r#%=68F7%IO z55EPKS5n^w9XD2-mQ-qnnjP?^3*SE35EcZ!mO8BqK55;?=cqxSl!!8)$5VLjhj+fb z;W!MlaoMa_%C0QrJ&r0AwOX<#UM)cMjGkUd`}-^`0j=hf>5`iWry@z~p|5!K_M2{P z)8F5JKZqGy(AK^L$2}j=*T!(~XFW&6uy^n#5K4XC#*c)*4!~!(`JUt+Iq0*Vm%Bd% zDf^gOJLgUWI$ot=`x>LBdXs4$L3m>k5`C+qEBV=yv+K*aGFUsWd|&@Q(uKwbw6fpC zICUR%cZb4IiqL-p_xA1vFPYGLfe`lj7Ina*7u4PrK2hApiB8tL^R1>Qd-=EN?LV?K zmP9g_j4i9DOcIz!iG+vvla2&I)=7UaWB^lbZI2C1P7*#fti$sVJ|kAZQVI3kvtDIw zU&mMCyKV<4>B#%KjQlbWNBcUMN#cLm?3wc>Ja;-qW%LhlaE>vb`5 zsfZyZjYnj2iP2TG>lJX>7}I5q{#tgZi7nJ<9c>IjSXiw~RrL|pJS9?|6J{H;a9AIsH93de@b0aSPvGL^L@^yp8 z5+(})j`rmzH;-P=XO8E%z3sM&S7-jp2Wd%rrFFHkEm5zH>0!1%YW zO`KMt#|7w7o;UUP_pfts0@ehVjK?NBf=2ch3wY8(<1>$xf_`yw_08KR8{lnm66x!z zyIDO*_+(v=|Htf<08wOgc*KEKlwJ3xpLo86yYqQ`hN=x2M}F3pt6C5h6`csPJNt!9 zwv>mi68P<5g2k-Ud%yKuzS81JB)b)1*AS>%v>&#Vy^R6mom@H5p&@*>G2g>3VCwA_ zEb4l+>V+D@=aT$W-o3Nz< zQaDe?mGi27`>s>ZLpL=(O~{$q5wuDz3_JL3^?&(xz8#W0^K}n`PGkwEC@TiqmZUHq z+1jHCHmiw1G2kxYpo!#91!2Z_kh_-OY6cY80`JL|(;*RiOkd;A@s!LLpFI2_=A+?? zI;IlqMGPf|BPB^aSOkpCO`T-ntShaBt|^ zSYkpQe6WU1R|=)b#=hXgG_R5Si~D(?W(OE3THjsKyLSbU&p*?Rwq$fQr3RW>DB3fJ3WUVoxnT z1`3FW)SBGz2tFrlGH99IVgBEaPiGGf@Q1vbYtSEF+Vms-mktdj=Ai6O#;N9SzI@d9 zUpqfMzc?Q~itoQ~J2seswn%i|37uZ4IzDx?CNob0{v~wHvfW>}18c*qUDhiq5ko-* zfaB8%MW#y|EsyL#g#I8f>-!PA`wNNGx75?xMdi=!C!e1Wdyh*lH34UyCQ}0%TZ78? zgKNda#6;uQuNx8kiHP4L?}}P5d8rQYX4%xz*%gTWZU@TPC8MWxsVuO+Bg0Hv?eY(&6SAhzlu$Bwx3U7*wB!NI6*;p7F8ylZY(AA0g)p_m0 zf=;XcS&F_T@LTkJ7qm_otB119D{a|uz`o!Zf@Q0GwWhwYp#dFp*pgl!xAts`wj6WW zhN`mLgvLU1JFo~W|HW6_nVg)IzU~yKqF{@-cAWzsmeU%^K6+49)#AYMwzjsO%Cxg~ z-jw05ezCV34_-R7(x?SQw*$~k1d_g=AVW96x!BmLt4FVYu@+rAX_Z${{}9`Mf5F0E zD+(wpLo*8;)33W;u=USWu|@iVBSyuk(e;b|+2%lf{~Ys!9OK(~U1-@kZl9f-?cXO< zCvC9=gAgm}L9ctDk!!EyXkY#JVrFBp534`7zquG-z+^iYHB6$5mgbf2H$;Gsp5rf- zzfn;-pGTkWC!wO>H!t|h-GhIsNl^KhL8z$U~ zi=dK}b_>$-vo+`qzs?q*wkUnO9CTL_JMZVty_WTVe^JVRm70ZbvpqY5KPT<~FxByY z)DisC&pXcw@KfLZXP1Tl@~q0w2>pLOvG#Kb{9FRxkp3(HTK6-i{e**a_NxDyV!_Xt z_A{pa$70%yh}pJa1&D+n{^X~sR;$%O^vmqe-TSB?|0}V2>s+^qL-*&3)FifiBk_NJ z0GffHv-ERm{M-*eqlP$y{tT5r&xfC<=uhY%F6{h?mwuwkpHTW|{vapLtbXo?pZnqG ue)zc`!~x+aiSUy|_(>wnkqD1+WYn`)xJkIBe}?vmk-q7%tRt8H{(k@+mo^pv literal 0 HcmV?d00001 diff --git a/4.png b/4.png new file mode 100644 index 0000000000000000000000000000000000000000..9baac925ee315052b746a3c91307ef0d25a90c47 GIT binary patch literal 124878 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 AVE_OC literal 0 HcmV?d00001 diff --git a/5.png b/5.png new file mode 100644 index 0000000000000000000000000000000000000000..685333719f5f65cfc8cdd24b467b046e54720086 GIT binary patch literal 38573 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 A9{>OV literal 0 HcmV?d00001 diff --git a/6.png b/6.png new file mode 100644 index 0000000000000000000000000000000000000000..1d458a0ebbba5a49a80250329052b5b20126c968 GIT binary patch literal 205644 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

5PTW`E_{s-s%i3i&%Ysw?G?;RD0v|dLo8Yg@6 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 ds-fq-0mVTP8^q"ongoing", 1=>"complete", 2=>"hiatus", 3=>"canceled", 4=>"publishingFinished", 5=>unknow - ``` - - - `chapters` or `episodes` contain all of all manga chapters or anime episodes. - - `name` is a string containing a chapter name. - - `url` is a string containing a chapter url. - - `scanlator` is a string containing a chapter scanlator. - - `dateUpload` is a string containing date **expressed in millisecondsSinceEpoch**. - - If you don't pass `dateUpload` and leave it null, the app will use the default date instead, but it's recommended to always fill it if it's available. - -#### Chapter pages - -- When user opens an chapter, `getPageList` will be called and it will return an array of string that are used by the reader. - -#### Episode Videos - -- When user opens an episode, `getVideoList` will be called and it will return a - ```bash - array of {'url':string,'originalUrl':string,'quality':string} - ``` - - that are used by the player. - -## Example sources that can help you understand how to create your source - -- [Example](https://github.com/kodjodevf/mangayomi-extensions/blob/main/javascript/anime/src/de/aniworld.js) - of HTML parsing using HTML DOM selector. -- [Example](https://github.com/kodjodevf/mangayomi-extensions/blob/main/javascript/anime/src/en/allanime.js) - of Json API usage. - - -## Some functions already available and usable - - -### http client - -Return Response -```bash -- Simple request - -const client = new Client(); - -const res = await client.get("http://example.com"); - -console.log(res.body); - -- With headers - -const client = new Client(); - -const res = await client.get("http://example.com",{"Referer": "http://example.com"}); - -console.log(res.body); - -- With body - -const client = new Client(); - -final res = await client.post("http://example.com",{"Referer": "http://example.com"},{'name':'test'}); - -console.log(res.body); - -``` - -### HTML DOM selector - -Example: -```bash -const htmlString = ` - - -

-
div head
-
- - - - - - - - - - - - - -
1234onetwothreefour
-
-
end
- -` - -const document = new Document(htmlString); -console.log(document.selectFirst("a").attr("href")); // https://github.com/kodjodevf -console.log(document.selectFirst("td").text); // 1 - -``` -See [`dom_selector`](https://github.com/kodjodevf/mangayomi/blob/lib/eval/javascript/dom_selector.dart) to see available methods. - - -### String utils -- this.substringAfter(`string: pattern`) -- this.substringAfterLast(`string: pattern`) -- this.substringBefore(`string: pattern`) -- this.substringBeforeLast(`string: pattern`) -- this.substringBetween(`string: left`, `string: right`) - -### Crypto utils -- unpackJs(`string: code`); -- deobfuscateJsPassword(`string: inputString`) -- encryptAESCryptoJS(`string: plainText`, `string: passphrase`) -- decryptAESCryptoJS(`string: encrypted`, `string: passphrase`) -- cryptoHandler(`string: text`, `string: iv`, `string: secretKeyString`, `Boolean: encrypt`) - -## Help - -If you need a help or have some questions, ask a community in our [Discord server](https://discord.com/invite/EjfBuYahsP). diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index fa0475cc..00000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,360 +0,0 @@ -# Contributing - -This guide have some instructions and tips on how to create a new Mangayomi extension. - -## Prerequisites - -Before you start, please note that the ability to use following technologies is **required**. - -- [Flutter development](https://flutter.dev/) -- [Dart](https://dart.dev/) -- Web scraping - - [HTML](https://developer.mozilla.org/en-US/docs/Web/HTML) - - [CSS selectors](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors) - -This project uses the capabilities of the [dart_eval](https://pub.dev/packages/dart_eval) package - -### Tools -- [Android Studio](https://developer.android.com/studio) -- [VS Code](https://code.visualstudio.com/) -- Any platform emulator - -### Writing your extension -1. Clone [Mangayomi](https://github.com/kodjodevf/mangayomi) next, read the README file to learn how to run the project. -2. Open the project then go to : -```console -lib -└── sources - └── source_test.dart -``` -and you will see this : - -```bash -import 'package:mangayomi/models/source.dart'; - -//For testing purposes, set to true -const useTestSourceCode = true; - -final testSourceModelList = [ - Source( - id: "Test Source".hashCode, - name: "Test Source", - // Example: https://gogoanime3.net - baseUrl: "", - // source code - sourceCode: testSourceCode, - // Example: en - lang: "", - // Example: false for anime true for manga - isManga: false) -]; - -const testSourceCode = r''' -import 'package:mangayomi/bridge_lib.dart'; - -class TestSource extends MProvider { - TestSource({required this.source}); - - MSource source; - - final Client client = Client(source); - - @override - bool get supportsLatest => true; - - @override - Future getPopular(int page) async { - // TODO: implement - } - - @override - Future getLatestUpdates(int page) async { - // TODO: implement - } - - @override - Future search(String query, int page, FilterList filterList) async { - // TODO: implement - } - - @override - Future getDetail(String url) async { - // TODO: implement - } - - // For anime episode video list - @override - Future> getVideoList(String url) async { - // TODO: implement - } - - // For manga chapter pages - @override - Future> getPageList(String url) { - // TODO: implement - } - - @override - List getFilterList() { - // TODO: implement - } - - @override - List getSourcePreferences() { - // TODO: implement - } -} - -TestSource main(MSource source) { - return TestSource(source:source); -} - -'''; - -``` -For testing your source set `useTestSourceCode` to true. -During the development it is recommended (but not necessary) to write it directly mangayomi application project. -Once extension is ready you can relocate your code into `mangayomi-extension` project in a `src` or `multisrc` package and create a Pull Request. - -### Source - -| Field | Description | -| ----- | ----------- | -| `name` | Name displayed in the "Sources" tab in Mangayomi. | -| `baseUrl` | Base URL of the source without any trailing slashes. | -| `apiUrl` | (Optional, defaults is empty) Api URL of the source with trailing slashes. | -| `lang` | An ISO 639-1 compliant language code (two letters in lower case in most cases, but can also include the country/dialect part by using a simple dash character). | -| `id` | Identifier of your source, automatically set in `Source`. It should only be manually overriden if you need to copy an existing autogenerated ID. | -| `sourceCodeUrl` | contains the URL where the extension source code can be downloaded | -| `sourceCode` | contains the extension source code | -| `isManga` | (Optional, defaults to `true`) specify source type (false for anime and true for manga)| -| `dateFormat` | (Optional, defaults is empty) | -| `iconUrl` | The extension icon URL | -| `version` | The extension version code. This must be incremented with any change to the code. | -| `dateFormatLocale` | (Optional, defaults is empty) | -| `isNsfw` | (Optional, defaults to `false`) Flag to indicate that a source contains NSFW content. | - -### Extension call flow - -#### Popular manga - -a.k.a. the Browse source entry point in the app (invoked by tapping on the source name). - -- The app calls `getPopular` which should return a `MPages` containing the first batch of found `MManga` entries. - - This method supports pagination. When user scrolls the manga list and more results must be fetched, the app calls it again with increasing `page` values(starting with `page=1`). This continues while `MPages.hasNextPage` is passed as `true` and `MPages.list` is not empty. -- To show the list properly, the app needs `url`, `title` and `imageUrl`. You **must** set them here. The rest of the fields could be filled later.(refer to Manga Details below). - -#### Latest manga - -a.k.a. the Latest source entry point in the app (invoked by tapping on the "Latest" button beside the source name). - -- Similar to popular manga, but should be fetching the latest entries from a source. - -#### Search manga - -- When the user searches inside the app, `search` will be called and the rest of the flow is similar to what happens with `getPopular`. - - If search functionality is not available, return `MPages([], false)` -- `getFilterList` will be called to get all filters and filter types. - -### Filters - -The search flow have support to filters that can be added to a `FilterList` inside the `getFilterList` method. When the user changes the filter's state, they will be passed to the `search` method, and they can be iterated to create the request (by getting the `filter.state` value, where the type varies depending on the `Filter` used). You can check the filter types available [here](https://github.com/kodjodevf/mangayomi/blob/main/lib/eval/model/filter.dart) and in the table below. - -| Filter | Description | -| ------ | ----------- | -| `HeaderFilter` | A simple header. Useful for separating sections in the list or showing any note or warning to the user. | -| `SeparatorFilter` | A line separator. Useful for visual distinction between sections. | -| `SelectFilter` | A select control, similar to HTML's ``. | -| `CheckBoxFilter` | A checkbox control, similar to HTML's ``. The state is `true` if it's checked. | -| `TriStateFilter` | A enhanced checkbox control that supports an excluding state | -| `GroupFilter` | A group of filters (preferentially of the same type). The state will be a `List` with all the states. | -| `SortFilter` | A control for sorting, with support for the ordering. The state indicates which item index is selected and if the sorting is `ascending`. | - -All control filters can have a default state set. It's usually recommended if the source have filters to make the initial state match the popular manga list, so when the user open the filter sheet, the state is equal and represents the current manga showing. - -#### Manga Details - -- When user taps on an manga, `getDetail` will be called and the results will be cached. - - A `MManga` entry is identified by its `url`. -- `getDetail` is called to update an manga's details from when it was initialized earlier. - - `MManga.title` is a string containing title. - - `MManga.description` is a string containing description. - - `MManga.author` is a string containing author. - - `MManga.genre` contain list of all genres. - - `MManga.status` is an "enum" value. - - To get the status in enum value from a status string, you can use a `parseStatus` function like in the example below. - `Status` parseStatus(`String status`, `List statusList`) - ```bash - final statusList = [ - { "ongoing": 0, - "complete": 1, - "hiatus": 2, - "canceled": 3, - "publishingFinished": 4, - } - ]; - final status = parseStatus('ongoing', statusList); - print(status); // Status.ongoing - ``` - Refer to [the values in the `MManga` model](https://github.com/kodjodevf/mangayomi/blob/main/lib/models/manga.dart). - - During a backup, only `url` and `title` are stored. To restore the rest of the manga data, the app calls `getDetail`, so all fields should be (re)filled in if possible. - - If a `MManga` is cached `getDetail` will be only called when the user does a manual update(Swipe-to-Refresh). - - `MManga.chapters` contain list of all manga chapters. - - `MChapter.name` is a string containing a chapter name. - - `MChapter.url` is a string containing a chapter url. - - `MChapter.scanlator` is a string containing a chapter scanlator. - - `MChapter.dateUpload` is a string containing date **expressed in millisecondsSinceEpoch**. - - To get the time in millisecondsSinceEpoch from a date string, you can use a `parseDates` function like in the example below. - `List` parseDates(`List values`, `String dateFormat`, `String dateFormatLocale`,) - ```bash - final dates = parseDates(["2023-12-10T11:49:02+000"], "yyyy-MM-dd'T'HH:mm:ss+SSS", "en_US"); - ``` - - If you don't pass `MChapter.dateUpload` and leave it null, the app will use the default date instead, but it's recommended to always fill it if it's available. - - -#### Chapter pages - -- When user opens an chapter, `getPageList` will be called and it will return a `List` that are used by the reader. - -#### Episode Videos - -- When user opens an episode, `getVideoList` will be called and it will return a `List` that are used by the player. - -## Example sources that can help you understand how to create your source - -- [Example](https://github.com/kodjodevf/mangayomi-extensions/blob/main/anime/src/en/kisskh/kisskh.dart) - of Json API usage. -- [Example](https://github.com/kodjodevf/mangayomi-extensions/blob/main/manga/src/en/mangahere/mangahere.dart) - of HTML parsing using xpath selector. -- [Example](https://github.com/kodjodevf/mangayomi-extensions/blob/main/manga/multisrc/madara/madara.dart) - of HTML parsing using HTML DOM selector. - - -## Some functions already available and usable - - -### http client - -Return Response -```bash -- Simple request - -final Client client = Client(); - -final res = await client.get(Uri.parse("http://example.com")); - -print(res.body); - -- With headers - -final Client client = Client(); - -final res = await client.get(Uri.parse("http://example.com"),headers:{"Referer": "http://example.com"}); - -print(res.body); - -- With body - -final Client client = Client(); - -final res = await client.post(Uri.parse("http://example.com"),headers:{"Referer": "http://example.com"},'body':{'name':'test'}); - -print(res.body); - -``` - -### xpath selector -Return result as `List` - -Example: -```bash -final String htmlString = ''' - - - -
div head
-
- - - - - - - - - - - - - -
1234onetwothreefour
-
-
end
- - -'''; - - - List xpathRes = xpath(htmlString,'//div/a/@href'); - print(xpathRes); // [https://github.com/kodjodevf] - print(xpathRes.first); // https://github.com/kodjodevf - -``` -### HTML DOM selector - -Example: -```bash -final String htmlString = ''' - - - -
div head
-
- - - - - - - - - - - - - -
1234onetwothreefour
-
-
end
- - -'''; - - - MDocument document = parseHtml(htmlString); - print(document.selectFirst("a").attr("href")); // https://github.com/kodjodevf - print(document.selectFirst("td").text); // 1 - -``` -See [`MDocument` model](https://github.com/kodjodevf/mangayomi/blob/main/lib/eval/model/document.dart) and [`MElement` model](https://github.com/kodjodevf/mangayomi/blob/main/lib/eval/model/element.dart) to see available methods. - - -### String utils -- `String` substringAfter(`String text`, `String pattern`) -- `String` substringAfterLast(`String text`, `String pattern`) -- `String` substringBefore(`String text`, `String pattern`) -- `String` substringBeforeLast(`String text`, `String pattern`) -- `String` getUrlWithoutDomain(`String url`) - -### Crypto utils -- `String` unpackJs(`String code`); -- `Future` evalJs(`String code`); -- `String` deobfuscateJsPassword(`String inputString`) -- `String` encryptAESCryptoJS(`String plainText`, `String passphrase`) -- `String` decryptAESCryptoJS(`String encrypted`, `String passphrase`) -- `String` cryptoHandler(`String text`, `String iv`, `String secretKeyString`, `bool encrypt`) - -## Help - -If you need a help or have some questions, ask a community in our [Discord server](https://discord.com/invite/EjfBuYahsP). diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 66a27ec5..00000000 --- a/LICENSE +++ /dev/null @@ -1,177 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - diff --git a/README.md b/README.md deleted file mode 100644 index f148fcaf..00000000 --- a/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# Mangayomi Extensions - -This repository contains the available extension catalogues for the [Mangayomi](https://github.com/kodjodevf/mangayomi) app. - - -# Contributing - -Contributions are welcome! - -To get started with development, see [CONTRIBUTING.md](./CONTRIBUTING.md) for create sources in Dart or [CONTRIBUTING-JS.md](./CONTRIBUTING-JS.md) for create sources in JavaScript. - -## License - - Copyright 2023 Moustapha Kodjo Amadou - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - - -## Disclaimer - -The developer of this application does not have any affiliation with the content providers available. diff --git a/dart/anime/anime_source_list.dart b/dart/anime/anime_source_list.dart deleted file mode 100644 index 6e6e4173..00000000 --- a/dart/anime/anime_source_list.dart +++ /dev/null @@ -1,56 +0,0 @@ -import '../../model/source.dart'; -import 'multisrc/datalifeengine/sources.dart'; -import 'multisrc/dopeflix/sources.dart'; -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'; -import 'src/en/dramacool/source.dart'; -import 'src/en/gogoanime/source.dart'; -import 'src/en/nineanimetv/source.dart'; -import 'src/fr/animesama/source.dart'; -import 'src/hi/yomovies/source.dart'; -import 'src/en/kisskh/source.dart'; -import 'src/en/uhdmovies/source.dart'; -import 'src/fr/animesultra/source.dart'; -import 'src/fr/franime/source.dart'; -import 'src/fr/otakufr/source.dart'; -import 'src/id/nimegami/source.dart'; -import 'src/id/oploverz/source.dart'; -import 'src/id/otakudesu/source.dart'; -import 'src/it/animesaturn/source.dart'; -import 'src/pt/animesvision/source.dart'; -import 'src/sq/filma24/source.dart'; - -List dartAnimesourceList = [ - gogoanimeSource, - franimeSource, - otakufr, - animesultraSource, - ...zorothemeSourcesList, - kisskhSource, - okanimeSource, - otakudesu, - nimegami, - oploverz, - aniwave, - ...dopeflixSourcesList, - animesaturn, - uhdmoviesSource, - ...datalifeengineSourcesList, - filma24, - dramacoolSource, - yomoviesSource, - animesamaSource, - nineanimetv, - aniflix, - ...animeworldindiaSourcesList, - nyaaSource, - animepaheSource, - animetoast, - animesvision -]; diff --git a/dart/anime/multisrc/datalifeengine/datalifeengine.dart b/dart/anime/multisrc/datalifeengine/datalifeengine.dart deleted file mode 100644 index 471fb76f..00000000 --- a/dart/anime/multisrc/datalifeengine/datalifeengine.dart +++ /dev/null @@ -1,332 +0,0 @@ -import 'package:mangayomi/bridge_lib.dart'; -import 'dart:convert'; - -class DataLifeEngine extends MProvider { - DataLifeEngine({required this.source}); - - MSource source; - - final Client client = Client(source); - - @override - bool get supportsLatest => false; - - @override - Future getPopular(int page) async { - final res = (await client - .get(Uri.parse("${source.baseUrl}${getPath(source)}page/$page"))) - .body; - return animeFromElement(res); - } - - @override - Future getLatestUpdates(int page) async { - return MPages([], false); - } - - @override - Future search(String query, int page, FilterList filterList) async { - final filters = filterList.filters; - final baseUrl = source.baseUrl; - String res = ""; - if (query.isNotEmpty) { - if (query.length < 4) return MPages([], false); - final headers = { - "Host": Uri.parse(baseUrl).host, - "Origin": baseUrl, - "Referer": "$baseUrl/" - }; - final cleanQuery = query.replaceAll(" ", "+"); - if (page == 1) { - res = (await client.post( - Uri.parse( - "$baseUrl?do=search&subaction=search&story=$cleanQuery"), - headers: headers)) - .body; - } else { - res = (await client.post( - Uri.parse( - "$baseUrl?do=search&subaction=search&search_start=$page&full_search=0&result_from=11&story=$cleanQuery"), - headers: headers)) - .body; - } - } else { - String url = ""; - for (var filter in filters) { - if (filter.type == "CategoriesFilter") { - if (filter.state != 0) { - url = "$baseUrl${filter.values[filter.state].value}page/$page/"; - } - } else if (filter.type == "GenresFilter") { - if (filter.state != 0) { - url = "$baseUrl${filter.values[filter.state].value}page/$page/"; - } - } - } - res = (await client.get(Uri.parse(url))).body; - } - - return animeFromElement(res); - } - - @override - Future getDetail(String url) async { - String res = (await client.get(Uri.parse(url))).body; - MManga anime = MManga(); - final description = xpath(res, '//span[@itemprop="description"]/text()'); - anime.description = description.isNotEmpty ? description.first : ""; - anime.genre = xpath(res, '//span[@itemprop="genre"]/a/text()'); - - List? episodesList = []; - - if (source.name == "French Anime") { - final epsData = xpath(res, '//div[@class="eps"]/text()'); - for (var epData in epsData.first.split('\n')) { - final data = epData.split('!'); - MChapter ep = MChapter(); - ep.name = "Episode ${data.first}"; - ep.url = data.last; - episodesList.add(ep); - } - } else { - final eps = xpath(res, - '//*[@class="hostsblock"]/div/a[contains(@href,"https")]/parent::div/@class'); - if (eps.isNotEmpty) { - for (var i = 0; i < eps.length; i++) { - final epUrls = xpath(res, - '//*[@class="hostsblock"]/div[@class="${eps[i]}"]/a[contains(@href,"https")]/@href'); - MChapter ep = MChapter(); - ep.name = "Episode ${i + 1}"; - ep.url = epUrls.join(",").replaceAll("/vd.php?u=", ""); - ep.scanlator = eps[i].contains('vf') ? 'VF' : 'VOSTFR'; - episodesList.add(ep); - } - } else { - anime.status = MStatus.completed; - final epUrls = xpath(res, - '//*[contains(@class,"filmlinks")]/div/a[contains(@href,"https")]/@href'); - MChapter ep = MChapter(); - ep.name = "Film"; - ep.url = epUrls.join(",").replaceAll("/vd.php?u=", ""); - episodesList.add(ep); - } - } - - anime.chapters = episodesList.reversed.toList(); - return anime; - } - - @override - Future> getVideoList(String url) async { - List videos = []; - final sUrls = url.split(','); - for (var sUrl in sUrls) { - List a = []; - if (sUrl.contains("dood")) { - a = await doodExtractor(sUrl, "DoodStream"); - } else if (sUrl.contains("voe.sx")) { - a = await voeExtractor(sUrl, "Voe"); - } else if (sUrl.contains("streamvid") || - sUrl.contains("guccihide") || - sUrl.contains("streamhide")) { - a = await streamHideExtractor(sUrl); - } else if (sUrl.contains("uqload")) { - a = await uqloadExtractor(sUrl); - } else if (sUrl.contains("upstream")) { - a = await upstreamExtractor(sUrl); - } else if (sUrl.contains("sibnet")) { - a = await sibnetExtractor(sUrl); - } else if (sUrl.contains("ok.ru")) { - a = await okruExtractor(sUrl); - } - videos.addAll(a); - } - return videos; - } - - MPages animeFromElement(String res) { - final htmls = parseHtml(res).select("div#dle-content > div.mov"); - List animeList = []; - for (var h in htmls) { - final html = h.innerHtml; - final url = xpath(html, '//a/@href').first; - final name = xpath(html, '//a/text()').first; - final image = xpath(html, '//div[contains(@class,"mov")]/img/@src').first; - final season = xpath(html, '//div/span[@class="block-sai"]/text()'); - MManga anime = MManga(); - anime.name = - "$name ${season.isNotEmpty ? season.first.replaceAll("\n", " ") : ""}"; - anime.imageUrl = "${source.baseUrl}$image"; - anime.link = url; - animeList.add(anime); - } - final hasNextPage = xpath(res, '//span[@class="pnext"]/a/@href').isNotEmpty; - return MPages(animeList, hasNextPage); - } - - Future> streamHideExtractor(String url) async { - final res = (await client.get(Uri.parse(url))).body; - final masterUrl = substringBefore( - substringAfter( - substringAfter( - substringAfter(unpackJs(res), "sources:"), "file:\""), - "src:\""), - '"'); - final masterPlaylistRes = (await client.get(Uri.parse(masterUrl))).body; - List videos = []; - for (var it in substringAfter(masterPlaylistRes, "#EXT-X-STREAM-INF:") - .split("#EXT-X-STREAM-INF:")) { - final quality = - "${substringBefore(substringBefore(substringAfter(substringAfter(it, "RESOLUTION="), "x"), ","), "\n")}p"; - - String videoUrl = substringBefore(substringAfter(it, "\n"), "\n"); - - if (!videoUrl.startsWith("http")) { - videoUrl = - "${masterUrl.split("/").sublist(0, masterUrl.split("/").length - 1).join("/")}/$videoUrl"; - } - - MVideo video = MVideo(); - video - ..url = videoUrl - ..originalUrl = videoUrl - ..quality = "StreamHideVid - $quality"; - videos.add(video); - } - return videos; - } - - Future> upstreamExtractor(String url) async { - final res = (await client.get(Uri.parse(url))).body; - final js = xpath(res, '//script[contains(text(), "m3u8")]/text()'); - if (js.isEmpty) { - return []; - } - final masterUrl = - substringBefore(substringAfter(unpackJs(js.first), "{file:\""), "\"}"); - final masterPlaylistRes = (await client.get(Uri.parse(masterUrl))).body; - List videos = []; - for (var it in substringAfter(masterPlaylistRes, "#EXT-X-STREAM-INF:") - .split("#EXT-X-STREAM-INF:")) { - final quality = - "${substringBefore(substringBefore(substringAfter(substringAfter(it, "RESOLUTION="), "x"), ","), "\n")}p"; - - String videoUrl = substringBefore(substringAfter(it, "\n"), "\n"); - - if (!videoUrl.startsWith("http")) { - videoUrl = - "${masterUrl.split("/").sublist(0, masterUrl.split("/").length - 1).join("/")}/$videoUrl"; - } - - MVideo video = MVideo(); - video - ..url = videoUrl - ..originalUrl = videoUrl - ..quality = "Upstream - $quality"; - videos.add(video); - } - return videos; - } - - Future> uqloadExtractor(String url) async { - final res = (await client.get(Uri.parse(url))).body; - final js = xpath(res, '//script[contains(text(), "sources:")]/text()'); - if (js.isEmpty) { - return []; - } - - final videoUrl = - substringBefore(substringAfter(js.first, "sources: [\""), '"'); - MVideo video = MVideo(); - video - ..url = videoUrl - ..originalUrl = videoUrl - ..quality = "Uqload" - ..headers = {"Referer": "${Uri.parse(url).origin}/"}; - return [video]; - } - - String getPath() { - if (source.name == "French Anime") return "/animes-vostfr/"; - return "/serie-en-streaming/"; - } - - @override - List getFilterList() { - return [ - HeaderFilter("La recherche de texte ignore les filtres"), - if (source.name == "French Anime") - SelectFilter("CategoriesFilter", "Catégories", 0, [ - SelectFilterOption("", ""), - SelectFilterOption("Action", "/genre/action/"), - SelectFilterOption("Aventure", "/genre/aventure/"), - SelectFilterOption("Arts martiaux", "/genre/arts-martiaux/"), - SelectFilterOption("Combat", "/genre/combat/"), - SelectFilterOption("Comédie", "/genre/comedie/"), - SelectFilterOption("Drame", "/genre/drame/"), - SelectFilterOption("Epouvante", "/genre/epouvante/"), - SelectFilterOption("Fantastique", "/genre/fantastique/"), - SelectFilterOption("Fantasy", "/genre/fantasy/"), - SelectFilterOption("Mystère", "/genre/mystere/"), - SelectFilterOption("Romance", "/genre/romance/"), - SelectFilterOption("Shonen", "/genre/shonen/"), - SelectFilterOption("Surnaturel", "/genre/surnaturel/"), - SelectFilterOption("Sci-Fi", "/genre/sci-fi/"), - SelectFilterOption("School life", "/genre/school-life/"), - SelectFilterOption("Ninja", "/genre/ninja/"), - SelectFilterOption("Seinen", "/genre/seinen/"), - SelectFilterOption("Horreur", "/genre/horreur/"), - SelectFilterOption("Tranche de vie", "/genre/tranchedevie/"), - SelectFilterOption("Psychologique", "/genre/psychologique/") - ]), - if (source.name == "French Anime") - SelectFilter("GenresFilter", "Genres", 0, [ - SelectFilterOption("", ""), - SelectFilterOption("Animes VF", "/animes-vf/"), - SelectFilterOption("Animes VOSTFR", "/animes-vostfr/"), - SelectFilterOption("Films VF et VOSTFR", "/films-vf-vostfr/") - ]), - if (source.name == "Wiflix") - SelectFilter("CategoriesFilter", "Catégories", 0, [ - SelectFilterOption("", ""), - SelectFilterOption("Séries", "/serie-en-streaming/"), - SelectFilterOption("Films", "/film-en-streaming/") - ]), - if (source.name == "Wiflix") - SelectFilter("GenresFilter", "Genres", 0, [ - SelectFilterOption("", ""), - SelectFilterOption("Action", "/film-en-streaming/action/"), - SelectFilterOption("Animation", "/film-en-streaming/animation/"), - SelectFilterOption( - "Arts Martiaux", "/film-en-streaming/arts-martiaux/"), - SelectFilterOption("Aventure", "/film-en-streaming/aventure/"), - SelectFilterOption("Biopic", "/film-en-streaming/biopic/"), - SelectFilterOption("Comédie", "/film-en-streaming/comedie/"), - SelectFilterOption( - "Comédie Dramatique", "/film-en-streaming/comedie-dramatique/"), - SelectFilterOption( - "Épouvante Horreur", "/film-en-streaming/horreur/"), - SelectFilterOption("Drame", "/film-en-streaming/drame/"), - SelectFilterOption( - "Documentaire", "/film-en-streaming/documentaire/"), - SelectFilterOption("Espionnage", "/film-en-streaming/espionnage/"), - SelectFilterOption("Famille", "/film-en-streaming/famille/"), - SelectFilterOption("Fantastique", "/film-en-streaming/fantastique/"), - SelectFilterOption("Guerre", "/film-en-streaming/guerre/"), - SelectFilterOption("Historique", "/film-en-streaming/historique/"), - SelectFilterOption("Musical", "/film-en-streaming/musical/"), - SelectFilterOption("Policier", "/film-en-streaming/policier/"), - SelectFilterOption("Romance", "/film-en-streaming/romance/"), - SelectFilterOption( - "Science-Fiction", "/film-en-streaming/science-fiction/"), - SelectFilterOption("Spectacles", "/film-en-streaming/spectacles/"), - SelectFilterOption("Thriller", "/film-en-streaming/thriller/"), - SelectFilterOption("Western", "/film-en-streaming/western/"), - ]), - ]; - } -} - -DataLifeEngine main(MSource source) { - return DataLifeEngine(source: source); -} diff --git a/dart/anime/multisrc/datalifeengine/sources.dart b/dart/anime/multisrc/datalifeengine/sources.dart deleted file mode 100644 index d7d04c3d..00000000 --- a/dart/anime/multisrc/datalifeengine/sources.dart +++ /dev/null @@ -1,19 +0,0 @@ -import '../../../../model/source.dart'; -import 'src/frenchanime/frenchanime.dart'; -import 'src/wiflix/wiflix.dart'; - -const _datalifeengineVersion = "0.0.35"; -const _datalifeengineSourceCodeUrl = - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/multisrc/datalifeengine/datalifeengine.dart"; - -List get datalifeengineSourcesList => _datalifeengineSourcesList; -List _datalifeengineSourcesList = [ -//French Anime (FR) - frenchanimeSource, -//Wiflix (FR) - wiflixSource, -] - .map((e) => e - ..sourceCodeUrl = _datalifeengineSourceCodeUrl - ..version = _datalifeengineVersion) - .toList(); diff --git a/dart/anime/multisrc/datalifeengine/src/frenchanime/frenchanime.dart b/dart/anime/multisrc/datalifeengine/src/frenchanime/frenchanime.dart deleted file mode 100644 index f28491dc..00000000 --- a/dart/anime/multisrc/datalifeengine/src/frenchanime/frenchanime.dart +++ /dev/null @@ -1,13 +0,0 @@ -import '../../../../../../model/source.dart'; - -Source get frenchanimeSource => _frenchanimeSource; - -Source _frenchanimeSource = Source( - name: "French Anime", - baseUrl: "https://french-anime.com", - lang: "fr", - typeSource: "datalifeengine", - isManga: false, - iconUrl: - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/multisrc/datalifeengine/src/frenchanime/icon.png", -); diff --git a/dart/anime/multisrc/datalifeengine/src/frenchanime/icon.png b/dart/anime/multisrc/datalifeengine/src/frenchanime/icon.png deleted file mode 100644 index 62591a8ef47880bf6256785139b2d40fcc92fa0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5173 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 bPNJ5c(6DOu(zgS@11a?HKG3N~U}F9Ue#+&E diff --git a/dart/anime/multisrc/datalifeengine/src/wiflix/icon.png b/dart/anime/multisrc/datalifeengine/src/wiflix/icon.png deleted file mode 100644 index 3317e74495c1ae9d09c24688d963c4e4e25a8cf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4635 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 R%8~#8002ovPDHLkV1n}Z&2az# diff --git a/dart/anime/multisrc/datalifeengine/src/wiflix/wiflix.dart b/dart/anime/multisrc/datalifeengine/src/wiflix/wiflix.dart deleted file mode 100644 index 0034941e..00000000 --- a/dart/anime/multisrc/datalifeengine/src/wiflix/wiflix.dart +++ /dev/null @@ -1,13 +0,0 @@ -import '../../../../../../model/source.dart'; - -Source get wiflixSource => _wiflixSource; - -Source _wiflixSource = Source( - name: "Wiflix", - baseUrl: "https://wiflix.voto", - lang: "fr", - typeSource: "datalifeengine", - isManga: false, - iconUrl: - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/multisrc/datalifeengine/src/wiflix/icon.png", -); diff --git a/dart/anime/multisrc/dopeflix/dopeflix.dart b/dart/anime/multisrc/dopeflix/dopeflix.dart deleted file mode 100644 index 535f33de..00000000 --- a/dart/anime/multisrc/dopeflix/dopeflix.dart +++ /dev/null @@ -1,547 +0,0 @@ -import 'package:mangayomi/bridge_lib.dart'; -import 'dart:convert'; - -class DopeFlix extends MProvider { - DopeFlix({required this.source}); - - MSource source; - - final Client client = Client(source); - - @override - String get baseUrl => getPreferenceValue(source.id, "preferred_domain"); - - @override - Future getPopular(int page) async { - final res = (await client.get(Uri.parse( - "$baseUrl/${getPreferenceValue(source.id, "preferred_popular_page")}?page=$page"))) - .body; - return parseAnimeList(res); - } - - @override - Future getLatestUpdates(int page) async { - final res = (await client.get(Uri.parse("$baseUrl/home"))).body; - List animeList = []; - final path = - '//section[contains(text(),"${getPreferenceValue(source.id, "preferred_latest_page")}")]/div/div[@class="film_list-wrap"]/div[@class="flw-item"]/div[@class="film-poster"]'; - final urls = xpath(res, '$path/a/@href'); - final names = xpath(res, '$path/a/@title'); - final images = xpath(res, '$path/img/@data-src'); - - for (var i = 0; i < names.length; i++) { - MManga anime = MManga(); - anime.name = names[i]; - anime.imageUrl = images[i]; - anime.link = urls[i]; - animeList.add(anime); - } - return MPages(animeList, false); - } - - @override - Future search(String query, int page, FilterList filterList) async { - final filters = filterList.filters; - String url = "$baseUrl"; - - if (query.isNotEmpty) { - url += "/search/${query.replaceAll(" ", "-")}?page=$page"; - } else { - url += "/filter/?page=$page"; - for (var filter in filters) { - if (filter.type == "TypeFilter") { - final type = filter.values[filter.state].value; - url += "${ll(url)}type=$type"; - } else if (filter.type == "QualityFilter") { - final quality = filter.values[filter.state].value; - url += "${ll(url)}quality=$quality"; - } else if (filter.type == "ReleaseYearFilter") { - final year = filter.values[filter.state].value; - url += "${ll(url)}release_year=$year"; - } else if (filter.type == "GenresFilter") { - final genre = (filter.state as List).where((e) => e.state).toList(); - if (genre.isNotEmpty) { - url += "${ll(url)}genre="; - for (var st in genre) { - url += "${st.value}-"; - } - } - } else if (filter.type == "CountriesFilter") { - final country = (filter.state as List).where((e) => e.state).toList(); - if (country.isNotEmpty) { - url += "${ll(url)}country="; - for (var st in country) { - url += "${st.value}-"; - } - } - } - } - } - - final res = (await client.get(Uri.parse(url))).body; - return parseAnimeList(res); - } - - @override - Future getDetail(String url) async { - url = getUrlWithoutDomain(url); - final res = (await client.get(Uri.parse("$baseUrl$url"))).body; - MManga anime = MManga(); - final description = xpath(res, '//div[@class="description"]/text()'); - if (description.isNotEmpty) { - anime.description = description.first.replaceAll("Overview:", ""); - } - final author = xpath(res, '//div[contains(text(),"Production")]/a/text()'); - if (author.isNotEmpty) { - anime.author = author.first; - } - anime.genre = xpath(res, '//div[contains(text(),"Genre")]/a/text()'); - List episodesList = []; - final id = xpath(res, '//div[@class="detail_page-watch"]/@data-id').first; - final dataType = - xpath(res, '//div[@class="detail_page-watch"]/@data-type').first; - if (dataType == "1") { - MChapter episode = MChapter(); - episode.name = "Movie"; - episode.url = "$baseUrl/ajax/movie/episodes/$id"; - episodesList.add(episode); - } else { - final resS = - (await client.get(Uri.parse("$baseUrl/ajax/v2/tv/seasons/$id"))).body; - - final seasonIds = - xpath(resS, '//a[@class="dropdown-item ss-item"]/@data-id'); - final seasonNames = - xpath(resS, '//a[@class="dropdown-item ss-item"]/text()'); - for (int i = 0; i < seasonIds.length; i++) { - final seasonId = seasonIds[i]; - final seasonName = seasonNames[i]; - - final html = (await client - .get(Uri.parse("$baseUrl/ajax/v2/season/episodes/$seasonId"))) - .body; - - final epsHtmls = parseHtml(html).select("div.eps-item"); - - for (var epH in epsHtmls) { - final epHtml = epH.outerHtml; - final episodeId = - xpath(epHtml, '//div[contains(@class,"eps-item")]/@data-id') - .first; - final epNum = - xpath(epHtml, '//div[@class="episode-number"]/text()').first; - final epName = xpath(epHtml, '//h3[@class="film-name"]/text()').first; - MChapter episode = MChapter(); - episode.name = "$seasonName $epNum $epName"; - episode.url = "$baseUrl/ajax/v2/episode/servers/$episodeId"; - episodesList.add(episode); - } - } - } - anime.chapters = episodesList.reversed.toList(); - return anime; - } - - @override - Future> getVideoList(String url) async { - url = getUrlWithoutDomain(url); - final res = (await client.get(Uri.parse("$baseUrl/$url"))).body; - - final vidsHtmls = parseHtml(res).select("ul.fss-list a.btn-play"); - - List videos = []; - for (var vidH in vidsHtmls) { - final vidHtml = vidH.outerHtml; - final id = xpath(vidHtml, '//a/@data-id').first; - final name = xpath(vidHtml, '//span/text()').first; - final resSource = - (await client.get(Uri.parse("$baseUrl/ajax/sources/$id"))).body; - - final vidUrl = - substringBefore(substringAfter(resSource, "\"link\":\""), "\""); - List a = []; - String masterUrl = ""; - String type = ""; - if (name.contains("DoodStream")) { - a = await doodExtractor(vidUrl, "DoodStream"); - } else if (["Vidcloud", "UpCloud"].contains(name)) { - final id = substringBefore(substringAfter(vidUrl, "/embed-4/"), "?"); - final serverUrl = substringBefore(vidUrl, "/embed"); - - final resServer = (await client.get( - Uri.parse("$serverUrl/ajax/embed-4/getSources?id=$id"), - headers: {"X-Requested-With": "XMLHttpRequest"})) - .body; - final encrypted = getMapValue(resServer, "encrypted"); - - String videoResJson = ""; - if (encrypted == "true") { - final ciphered = getMapValue(resServer, "sources"); - - List> indexPairs = await generateIndexPairs(); - - var password = ''; - String ciphertext = ciphered; - int index = 0; - for (List item in json.decode(json.encode(indexPairs))) { - int start = item.first + index; - int end = start + item.last; - String passSubstr = ciphered.substring(start, end); - password += passSubstr; - ciphertext = ciphertext.replaceFirst(passSubstr, ""); - index += item.last; - } - videoResJson = decryptAESCryptoJS(ciphertext, password); - masterUrl = ((json.decode(videoResJson) as List>) - .first)['file']; - - type = ((json.decode(videoResJson) as List>) - .first)['type']; - } else { - masterUrl = - ((json.decode(resServer)["sources"] as List>) - .first)['file']; - - type = - ((json.decode(resServer)["sources"] as List>) - .first)['type']; - } - - final tracks = (json.decode(resServer)['tracks'] as List) - .where((e) => e['kind'] == 'captions' ? true : false) - .toList(); - List subtitles = []; - - for (var sub in tracks) { - try { - MTrack subtitle = MTrack(); - subtitle - ..label = sub["label"] - ..file = sub["file"]; - subtitles.add(subtitle); - } catch (_) {} - } - - subtitles = sortSubs(subtitles, source.id); - if (type == "hls") { - final masterPlaylistRes = - (await client.get(Uri.parse(masterUrl))).body; - - for (var it in substringAfter(masterPlaylistRes, "#EXT-X-STREAM-INF:") - .split("#EXT-X-STREAM-INF:")) { - final quality = - "${substringBefore(substringBefore(substringAfter(substringAfter(it, "RESOLUTION="), "x"), ","), "\n")}p"; - - String videoUrl = substringBefore(substringAfter(it, "\n"), "\n"); - - if (!videoUrl.startsWith("http")) { - videoUrl = - "${(masterUrl as String).split("/").sublist(0, (masterUrl as String).split("/").length - 1).join("/")}/$videoUrl"; - } - - MVideo video = MVideo(); - video - ..url = videoUrl - ..originalUrl = videoUrl - ..quality = "$name - $quality" - ..subtitles = subtitles; - a.add(video); - } - } else { - MVideo video = MVideo(); - video - ..url = masterUrl - ..originalUrl = masterUrl - ..quality = "$name - Default" - ..subtitles = subtitles; - a.add(video); - } - } - videos.addAll(a); - } - - return sortVideos(videos, source.id); - } - - Future>> generateIndexPairs() async { - final res = (await client.get(Uri.parse( - "https://rabbitstream.net/js/player/prod/e4-player.min.js"))) - .body; - - String script = substringBefore(substringAfter(res, "const "), "()"); - script = script.substring(0, script.lastIndexOf(',')); - final list = script - .split(",") - .map((String e) { - String value = substringAfter(e, "="); - if (value.contains("0x")) { - return int.parse(substringAfter(value, "0x"), radix: 16); - } else { - return int.parse(value); - } - }) - .toList() - .skip(1) - .toList(); - return chunked(list, 2) - .map((List list) => list.reversed.toList()) - .toList(); - } - - List> chunked(List list, int size) { - List> chunks = []; - for (int i = 0; i < list.length; i += size) { - int end = list.length; - if (i + size < list.length) { - end = i + size; - } - chunks.add(list.sublist(i, end)); - } - return chunks; - } - - MPages parseAnimeList(String res) { - List animeList = []; - final path = - '//div[@class="film_list-wrap"]/div[@class="flw-item"]/div[@class="film-poster"]'; - final urls = xpath(res, '$path/a/@href'); - final names = xpath(res, '$path/a/@title'); - final images = xpath(res, '$path/img/@data-src'); - - for (var i = 0; i < names.length; i++) { - MManga anime = MManga(); - anime.name = names[i]; - anime.imageUrl = images[i]; - anime.link = urls[i]; - animeList.add(anime); - } - final pages = xpath( - res, '//ul[contains(@class,"pagination")]/li/a[@title="Next"]/@title'); - return MPages(animeList, pages.isNotEmpty); - } - - @override - List getFilterList() { - return [ - SelectFilter("TypeFilter", "Type", 0, [ - SelectFilterOption("All", "all"), - SelectFilterOption("Movies", "movies"), - SelectFilterOption("TV Shows", "tv") - ]), - SelectFilter("QualityFilter", "Quality", 0, [ - SelectFilterOption("All", "all"), - SelectFilterOption("HD", "HD"), - SelectFilterOption("SD", "SD"), - SelectFilterOption("CAM", "CAM") - ]), - SelectFilter("ReleaseYearFilter", "Released at", 0, [ - SelectFilterOption("All", "all"), - SelectFilterOption("2023", "2023"), - SelectFilterOption("2022", "2022"), - SelectFilterOption("2021", "2021"), - SelectFilterOption("2020", "2020"), - SelectFilterOption("2019", "2019"), - SelectFilterOption("2018", "2018"), - SelectFilterOption("Older", "older-2018") - ]), - SeparatorFilter(), - GroupFilter("GenresFilter", "Genre", [ - CheckBoxFilter("Action", "10"), - CheckBoxFilter("Action & Adventure", "24"), - CheckBoxFilter("Adventure", "18"), - CheckBoxFilter("Animation", "3"), - CheckBoxFilter("Biography", "37"), - CheckBoxFilter("Comedy", "7"), - CheckBoxFilter("Crime", "2"), - CheckBoxFilter("Documentary", "11"), - CheckBoxFilter("Drama", "4"), - CheckBoxFilter("Family", "9"), - CheckBoxFilter("Fantasy", "13"), - CheckBoxFilter("History", "19"), - CheckBoxFilter("Horror", "14"), - CheckBoxFilter("Kids", "27"), - CheckBoxFilter("Music", "15"), - CheckBoxFilter("Mystery", "1"), - CheckBoxFilter("News", "34"), - CheckBoxFilter("Reality", "22"), - CheckBoxFilter("Romance", "12"), - CheckBoxFilter("Sci-Fi & Fantasy", "31"), - CheckBoxFilter("Science Fiction", "5"), - CheckBoxFilter("Soap", "35"), - CheckBoxFilter("Talk", "29"), - CheckBoxFilter("Thriller", "16"), - CheckBoxFilter("TV Movie", "8"), - CheckBoxFilter("War", "17"), - CheckBoxFilter("War & Politics", "28"), - CheckBoxFilter("Western", "6") - ]), - GroupFilter("CountriesFilter", "Countries", [ - CheckBoxFilter("Argentina", "11"), - CheckBoxFilter("Australia", "151"), - CheckBoxFilter("Austria", "4"), - CheckBoxFilter("Belgium", "44"), - CheckBoxFilter("Brazil", "190"), - CheckBoxFilter("Canada", "147"), - CheckBoxFilter("China", "101"), - CheckBoxFilter("Czech Republic", "231"), - CheckBoxFilter("Denmark", "222"), - CheckBoxFilter("Finland", "158"), - CheckBoxFilter("France", "3"), - CheckBoxFilter("Germany", "96"), - CheckBoxFilter("Hong Kong", "93"), - CheckBoxFilter("Hungary", "72"), - CheckBoxFilter("India", "105"), - CheckBoxFilter("Ireland", "196"), - CheckBoxFilter("Israel", "24"), - CheckBoxFilter("Italy", "205"), - CheckBoxFilter("Japan", "173"), - CheckBoxFilter("Luxembourg", "91"), - CheckBoxFilter("Mexico", "40"), - CheckBoxFilter("Netherlands", "172"), - CheckBoxFilter("New Zealand", "122"), - CheckBoxFilter("Norway", "219"), - CheckBoxFilter("Poland", "23"), - CheckBoxFilter("Romania", "170"), - CheckBoxFilter("Russia", "109"), - CheckBoxFilter("South Africa", "200"), - CheckBoxFilter("South Korea", "135"), - CheckBoxFilter("Spain", "62"), - CheckBoxFilter("Sweden", "114"), - CheckBoxFilter("Switzerland", "41"), - CheckBoxFilter("Taiwan", "119"), - CheckBoxFilter("Thailand", "57"), - CheckBoxFilter("United Kingdom", "180"), - CheckBoxFilter("United States of America", "129") - ]), - ]; - } - - @override - List getSourcePreferences() { - return [ - if (source.name == "DopeBox") - ListPreference( - key: "preferred_domain", - title: "Preferred domain", - summary: "", - valueIndex: 0, - entries: ["dopebox.to", "dopebox.se"], - entryValues: ["https://dopebox.to", "https://dopebox.se"]), - if (source.name == "SFlix") - ListPreference( - key: "preferred_domain", - title: "Preferred domain", - summary: "", - valueIndex: 0, - entries: ["sflix.to", "sflix.se"], - entryValues: ["https://sflix.to", "https://sflix.se"]), - ListPreference( - key: "preferred_quality", - title: "Preferred Quality", - summary: "", - valueIndex: 0, - entries: ["1080p", "720p", "480p", "360p"], - entryValues: ["1080p", "720p", "480p", "360p"]), - ListPreference( - key: "preferred_subLang", - title: "Preferred sub language", - summary: "", - valueIndex: 1, - entries: [ - "Arabic", - "English", - "French", - "German", - "Hungarian", - "Italian", - "Japanese", - "Portuguese", - "Romanian", - "Russian", - "Spanish" - ], - entryValues: [ - "Arabic", - "English", - "French", - "German", - "Hungarian", - "Italian", - "Japanese", - "Portuguese", - "Romanian", - "Russian", - "Spanish" - ]), - ListPreference( - key: "preferred_latest_page", - title: "Preferred latest page", - summary: "", - valueIndex: 0, - entries: ["Movies", "TV Shows"], - entryValues: ["Latest Movies", "Latest TV Shows"]), - ListPreference( - key: "preferred_popular_page", - title: "Preferred popular page", - summary: "", - valueIndex: 0, - entries: ["Movies", "TV Shows"], - entryValues: ["movie", "tv-show"]), - ]; - } - - List sortVideos(List videos, int sourceId) { - String quality = getPreferenceValue(sourceId, "preferred_quality"); - - videos.sort((MVideo a, MVideo b) { - int qualityMatchA = 0; - if (a.quality.contains(quality)) { - qualityMatchA = 1; - } - int qualityMatchB = 0; - if (b.quality.contains(quality)) { - qualityMatchB = 1; - } - if (qualityMatchA != qualityMatchB) { - return qualityMatchB - qualityMatchA; - } - - final regex = RegExp(r'(\d+)p'); - final matchA = regex.firstMatch(a.quality); - final matchB = regex.firstMatch(b.quality); - final int qualityNumA = int.tryParse(matchA?.group(1) ?? '0') ?? 0; - final int qualityNumB = int.tryParse(matchB?.group(1) ?? '0') ?? 0; - return qualityNumB - qualityNumA; - }); - - return videos; - } - - List sortSubs(List subs, int sourceId) { - String lang = getPreferenceValue(sourceId, "preferred_subLang"); - - subs.sort((MTrack a, MTrack b) { - int langMatchA = 0; - if (a.label.toLowerCase().contains(lang.toLowerCase())) { - langMatchA = 1; - } - int langMatchB = 0; - if (b.label.toLowerCase().contains(lang.toLowerCase())) { - langMatchB = 1; - } - return langMatchB - langMatchA; - }); - return subs; - } - - String ll(String url) { - if (url.contains("?")) { - return "&"; - } - return "?"; - } -} - -DopeFlix main(MSource source) { - return DopeFlix(source: source); -} diff --git a/dart/anime/multisrc/dopeflix/sources.dart b/dart/anime/multisrc/dopeflix/sources.dart deleted file mode 100644 index dbc3cf23..00000000 --- a/dart/anime/multisrc/dopeflix/sources.dart +++ /dev/null @@ -1,19 +0,0 @@ -import '../../../../model/source.dart'; -import 'src/dopebox/dopebox.dart'; -import 'src/sflix/sflix.dart'; - -const _dopeflixVersion = "0.0.5"; -const _dopeflixSourceCodeUrl = - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/multisrc/dopeflix/dopeflix.dart"; - -List get dopeflixSourcesList => _dopeflixSourcesList; -List _dopeflixSourcesList = [ -//DopeBox (EN) - dopeboxSource, -//SFlix (EN) - sflixSource, -] - .map((e) => e - ..sourceCodeUrl = _dopeflixSourceCodeUrl - ..version = _dopeflixVersion) - .toList(); diff --git a/dart/anime/multisrc/dopeflix/src/dopebox/dopebox.dart b/dart/anime/multisrc/dopeflix/src/dopebox/dopebox.dart deleted file mode 100644 index 2029e53f..00000000 --- a/dart/anime/multisrc/dopeflix/src/dopebox/dopebox.dart +++ /dev/null @@ -1,13 +0,0 @@ -import '../../../../../../model/source.dart'; - -Source get dopeboxSource => _dopeboxSource; - -Source _dopeboxSource = Source( - name: "DopeBox", - baseUrl: "https://dopebox.to", - lang: "en", - typeSource: "dopeflix", - isManga: false, - iconUrl: - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/multisrc/dopeflix/src/dopebox/icon.png", -); diff --git a/dart/anime/multisrc/dopeflix/src/dopebox/icon.png b/dart/anime/multisrc/dopeflix/src/dopebox/icon.png deleted file mode 100644 index 0e467600241cdb6cdb05e90b4d90c53951be8003..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4126 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 diff --git a/dart/anime/multisrc/dopeflix/src/sflix/icon.png b/dart/anime/multisrc/dopeflix/src/sflix/icon.png deleted file mode 100644 index afdbec537024a228fb5883ee21a326621a4f7a74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6778 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 diff --git a/dart/anime/multisrc/dopeflix/src/sflix/sflix.dart b/dart/anime/multisrc/dopeflix/src/sflix/sflix.dart deleted file mode 100644 index 89d420a4..00000000 --- a/dart/anime/multisrc/dopeflix/src/sflix/sflix.dart +++ /dev/null @@ -1,13 +0,0 @@ -import '../../../../../../model/source.dart'; - -Source get sflixSource => _sflixSource; - -Source _sflixSource = Source( - name: "SFlix", - baseUrl: "https://sflix.to", - lang: "en", - typeSource: "dopeflix", - isManga: false, - iconUrl: - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/multisrc/dopeflix/src/sflix/icon.png", -); diff --git a/dart/anime/multisrc/zorotheme/sources.dart b/dart/anime/multisrc/zorotheme/sources.dart deleted file mode 100644 index 1a7d29cb..00000000 --- a/dart/anime/multisrc/zorotheme/sources.dart +++ /dev/null @@ -1,19 +0,0 @@ -import '../../../../model/source.dart'; -import 'src/hianime/hianime.dart'; -import 'src/kaido/kaido.dart'; - -const _zorothemeVersion = "0.0.9"; -const _zorothemeSourceCodeUrl = - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/multisrc/zorotheme/zorotheme.dart"; - -List get zorothemeSourcesList => _zorothemeSourcesList; -List _zorothemeSourcesList = [ -//AniWatch.to (EN) - aniwatchSource, -//Kaido.to (EN) - kaidoSource, -] - .map((e) => e - ..sourceCodeUrl = _zorothemeSourceCodeUrl - ..version = _zorothemeVersion) - .toList(); diff --git a/dart/anime/multisrc/zorotheme/src/hianime/hianime.dart b/dart/anime/multisrc/zorotheme/src/hianime/hianime.dart deleted file mode 100644 index 86b54428..00000000 --- a/dart/anime/multisrc/zorotheme/src/hianime/hianime.dart +++ /dev/null @@ -1,14 +0,0 @@ -import '../../../../../../model/source.dart'; - -Source get aniwatchSource => _aniwatchSource; - -Source _aniwatchSource = Source( - id: 814067600, - name: "HiAnime", - baseUrl: "https://hianime.to", - isManga: false, - lang: "en", - typeSource: "zorotheme", - iconUrl: - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/multisrc/zorotheme/src/hianime/icon.png", -); diff --git a/dart/anime/multisrc/zorotheme/src/hianime/icon.png b/dart/anime/multisrc/zorotheme/src/hianime/icon.png deleted file mode 100644 index 02dc16cf9e6b32d95f98c33ac456397b80a08b55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5120 zcmV+b6#wgqP)N@?d>Bk#<-ci+AD{QsSE?*NlFX_Gc-lQwCSHffVKX_NN^^|G{5v1M1qh(rzJ7Qqmp8LE6&_ws=1vAcR7{(}DE_9Rud+V^=Xr50i~q%n znt=h}oI%ca%nYJLKKJ5OC;9i;?X!=bIPuh@&p-eCB|(gl5g-B3`QQhC?H$|Z<{w*H zT0WTe)8GQh<>X>f2<4g}2SDOJ&RL9vz?_%&nl)l;&}`P)Vm5YolBxQz>Wi!I-4$T2 zu5&t+@42FW`Q22vgWY>}{pix_8}}YN_V}v+vKS&Hkwi*%@7}*{y1VBKi;GJK(?JF# zG#qKEm0Ythd=UX;{ss*v$kjDmaAtK6i+f2(lKCgzk?d!9ec2bmdN2Dj-)rn=`jlft zDN)s&tT}=(7^FCR=KS?@vpc`MZ{LBP06H-Yo9?}YLCjKZ!Bz>#1%uhwNyAt@&$-5WE;o#iY|b{{ThE05nYot8zgLVe zO|u&SOvR|7ZUg~30J=HTPDswDr1BtGn;aLkqKbivYlp_ryy<`nTg94cAX1r<8An3 z95N;wr<9EISS&c(>u2d)AYy1ObbCiG2M@r2|6%=fX*&(o?Dg zoj~lxV~vX+D*@8<+s+`f%ZjR)b5P%s<7blHw`ydl#uy92v!fb(pR>jjXIs@8X@?B6 z$e)YNHc5jA5$y%}<0Yvs*k(Oq@i$ejy5-TaW!yLvmH1w57yvQq(7J}A`(RS&;~H~v zq*3j=9VpO^zLKgaisdsBN2f4(YKF;OC#s@U8j83iqWPR4306s(Cv=uhaEV7=gj=pJ zE6y&Nz|dhXl}Sjkf!vA+-B#pc@eJ4!SBB=Y<-S?99V03Y9JwxK4eqC1OU`4-aSi1a zIdducPEcDge&MARs>f1r?9ZoDguR;q#Nt(ukX`az-xzh3mJ23%AqplHA2)7x4-BQqn*& zYrd8ZzF7og5#HpAF<`~8D@KEa9%G6y>|2%q8*F3ZQpHqq%xc8Qij!n5Hf;{gZj4Rq z!gXTr+1#doGu17H|E-L0;qy}^j)w43h1k%pv5#c=(B?CSAH^gozDvV8F4BmhvJE?2_Vf9$b0c{<+K5~PM4 zTu2zXI=RVyIKdHnz1nkOXGPhYkMrL5y~b>WL4MG~(ibL0?NX#hO)U7KK4TP!l4~bU z0lX^gUHKwL5it8$-OxhU=d8piRO!(IAtVo@C)Gx}?i+%Eg63iqbPy%-Exg1wsu}gz(05Hy_2h>fs-pE*n;=B?>P&7I=h#j`_6Dlg!`AkA7id#@~>YcRe;RjGmI%pd8CIGNO-_YiIO^b^LCKM6ClkpEG{oM8s9C(U-1N3l%|da9?nwF z(h$((Vf8`zj{*tq1ofCc$qI)m@G2`T3|>Tbx{-)Hzl8v#c^1w6E9*VmcoQjbpcoG& zK88eNF~Z~pVs*B_4Kt*;!o}}s^!XS$`i_5)roA7Y*0z|$K zW{fWzg7D}hK;u%b^Y@9Az$k(Y>;qZ;Gm-{eNq_brO{0OOi>qr65EwHDs`4Byl~c3? zu$@c|CgVA8j|ghGzZI4h=%=Ze^Gt+H87j|BTS&mUm1TRL7JWE?k~RcwBlCi4OKS9z zDpsL_0NCf)8wSwnbg+H<9J<{O25E}bOKZro+>sCtNCTIKm6^l3nI!>MeExE4DWkIu zW3U0RkVe6zqO8N76t^@?1WFRT|Bi$Bg`3`kTWeD}LQz|kYe zt72Q2Vp{Sc2m&sxuVcsDTq9F0F0T|YVbvEWY^7tk4F2GOeB9C(Z4Jh8MS*(vo7xS; z^mp*a8}K{7`(f7@W+4h+rhKc!~upWqiC({NC0EFEz{TexP6(AN9UWa9 zptxm>GHNx5BoTqFB3AL*R0cY(z4M)K$4xiC*Dl-@FG~e+*ppk^=!+;g5mC8`e*L~} zn?b^0&yO$;U_To5OSngqr#O4&4IDZ0ELK;0*tTsBcf9`~uDWVZJ+_np_uO+cjvaeW z%>!LBDv0Z%;9i9r5!Ko;4|me4=LC?mNdnv^gh*R;7P!0?oV06Mmf=%>@%MQ0$)}JG z2IV9_^XVt>p)F_xqL$3TA9rh-j_~|EaT!urh8X z5xCN$#Wp4nzlzTOwNgPx{aC>E?$ru5&w-2dh#vXuKjKS|{~OXlIxHVA{-tS#FMjcx z_}pKArB*r4&Q4?Jj_t5gkcCl9^GvLZKJA6Yb3>3ZuXMaMZ?04f1(DfyV&6(DOOGs6 z^Xh#b$qZ|2>-h4Qj`)K&+qszWcYpgY=+$^LM1-rao-g;08FZ8gNF#CrXD%*Vt5VgA zk`KZe)R)C`5K#`j`9O>|L#hg{Y>0%v{q5(lw!Y!GO(LLWM!!G6@n>JeEw}!3u%F9z zY_rEpLzVL1OBe9{Qwz0Ycx7?XgG8)d4@6!mN?Cp3PHzrCZw!%eV~IW6`qJC-6UsX* zUI>(^um!X&EWB1rfGYlAOFew+#h37{7hkTbpH(NL39+>&&t8x$Y(j735}+))d9XEh zB_N5g0d5Va1~UUdmgdo%VlT9d){5cFv6jecQ>syvvNV;jj3f|)z5jqjO;D-p*-6_n z$A{+b{t9MG2fO7`wE`-#SQG+_NpmfX!=MLT?)VVU{o}C#g4;=|X)6=OCG#ZA6^a{! zgc6nd+QpcN8Qf-S&hZ2!Sh!pyGp@X-7ZprngKb`cYPq?btc@W>KP^4+c1D==g<}ho z9ZocFQ}LW@!5#@I+JyOcQiBZO^6lI3;hS&5jn`d^`5imZNeCC#*6_lsr}5aar}5)6 zXB9Z9wh+o!J1xVY_H{u}aPQzY9*SGQM1P8x=A)LLnBiCkuHW|-{OL!36+25vdf4ao z*%|EHvm1B5`v!dSt6#?x&wj7mI>0rEfCW1@M9m{YL%G<@SRDc21|;S)@bER%1mvan zG?pFOm&8I?$B*E|9dk^0Ct^+`BcJCNmsT!Ai zVnsDp0&OA^XjdCr=;P`D4p>Im@+uh4kSM~fHD@8P3hld96ETn>0eJAv+p%qCx)CNI z01y4*9hFmIjBGJ3svDPrppKRRF2X6EY_?LFK*gYkA*1eJLr-Ro1?EY(_ zF`Bntu?N@ey~;MSW}da-=b!mqZ||b)W|RPaN85M4*OV^2#2`(nur#6V9z%YMy-2 zd6wt+;eVdCBHST5O4h+s?mu|%M@#^f$&DJy*^>^ku$dMZ6E%oo>@>J?89)EjccQVw zum9i$EU)$aGQmV~rvB&u{I7WN zwb$^mJ8#F8J1?`IIY=}7&3B&0W5=Gs`XG%7vpw8tv(Yd`5NH;_t~=iM@T)$yXwLaD zoUTNPMVp%HVrr`EO~w>@rD=x2AhV95lzSG9dpR}LLATrWG5bQ&Ha7amGPd?d$`c`` zk`CTJe=l`c>Sy*wa#ow z`3&t!au1{aJm8j-?^B}S|pl*A5^s>c!rGAkjYz}4vig5|IXoUS!BDuhT6g~wx?IO-HQr07L zagYp$Q4-Y&HHr8DaunDUq(lLu+b3KFlX|}I*%i8CZl#@ zxe{2p0U{AXhdSy`XhV^0<1uFCc=C-=x}gjp&pG`Mb*H8%<%y@ebK)uMh^b!$;C|0` z622~9SO@q7Pi-e(dxczm@r*1_Pa*O*#bOAM1IRC~oc*e)c(bbB${#eSeyzyK*xTD> zMSD?#~{o5s_$W4mx+{VbuFr2S1RsX zT|57zAi$O+!2Cko;H8(o_E@iX@ntPJQBKzSjui$_B1&c3zn0t~2SFuA;gI42QbSV7 z9)Gh3uKpm5b3)|$`pU_L6UV*)U=TxuPNesrWLcIB)_c!fcG(p-b-S}yl$_y&1FE}6 zHQH1Au^e?za^Mhcb+=lB)+Y++Cau5Fbq=(`jNbaildqgU{_%553kw+Tk?AAifVQUA z!SE-UwgK2NHFf!w*X{rLU*5T6{@$cJyPt@rHCMaYtk-2Us*5!QG&*QxWjkv7GnH!Z zW6pb7)<3lq)UMMpI=0<$(jBv6+jb}EI33%zZB%S^$2K~)ZB?wlzW?H!i*tW2_Sj?9 zs8O}|UUSbi=kvZRLP0^*AR_~3+x1%HC6CvE^feQ{Ee6oIIj zB02#Npe=;ug&`p7awudAc{Z};2K;G z`E_!Lg7@l1Xcs%A4G60w6JyDU5B!|RcqiOiKa9llwaYd&&D!Z!Ka)4Y7Xh&kY~ohb z6RNcG5WM@f3vhbveLYgjM==*yJc}A9dU)f1@H8}f%6;*Z^=rhPqVRp_TmH+wo^0~; zDsr8O`%Qd$ImF}yrudsN|8U6&2ux0fqxD@?7}`nz8?Yy-JhK>;9(u#hr6WBp6_4Vf(7ItoG$}_&(0DUzd4MMXh z9YUv#5Qa$1Ww-)*FwR@zjn5_6I?$21yo}DTj_o1OetZ*Jv}-Xs^J8&fslpLZ4cuWg zF*!RzEBr-}O)AS7(1Tw$I?Lv2Y$~fjb>x?|h?gt-K8a)Veg$(GvH@&OHL;2`aSy^< znZ&ouAN5+JnQ z#yttrK>7-!-U^P5$KLAy!T>(_7(8ed3C|TGb71&?2A9#yN{ca^F)*y5;VcCF^FQoJiOi%a_u|+QD_z*)Kru)CTsTAKBND- zF&!L#gz>E)o6dhhU@Fr^g0ll`bZLGV@v6!6&jLj5IhH)?m#=ScS7CPl}LgsW0d~ss&2~& zg=5fkefga&qH5m8@)kP$I+__kKsH1Oc}MA%MCLP=BX4Wo&-COqLuB$110LG^2eao3 zS7$R<$)!NFt&9U~)WEXEFpx9!%6hunIPMV#UJrgQHMi3a&6F$eV_Cn{XlN=*h)fCF zY);p!pncSZtBo2!qq>{_*#-3dFBuTi-5!k{uDhnJmtvY6e(#toDV)cjQ?l|Sl{v`E z^oI1I(^vA8A&w7KF_RMCJW-VuRBg;7+05O~m`&pE;9u^F9e5J+d}mF-z%-bt#Ek$^ z(8umlnr^*$zXY0)4*zT9OTZ#T7yZpmf-hN*nx`x>A^U*>8Q{X*eSA{%S}bzS-cMty zGp5BI&$>S;b>j4_x@vQ>GR>~-J-W7(^_lt}fClKs6`$eC``6e$gXMDZL*VaiI7!Z5 z$s1*sCwm0w!{1CZn9JC;>~y1C?WE5~(^3H?4XTG2E42D`wN&0G*|)-XIt>`6q=QPJ zYN<$W-?Ynjx3Iz*0I-ZO?j!}2DP;7O+|y2BmCO*4K25dZut8~&m50`Jrs@rQ>EL5$ z&H3}#*3AjyOi23|eVcbyOm%kfV zJ^`2Fcoi7s?DoiEX+<<>i2jE`1hfwQ`IbRfCZaH=&XwGdI;lX%zdrrr<6q zE!|IPn*@GFHuNdX9Jr2*s1kr0sghaM^;RYnTXv>+yjzIrY3Q)(kY1_=er7Lt ze@Z?gqV{-klJG73ETPEUU~KKr_k#q^fCH*7sr*XoshI<_Qo6TodEfbaTHPARkgzS6 z6YG^+cXQAk@xbE-f#4?u0h=+#V7I$4?o{5MWDY6x`(as19zANMdWYZ0THJOpPks01#!WYGg4q zHy${`Hm1sYL6#f+f!Dn5HZ3+}zv*z0TvS6=~S=`du<|SSp2eQ+yAt1A*K>&hcU3 z;O4x!T1D4Y>1skGIk; z_zGoQoJg6|rnI6Ro1HMYLrsjwE4XVF7|# z8}LY;`0s%vd0st+GpTv7?;@n$Pw1rRF@yq%3VFPvl8`*X$N1zFyI(l$S0Yu4-IJP? zs@xGG{m>OZiFpQwbmB|YzN-@xON6YZQn8SttDQ&Zdu!D2!q7U+*nplyf`O`=ih$R^ zw#S#yxbVxZc1gj{@BRi|(MOWdj_@;VeH(mkWhw_1$xPhoq~sM^e-ZWndS}R!pGQc_ zpwiEDVyKgB`aj1(PoZjf-f{ZGVeDaOH{*J#Hhanw2-s1Ob{c;OI$4H6nN!w;qY2;} zba_j=oN?_Jaj8{n1aaE03MrDT(O3zpCRC}Jil~k)y$Q&W%iF@#1eLbZnAK)xY5Sl~ zuUlB!J&(l(VYw&179d@TRRlJvnVP85&vnC&!=wEHY@T$K z&;IkYkNoE|BwAXI+#NNWB6<#;{w%p~ywk0c*Q^5=rZ`lj&4vw+s58Y3WK8 z^RPl-7{wTWrjwDA2goGTi^GU)H4nVKz0uO2(h>8$kO~%l6O>5oyf?{Z}oIddf1)>XkBi_IgBOt@Wx18fiY!@vHlOZUm3aw$N-*q_ zOQ!cZ{izIn|1yNsWYOap8K<$>%S1~{XuDc3>8df){;JtzH)#dHpcM|!#g|E?mq$vi zdGpI}Ajcez0ZL;I-6Zhii@cRDk}{PLa-WQ4Rib%lW3-;do!tC|_jKpY&eijln!b|w zf!@f4HsrkWPD{ql#?atD`)IGD(q>My7i8*Ysrz^^vCA>s(<@rOK|>6ln(L!xo7M0d zy{>^c_+;=h_0{*|qsjKscjbG^TC1H(k!Le4rv!jN&?{wK%~nKpR7csKdU`W|`g{Xw z>Etr^4D{p;EzpJ6%gAj(o?>W)NQ)-*0mCMH#D!``mzAReT&O{HxbYMdr$`+MIYi$KzI)YKfwe-IpMC@+l;BNb2QYpn0zZ^0Hl#0u4AoFHg zbHOXnTx#KlhrF{-zqropj$qUCIJL9Oz4k}otAAe}E^coA{l(!-s3Puc&c@OcLoDTs zD;3hg4~fy)t2+UY#NX+q`u|;N)5+|ufQQoW6+HNp@R;wUnMN!|E7kUbdCzT^q@De7 zZCqLjo6En^ZJ(|1Lr9&o4{&`%eaH06uD!e!bJfaK?*syfSa!r0J`@YzF&wm(l))i!`I<_W5yF2dr=Q-@Nvc$q|LeZ3M<%bQpX=g$yFgVuM%AV|9>lir9?qr$nyxhvhuAe`F=>nXwc{7zqXdU z45-bF8|kD_o&)qh`gKai^eR={YyV{N$N{}8PIYvdjZVIsKU%(nK#>g?CNeh<90vZ7 z$iB(2B)A$+N;n_CZ-WTwWD98!c;iUi?JD zb{E28(TABJ*RR2lDA9QmJM0mnSAX$2o%`g|`D=$c`Rw-P?D&fDx8?A+%L09$#pMqAt1MAp zE5DmS$0hNUiiPLg|CaQhLMc%V2MpH<9#c62{f~)>08NMzl-(joW$M1FYB|B}e@ z6bh}>X0&JGaysz4%Yx+T+*L+g`mG~O!DAB=Evl%>J!pvPqZ;(;<@DNal`HJC>OGSHw@r%E%`&z`Zf#eP<6ozdW;)h_i7tZ#SP;pW*-QI!*#kgaZO$ zo=5n@1Gietz*95`W(0^eg;kJ4X9Jo|&y{AN{lbUJrVKW?*=#>tl|A6(Gx`z@l^aQB zt2+;e)p|1N3=WpV#)=yXfQ@7#o~hKl#iGhaO%pRGv4AL&% zvjB}DDQm~WF>$1{Y7-cUM79wk;p_rRZk~5ChVzQxH>Lw5xVQTw#>gmD1L3Ro^$0yl{*ai2zglQ8sjPX{Q9uF7;j2T+3!%Xcx;gX4#gt2k z-LF}#HiMF@4M(rYpzGqBGqF4{92kS8H|%y@FtJ80x7_f2IHU{!*s*w)LEqlR8+#Xj zO@7bdv85;Nls%R_tfmR(JSVA(jcbBhQ23^pXO?iq$^$W8suPpxT})nUIQLMiIhGo_ zw39Iwh3L!Jeaq`ID;8BH@b4_kzT7(`(wpkv&SGKM0&|s)j?Uc0R`=1r3*8~U=#uf& z+*?jI!#$fNE^8tTZ+^##r=KVNY;YQfetEq8Bzp_+pzD(e`U9NLJ z=ckxX1dpEgGP_6VMs2zYzRQ`7r5;h5{ntzZ6*DFzuT=IMS@%yaMkR-MIDfN*kj{27 znZ|8y)kV@?BI0mK#C_&8Yt0j2d3XNV$0Egtv$PcNq8*pKx;>h(bY|htj!O=JX+tjp z7v&Its*js5uIa|Nnvx?-CFlCXhD2p&VV_k37J;QL=)?Ud%U52{Qha2t0-ldMl#ehm zxkej&flxtQ^%Xoo+Ba!SPTlXYIMWiJ4-BMqr6vdTyX{N;Y(;ss4fGkK;RMZAjWk^) z`9mviTfY5)5;4kcZrEcg5?#`4yEmLJIwHRb;K(R(>{rjbX=8-%P28y6a``6&T|pzp zzG8$*ek`}QqGL;XzL6I@C&F}d?sJp2Y0nA8`3>y!YDb9mjMhNCXGG_hdFd9~-OE2Y zC2)Q?h=w}-wcTG6ZI=_t-5^3*=)e!@+5X%Pr@oe>Uoys+p(U`@d#<%x^v%od(V*1H zDegAmH=?&zc1h{zkK^I1jI2Qwqn${04lYcACa3HlN2H5EJt{bppJ@*l38*Y|8>N}j zh9rmx+1bDjt56*>iE1ksxGEi99$HC`^VS)g08#7M=oPcJ@4|?qtgq#qq#Z~&Gefa2 zF>%RIhKJFDM-6mce0!X8x>PfiuRWPRou97TeC|VRMj+_TI<{H~NbxP)x|^|F`foF> zTOiKtZb2&(0W9umJw1$!MTgz}VNd9`?)R(-1`^%*+0A!%lvjzIl`I17cgZAqY@1{! z`!}W_-welOaK-5>h7SN(mdP{|G+8_v;dn27|Vl3;oqs6<>lkB(stDfH>$OAs%|`S|nW|;83S%>(dCgS;^TLjZzo5 zVB5McvY2LMFoSVk;U1JtcO9nEOzb>P@$CL8pYu#3J6Rv<_xTakV!zS%zaiVOPfCBq zA{(t(Oj+c1li-@~V+Mvh-c<3F>J@79chPj%TZ+bU zt1vyo$p}eC1$WR7Gxl38_w+{EYqBMg@l{klX>Q%n_amZ4zq3y=HQ?LD9?g62C9WH} zb|eX}S%FzT)7Q7IZW~=mr4DPDM&yp^X+ed0)Fu|h)xXxLT{KFF7$D*w3qde$W+iVf zu<@B1mQn%$Pu!>b7tm#|V_!AQBU0o@8`P+kXVf*+0EN$!vaas{??~G~oWJOLL}@m|U4pJZC-A+U$%J1hLzU zOoOw&fn{g;X_>?~7*stS_dfEHt(kaTBjR5k_&Q2mk@cNIss+|(%-0G0W-scd!q<)y z?@l-j9_C0=lfgUNr?yaX35;Sa++HXz7CRUfdV|hY**tyyS1MN|`rw#L30o`zkprV* z`r7zjuYLe#W5Hdv@I#)m^pb|%*$voTKRt$Qd)XNyw| zg?_8+>44%5V31I8VyoXk`hvXPQUG~I*>WR#dkPMzyt~iLsp=*;clxF3t@t?TMGUm~ zgi|hOx##M;yW~j}#1=Z?XPuF-vV7WJ|E`uth@tmpqfx{~S!$l0hQg)YAXLl4?C$EZ zA`a+5{4_?L9?7djFg;KwT}oGR&k)p)n_4fuhFV=3W6IZ8li$aiK3u4CcSWl}6?yf#%c{W~o1%SJb=zEo3R&nlLl_)1z1TAEO+ z+pj#+s4iTTlh1g$07cZ%x7h6=pse>azwa}vN{Qh?waQa@_vK0o1qmLDju8S{haWCe zkqLbYurD#Dh%*gCAlURPkxd_cqkmZ$?Ms`aW@Jplm8x>S`j5sN)tB`(zobHY@mp}l zQ9~opLz?ebMs}f4*eH^;IKZ9zI=WFu*7+FWJ&l>1cJ=Cly3*I0>TlBIH<8(o=)N3y zkvG7pCjml}xt_~6d>V1}bUqPFV;MangiRTjP6-{8>?PcLF~6(Vc*r*y9P?Jp$Dysi zjE_f_&bG7rVZfms>nONbn16dq4ScxT5H*!RIig$}Nv30a=dec~Hv&hD2uO)ZZ1QlB zG8EYuH<0MqMcGHhG|8hmbU<==u9|r9KyX!N1rhrx*U3nhH@VTD>Z9X%|7>F=i7<;f zGiF6r1hKH9s9#GRhX<&bBS*MYdqBA+1b9uxZ`5z;ES`%pIAJxjoc|Ny{gY1?m!)`x z4R|xtUM!atc{=qL@6D>+LjQKXuOGI*vI{wpCzu?U9W)$AGE)%riY;HRwERW;`&4-K z9JjTH_s17;1J41;F`=26Ow6qM5H6mstEDhIz3wT=mM;wMyU8cXY*bVc-4oajRx=D} zI`K?tMHs;Z*}T8Av7tG{573e27KfAe7CDEtJmBd@(ntTk82(HIOdrM&9?!zu&Ao5% zway*N6F!anb@(Y5p}UsC^6MDBB0Xvhl$7UMn5FXx=mbx|+uOV4?!Kioy%Phvpk&xI zU-fapJdcX8x6eXE>@aSu3|6hdXxa_kyNmkRMh|c0$z=ecx1#Q?EGld>38GcN2d10d zmO1t4WWB>jH>U;aa@0DC9#LESR-4vzVa}M!6z{FT_t+1&;GsDDQOTAdhtveqZ`TQq zWZpxZOb#+LqRq(&svk-&;uz&Tz}2k-JGJmgx5gXI7^~~pNB>4RNd_%dK6dzB90Ak{tn_U*W;^3roW1)o)nR-r?}1Mm3Ve$}5GbG}p;@r^D}8R0JIs#aiW?xewyf z`=_0%hz%sErL0nmQP(5vddF}aaS2TvX;RwH-#n4Q!D-I7!6!`>n8R@@U^w96#m8Jv zjJlkjj;GV$&;?TJ7>euq(img2l9X#$9UkE>fnFM&mcR;!h-qXD^<~2G4b%@&Bx28$ z)9ze~B0>LlJfL_2gi)aJ3?CGQXwb=z>$x@-eLB{!+f}!gK}t$tm_R32-J96l4qccg z>IsC%$oNdEg-&#EVEv$xSaAmG^Sy3`jywSj?%j~Fbi>vd){vHOVyBt*wO^V5Z6{>E!Tfkct42 zD=}tK#_#iz{Lb%lTFj0On0g>aps#v+xfTVacANhw48lK>> zse*}PS+~IcV_R?<4qIguO7zEf9`tUaY};2XNE-z8-gM|dF!O5mWM9FoM|O4ncw_o} ztj~%)Y31l)NH={cQ7`t}D+!FZGdbKyd={!{7*3GCGkxv$3hR2mlsuGkg(VU66{8I8 zY+gJdD2CF%5L|cemi|P>!OjlQs1^k7P!2bc(CKp7?n`cEUu8C*)s;aqolb~vg%|&U zUo#Q(ft*t=F+9DUY1iv;$Zh6P$5eZLb{U`rI0CXoK$+~;!Z8F~2b3;C*?2(uA)#>z zcAa{vJ&{4VdpUq0uibT0W_m}nn2uSGF&Gi_EE zkPRzR1J(Ss-TAak=enx8j?ir%kAUOS4JY-BLY}v(Fq{jL#piwPH;wxw*_L(%k<$K=JEW5}<-XKEOd{T)9kMdW=@v(+bUFrAt-!i6^Z} zOIAD*$JCb(9_r0iR@eZbg;tI%u$Lb- zw=@qWN(r4$$vFgg;|YIGsQay=Xnu(_<|h2l&k*W#_TBtbVES+qC$vWpB&@nuDOD!8 z=;%aqJ6bgb`Z;$Lb@HGvJ|?}edo!au$?y0t(c!JQd}4{+4rI>`Ze>rOJZN4nX@)uK z`mwGSV+bcQ`P_{JE0k`@x1b#hapU+7x)nMfXEFYhT3h(-js+4H& zIaWz!VJLeA{VUDux|)tOJa+6w-&+FfAM!0o3&xW%soiGi6)#!5422d)Bqi^noOjA9 zO2TG$u^Saw2MchI6eOWj*AR0%N;5&veD2He02Nejiy8beykkw>m#hl!pOmv1x+-40 z;u}gh>Cr!P>Lcim1$>9%fMhSLb5AG3Afxkv(ep#eWyz8T>XZJswb_3=r{Z&2P%8`$ z=-Z*8S8%->xKlYrd~SAkTi=m^Aq$cI^Tc{;WqBG{j7f7%X-Y_B>a;}TV>J>?ezg>4<|2)N2F*gtf_B1pzMi>5zrRo#=iTWSki2^Ueh!i`n~AdA{DG+`k;^ zo-VRkHeOB=E;S-fCzVbYuDUQ*-dIEr1Vgt`$t$wxcl1mx4I&*Kcl_)%4j90aVZnNH ziVtn^JyRGnkN;r;Use3lT*=m*NF*b!0q41d6W`+fe5WcUMKWfX?_beXGR@mmLdaD! zvzYVxl)yy>sMma~od9lW2ZB}Td2biVh4mkQG}1WI&755W%P&^tbuSvew@9~zw!3@; z#t}t{;;_b>n4|VWfqTLq^zLM`mM-0LTAmRs2S|8$4VrCUipA~>#9<|kwJh#}sQ3@D z+h63)&}hsnVDrIw;5t~p-5fiH=tnf*vzVB}PAg5v?_YG+$wH2{&e>v(F-|TWqX+A* z+bigGs%rbofD`ibLQ@pfmBr|mAdCE{X0?`tspR`mRqY~EmQ1Py@#))O>G@Vv1vC6H zr#i&{D3I>%6 zsckIFYDcTY+tM@TDYE5CVC2o)vFFNFCNr0!2;$=pTdCqqr`JyAP)`Vloy?wZUZ3Px zI=651=pPyCZD;z<^!kQuN=b!O0e?9pxhUB*X44k(e}JwhR?`Q)3Io-y&ng{X#$e5b zymxZ5$|{4>c0R9~|Ma;VWffl{?sUNO1ONyBtxvvK8_%2|cHlp>1e6U3AAT*~JMu0D zlq!&v+UiDEDV0bG!>lD!Y@IKbX5(XkOQ3dt#)CFzHxsC9TZOFqv=uvZy5djU^}5)> z&{2W!*H@SG^#auff3wwDdQ}NKh2&D^RI+fGbnBmlW$%1v`Y;yH3xaMt!xo^As90|i z^pk;4QiH2?c1(Qs4x}T`89P~4a}_W!7SjrXAN=X094J);KWUb;52?%DV^2LsyCJ6g zl)pfS4rHmDxJ7LPL(f2CT9QcPvr#hx3 zJd2F|DF@)|Aut$P*1#d|O3HBhFkUE_3`pmH(i@5<5Z>9bcho=@#&}kh-glroW_c!HE}5IxiE1WuN=BpP1=TjJ3w?VjHUa3dsOP~AQ8KQHGCWgiVtsz0FEu{($4 zv(^N(eyHZZVcsm7yS!sZ{06c}`0V_ER`>YS?}*+Amhr#;;XELv!M_uwxQaiSX0x~p zWnQjUrWFxF;{7>CmU+J<*kp6Si!;&T`EGv5)^z`kz1Z?DwaMrN5vPX%PJ?5u#ZH=d zt+gNp448|q0`dL~j%(CEs$mAV7>#vWZG2m7_FHJ1WIwukmMi49=T$*eXyw5Ai&-5v)*1EpWntofhfWpAdo(P z)_Pv&rH378(SN$YnyIk|MvUqboW&jTDF`t7eYUkf4=JVEgtG3hn~(Tl3?_zI0q zAKzbRr-;{{&=1sz)Y1@}RfpkxAHV|Qb{bPdVXKtqHW}V}t{%5vZb)6(OzJEFKh&Ey z9R6nV0|dg2?W#|ojM+jzp2ejQ$1JpUcRM{}bQojp_Fi1hcgx9RR0$YujxnAO{7KRKqSWZaH^Dw8 zEcI1?ss6|C{99qsQ0cxk5zaLcILJ!ljllsb{Q$87)nIqE3cV0g4_qxtWI_%g?>%8% z6;^Gsf%B)qABqAAJJydiV@iqob-Q-}icGJGQY&)~6_ULGpP?fvK6SBtTC5KW{HHO} zdujv=MzQrm*6hz4v&vc=O8s=MR(+u8tmw-`UYHrnd>{;x@)Aks1>ju_HD#_;akjZ~ zm1_u&?)F66^8u^-?;Wo7A}dNKJ|M}CUA1^LG4{R%xdIPt3o|cj543TBcseY~Mu}NyGs5rd~0dDi1D+Bc407 z^cc0sqk_cUj_3rET8`MC{&(5SexBlVc+dm0yZ&viCd3pL|n2!L9F zcGm`s3-!t1u5_rYs1s!1R!ca%cjZP&`3@51J*el-Vw#qdGxQm*`b!?}hitRVUcVdH z{t@ZQhd(K-%2Cb6O4q7UTg(+=z>C|}y7|T)Bh1o)>`A~I1#7H+{Del0;&{_9O$e$;M z*&?JL7CGZWlP*=&OK@2w2}q(Go{eX6gv&3rIYh~20LIC&Ta7nNIrBLrNaN7h zMV04B2{HMN&fQ~lnkOaxt|3)nO~1R5zkY4=OZotEf~6=6-vkcAmhZ!@I*VaE@%Yzk zWxs7mgsk$+VL4`L69`OX801+DyywD+!zGg0dou$h`^>UP^7 zUoy?7bB4!ccpyR8EsrwwKN8nd4hMP&>dTa6|0b=H2sxBazeI6RrAGBO!0?kNSU*3$ z4bHZN^8^~VSx*ij+rOphw4+DY`>bh1F{PG7;nvaBQ+nXMn^PMsmB?FvXRulVdvEL9 zc`991x{WDYtg64&0oPhSg9XyjzuHAjFKVE%oQ8X^Qz7A7<@>e27E6mVEZM0wKZY>% z>~z{)SUrddy4+GRKv>fKk^1fL7R#u~$o>fZBB$4^;pebf-?ufT zqcH+|E6%fZcY~U++rx7&k4ZqTymD-cnMZK~JfBe@V{-N++el zG{M5cHe840+pN%fJrFTg4$PFZ^P=h8%%MVQ0YjO38?6EyG9%4obrzg<&br>qtsir} z_wkfGV0r#L`6gh5G2&W$LABjS-0Jw9!{nV$hjklfT=0$RTOF3%fXXg85ms`{q@&Vr z0%QKE)ts-`2?X=yH=matI{9tKCqc;+dfYXT0}8lLh&LL1`m*x>IDfCsOMgD@^wx4& zo_<}>j9`M%kgB%AKKbbMdK=L-8cd;8PV`N%WEJpOmD30uNyuMUt0mF@^}5Jp^VM)o zbHkHc{;p&nzG5-oGe%>1VJ_B4LsJB|CSXz<1{L8d2<}5@l921Edz(D=tFNpi5=oCm z`rGh?n}&(;{oa@GihqW#Ct!9}0+!qv*9K;KsDu11^*yMA>w*_5<=IN*%}fJcer@p6 zN{>XYZbPCXc(i7Q^zbT)A4J7oeA`jEDa=2hDQ=QPKesxf5>zFS?&?*TyYjO{S{rpr}J#7c1HfB<7%TZibL45TTa{Z z<+vlJN*`TrL7wA4ldxUEe#vfqEc*j;O;}5^(%hKw9dQ>T;U8;NUygReuP-r#Y>C*& zLaU?|P26)P{*^(2ShT&h*seL7g}?HJh&32>`=C+hE+djk5qcXjo``l@MTM10u)TM( z4C>9Hq8LO^-i?F&4r}4(h0fr@^_e;`Etnf-0pNeT`e!Qnsj3%A93r6{0`oVfj5~-> zAd3A$%nW-z)`^SEwaAZfDpI+}>f!d5N>I>G;~PoL{N4VfY(YVY9PBKmzvn;2t;Tm^ zFVx6E^q#}hdPN%O}T3TcO*)iY2c1#9oVL_c_VG+w} zFk~EseeJ^ykL-#aOa2XgoYmlcvX&Y%WP}ZjO362&mZ{74><{67&vF`#QqpQRY;gF5y$lO9pX@tre6iO0B0dCTr@_9* zi9H_yVO`9@@zuJ|&R~E%l|?_hI&;dfNiJp8x2CW3LJ-*5?nXWO!tJrkEuYDK`B}Nc zOJ;tYLZ0^Q-|$4s#-ar0eBOUwjqR#GB9t1`n^ z#Ne#DJ@w@6A%*Gfx27hFKfaK%TCAG%Eo3UP`vO%T6mHLs^<8VofpWXoABOVjk}UXm zFY0TIJ(aa`KFJW|%0&b?1`K`Q<*QgL;O#Wz6sL0pL=jjpX~|3_MhPN{29a>Kk-8H9R=xY3BT2F5;v!;~Nfk25&#JWgL6b&zf6JMJ=^+;pfc?s$TzbQWd^j+k(8pPUxhEngaj zj_$mFP5wYYZ}au#K(nRx8yYq|>#c@j9`B&1Htk7!0V+;s{FYw5irL~5JasB4WK9F@ z_RjcjNUjIX7cwEn51l2#K}H&4Zf@o?_Ito0jYW-K6#;_PCc?RB?WN&N8`wuV^0BNA za=0s4$klK;SchR>%lK~BB+hXL0sISJrH+JUE0o%Is?MN&KmbumtC-tSMJf}KSfWh} zFJgwqI#*z8Z7wY=^^wh&r>%-+CO0=zfV^OG?W+|6Tlbvese)tmSq2*@#hHS9$!! zOTKg+8JZxDl$?`Mb=JFOP4>b&=t$)Usb|FU>b8yExQ2N+dMAhr{fGON`#Fgf(EK$ z=vHq4y;g~YCPFw<-N=3pOO6T0ZGzeTM|XZ7c){1&%UxZd|3TgaTxA8=^PL#mFx3eq zkOy6fGgpZlk!XQ_nO1PP;tKGq&zve4@st79i;eX&`G0rVpjBfa;xJDD^JRJqp~o}| z3T-P7W3*+(o(z=wWV(q>I$*fo#-Gv>{dH;3rVERnbE%q2WE!XR3qla*lDBA-4jfCg z8RVczbRnxatO;wN;03$VfH9{$;)WQSKPN_ZBJc7R#FDUKKkqqA(Y)3GSQJ9g4{&N;GoX z7(-Fi|DJLD8j1WtwpZx4Rg3Lr6cnc#)8XJP$gOGkcsy366u_#%Y*=B*L+8VeF2GIq z3U&uTn!?-~RdCvjkXfxXB~|0qa2*x3PTMn@FRS$n z>BNpbD&VaQ83{}BbEm9SF{ADxS!{Rv!$(>pu>NHg=mS@w(FvR>%yk!ee1DNAMd~08 zRz}cjwq0o=7Z(?=ulRO{!)&(0BqQ{qHH>1r+>bdo+x?;4V<;WTtP69A1?{lMJD$Q2 z94WJ#&f@2*p$?;}!;Uw64h5k0il?+-eyOl_Ta=kirE_+K*1rXO)P;yvo5+i!&V%<` zsJ|}o05^z(^WS)^d3AFZAmvWB8`+>K9?jBf%=yX-(9x@0jlg;%@2DVB>RWeW15a{f zE&#kkNG_-QN$u`%z1~%a;Yi>ViVh51niTXFs%IB zXQK5`Pm&w>6O47=4}bMSp=4N492ARYp%O2utt8m2*2S*+fWG)_G!n{EI^p~iQ9^jZ zX`>cks#`_q&aHO$q#gGe+-elpTYyfbw|im{{2VZz@{)AC?(uyo-WX==n!|TUcS61~ zgbx#<@OFgj`Ubt+@@qD}4XmraujL?HXWo`&;8tRlh`{>gcB!9!%@0;Do#s_KOO;>g zlXQ%`=?{W47Iz;ZJY?s?2&!0uh| zeCehVEfc8%h>8*zc$+Ucq6E+uB5Fme&1r)cCg0F%1ojF zHSnw<{c8&Wn8YTV4bqeZy!#eyt{3!vgC5c;G8wfKIz|QMKQ@}gMwA2wGmHxe|0rZ~ zm}q~S+P|#Bc`B`Mi;KqYKNXw`R1GKbr;DybuDb4}cWg%525ZnZh*2!tZuI2Erh*ZBIkbV zPnFlwN@4>`fTd8X2H|iToal~qzk2yo#}1>(mI=sde(}!z*~y|~obZ%8&_j@esm|Ec z3GDi0F_U3g9GfLztjDRoQRT&W@--&*d6j2L-F)cxx6knBwytAa2PaNub6=~8d9bsS zija6)jynfjkToO_o4M$^mfKmp%nbA z#ir*}pAU+*>fp7pQ~B|#?kE2`8hxL_tznbHCij<;4Tk8WcNXiaKw0;DeYiAU^3i%< zo$pq($4S_h`9+d#!yuI{X+HdFHl`Awqz2FY^IqN;)g-e|I@xsi!gWyDM z3K}xi?UJXg%!&A|7R~$GqjZXWJ1l@PYJYTZm=WzsdLJ_~wd!6Hm9$|mjzqwOYb=Iv z>Eo(aJSB-jJgT9?U<-6IYWUJli<#0p9XAVSi_tPB=gP`*J#855;#? zEodhz8phxhOIcz+b&l_y%-_>&&>==wq1Q}b>5wGoM|Zc6&G}NlyNkPWRz_HU>**b2e#no*hw@S`AhB9ee;)y&FJwPXD{-7O#!Q$5XWE3LBuBCf=(B;e*XQv$4e-BoruZIQ83TOtIQ96=x zePx9GpCZmOAd2s6z)E*5-662FG_1t3fOIV(C6dw|($Xni(%lP^Dj-OAcL+$AN_V}( z@BiWbwzIo)=j_bgnS0MY&tq3!WCl?$pnd>t8cU>d5;xpRr@v^dm-*qRsUe?zm&|TP z2@%{-iNmr)dD{lm-4Dw2l7BynqY;N4%vB{Imide_LYLd(VJoW7Ms@8YY(9_df{n&wIZ=fgK&GkUm`yAf7fQ*pZ6tql4Y!0XM^V?FS zc)%4dfl7mqFId`4@reu%2_U+AU?S{QlTU8L2~(C_@*V{{I4Hz8K&cfL9AGE=c~&#` z+YTh(%73^tw7eZf%h*I1wj5_8Jp&(ocfN-#ezgD@81tc(^rjbuV=D^Q;@(b@((5hO zz{YF2Y-j14KR(jBAKam~OpG6us{MR!M?!{4Th@3fw%z15C0+>LW9i2AR9iH*?&?h9 z=nNQ(o{fEC1JPnA>-TCTtcJxM8tQ%-R}HMLi&sESR7~c=Sq~>h{-*8i@7JH5HE;ON z{tF@yPdOUdQdHfl26 zdnMYTyVbKEz}^4dMAvNpayc%!mlYQzsoAEDp}U-+z3?&GpDgL|<)Lk`!E+Lm66Fl& z<8XFY?4FJ}E^;>S2)98SlA!HGB0z`q-X-bkg%mC?$OC9(Z5iJI}SnxV5$d%eb7$iuN^qk zfmN?$g4;w|YWKFu>!Xj1MdsTL(&tbkf*PO5yx!aqrq*Sh&}?b*Q4Y zE-E47E<;J7i`Wau?JY?7e%W<4!TVvUub|BHuDSc%LVdcgL>&XmiEQ(uc z8APT=ib1<=sF3N`y53j{YYDLCXMSLSX-#gm!LZ;aU3Ojc6I^8P8*KaHt)UMR%fQ4Rbn4-!}5L4yx4UI{M)%v*_&rsDGLd%Owk*_nG z-B^-YG6l}2aJdTC98#hEg~*nv!IM60zm zho%h8#`Nou?%4#=-4lzr2D{OtZxbs2Y z*iLVL5ur1(hQo{Vf$B!lnhSuPmwG}~U!O{r;0t{y@aEUoh^!|0yeeXr4?R)cpR!h`pE{!W_@JU$GG;pU&a&_>t`RI9ajh%wT7)MryIJWW71_qtDoJm@ZT>!`dW^ z=ZSJHRdT97LIb9h-ThpzHB#0b@6s>OG>}Rk#Q?0v3}a%7Nn#&0`%0S1QlyiF9sk>} zpJw=QtL3r**jmHagz3t;(FAT?Gds}9MdPwyL5Nw>MFr(<7BxVgwTH^~31SnBXmd!W z{LzSvqYfu!{#*k?ba510q-HkGz~jTVtl06Z)Y7BTj}!bbB|W37zmTn>)%!JZo69SN~x-*5;_*|jf)5i7D?ScqcX_e=PTnNd?zExR8K zKB431F=X?anj95)j?h5n;A?rG1_JSWI6UrA(&jQglGXcyW_-CoWu{&HGF7qjjKM)VH*9=4i^; znzQ%}T_1g=laq<+fW2BwAMi!s0cq_FC4)DMh>(}0IQAU(-YdXkP$9V^JrX*$$cV@x z#fX1^g%x|2dUFh>D#!fQHq^ljDVfe*Nrd0pehVOS=F1v=IPm3?&87fa@w~o6{d;T8 zL}x7x&4*UJIzUcEDvEy@ZK$6Sx9VqAL+TiYGMC9y7+2qNG4|6-+V65L)wV7 zt>9kLadH?p$&dix1`S?SPxde`>g+=`f}5u#$2mP0mV#!q?u{r@b>TPSeCo>6iR?pd zZH`JW^W_n6bpcK6j~30p&$M>pQZuk@S9lL`f4gKc1u{llFxn>7>Z!%u%iUFx>yfl{L0I>_Lg zGWm~V?}k_UsKH(<%@+JE9-tvZ&WL?wM+Uv^y(caJ9JvetoT;N#H7A?^uLi5r#>+=@ z)jv(}kXeo>;(Etb$eQ-)4ZcqBYVW5~V6pp{u-0V_T==+q%;bHyOIWG*VdF-y+3!|} zgV6na(Bi`9GsLu>`O7SE&AzYir22ZLOjLBt{ZGj+&Qse69vP>LKgrCt1R!}Wo7em4 z57QL0=2bQ+<{UgrieIss%6hv?GH#BZl{9i>-pj^~HhBco$^m}{q(NVUn3T&2%4yA| z6(5r2h0~JE&x^jmIspfp`~9N!?B4!p_7Y;o`1=cwYFH{lPfzcLQ?IVh&yHYN0n}GZ zOJI{Ej35AH484i>jqe|SbGcm{K3)NZ;IK1J23agDgYne5WDh8P?HL!%l?8TodgXmj zEd0o-I+;a9e-Nx9H4z4)nKstT-&4yFu-4^}Yw%EJy?3y&zNt7Z?$9@j#%xB#7|;*y zDXGUh2Kn)ujx#acP~1jl_<=!mgvZcD#@+lget3q&hM;mj*D*RJN4yOOvyV;*T%0CJ zBBK4eYFXzfp`9{hR}W**OZe?|IeX(dV(rhn$B94_gS~T(TVH#tZOs~EhC!0V%*I(9 z%mL{I*Udb;jt=ErYRsFRl~$i{LA)RmEZehM0n~6cLM}0PGoQc}(iH!4X|GJ6w$lom z{TY|7K;}B_Pp(b&8fpe_o%l)*|B8D#Y>CMnfH9t`etrPn4}*jfj=!#zDtrm7Iv{}{ zT1*~-#$2!?-6ZD$NXV-5!R&}z$mMAb38L%`%|iSgwg`(Yn*R^Ms>fpVzPEi_zY!P{ z^+a;2&d}jjE6CA-Q1e%A>pnguDaYyJ%GtV=ZvzQ&27;wb;r0ijhDRGjS{_i`fl1d- z?)VoE4GE)TlB04+1_aLDIxcqWw9VV?d=l1mH}H{2mGbqx=FRMto8e$X28IEhBPd&F zk48)ai!G!=u)Im2xN1keBUniqBgY#EAn@(|Y>g+I9K7tUg3XUI@vX9iaJt%0NcpJO zMkg--pT%lDPV%iyT@iBVG*5e+2pUS?;iCmM9p*GNA_q6`VkNbDXtzmV#_h#ZIr%b0 zRT*HL*aTVW-DFJi9ak$_b-)0MkOGFJ`{!+=Mhv*hT;&xJaqIkor6AA-?CMPGnd-mS zrxIVkGZ%?RG(CQbRapdP^0_ZFlOhR{xL#ep{AuLE41r|WXt9m)y;fd(TFD$KF7w>M zLTnWjb_Bc4pu4hdukicJ@Ncve@k4XcKhf znfZz_z2WM0*aoH9PYq!q7+~0alZkbEK6osZM#ZoZnXX$; zktyxope^y)q6`9$csXt!NfiU1>hT|0m!YU96Sv6d`0k!-&*TDKG+S?d0fNrO;+&$b z6!%!|-FVno+W6nMot;xe4Bj4SG&{l{j0U-#xW3o!6$}uqW2`z^swc?CW*U5{DX7v9 z5cz?d%T;t6-gxkZ(-R>2albd7vRBz1lgS!=eYe0wLu*vxBd?qzk|S|2e(_kmw2Vsp z`tNcpwo1m!SURsXGPMm|ey|V7SuE=MbgzI(z+{f13KM z!PGCi@xAjGXy@ntScBTH=q%VXQs~sv0G~ju$S5Gp@|XDyDA%lq z54z{v%%+$XeG}w6NTiFXVt(fFiP~-#hO>6D4a!hbiU1}e`;~^kpgN1fCyPd5^%#(@ zFSq>mWw+nNLRQ9gc2I8Sb$BgOtqpR*lCTpfJIezoOc5c{aB2@kc{8e#5#@enDQMp>`X2NHan8NXkWwE!9nM$OzQ`VQ+;SbvvY|rC_a$en5 zkvzO&1=K=#FK*tyc>C5Tc5>&4>F1CA@C47Ivm!BE>_j;%d@M;T|F!k`iASr`Ufg6> zHKR063jF9sxj7!|)fMr(2CqO2=&b+XcT*z%(;`Q~Rk~k8&fB;QzTRc3zE{P|@QS14%?iW4 zPS^9^hPsxrGf_?YE|W^i?wMZn;#ij+9)c=%m09m}#9XFCruGIV2_2N{91~ioilzq=*-{X=5AL z9KBNXhl3H1^U51J+XUX2eQ9Z z4WUM2gj|$QLp)V9oey33zlx6hgg+bM#%}E%P1tK%DQ$mz&(9_opkz;zYtC z(DBRU(o`qiW_|0a-S~su-_-dqpPVQR#8vdww`jOIT?s)1d|&m56U}A=?#8i5seyb9 zYf5jwF4U7$8Fn+1b3fZM@=t7s^#%#=GsAOVeMsfbl2mK7nPcYR`8!mxij7~&1NmCI z(Kl?V10A=0Sou_!4FB26Y_po3?Gxg0p{H~i7ZH?O9TqX=%7CPVra4ee!q$@Vmv+SY z{iq3q&zr2W&oYY7VrXi5uO1wnODD-Vmc8`N>h^0DCkAEPx9&HQn;RR_Qc??LG6R!Z z`EZND_zquv+U~DOFFe=QN?zUFnky@9q0c7DjMZ^lDK<6#6U+YmW6V5IClCTAVNnua zg`FA3$2aF|-Bq3>mw&#IU`LrK$b2ZQzq}^gcq-`wsyA3|kFzD*6W@IPI$d#7qknOunkhP-6jS50^pHPXXoR}YzPru!1jW{jnJ zdE9_a@i2hRFd^20t$whharaAYFP`ff3U(33C?-=|SN7Oy_CCi7U2RnYgg9nqh?9%`mC&zt zi~YT+@t;4-%f(Tb05?;3?OdG<*m*J(~{K08!Ziqmu}cJ z+27N0j7X};X(HiLnkPO4>Lz>4OfIvdYCyNHeQ2?9_U!h6h@KJvXf|o?2X@EQ%`c?5 zU6fN>N@=_6s35N{z`=0N8v}L(xu3kRg*scD>jB9gVr(iR5i%Rh6oOWBj5=HxC2`Rm zSCsnVlmG5K>vMB1z#aFEmZ0}MdRk|k;QmR7=ek4^^}|kLT<Gi-we#>GV0}nv>C`wVZep`f&NFLx`rndTfT*HQ|sK;du~h zz`M5}VpHbBQ&^phris}Ai69JW^?p!ah;_^QX~y3#&?eNik}EWEecg8@FA8Lx%AH!^ z#79P?ifow9zczHEM7+{Q@BOCNXVfu_03Xs*1`w!k{GsYA`|X2K5@+*}-ObHe^U+Kb zk_~n;;7LU;NRTL%+(IOTyJ(Hc`ClXVvnHJ&q2Hq0m()Lg#>YeJj{q-MVv$%`h&hsV z%=JS=Atw0ZE%t2?tTNtOHjcF7WXm<+9&*e8YF=vjqIsq=^?V-bc8wDT=qN@M(zwJe zl1ke8FWQOc-$_y2nt?7SCn8I1XGt91MFGhas6^m4DoOVGk-z1*(~=Cg{fvf5RFt2D zh)0@sm6zwXL}q8N1YDin$oKi;KY( z=||jk7fjf9sD72dgb0A0{bfZ+YB!9J18F|Eu$}$uF95Q;~aZ~|f zxWX&2y*Cy%qH6&K7>Ko-0$xnU++k}rKUK+-ql*HZraQ3Tzh{a-g={%rQKFHWijlQu z-KtXhY^E68yJl6%gh2cTvL@Ig`B5s;8I$<&4{B?2H?|p~sMGruAbV(y_*9IraCsU1 zZ(+FZHB)Bv!>hbZUooT~pCxpdgiYrEoF-r%`1z^s@m!d0Jo6zgHA`BlrKB z)*y3}4mMz73ysIAHCNnM4MKmCw>kvmW9&Qr3nLH@q)%Uqg}n#NFepf5-Q)UGt0-vn zAbCg7lf;!AHg6~W|7~%H0F&hIynfWDKt!J3NQi1?LOa{#EM544q;DWp7D33y@P3gI z2t*yzY~3RA3bO&oia_&_wnJ1@??UMHBZiY_h@JuvGL3ZF>sI@Q`2y$OsYHn6sYP(N zdW~CVd*gqvp%Dfrz`pHOFB>L5*(2d1F_$a z5SaBTGh9j_%>h?~exZOz7xn`M0vySZRx^kNAsFL4{=Xv|QZiUk8t;blH#R*3elvGu z&2N-hAmZOz7!06!D&TCEO0jxwhp1r`hJEk<-#%GH7@54zpdd?hoO_oW13nobF1C0O zfA-a$P#|Vvt$I1&C=Qe+G%X>zF=g!@djT|zCmoTUt-rusJe*eHikat(}qq#HvFGd^dyspByd$X)YrWy_VE!)RaBs>=G4= zVBO*k@D4GsCI(fV{&Zgr#m|-;bpp($Pd$K%V14@~@bR$eu>KScC^hRjY&Z)@Xa&94 zEh)Omq%JW6eTHHbN)s0BY=cQe0+HNI!*WZ6fS?O@SjeL?9qLh>$1(thEKMrHh_746 znLjk+a4T^)dDRK@9S3%nNO3{T{EbXZst!2i*oF1$z=ayci00M9IX9}{aGSx8Sp#K9~*u2jG diff --git a/dart/anime/multisrc/zorotheme/src/kaido/kaido.dart b/dart/anime/multisrc/zorotheme/src/kaido/kaido.dart deleted file mode 100644 index 7270c8cb..00000000 --- a/dart/anime/multisrc/zorotheme/src/kaido/kaido.dart +++ /dev/null @@ -1,13 +0,0 @@ -import '../../../../../../model/source.dart'; - -Source get kaidoSource => _kaidoSource; - -Source _kaidoSource = Source( - name: "Kaido.to", - baseUrl: "https://kaido.to", - lang: "en", - isManga: false, - typeSource: "zorotheme", - iconUrl: - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/multisrc/zorotheme/src/kaido/icon.png", -); diff --git a/dart/anime/multisrc/zorotheme/zorotheme.dart b/dart/anime/multisrc/zorotheme/zorotheme.dart deleted file mode 100644 index adbbb936..00000000 --- a/dart/anime/multisrc/zorotheme/zorotheme.dart +++ /dev/null @@ -1,633 +0,0 @@ -import 'package:mangayomi/bridge_lib.dart'; -import 'dart:convert'; - -class ZoroTheme extends MProvider { - ZoroTheme({required this.source}); - - MSource source; - - final Client client = Client(source); - - @override - Future getPopular(int page) async { - final res = (await client - .get(Uri.parse("${source.baseUrl}/most-popular?page=$page"))) - .body; - - return animeElementM(res); - } - - @override - Future getLatestUpdates(int page) async { - final res = (await client - .get(Uri.parse("${source.baseUrl}/recently-updated?page=$page"))) - .body; - - return animeElementM(res); - } - - @override - Future search(String query, int page, FilterList filterList) async { - final filters = filterList.filters; - String url = "${source.baseUrl}/"; - - if (query.isEmpty) { - url += "filter?"; - } else { - url += "search?keyword=$query"; - } - - for (var filter in filters) { - if (filter.type == "TypeFilter") { - final type = filter.values[filter.state].value; - if (type.isNotEmpty) { - url += "${ll(url)}type=$type"; - } - } else if (filter.type == "StatusFilter") { - final status = filter.values[filter.state].value; - if (status.isNotEmpty) { - url += "${ll(url)}status=$status"; - } - } else if (filter.type == "RatedFilter") { - final rated = filter.values[filter.state].value; - if (rated.isNotEmpty) { - url += "${ll(url)}rated=$rated"; - } - } else if (filter.type == "ScoreFilter") { - final score = filter.values[filter.state].value; - if (score.isNotEmpty) { - url += "${ll(url)}score=$score"; - } - } else if (filter.type == "SeasonFilter") { - final season = filter.values[filter.state].value; - if (season.isNotEmpty) { - url += "${ll(url)}season=$season"; - } - } else if (filter.type == "LanguageFilter") { - final language = filter.values[filter.state].value; - if (language.isNotEmpty) { - url += "${ll(url)}language=$language"; - } - } else if (filter.type == "SortFilter") { - final sort = filter.values[filter.state].value; - if (sort.isNotEmpty) { - url += "${ll(url)}sort=$sort"; - } - } else if (filter.type == "StartYearFilter") { - final sy = filter.values[filter.state].value; - if (sy.isNotEmpty) { - url += "${ll(url)}sy=$sy"; - } - } else if (filter.type == "StartMonthFilter") { - final sm = filter.values[filter.state].value; - if (sm.isNotEmpty) { - url += "${ll(url)}sm=$sm"; - } - } else if (filter.type == "StartDayFilter") { - final sd = filter.values[filter.state].value; - if (sd.isNotEmpty) { - url += "${ll(url)}sd=$sd"; - } - } else if (filter.type == "EndYearFilter") { - final ey = filter.values[filter.state].value; - if (ey.isNotEmpty) { - url += "${ll(url)}sy=$ey"; - } - } else if (filter.type == "EndMonthFilter") { - final em = filter.values[filter.state].value; - if (em.isNotEmpty) { - url += "${ll(url)}sm=$em"; - } - } else if (filter.type == "EndDayFilter") { - final ed = filter.values[filter.state].value; - if (ed.isNotEmpty) { - url += "${ll(url)}sd=$ed"; - } - } else if (filter.type == "GenreFilter") { - final genre = (filter.state as List).where((e) => e.state).toList(); - if (genre.isNotEmpty) { - url += "${ll(url)}genre="; - for (var st in genre) { - url += "${st.value},"; - } - } - } - } - url += "${ll(url)}page=$page"; - final res = (await client.get(Uri.parse(url))).body; - - return animeElementM(res); - } - - @override - Future getDetail(String url) async { - final statusList = [ - {"Currently Airing": 0, "Finished Airing": 1} - ]; - final res = (await client.get(Uri.parse("${source.baseUrl}$url"))).body; - MManga anime = MManga(); - final status = xpath(res, - '//*[@class="anisc-info"]/div[contains(text(),"Status:")]/span[2]/text()') - .first; - - anime.status = parseStatus(status, statusList); - anime.author = xpath(res, - '//*[@class="anisc-info"]/div[contains(text(),"Studios:")]/span/text()') - .first - .replaceAll("Studios:", ""); - anime.description = xpath(res, - '//*[@class="anisc-info"]/div[contains(text(),"Overview:")]/text()') - .first - .replaceAll("Overview:", ""); - final genre = xpath(res, - '//*[@class="anisc-info"]/div[contains(text(),"Genres:")]/a/text()'); - - anime.genre = genre; - final id = substringAfterLast(url, '-'); - - final urlEp = - "${source.baseUrl}/ajax${ajaxRoute('${source.baseUrl}')}/episode/list/$id"; - - final resEp = - (await client.get(Uri.parse(urlEp), headers: {"referer": url})).body; - - final html = json.decode(resEp)["html"]; - final epElements = parseHtml(html).select("a.ep-item"); - - List? episodesList = []; - - for (var epElement in epElements) { - final number = epElement.attr("data-number"); - final title = epElement.attr("title"); - - MChapter episode = MChapter(); - episode.name = "Episode $number: $title"; - episode.url = epElement.getHref; - episodesList.add(episode); - } - - anime.chapters = episodesList.reversed.toList(); - return anime; - } - - @override - Future> getVideoList(String url) async { - final id = substringAfterLast(url, '?ep='); - - final res = (await client.get( - Uri.parse( - "${source.baseUrl}/ajax${ajaxRoute('${source.baseUrl}')}/episode/servers?episodeId=$id"), - headers: {"referer": "${source.baseUrl}/$url"})) - .body; - final html = json.decode(res)["html"]; - - final serverElements = parseHtml(html).select("div.server-item"); - - List videos = []; - final hosterSelection = preferenceHosterSelection(source.id); - final typeSelection = preferenceTypeSelection(source.id); - for (var serverElement in serverElements) { - final name = serverElement.text; - final id = serverElement.attr("data-id"); - final subDub = serverElement.attr("data-type"); - - final resE = (await client.get( - Uri.parse( - "${source.baseUrl}/ajax${ajaxRoute('${source.baseUrl}')}/episode/sources?id=$id"), - headers: {"referer": "${source.baseUrl}/$url"})) - .body; - String epUrl = substringBefore(substringAfter(resE, "\"link\":\""), "\""); - List a = []; - if (hosterSelection.contains(name) && typeSelection.contains(subDub)) { - if (name.contains("Vidstreaming")) { - a = await rapidCloudExtractor(epUrl, "Vidstreaming - $subDub"); - } else if (name.contains("Vidcloud")) { - a = await rapidCloudExtractor(epUrl, "Vidcloud - $subDub"); - } else if (name.contains("StreamTape")) { - a = await streamTapeExtractor(epUrl, "StreamTape - $subDub"); - } else if (["HD-1", "HD-2"].any((element) => name.contains(element))) { - a = await rapidCloudExtractor(epUrl, "$name - $subDub"); - } - - videos.addAll(a); - } - } - - return sortVideos(videos, source.id); - } - - Future> rapidCloudExtractor(String url, String name) async { - final serverUrl = ['https://megacloud.tv', 'https://rapid-cloud.co']; - - final serverType = url.startsWith('https://megacloud.tv') ? 0 : 1; - final sourceUrl = [ - '/embed-2/ajax/e-1/getSources?id=', - '/ajax/embed-6-v2/getSources?id=' - ]; - final sourceSpliter = ['/e-1/', '/embed-6-v2/']; - final id = url.split(sourceSpliter[serverType]).last.split('?').first; - final resServer = (await client.get( - Uri.parse('${serverUrl[serverType]}${sourceUrl[serverType]}$id'), - headers: {"X-Requested-With": "XMLHttpRequest"})) - .body; - final encrypted = getMapValue(resServer, "encrypted"); - String videoResJson = ""; - List videos = []; - if (encrypted == "true") { - final ciphered = getMapValue(resServer, "sources"); - List> indexPairs = await generateIndexPairs(serverType); - var password = ''; - String ciphertext = ciphered; - int index = 0; - for (List item in json.decode(json.encode(indexPairs))) { - int start = item.first + index; - int end = start + item.last; - String passSubstr = ciphered.substring(start, end); - password += passSubstr; - ciphertext = ciphertext.replaceFirst(passSubstr, ""); - index += item.last; - } - videoResJson = decryptAESCryptoJS(ciphertext, password); - } else { - videoResJson = resServer; - } - - String masterUrl = - ((json.decode(videoResJson) as List>) - .first)['file']; - String type = ((json.decode(videoResJson) as List>) - .first)['type']; - - final tracks = (json.decode(resServer)['tracks'] as List) - .where((e) => e['kind'] == 'captions' ? true : false) - .toList(); - List subtitles = []; - - for (var sub in tracks) { - try { - MTrack subtitle = MTrack(); - subtitle - ..label = sub["label"] - ..file = sub["file"]; - subtitles.add(subtitle); - } catch (_) {} - } - - if (type == "hls") { - final masterPlaylistRes = (await client.get(Uri.parse(masterUrl))).body; - - for (var it in substringAfter(masterPlaylistRes, "#EXT-X-STREAM-INF:") - .split("#EXT-X-STREAM-INF:")) { - final quality = - "${substringBefore(substringBefore(substringAfter(substringAfter(it, "RESOLUTION="), "x"), ","), "\n")}p"; - - String videoUrl = substringBefore(substringAfter(it, "\n"), "\n"); - - if (!videoUrl.startsWith("http")) { - videoUrl = - "${masterUrl.split("/").sublist(0, masterUrl.split("/").length - 1).join("/")}/$videoUrl"; - } - - MVideo video = MVideo(); - video - ..url = videoUrl - ..originalUrl = videoUrl - ..quality = "$name - $quality" - ..subtitles = subtitles; - videos.add(video); - } - } else { - MVideo video = MVideo(); - video - ..url = masterUrl - ..originalUrl = masterUrl - ..quality = "$name - Default" - ..subtitles = subtitles; - videos.add(video); - } - return videos; - } - - Future>> generateIndexPairs(int serverType) async { - final jsPlayerUrl = [ - "https://megacloud.tv/js/player/a/prod/e1-player.min.js", - "https://rapid-cloud.co/js/player/prod/e6-player-v2.min.js" - ]; - final scriptText = - (await client.get(Uri.parse(jsPlayerUrl[serverType]))).body; - - final switchCode = scriptText.substring( - scriptText.lastIndexOf('switch'), scriptText.indexOf('=partKey')); - - List indexes = []; - for (var variableMatch - in RegExp(r'=(\w+)').allMatches(switchCode).toList()) { - final regex = RegExp( - ',${(variableMatch as RegExpMatch).group(1)}=((?:0x)?([0-9a-fA-F]+))'); - Match? match = regex.firstMatch(scriptText); - - if (match != null) { - String value = match.group(1); - if (value.contains("0x")) { - indexes.add(int.parse(substringAfter(value, "0x"), radix: 16)); - } else { - indexes.add(int.parse(value)); - } - } - } - - return chunked(indexes, 2); - } - - List> chunked(List list, int size) { - List> chunks = []; - for (int i = 0; i < list.length; i += size) { - int end = list.length; - if (i + size < list.length) { - end = i + size; - } - chunks.add(list.sublist(i, end)); - } - return chunks; - } - - MPages animeElementM(String res) { - List animeList = []; - - final urls = xpath( - res, '//*[@class^="flw-item"]/div[@class="film-detail"]/h3/a/@href'); - - final names = xpath(res, - '//*[@class^="flw-item"]/div[@class="film-detail"]/h3/a/@data-jname'); - - final images = xpath( - res, '//*[@class^="flw-item"]/div[@class="film-poster"]/img/@data-src'); - for (var i = 0; i < names.length; i++) { - MManga anime = MManga(); - anime.name = names[i]; - anime.imageUrl = images[i]; - anime.link = urls[i]; - animeList.add(anime); - } - final nextPage = - xpath(res, '//li[@class="page-item"]/a[@title="Next"]/@href', ""); - return MPages(animeList, !nextPage.isEmpty); - } - - String ajaxRoute(String baseUrl) { - if (baseUrl == "https://kaido.to") { - return ""; - } - return "/v2"; - } - - List yearList = [ - for (var i = 1917; i < 2024; i++) - SelectFilterOption(i.toString(), i.toString()), - SelectFilterOption("All", "") - ]; - - @override - List getFilterList() { - return [ - SelectFilter("TypeFilter", "Type", 0, [ - SelectFilterOption("All", ""), - SelectFilterOption("Movie", "1"), - SelectFilterOption("TV", "2"), - SelectFilterOption("OVA", "3"), - SelectFilterOption("ONA", "4"), - SelectFilterOption("Special", "5"), - SelectFilterOption("Music", "6") - ]), - SelectFilter("StatusFilter", "Status", 0, [ - SelectFilterOption("All", ""), - SelectFilterOption("Finished Airing", "1"), - SelectFilterOption("Currently Airing", "2"), - SelectFilterOption("Not yet aired", "3") - ]), - SelectFilter("RatedFilter", "Rated", 0, [ - SelectFilterOption("All", ""), - SelectFilterOption("G", "1"), - SelectFilterOption("PG", "2"), - SelectFilterOption("PG-13", "3"), - SelectFilterOption("R", "4"), - SelectFilterOption("R+", "5"), - SelectFilterOption("Rx", "6") - ]), - SelectFilter("ScoreFilter", "Score", 0, [ - SelectFilterOption("All", ""), - SelectFilterOption("(1) Appalling", "1"), - SelectFilterOption("(2) Horrible", "2"), - SelectFilterOption("(3) Very Bad", "3"), - SelectFilterOption("(4) Bad", "4"), - SelectFilterOption("(5) Average", "5"), - SelectFilterOption("(6) Fine", "6"), - SelectFilterOption("(7) Good", "7"), - SelectFilterOption("(8) Very Good", "8"), - SelectFilterOption("(9) Great", "9"), - SelectFilterOption("(10) Masterpiece", "10") - ]), - SelectFilter("SeasonFilter", "Season", 0, [ - SelectFilterOption("All", ""), - SelectFilterOption("Spring", "1"), - SelectFilterOption("Summer", "2"), - SelectFilterOption("Fall", "3"), - SelectFilterOption("Winter", "4") - ]), - SelectFilter("LanguageFilter", "Language", 0, [ - SelectFilterOption("All", ""), - SelectFilterOption("SUB", "1"), - SelectFilterOption("DUB", "2"), - SelectFilterOption("SUB & DUB", "3") - ]), - SelectFilter("SortFilter", "Sort by", 0, [ - SelectFilterOption("All", ""), - SelectFilterOption("Default", "default"), - SelectFilterOption("Recently Added", "recently_added"), - SelectFilterOption("Recently Updated", "recently_updated"), - SelectFilterOption("Score", "score"), - SelectFilterOption("Name A-Z", "name_az"), - SelectFilterOption("Released Date", "released_date"), - SelectFilterOption("Most Watched", "most_watched") - ]), - SelectFilter( - "StartYearFilter", "Start year", 0, yearList.reversed.toList()), - SelectFilter("StartMonthFilter", "Start month", 0, [ - SelectFilterOption("All", ""), - for (var i = 1; i < 13; i++) - SelectFilterOption(i.toString(), i.toString()) - ]), - SelectFilter("StartDayFilter", "Start day", 0, [ - SelectFilterOption("All", ""), - for (var i = 1; i < 32; i++) - SelectFilterOption(i.toString(), i.toString()), - ]), - SelectFilter("EndYearFilter", "End year", 0, yearList.reversed.toList()), - SelectFilter("EndmonthFilter", "End month", 0, [ - SelectFilterOption("All", ""), - for (var i = 1; i < 32; i++) - SelectFilterOption(i.toString(), i.toString()) - ]), - SelectFilter("EndDayFilter", "End day", 0, [ - SelectFilterOption("All", ""), - for (var i = 1; i < 32; i++) - SelectFilterOption(i.toString(), i.toString()) - ]), - GroupFilter("GenreFilter", "Genre", [ - CheckBoxFilter("Action", "1"), - CheckBoxFilter("Adventure", "2"), - CheckBoxFilter("Cars", "3"), - CheckBoxFilter("Comedy", "4"), - CheckBoxFilter("Dementia", "5"), - CheckBoxFilter("Demons", "6"), - CheckBoxFilter("Drama", "8"), - CheckBoxFilter("Ecchi", "9"), - CheckBoxFilter("Fantasy", "10"), - CheckBoxFilter("Game", "11"), - CheckBoxFilter("Harem", "35"), - CheckBoxFilter("Historical", "13"), - CheckBoxFilter("Horror", "14"), - CheckBoxFilter("Isekai", "44"), - CheckBoxFilter("Josei", "43"), - CheckBoxFilter("Kids", "15"), - CheckBoxFilter("Magic", "16"), - CheckBoxFilter("Martial Arts", "17"), - CheckBoxFilter("Mecha", "18"), - CheckBoxFilter("Military", "38"), - CheckBoxFilter("Music", "19"), - CheckBoxFilter("Mystery", "7"), - CheckBoxFilter("Parody", "20"), - CheckBoxFilter("Police", "39"), - CheckBoxFilter("Psychological", "40"), - CheckBoxFilter("Romance", "22"), - CheckBoxFilter("Samurai", "21"), - CheckBoxFilter("School", "23"), - CheckBoxFilter("Sci-Fi", "24"), - CheckBoxFilter("Seinen", "42"), - CheckBoxFilter("Shoujo", "25"), - CheckBoxFilter("Shoujo Ai", "26"), - CheckBoxFilter("Shounen", "27"), - CheckBoxFilter("Shounen Ai", "28"), - CheckBoxFilter("Slice of Life", "36"), - CheckBoxFilter("Space", "29"), - CheckBoxFilter("Sports", "30"), - CheckBoxFilter("Super Power", "31"), - CheckBoxFilter("Supernatural", "37"), - CheckBoxFilter("Thriller", "41"), - CheckBoxFilter("Vampire", "32"), - CheckBoxFilter("Yaoi", "33"), - CheckBoxFilter("Yuri", "34") - ]), - ]; - } - - @override - List getSourcePreferences() { - return [ - ListPreference( - key: "preferred_quality", - title: "Preferred Quality", - summary: "", - valueIndex: 1, - entries: ["1080p", "720p", "480p", "360p"], - entryValues: ["1080", "720", "480", "360"]), - if (source.name == "HiAnime") - ListPreference( - key: "preferred_server1", - title: "Preferred server", - summary: "", - valueIndex: 0, - entries: ["HD-1", "HD-2", "StreamTape"], - entryValues: ["HD-1", "HD-2", "StreamTape"]), - if (source.name != "HiAnime") - ListPreference( - key: "preferred_server1", - title: "Preferred server", - summary: "", - valueIndex: 0, - entries: ["Vidstreaming", "VidCloud", "StreamTape"], - entryValues: ["Vidstreaming", "VidCloud", "StreamTape"]), - ListPreference( - key: "preferred_type1", - title: "Preferred Type", - summary: "", - valueIndex: 0, - entries: ["Sub", "Dub"], - entryValues: ["sub", "dub"]), - if (source.name != "HiAnime") - MultiSelectListPreference( - key: "hoster_selection1", - title: "Enable/Disable Hosts", - summary: "", - entries: ["Vidstreaming", "VidCloud", "StreamTape"], - entryValues: ["Vidstreaming", "VidCloud", "StreamTape"], - values: ["Vidstreaming", "VidCloud", "StreamTape"]), - if (source.name == "HiAnime") - MultiSelectListPreference( - key: "hoster_selection1", - title: "Enable/Disable Hosts", - summary: "", - entries: ["HD-1", "HD-2", "StreamTape"], - entryValues: ["HD-1", "HD-2", "StreamTape"], - values: ["HD-1", "HD-2", "StreamTape"]), - MultiSelectListPreference( - key: "type_selection", - title: "Enable/Disable Types", - summary: "", - entries: ["Sub", "Dub"], - entryValues: ["sub", "dub"], - values: ["sub", "dub"]), - ]; - } - - List sortVideos(List videos, int sourceId) { - String quality = getPreferenceValue(sourceId, "preferred_quality"); - String server = getPreferenceValue(sourceId, "preferred_server1"); - String type = getPreferenceValue(sourceId, "preferred_type1"); - videos.sort((MVideo a, MVideo b) { - int qualityMatchA = 0; - - if (a.quality.contains(quality) && - a.quality.toLowerCase().contains(type.toLowerCase()) && - a.quality.toLowerCase().contains(server.toLowerCase())) { - qualityMatchA = 1; - } - int qualityMatchB = 0; - if (b.quality.contains(quality) && - b.quality.toLowerCase().contains(type.toLowerCase()) && - b.quality.toLowerCase().contains(server.toLowerCase())) { - qualityMatchB = 1; - } - if (qualityMatchA != qualityMatchB) { - return qualityMatchB - qualityMatchA; - } - - final regex = RegExp(r'(\d+)p'); - final matchA = regex.firstMatch(a.quality); - final matchB = regex.firstMatch(b.quality); - final int qualityNumA = int.tryParse(matchA?.group(1) ?? '0') ?? 0; - final int qualityNumB = int.tryParse(matchB?.group(1) ?? '0') ?? 0; - return qualityNumB - qualityNumA; - }); - return videos; - } - - List preferenceHosterSelection(int sourceId) { - return getPreferenceValue(sourceId, "hoster_selection1"); - } - - List preferenceTypeSelection(int sourceId) { - return getPreferenceValue(sourceId, "type_selection"); - } - - String ll(String url) { - if (url.contains("?")) { - return "&"; - } - return "?"; - } -} - -ZoroTheme main(MSource source) { - return ZoroTheme(source: source); -} diff --git a/dart/anime/src/all/animeworldindia/animeworldindia.dart b/dart/anime/src/all/animeworldindia/animeworldindia.dart deleted file mode 100644 index 078cd210..00000000 --- a/dart/anime/src/all/animeworldindia/animeworldindia.dart +++ /dev/null @@ -1,395 +0,0 @@ -import 'package:mangayomi/bridge_lib.dart'; -import 'dart:convert'; - -class AnimeWorldIndia extends MProvider { - AnimeWorldIndia({required this.source}); - - MSource source; - - final Client client = Client(source); - - @override - Future getPopular(int page) async { - final res = (await client.get(Uri.parse( - "${source.baseUrl}/advanced-search/page/$page/?s_lang=${source.lang}&s_orderby=viewed"))) - .body; - - return parseAnimeList(res); - } - - @override - Future getLatestUpdates(int page) async { - final res = (await client.get(Uri.parse( - "${source.baseUrl}/advanced-search/page/$page/?s_lang=${source.lang}&s_orderby=update"))) - .body; - - return parseAnimeList(res); - } - - @override - Future search(String query, int page, FilterList filterList) async { - final filters = filterList.filters; - String url = - "${source.baseUrl}/advanced-search/page/$page/?s_keyword=$query&s_lang=${source.lang}"; - for (var filter in filters) { - if (filter.type == "TypeFilter") { - final type = filter.values[filter.state].value; - url += "${ll(url)}s_type=$type"; - } else if (filter.type == "StatusFilter") { - final status = filter.values[filter.state].value; - url += "${ll(url)}s_status=$status"; - } else if (filter.type == "StyleFilter") { - final style = filter.values[filter.state].value; - url += "${ll(url)}s_sub_type=$style"; - } else if (filter.type == "YearFilter") { - final year = filter.values[filter.state].value; - url += "${ll(url)}s_year=$year"; - } else if (filter.type == "SortFilter") { - final sort = filter.values[filter.state].value; - url += "${ll(url)}s_orderby=$sort"; - } else if (filter.type == "GenresFilter") { - final genre = (filter.state as List).where((e) => e.state).toList(); - url += "${ll(url)}s_genre="; - if (genre.isNotEmpty) { - for (var st in genre) { - url += "${st.value}".toLowerCase().replaceAll(" ", "-"); - if (genre.length > 1) { - url += "%2C"; - } - } - if (genre.length > 1) { - url = substringBeforeLast(url, '%2C'); - } - } - } - } - - final res = (await client.get(Uri.parse(url))).body; - return parseAnimeList(res); - } - - @override - Future getDetail(String url) async { - final res = (await client.get(Uri.parse(url))).body; - MManga anime = MManga(); - final document = parseHtml(res); - final isMovie = - document.xpath('//li/a[contains(text(),"Movie")]/text()').isNotEmpty; - if (isMovie) { - anime.status = MStatus.completed; - } else { - final eps = xpath( - res, '//ul/li/a[contains(@href,"${source.baseUrl}/watch")]/text()'); - if (eps.isNotEmpty) { - final epParts = eps.first - .substring(3) - .replaceAll(" ", "") - .replaceAll("\n", "") - .split('/'); - if (epParts.length == 2) { - if (epParts[0].compareTo(epParts[1]) == 0) { - anime.status = MStatus.completed; - } else { - anime.status = MStatus.ongoing; - } - } - } - } - anime.description = document.selectFirst("div[data-synopsis]")?.text ?? ""; - anime.author = document - .xpath('//li[contains(text(),"Producers:")]/span/a/text()') - .join(', '); - anime.genre = document.xpath( - '//span[@class="leading-6"]/a[contains(@class,"border-opacity-30")]/text()'); - final seasonsJson = json.decode(substringBeforeLast( - substringBefore( - substringAfter(res, "var season_list = "), "var season_label ="), - ";")) as List>; - bool isSingleSeason = seasonsJson.length == 1; - List? episodesList = []; - for (var i = 0; i < seasonsJson.length; i++) { - final seasonJson = seasonsJson[i]; - final seasonName = isSingleSeason ? "" : "Season ${i + 1}"; - final episodesJson = - (seasonJson["episodes"]["all"] as List>) - .reversed - .toList(); - for (var j = 0; j < episodesJson.length; j++) { - final episodeJson = episodesJson[j]; - final episodeTitle = episodeJson["metadata"]["title"] ?? ""; - String episodeName = ""; - if (isMovie) { - episodeName = "Movie"; - } else { - if (seasonName.isNotEmpty) { - episodeName = "$seasonName - "; - } - episodeName += "Episode ${j + 1} "; - if (episodeTitle.isNotEmpty) { - episodeName += "- $episodeTitle"; - } - } - MChapter episode = MChapter(); - episode.name = episodeName; - - episode.dateUpload = - "${int.parse(episodeJson["metadata"]["released"] ?? "0") * 1000}"; - episode.url = "/wp-json/kiranime/v1/episode?id=${episodeJson["id"]}"; - episodesList.add(episode); - } - } - - anime.chapters = episodesList.reversed.toList(); - return anime; - } - - @override - Future> getVideoList(String url) async { - final res = (await client.get(Uri.parse("${source.baseUrl}$url"))).body; - var resJson = substringBefore( - substringAfterLast(res, "\"players\":"), ",\"noplayer\":"); - var streams = (json.decode(resJson) as List>) - .where((e) => - (e["type"] == "stream" ? true : false) && - (e["url"] as String).isNotEmpty) - .toList() - .where((e) => language(source.lang).isEmpty || - language(source.lang) == e["language"] - ? true - : false) - .toList(); - List videos = []; - for (var stream in streams) { - String videoUrl = stream["url"]; - final language = stream["language"]; - final video = await mystreamExtractor(videoUrl, language); - videos.addAll(video); - } - - return sortVideos(videos, source.id); - } - - MPages parseAnimeList(String res) { - List animeList = []; - final document = parseHtml(res); - - for (var element in document.select("div.col-span-1")) { - MManga anime = MManga(); - anime.name = - element.selectFirst("div.font-medium.line-clamp-2.mb-3").text; - anime.link = element.selectFirst("a").getHref; - anime.imageUrl = - "${source.baseUrl}${getUrlWithoutDomain(element.selectFirst("img").getSrc)}"; - animeList.add(anime); - } - final hasNextPage = xpath(res, - '//li/span[@class="page-numbers current"]/parent::li//following-sibling::li/a/@href') - .isNotEmpty; - return MPages(animeList, hasNextPage); - } - - String language(String lang) { - final languages = { - "all": "", - "bn": "bengali", - "en": "english", - "hi": "hindi", - "ja": "japanese", - "ml": "malayalam", - "mr": "marathi", - "ta": "tamil", - "te": "telugu" - }; - return languages[lang] ?? ""; - } - - Future> mystreamExtractor(String url, String language) async { - List videos = []; - final res = (await client.get(Uri.parse(url))).body; - final streamCode = substringBefore( - substringAfter(substringAfter(res, "sniff("), ", \""), '"'); - - final streamUrl = - "${substringBefore(url, "/watch")}/m3u8/$streamCode/master.txt?s=1&cache=1"; - final masterPlaylistRes = (await client.get(Uri.parse(streamUrl))).body; - - List audios = []; - for (var it in substringAfter(masterPlaylistRes, "#EXT-X-MEDIA:TYPE=AUDIO") - .split("#EXT-X-MEDIA:TYPE=AUDIO")) { - final line = - substringBefore(substringAfter(it, "#EXT-X-MEDIA:TYPE=AUDIO"), "\n"); - final audioUrl = substringBefore(substringAfter(line, "URI=\""), "\""); - MTrack audio = MTrack(); - audio - ..label = substringBefore(substringAfter(line, "NAME=\""), "\"") - ..file = audioUrl; - audios.add(audio); - } - - for (var it in substringAfter(masterPlaylistRes, "#EXT-X-STREAM-INF:") - .split("#EXT-X-STREAM-INF:")) { - final quality = - "${substringBefore(substringBefore(substringAfter(substringAfter(it, "RESOLUTION="), "x"), ","), "\n")}p"; - - String videoUrl = substringBefore(substringAfter(it, "\n"), "\n"); - - MVideo video = MVideo(); - video - ..url = videoUrl - ..originalUrl = videoUrl - ..quality = "[$language] MyStream - $quality" - ..audios = audios; - videos.add(video); - } - return videos; - } - - @override - List getFilterList() { - return [ - SelectFilter("TypeFilter", "Type", 0, [ - SelectFilterOption("Any", "all"), - SelectFilterOption("TV", "tv"), - SelectFilterOption("Movie", "movies"), - ]), - SelectFilter("StatusFilter", "Status", 0, [ - SelectFilterOption("Any", "all"), - SelectFilterOption("Currently Airing", "airing"), - SelectFilterOption("Finished Airing", "completed"), - ]), - SelectFilter("StyleFilter", "Style", 0, [ - SelectFilterOption("Any", "all"), - SelectFilterOption("Anime", "anime"), - SelectFilterOption("Cartoon", "cartoon"), - ]), - SelectFilter("YearFilter", "Year", 0, [ - SelectFilterOption("Any", "all"), - SelectFilterOption("2024", "2024"), - SelectFilterOption("2023", "2023"), - SelectFilterOption("2022", "2022"), - SelectFilterOption("2021", "2021"), - SelectFilterOption("2020", "2020"), - SelectFilterOption("2019", "2019"), - SelectFilterOption("2018", "2018"), - SelectFilterOption("2017", "2017"), - SelectFilterOption("2016", "2016"), - SelectFilterOption("2015", "2015"), - SelectFilterOption("2014", "2014"), - SelectFilterOption("2013", "2013"), - SelectFilterOption("2012", "2012"), - SelectFilterOption("2011", "2011"), - SelectFilterOption("2010", "2010"), - SelectFilterOption("2009", "2009"), - SelectFilterOption("2008", "2008"), - SelectFilterOption("2007", "2007"), - SelectFilterOption("2006", "2006"), - SelectFilterOption("2005", "2005"), - SelectFilterOption("2004", "2004"), - SelectFilterOption("2003", "2003"), - SelectFilterOption("2002", "2002"), - SelectFilterOption("2001", "2001"), - SelectFilterOption("2000", "2000"), - SelectFilterOption("1999", "1999"), - SelectFilterOption("1998", "1998"), - SelectFilterOption("1997", "1997"), - SelectFilterOption("1996", "1996"), - SelectFilterOption("1995", "1995"), - SelectFilterOption("1994", "1994"), - SelectFilterOption("1993", "1993"), - SelectFilterOption("1992", "1992"), - SelectFilterOption("1991", "1991"), - SelectFilterOption("1990", "1990") - ]), - SelectFilter("SortFilter", "Sort", 0, [ - SelectFilterOption("Default", "default"), - SelectFilterOption("Ascending", "title_a_z"), - SelectFilterOption("Descending", "title_z_a"), - SelectFilterOption("Updated", "update"), - SelectFilterOption("Published", "date"), - SelectFilterOption("Most Viewed", "viewed"), - SelectFilterOption("Favourite", "favorite"), - ]), - GroupFilter("GenresFilter", "Genres", [ - CheckBoxFilter("Action", "Action"), - CheckBoxFilter("Adult Cast", "Adult Cast"), - CheckBoxFilter("Adventure", "Adventure"), - CheckBoxFilter("Animation", "Animation"), - CheckBoxFilter("Comedy", "Comedy"), - CheckBoxFilter("Detective", "Detective"), - CheckBoxFilter("Drama", "Drama"), - CheckBoxFilter("Ecchi", "Ecchi"), - CheckBoxFilter("Family", "Family"), - CheckBoxFilter("Fantasy", "Fantasy"), - CheckBoxFilter("Isekai", "Isekai"), - CheckBoxFilter("Kids", "Kids"), - CheckBoxFilter("Martial Arts", "Martial Arts"), - CheckBoxFilter("Mecha", "Mecha"), - CheckBoxFilter("Military", "Military"), - CheckBoxFilter("Mystery", "Mystery"), - CheckBoxFilter("Otaku Culture", "Otaku Culture"), - CheckBoxFilter("Reality", "Reality"), - CheckBoxFilter("Romance", "Romance"), - CheckBoxFilter("School", "School"), - CheckBoxFilter("Sci-Fi", "Sci-Fi"), - CheckBoxFilter("Seinen", "Seinen"), - CheckBoxFilter("Shounen", "Shounen"), - CheckBoxFilter("Slice of Life", "Slice of Life"), - CheckBoxFilter("Sports", "Sports"), - CheckBoxFilter("Super Power", "Super Power"), - CheckBoxFilter("SuperHero", "SuperHero"), - CheckBoxFilter("Supernatural", "Supernatural"), - CheckBoxFilter("TV Movie", "TV Movie"), - ]), - ]; - } - - @override - List getSourcePreferences() { - return [ - ListPreference( - key: "preferred_quality", - title: "Preferred Quality", - summary: "", - valueIndex: 0, - entries: ["1080p", "720p", "480p", "360p", "240p"], - entryValues: ["1080", "720", "480", "360", "240"]), - ]; - } - - List sortVideos(List videos, int sourceId) { - String quality = getPreferenceValue(sourceId, "preferred_quality"); - videos.sort((MVideo a, MVideo b) { - int qualityMatchA = 0; - - if (a.quality.contains(quality)) { - qualityMatchA = 1; - } - int qualityMatchB = 0; - if (b.quality.contains(quality)) { - qualityMatchB = 1; - } - if (qualityMatchA != qualityMatchB) { - return qualityMatchB - qualityMatchA; - } - - final regex = RegExp(r'(\d+)p'); - final matchA = regex.firstMatch(a.quality); - final matchB = regex.firstMatch(b.quality); - final int qualityNumA = int.tryParse(matchA?.group(1) ?? '0') ?? 0; - final int qualityNumB = int.tryParse(matchB?.group(1) ?? '0') ?? 0; - return qualityNumB - qualityNumA; - }); - return videos; - } - - String ll(String url) { - if (url.contains("?")) { - return "&"; - } - return "?"; - } -} - -AnimeWorldIndia main(MSource source) { - return AnimeWorldIndia(source: source); -} diff --git a/dart/anime/src/all/animeworldindia/icon.png b/dart/anime/src/all/animeworldindia/icon.png deleted file mode 100644 index 0426e29dfb699517e03b740f2d6fce7ee3ac2d91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7536 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 diff --git a/dart/anime/src/all/animeworldindia/sources.dart b/dart/anime/src/all/animeworldindia/sources.dart deleted file mode 100644 index b7c0cddb..00000000 --- a/dart/anime/src/all/animeworldindia/sources.dart +++ /dev/null @@ -1,33 +0,0 @@ -import '../../../../../model/source.dart'; - -const _animeworldindiaVersion = "0.0.25"; -const _animeworldindiaSourceCodeUrl = - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/all/animeworldindia/animeworldindia.dart"; - -String _iconUrl = - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/all/animeworldindia/icon.png"; - -List _languages = [ - "all", - "en", - "bn", - "hi", - "ja", - "ml", - "mr", - "ta", - "te", -]; - -List get animeworldindiaSourcesList => _animeworldindiaSourcesList; -List _animeworldindiaSourcesList = _languages - .map((e) => Source( - name: 'AnimeWorld India', - baseUrl: "https://anime-world.in", - lang: e, - typeSource: "multiple", - iconUrl: _iconUrl, - version: _animeworldindiaVersion, - isManga: false, - sourceCodeUrl: _animeworldindiaSourceCodeUrl)) - .toList(); diff --git a/dart/anime/src/all/nyaa/icon.png b/dart/anime/src/all/nyaa/icon.png deleted file mode 100644 index b57dba5f8a55647122a8b6f046ccc72e8177105a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3187 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 getPopular(int page) async { - final res = (await client.get(Uri.parse( - "${source.baseUrl}/?f=0&c=${getPreferenceValue(source.id, "preferred_categorie_page")}&q=&s=downloads&o=desc&p=$page"))) - .body; - return parseAnimeList(res); - } - - @override - Future getLatestUpdates(int page) async { - final res = (await client.get(Uri.parse( - "${source.baseUrl}/?f=0&c=${getPreferenceValue(source.id, "preferred_categorie_page")}&q=$page"))) - .body; - return parseAnimeList(res); - } - - @override - Future search(String query, int page, FilterList filterList) async { - final filters = filterList.filters; - String url = ""; - url = - "${source.baseUrl}/?f=0&c=${getPreferenceValue(source.id, "preferred_categorie_page")}&q=${query.replaceAll(" ", "+")}&p=$page"; - for (var filter in filters) { - if (filter.type == "SortFilter") { - url += "${ll(url)}s=${filter.values[filter.state.index].value}"; - final asc = filter.state.ascending ? "&o=asc" : "&o=desc"; - url += "${ll(url)}$asc"; - } - } - final res = (await client.get(Uri.parse(url))).body; - return parseAnimeList(res); - } - - @override - Future getDetail(String url) async { - MManga anime = MManga(); - final res = (await client.get(Uri.parse(url))).body; - final document = parseHtml(res); - String description = - (document.xpathFirst('//div[@class="panel-body"]/text()') ?? "") - .replaceAll("\n", ""); - description += - "\n\n${(document.xpathFirst('//div[@class="panel panel-default"]/text()') ?? "").trim().replaceAll("\n", "")}"; - anime.description = description; - MChapter ep = MChapter(); - ep.name = "Torrent"; - ep.url = - "${source.baseUrl}/download/${substringAfterLast(url, '/')}.torrent"; - anime.chapters = [ep]; - return anime; - } - - @override - List getFilterList() { - return [ - SortFilter("SortFilter", "Sort by", SortState(0, true), [ - SelectFilterOption("None", ""), - SelectFilterOption("Size", "size"), - SelectFilterOption("Date", "id"), - SelectFilterOption("Seeders", "seeders"), - SelectFilterOption("Leechers", "leechers"), - SelectFilterOption("Download", "downloads") - ]) - ]; - } - - @override - List getSourcePreferences() { - return [ - ListPreference( - key: "preferred_categorie_page", - title: "Preferred categorie page", - summary: "", - valueIndex: 0, - entries: ["Anime", "Live Action"], - entryValues: ["1_0", "4_0"]), - ]; - } - - MPages parseAnimeList(String res) { - List animeList = []; - final document = parseHtml(res); - - final values = document - .select("body > div > div.table-responsive > table > tbody > tr"); - for (var value in values) { - MManga anime = MManga(); - anime.imageUrl = - "${source.baseUrl}${getUrlWithoutDomain(value.selectFirst("td:nth-child(1) > a > img").getSrc)}"; - MElement firstElement = value - .select("td > a") - .where((MElement e) => - e.outerHtml.contains("/view/") && - !e.outerHtml.contains("#comments")) - .toList() - .first; - anime.link = - "${source.baseUrl}${getUrlWithoutDomain(firstElement.getHref)}"; - anime.name = firstElement.attr("title"); - animeList.add(anime); - } - - final hasNextPage = - xpath(res, '//ul[@class="pagination"]/li[contains(text(),"»")]/a/@href') - .isNotEmpty; - return MPages(animeList, hasNextPage); - } - - String ll(String url) { - if (url.contains("?")) { - return "&"; - } - return "?"; - } -} - -Nyaa main(MSource source) { - return Nyaa(source: source); -} diff --git a/dart/anime/src/all/nyaa/source.dart b/dart/anime/src/all/nyaa/source.dart deleted file mode 100644 index ea04acd6..00000000 --- a/dart/anime/src/all/nyaa/source.dart +++ /dev/null @@ -1,19 +0,0 @@ -import '../../../../../model/source.dart'; - -const _nyaaVersion = "0.0.2"; -const _nyaaSourceCodeUrl = - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/all/nyaa/nyaa.dart"; - -String _iconUrl = - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/all/nyaa/icon.png"; - -Source get nyaaSource => _nyaaSource; -Source _nyaaSource = Source( - name: 'Nyaa', - baseUrl: "https://nyaa.si", - lang: "all", - typeSource: "torrent", - iconUrl: _iconUrl, - version: _nyaaVersion, - isManga: false, - sourceCodeUrl: _nyaaSourceCodeUrl); diff --git a/dart/anime/src/ar/okanime/icon.png b/dart/anime/src/ar/okanime/icon.png deleted file mode 100644 index 6057076dc1e1a427fe1da1b1d3c159a3ff0d78e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5358 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 M07*qoM6N<$g8Y getPopular(int page) async { - final res = (await client.get(Uri.parse(source.baseUrl))).body; - List animeList = []; - String path = - '//div[@class="section" and contains(text(),"افضل انميات")]/div[@class="section-content"]/div/div/div[contains(@class,"anime-card")]'; - final urls = xpath(res, '$path/div[@class="anime-title")]/h4/a/@href'); - final names = xpath(res, '$path/div[@class="anime-title")]/h4/a/text()'); - final images = xpath(res, '$path/div[@class="anime-image")]/img/@src'); - - for (var i = 0; i < names.length; i++) { - MManga anime = MManga(); - anime.name = names[i]; - anime.imageUrl = images[i]; - anime.link = urls[i]; - animeList.add(anime); - } - return MPages(animeList, false); - } - - @override - Future getLatestUpdates(int page) async { - final res = (await client - .get(Uri.parse("${source.baseUrl}/espisode-list?page=$page"))) - .body; - List animeList = []; - String path = '//*[contains(@class,"anime-card")]'; - final urls = xpath(res, '$path/div[@class="anime-title")]/h4/a/@href'); - final names = xpath(res, '$path/div[@class="anime-title")]/h4/a/text()'); - final images = xpath(res, '$path/div[@class="episode-image")]/img/@src'); - - for (var i = 0; i < names.length; i++) { - MManga anime = MManga(); - anime.name = names[i]; - anime.imageUrl = images[i]; - anime.link = urls[i]; - animeList.add(anime); - } - final nextPage = - xpath(res, '//li[@class="page-item"]/a[@rel="next"]/@href'); - return MPages(animeList, nextPage.isNotEmpty); - } - - @override - Future search(String query, int page, FilterList filterList) async { - String url = "${source.baseUrl}/search/?s=$query"; - if (page > 1) { - url += "&page=$page"; - } - - final res = (await client.get(Uri.parse(url))).body; - - List animeList = []; - String path = '//*[contains(@class,"anime-card")]'; - final urls = xpath(res, '$path/div[@class="anime-title")]/h4/a/@href'); - final names = xpath(res, '$path/div[@class="anime-title")]/h4/a/text()'); - final images = xpath(res, '$path/div[@class="anime-image")]/img/@src'); - - for (var i = 0; i < names.length; i++) { - MManga anime = MManga(); - anime.name = names[i]; - anime.imageUrl = images[i]; - anime.link = urls[i]; - animeList.add(anime); - } - final nextPage = - xpath(res, '//li[@class="page-item"]/a[@rel="next"]/@href'); - return MPages(animeList, nextPage.isNotEmpty); - } - - @override - Future getDetail(String url) async { - final statusList = [ - {"يعرض الان": 0, "مكتمل": 1} - ]; - final res = (await client.get(Uri.parse(url))).body; - MManga anime = MManga(); - final status = xpath(res, - '//*[@class="full-list-info" and contains(text(),"حالة الأنمي")]/small/a/text()'); - if (status.isNotEmpty) { - anime.status = parseStatus(status.first, statusList); - } - anime.description = xpath(res, '//*[@class="review-content"]/text()').first; - - anime.genre = xpath(res, '//*[@class="review-author-info"]/a/text()'); - final epUrls = xpath(res, - '//*[contains(@class,"anime-card")]/div[@class="anime-title")]/h5/a/@href') - .reversed - .toList(); - final names = xpath(res, - '//*[contains(@class,"anime-card")]/div[@class="anime-title")]/h5/a/text()') - .reversed - .toList(); - - List? episodesList = []; - for (var i = 0; i < epUrls.length; i++) { - MChapter episode = MChapter(); - episode.name = names[i]; - episode.url = epUrls[i]; - episodesList.add(episode); - } - - anime.chapters = episodesList; - return anime; - } - - @override - Future> getVideoList(String url) async { - final res = (await client.get(Uri.parse(url))).body; - final urls = xpath(res, '//*[@id="streamlinks"]/a/@data-src'); - final qualities = xpath(res, '//*[@id="streamlinks"]/a/span/text()'); - final hosterSelection = preferenceHosterSelection(source.id); - List videos = []; - for (var i = 0; i < urls.length; i++) { - final url = urls[i]; - final quality = getQuality(qualities[i]); - List a = []; - - if (url.contains("https://doo") && hosterSelection.contains("Dood")) { - a = await doodExtractor(url, "DoodStream - $quality"); - } else if (url.contains("mp4upload") && - hosterSelection.contains("Mp4upload")) { - a = await mp4UploadExtractor(url, null, "", ""); - } else if (url.contains("ok.ru") && hosterSelection.contains("Okru")) { - a = await okruExtractor(url); - } else if (url.contains("voe.sx") && hosterSelection.contains("Voe")) { - a = await voeExtractor(url, "VoeSX $quality"); - } else if (containsVidBom(url) && hosterSelection.contains("VidBom")) { - a = await vidBomExtractor(url); - } - videos.addAll(a); - } - return sortVideos(videos, source.id); - } - - @override - List getSourcePreferences() { - return [ - ListPreference( - key: "preferred_quality", - title: "Preferred Quality", - summary: "", - valueIndex: 1, - entries: ["1080p", "720p", "480p", "360p"], - entryValues: ["1080", "720", "480", "360"]), - MultiSelectListPreference( - key: "hoster_selection", - title: "Enable/Disable Hosts", - summary: "", - entries: ["Dood", "Voe", "Mp4upload", "VidBom", "Okru"], - entryValues: ["Dood", "Voe", "Mp4upload", "VidBom", "Okru"], - values: ["Dood", "Voe", "Mp4upload", "VidBom", "Okru"]), - ]; - } - - List sortVideos(List videos, int sourceId) { - String quality = getPreferenceValue(sourceId, "preferred_quality"); - - videos.sort((MVideo a, MVideo b) { - int qualityMatchA = 0; - if (a.quality.contains(quality)) { - qualityMatchA = 1; - } - int qualityMatchB = 0; - if (b.quality.contains(quality)) { - qualityMatchB = 1; - } - if (qualityMatchA != qualityMatchB) { - return qualityMatchB - qualityMatchA; - } - - final regex = RegExp(r'(\d+)p'); - final matchA = regex.firstMatch(a.quality); - final matchB = regex.firstMatch(b.quality); - final int qualityNumA = int.tryParse(matchA?.group(1) ?? '0') ?? 0; - final int qualityNumB = int.tryParse(matchB?.group(1) ?? '0') ?? 0; - return qualityNumB - qualityNumA; - }); - - return videos; - } - - List preferenceHosterSelection(int sourceId) { - return getPreferenceValue(sourceId, "hoster_selection"); - } - - String getQuality(String quality) { - quality = quality.replaceAll(" ", ""); - if (quality == "HD") { - return "720p"; - } else if (quality == "FHD") { - return "1080p"; - } else if (quality == "SD") { - return "480p"; - } - return "240p"; - } - - bool containsVidBom(String url) { - url = url; - final list = ["vidbam", "vadbam", "vidbom", "vidbm"]; - for (var n in list) { - if (url.contains(n)) { - return true; - } - } - return false; - } -} - -OkAnime main(MSource source) { - return OkAnime(source: source); -} diff --git a/dart/anime/src/ar/okanime/source.dart b/dart/anime/src/ar/okanime/source.dart deleted file mode 100644 index 64ab435d..00000000 --- a/dart/anime/src/ar/okanime/source.dart +++ /dev/null @@ -1,16 +0,0 @@ -import '../../../../../model/source.dart'; - -Source get okanimeSource => _okanimeSource; -const _okanimeVersion = "0.0.55"; -const _okanimeSourceCodeUrl = - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/ar/okanime/okanime.dart"; -Source _okanimeSource = Source( - name: "Okanime", - baseUrl: "https://www.okanime.xyz", - lang: "ar", - typeSource: "single", - iconUrl: - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/ar/okanime/icon.png", - sourceCodeUrl: _okanimeSourceCodeUrl, - version: _okanimeVersion, - isManga: false); 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/anime/src/de/animetoast/animetoast.dart b/dart/anime/src/de/animetoast/animetoast.dart deleted file mode 100644 index 0be52f54..00000000 --- a/dart/anime/src/de/animetoast/animetoast.dart +++ /dev/null @@ -1,234 +0,0 @@ -import 'package:mangayomi/bridge_lib.dart'; - -class AnimeToast extends MProvider { - AnimeToast({required this.source}); - - MSource source; - - final Client client = Client(source); - - @override - bool get supportsLatest => false; - - @override - String get baseUrl => source.baseUrl; - - @override - Future getPopular(int page) async { - final res = (await client.get(Uri.parse(baseUrl))).body; - final document = parseHtml(res); - final elements = document.select("div.row div.col-md-4 div.video-item"); - List animeList = []; - for (var element in elements) { - MManga anime = MManga(); - anime.name = element.selectFirst("div.item-thumbnail a").attr("title"); - anime.link = getUrlWithoutDomain( - element.selectFirst("div.item-thumbnail a").attr("href")); - anime.imageUrl = - element.selectFirst("div.item-thumbnail a img").attr("src"); - animeList.add(anime); - } - return MPages(animeList, false); - } - - @override - Future search(String query, int page, FilterList filterList) async { - final res = - (await client.get(Uri.parse("$baseUrl/page/$page/?s=$query"))).body; - final document = parseHtml(res); - final elements = document.select("div.item-thumbnail a[href]"); - List animeList = []; - for (var element in elements) { - MManga anime = MManga(); - anime.name = element.attr("title"); - anime.link = getUrlWithoutDomain(element.attr("href")); - anime.imageUrl = element.selectFirst("a img").attr("src"); - animeList.add(anime); - } - return MPages( - animeList, document.selectFirst("li.next a")?.attr("href") != null); - } - - @override - Future getDetail(String url) async { - MManga anime = MManga(); - final res = (await client.get(Uri.parse("$baseUrl$url"))).body; - final document = parseHtml(res); - anime.imageUrl = document.selectFirst(".item-content p img").attr("src"); - anime.genre = - (document.xpathFirst('//p[contains(text(),"Genre:")]/text()') ?? "") - .replaceAll("Genre:", "") - .split(","); - anime.description = document.selectFirst("div.item-content div + p").text; - final categoryTag = document.xpath('//*[@rel="category tag"]/text()'); - if (categoryTag.isNotEmpty) { - if (categoryTag.contains("Airing")) { - anime.status = MStatus.ongoing; - } else { - anime.status = MStatus.completed; - } - } - List? episodesList = []; - if (categoryTag.contains("Serie")) { - List elements = []; - if (document.selectFirst("#multi_link_tab0")?.attr("id") != null) { - elements = document.select("#multi_link_tab0"); - } else { - elements = document.select("#multi_link_tab1"); - } - for (var element in elements) { - final episodeElement = element.selectFirst("div.tab-pane a"); - final epT = episodeElement.text; - if (epT.contains(":") || epT.contains("-")) { - final url = episodeElement.attr("href"); - final document = parseHtml((await client.get(Uri.parse(url))).body); - final nUrl = document.selectFirst("#player-embed a").attr("href"); - final nDoc = parseHtml((await client.get(Uri.parse(nUrl))).body); - final nEpEl = nDoc.select("div.tab-pane a"); - for (var epElement in nEpEl) { - MChapter ep = MChapter(); - ep.name = epElement.text; - ep.url = getUrlWithoutDomain(epElement.attr("href")); - episodesList.add(ep); - } - } else { - final episodeElements = element.select("div.tab-pane a"); - for (var epElement in episodeElements) { - MChapter ep = MChapter(); - ep.name = epElement.text; - ep.url = getUrlWithoutDomain(epElement.attr("href")); - episodesList.add(ep); - } - } - } - } else { - MChapter ep = MChapter(); - ep.name = document.selectFirst("h1.light-title")?.text ?? "Film"; - ep.url = getUrlWithoutDomain( - document.selectFirst("link[rel=canonical]").attr("href")); - episodesList.add(ep); - } - anime.chapters = episodesList.reversed.toList(); - return anime; - } - - List preferenceHosterSelection() { - return getPreferenceValue(source.id, "hoster_selection"); - } - - @override - Future> getVideoList(String url) async { - final res = (await client.get(Uri.parse("$baseUrl$url"))).body; - final document = parseHtml(res); - final fEp = document.selectFirst("div.tab-pane"); - List videos = []; - List ep = []; - int epcu = 100; - - if (fEp.text.contains(":") || fEp.text.contains("-")) { - final tx = document.select("div.tab-pane"); - - for (var e in tx) { - final sUrl = e.selectFirst("a").attr("href"); - final doc = parseHtml((await client.get(Uri.parse(sUrl))).body); - final nUrl = doc.selectFirst("#player-embed a").attr("href"); - final nDoc = parseHtml((await client.get(Uri.parse(nUrl))).body); - epcu = int.tryParse(substringAfter( - document.selectFirst("div.tab-pane a.current-link")?.text ?? "", - "Ep.")) ?? - 100; - ep = nDoc.select("div.tab-pane a"); - } - } else { - epcu = int.tryParse(substringAfter( - document.selectFirst("div.tab-pane a.current-link")?.text ?? "", - "Ep.")) ?? - 100; - ep = document.select("div.tab-pane a"); - } - final hosterSelection = preferenceHosterSelection(); - for (var e in ep) { - if (int.tryParse(substringAfter(e.text, "Ep.")) == epcu) { - final epUrl = e.attr("href"); - final newdoc = parseHtml((await client.get(Uri.parse(epUrl))).body); - final elements = newdoc.select("#player-embed"); - for (var element in elements) { - final link = element.selectFirst("a").getHref ?? ""; - if (link.contains("https://voe.sx") && - hosterSelection.contains("voe")) { - videos.addAll(await voeExtractor(link, "Voe")); - } - } - for (var element in elements) { - List a = []; - final link = element.selectFirst("iframe").getSrc ?? ""; - if ((link.contains("https://dood") || - link.contains("https://ds2play") || - link.contains("https://d0")) && - hosterSelection.contains("dood")) { - a = await doodExtractor(link, "DoodStream"); - } else if (link.contains("filemoon") && - hosterSelection.contains("filemoon")) { - a = await filemoonExtractor(link, "", ""); - } else if (link.contains("mp4upload") && - hosterSelection.contains("mp4upload")) { - a = await mp4UploadExtractor(url, null, "", ""); - } - videos.addAll(a); - } - } - } - return sortVideos(videos); - } - - List sortVideos(List videos) { - String server = getPreferenceValue(source.id, "preferred_hoster"); - - videos.sort((MVideo a, MVideo b) { - int qualityMatchA = 0; - if (a.quality.toLowerCase().contains(server)) { - qualityMatchA = 1; - } - int qualityMatchB = 0; - if (b.quality.toLowerCase().contains(server)) { - qualityMatchB = 1; - } - if (qualityMatchA != qualityMatchB) { - return qualityMatchB - qualityMatchA; - } - - final regex = RegExp(r'(\d+)p'); - final matchA = regex.firstMatch(a.quality); - final matchB = regex.firstMatch(b.quality); - final int qualityNumA = int.tryParse(matchA?.group(1) ?? '0') ?? 0; - final int qualityNumB = int.tryParse(matchB?.group(1) ?? '0') ?? 0; - return qualityNumB - qualityNumA; - }); - - return videos; - } - - @override - List getSourcePreferences() { - return [ - ListPreference( - key: "preferred_hoster", - title: "Standard-Hoster", - summary: "", - valueIndex: 0, - entries: ["Voe", "DoodStream", "Filemoon", "Mp4upload"], - entryValues: ["voe", "doodStream", "filemoon", "mp4upload"]), - MultiSelectListPreference( - key: "hoster_selection", - title: "Hoster auswählen", - summary: "", - entries: ["Voe", "DoodStream", "Filemoon", "Mp4upload"], - entryValues: ["voe", "dood", "filemoon", "mp4upload"], - values: ["voe", "dood", "filemoon", "mp4upload"]), - ]; - } -} - -AnimeToast main(MSource source) { - return AnimeToast(source: source); -} diff --git a/dart/anime/src/de/animetoast/icon.png b/dart/anime/src/de/animetoast/icon.png deleted file mode 100644 index 172ddf3b39ffbf9a567165659797927a0715c81e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5171 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 _animetoast; -const _animetoastVersion = "0.0.15"; -const _animetoastCodeUrl = - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/de/animetoast/animetoast.dart"; -Source _animetoast = Source( - name: "AnimeToast", - baseUrl: "https://animetoast.cc", - lang: "de", - typeSource: "single", - iconUrl: - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/de/animetoast/icon.png", - sourceCodeUrl: _animetoastCodeUrl, - version: _animetoastVersion, - isManga: false); diff --git a/dart/anime/src/en/animepahe/animepahe.dart b/dart/anime/src/en/animepahe/animepahe.dart deleted file mode 100644 index be0e5edb..00000000 --- a/dart/anime/src/en/animepahe/animepahe.dart +++ /dev/null @@ -1,317 +0,0 @@ -import 'package:mangayomi/bridge_lib.dart'; -import 'dart:convert'; -import 'dart:math'; - -class AnimePahe extends MProvider { - AnimePahe(this.source); - - final MSource source; - - final Client client = Client(source); - - @override - String get baseUrl => getPreferenceValue(source.id, "preferred_domain"); - - @override - Future getPopular(int page) async { - return await getLatestUpdates(page); - } - - @override - Future getLatestUpdates(int page) async { - final res = - (await client.get(Uri.parse("$baseUrl/api?m=airing&page=$page"))).body; - final jsonResult = json.decode(res); - final hasNextPage = jsonResult["current_page"] < jsonResult["last_page"]; - List animeList = []; - for (var item in jsonResult["data"]) { - MManga anime = MManga(); - anime.name = item["anime_title"]; - anime.imageUrl = item["snapshot"]; - anime.link = "/anime/?anime_id=${item["id"]}&name=${item["anime_title"]}"; - anime.artist = item["fansub"]; - animeList.add(anime); - } - return MPages(animeList, hasNextPage); - } - - @override - Future search(String query, int page, FilterList filterList) async { - final res = - (await client.get(Uri.parse("$baseUrl/api?m=search&l=8&q=$query"))) - .body; - final jsonResult = json.decode(res); - List animeList = []; - for (var item in jsonResult["data"]) { - MManga anime = MManga(); - anime.name = item["title"]; - anime.imageUrl = item["poster"]; - anime.link = "/anime/?anime_id=${item["id"]}&name=${item["title"]}"; - animeList.add(anime); - } - return MPages(animeList, false); - } - - @override - Future getDetail(String url) async { - final statusList = [ - {"Currently Airing": 0, "Finished Airing": 1} - ]; - MManga anime = MManga(); - final id = substringBefore(substringAfterLast(url, "?anime_id="), "&name="); - final name = substringAfterLast(url, "&name="); - final session = await getSession(name, id); - final res = - (await client.get(Uri.parse("$baseUrl/anime/$session?anime_id=$id"))) - .body; - final document = parseHtml(res); - final status = - (document.xpathFirst('//div/p[contains(text(),"Status:")]/text()') ?? - "") - .replaceAll("Status:\n", "") - .trim(); - anime.status = parseStatus(status, statusList); - - anime.name = document.selectFirst("div.title-wrapper > h1 > span").text; - anime.author = - (document.xpathFirst('//div/p[contains(text(),"Studio:")]/text()') ?? - "") - .replaceAll("Studio:\n", "") - .trim(); - anime.imageUrl = document.selectFirst("div.anime-poster a").attr("href"); - anime.genre = - xpath(res, '//*[contains(@class,"anime-genre")]/ul/li/text()'); - final synonyms = - (document.xpathFirst('//div/p[contains(text(),"Synonyms:")]/text()') ?? - "") - .replaceAll("Synonyms:\n", "") - .trim(); - anime.description = document.selectFirst("div.anime-summary").text; - if (synonyms.isNotEmpty) { - anime.description += "\n\n$synonyms"; - } - final epUrl = "$baseUrl/api?m=release&id=$session&sort=episode_desc&page=1"; - final resEp = (await client.get(Uri.parse(epUrl))).body; - final episodes = await recursivePages(epUrl, resEp, session); - - anime.chapters = episodes; - return anime; - } - - Future> recursivePages( - String url, String res, String session) async { - final jsonResult = json.decode(res); - final page = jsonResult["current_page"]; - final hasNextPage = page < jsonResult["last_page"]; - List animeList = []; - for (var item in jsonResult["data"]) { - MChapter episode = MChapter(); - episode.name = "Episode ${item["episode"]}"; - episode.url = "/play/$session/${item["session"]}"; - episode.dateUpload = - parseDates([item["created_at"]], "yyyy-MM-dd HH:mm:ss", "en")[0]; - animeList.add(episode); - } - if (hasNextPage) { - final newUrl = "${substringBeforeLast(url, "&page=")}&page=${page + 1}"; - final newRes = (await client.get(Uri.parse(newUrl))).body; - animeList.addAll(await recursivePages(newUrl, newRes, session)); - } - return animeList; - } - - Future getSession(String title, String animeId) async { - final res = - (await client.get(Uri.parse("$baseUrl/api?m=search&q=$title"))).body; - return substringBefore( - substringAfter( - substringAfter(res, "\"id\":$animeId"), "\"session\":\""), - "\""); - } - - @override - Future> getVideoList(String url) async { - final res = (await client.get(Uri.parse("$baseUrl$url"))); - final document = parseHtml(res.body); - final downloadLinks = document.select("div#pickDownload > a"); - final buttons = document.select("div#resolutionMenu > button"); - List videos = []; - for (var i = 0; i < buttons.length; i++) { - final btn = buttons[i]; - final kwikLink = btn.attr("data-src"); - final quality = btn.text; - final paheWinLink = downloadLinks[i].attr("href"); - if (getPreferenceValue(source.id, "preffered_link_type")) { - final noRedirectClient = - Client(source, json.encode({"followRedirects": false})); - final kwikHeaders = - (await noRedirectClient.get(Uri.parse("${paheWinLink}/i"))).headers; - final kwikUrl = - "https://${substringAfterLast(getMapValue(json.encode(kwikHeaders), "location"), "https://")}"; - final reskwik = (await client - .get(Uri.parse(kwikUrl), headers: {"Referer": "https://kwik.cx/"})); - final matches = RegExp(r'\("(\S+)",\d+,"(\S+)",(\d+),(\d+)') - .firstMatch(reskwik.body); - final token = decrypt(matches!.group(1)!, matches.group(2)!, - matches.group(3)!, int.parse(matches.group(4)!)); - final url = RegExp(r'action="([^"]+)"').firstMatch(token)!.group(1)!; - final tok = RegExp(r'value="([^"]+)"').firstMatch(token)!.group(1)!; - var code = 419; - var tries = 0; - String location = ""; - - while (code != 302 && tries < 20) { - String cookie = - getMapValue(json.encode(res.request.headers), "cookie"); - cookie += - "; ${getMapValue(json.encode(reskwik.headers), "set-cookie").replaceAll("path=/;", "")}"; - final resNo = - await Client(source, json.encode({"followRedirects": false})) - .post(Uri.parse(url), headers: { - "referer": reskwik.request.url.toString(), - "cookie": cookie, - "user-agent": - getMapValue(json.encode(res.request.headers), "user-agent") - }, body: { - "_token": tok - }); - code = resNo.statusCode; - tries++; - location = getMapValue(json.encode(resNo.headers), "location"); - } - if (tries > 19) { - throw ("Failed to extract the stream uri from kwik."); - } - MVideo video = MVideo(); - video - ..url = location - ..originalUrl = location - ..quality = quality; - videos.add(video); - } else { - final ress = (await client.get(Uri.parse(kwikLink), - headers: {"Referer": "https://animepahe.com"})); - final script = substringAfterLast( - xpath(ress.body, - '//script[contains(text(),"eval(function")]/text()') - .first, - "eval(function("); - final videoUrl = substringBefore( - substringAfter(unpackJsAndCombine("eval(function($script"), - "const source=\\'"), - "\\';"); - MVideo video = MVideo(); - video - ..url = videoUrl - ..originalUrl = videoUrl - ..quality = quality - ..headers = {"referer": "https://kwik.cx"}; - videos.add(video); - } - } - return sortVideos(videos); - } - - String getString(String ctn, int sep) { - int b = 10; - String cm = - "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/"; - final n = cm.substring(0, b); - double mx = 0; - for (var index = 0; index < ctn.length; index++) { - mx += (int.tryParse(ctn[ctn.length - index - 1], radix: 10) ?? 0.0) - .toInt() * - (pow(sep, index)); - } - var m = ''; - while (mx > 0) { - m = n[(mx % b).toInt()] + m; - mx = (mx - (mx % b)) / b; - } - return m.isNotEmpty ? m : '0'; - } - - String decrypt(String fS, String key, String v1, int v2) { - var html = ""; - var i = 0; - final ld = int.parse(v1); - while (i < fS.length) { - var s = ""; - while (fS[i] != key[v2]) { - s += fS[i]; - i++; - } - for (var index = 0; index < key.length; index++) { - s = s.replaceAll(key[index], index.toString()); - } - html += String.fromCharCode(int.parse(getString(s, v2)) - ld); - i++; - } - - return html; - } - - List sortVideos(List videos) { - String quality = getPreferenceValue(source.id, "preferred_quality"); - - videos.sort((MVideo a, MVideo b) { - int qualityMatchA = 0; - if (a.quality.contains(quality)) { - qualityMatchA = 1; - } - int qualityMatchB = 0; - if (b.quality.contains(quality)) { - qualityMatchB = 1; - } - if (qualityMatchA != qualityMatchB) { - return qualityMatchB - qualityMatchA; - } - - final regex = RegExp(r'(\d+)p'); - final matchA = regex.firstMatch(a.quality); - final matchB = regex.firstMatch(b.quality); - final int qualityNumA = int.tryParse(matchA?.group(1) ?? '0') ?? 0; - final int qualityNumB = int.tryParse(matchB?.group(1) ?? '0') ?? 0; - return qualityNumB - qualityNumA; - }); - - return videos; - } - - @override - List getSourcePreferences() { - return [ - ListPreference( - key: "preferred_domain", - title: "Preferred domain", - summary: "", - valueIndex: 1, - entries: [ - "animepahe.com", - "animepahe.ru", - "animepahe.org" - ], - entryValues: [ - "https://animepahe.com", - "https://animepahe.ru", - "https://animepahe.org" - ]), - SwitchPreferenceCompat( - key: "preffered_link_type", - title: "Use HLS links", - summary: "Enable this if you are having Cloudflare issues.", - value: false), - ListPreference( - key: "preferred_quality", - title: "Preferred Quality", - summary: "", - valueIndex: 0, - entries: ["1080p", "720p", "360p"], - entryValues: ["1080", "720", "360"]), - ]; - } -} - -AnimePahe main(MSource source) { - return AnimePahe(source); -} diff --git a/dart/anime/src/en/animepahe/icon.png b/dart/anime/src/en/animepahe/icon.png deleted file mode 100644 index 4c3b0098ef33a9f6b2a15ea2a15ea7b605af17e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1934 zcmYjSX;f3!7QP`N31p%P8Axt!5+Knq2qiM97={1|G7|`c$V{OEb*?x-EItL)Dk_rJ z!lF_Y1raJ#T?}Fwj35F*K*a)56l_7XP?tmCy#xMvd#$_gx6iltclJ4Z-E|9s1AR%x zY-0$5ND8?u6uje?A3PfPL7$_5KtsX)N^cPUzZn@BK@gotq|j(IfX&$OXO>E5GFLFn zGY2bVGWj#0GMFIbAbbXEITPjyXbctrR4VYME0kbahl2o2BoY}6h8c`dD5e~)fDI$Y z#>Oxrpi&ut1q7FCL8o(QG!}(IHG_Ff=CU}@1PUM-U|=i`0!k3X5&#e~nLIN23y?z~ z5Lg@zolXahNhA^uB4EK>HrJfT<1yJ>4##q(8nUzmz?j1mfHpuT*afTuz+$oZd_D}r zpb&%<3I+Jj6wEhA5D_>6jPR*cDwD}wk#Yw+a(U()WH}8Ohsy_Tv|+*}9I?jOw}jy9 z!?F)zIQ;$hOu3Pw4;6i?==ARxG<5z)Kn;lqTa6kB*z0P{X5MTaJr52%fg>X$;i{hcQ} zb8~YAB(L`Nj%LHKB$|tp>xRarrXGXH!NI{Fe=41rm>3-$YiYToMMvb3JjTYx?Ilj> z)O8KN{q_~rbxVArgk#0yS;Uw+rhT2Umm*E3xkS<(H%dKaK8nGiAwU11;83N7NW9lX zI)I8kkfR2d`E^ECGR^fzf;^w>mHEZ`UoKwqQEXbp6`3QJzAU>dIR8sV{@vXV9`^Qj z8AK-0T&Jg}`4+;iuI{r0U!871L-2LtSS6>Xd3np#WcRI^->h?!DkCBrupv84+=Pgw zNNjCu?~uLk0GMD$M`x*#JT@*NCN}QK(Sl;4Zzw~;=JErAL&NE7cbm9XUb%XlBvUZ$ z8|yW%!SJ$ng$9PPt;9_H24a}g`X_5}m!Da_HI4a;bP20}L0l>)Sdk1DITIYZ-CN1i z*K228F_Sj-j;aM))S}BQg}yLj^@b&g?3JA(el*k{`y`lzAu}91Z{WkcV2N%*U3#o~ zLVI(_{NG0|HbRU~&pg_oOXrjVzQSIG%tM(rI{P$z7cJZr_r`cNf0K0;fn`$Mpq@}Z zkp+JjVU|2LT$mv#G)QO&cA~GgjjRs#u5-s3*!DpQ>CtHl`I?)ag5AetML@Do=ZX5V z>2Oj(@;aOOj~(+%Q3b@O_z7C*!M zcFzN{_mY||7yZ#tLMvGWJB$@85*B{DCJl*T4*au$?r zOzS?shp@Wt;_2Ri;ml7PL$U8(J6X=XC-jWm6pFstlj^5Ab*ulBe*e=Wo`2+QzB64C z_opqs77MNU*{uK`r%>LwnN@pzx;Z&6565T+V}gX`uC8d?(;aBJYqE0Mvn^Vscg{D8 zqw%wzsLE3A7w(=ja0yV~dK7-@SR>y#l`>O5b`5ur)~`35h!78;HO&?dI}__<=Uz1> zW8RbIQ5lnuilx+iNSKCp^YKD1pmoLS#gJ7!$MD;turB7dCyyULZ3ETiZ+~<0)q}uZ z_U+~XQ7cuQ)|`W#6hlXMm6Rr1WsghJcZ&-82`=LUcLeL)260+!WQN6dYpCktfAXEX zpc)0CX%oH{H-*mlKwWBQsk8rUpdqMCZcJG@-j@5_C>uODan`VQTV4k%rwIC9y#1Gw z^ZfMhk@!7g_pT4w533zT7mbNKBqNo#A|#0Qyy>Q`iq zBi$kbb)d;+U+m#6Qr?XPsh~4Zl&KBH^rZ{!zKU|bHt-_$!s8j!GgFy|OP_82(6Xv} zv*+`KsmvYO8w0wz8pfI4oc@*3kLRKmO3+Vr)#b&+zFMJMd3Ko8-L&lB$x%jk#fe2| z%fQkJN<)xNlUw;N@AA{F`aM6d4XWRJ$(_U2$x}Q%8w{_-)r9p@#*y@YCf2LcmD~P( z8y!&gQva<%9*=OKIjcw2w(iIk`MuhytwS1<$AZYzs-mjV^|jH1U9m^2{D!+ID#A=` z>6sB5x^*~gU-P?{Ran9^bz!mW!|ay8f%xQ-EvT!ys%|ZoUGspuJrF-s>0jGgmn*ba b@5nNEb)?b(AET^Y{v{~917$Uy@!$OqQYX%U diff --git a/dart/anime/src/en/animepahe/source.dart b/dart/anime/src/en/animepahe/source.dart deleted file mode 100644 index 6c6669ad..00000000 --- a/dart/anime/src/en/animepahe/source.dart +++ /dev/null @@ -1,16 +0,0 @@ -import '../../../../../model/source.dart'; - -Source get animepaheSource => _animepaheSource; -const _animepaheVersion = "0.0.35"; -const _animepaheSourceCodeUrl = - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/en/animepahe/animepahe.dart"; -Source _animepaheSource = Source( - name: "AnimePahe", - baseUrl: "https://www.animepahe.ru", - lang: "en", - typeSource: "single", - iconUrl: - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/en/animepahe/icon.png", - sourceCodeUrl: _animepaheSourceCodeUrl, - version: _animepaheVersion, - isManga: false); diff --git a/dart/anime/src/en/aniwave/aniwave.dart b/dart/anime/src/en/aniwave/aniwave.dart deleted file mode 100644 index ebe4886b..00000000 --- a/dart/anime/src/en/aniwave/aniwave.dart +++ /dev/null @@ -1,688 +0,0 @@ -import 'package:mangayomi/bridge_lib.dart'; -import 'dart:convert'; - -class Aniwave extends MProvider { - Aniwave({required this.source}); - - MSource source; - - final Client client = Client(source); - - @override - String get baseUrl => getPreferenceValue(source.id, "preferred_domain1"); - - @override - Future getPopular(int page) async { - final res = (await client - .get(Uri.parse("$baseUrl/filter?sort=trending&page=$page"))) - .body; - return parseAnimeList(res); - } - - @override - Future getLatestUpdates(int page) async { - final res = (await client - .get(Uri.parse("$baseUrl/filter?sort=recently_updated&page=$page"))) - .body; - return parseAnimeList(res); - } - - @override - Future search(String query, int page, FilterList filterList) async { - final filters = filterList.filters; - String url = "$baseUrl/filter?keyword=$query"; - - for (var filter in filters) { - if (filter.type == "OrderFilter") { - final order = filter.values[filter.state].value; - url += "${ll(url)}sort=$order"; - } else if (filter.type == "GenreFilter") { - final genre = (filter.state as List).where((e) => e.state).toList(); - if (genre.isNotEmpty) { - for (var st in genre) { - url += "${ll(url)}genre[]=${st.value}"; - } - } - } else if (filter.type == "CountryFilter") { - final country = (filter.state as List).where((e) => e.state).toList(); - if (country.isNotEmpty) { - for (var st in country) { - url += "${ll(url)}country[]=${st.value}"; - } - } - } else if (filter.type == "SeasonFilter") { - final season = (filter.state as List).where((e) => e.state).toList(); - if (season.isNotEmpty) { - for (var st in season) { - url += "${ll(url)}season[]=${st.value}"; - } - } - } else if (filter.type == "YearFilter") { - final year = (filter.state as List).where((e) => e.state).toList(); - if (year.isNotEmpty) { - for (var st in year) { - url += "${ll(url)}year[]=${st.value}"; - } - } - } else if (filter.type == "TypeFilter") { - final type = (filter.state as List).where((e) => e.state).toList(); - if (type.isNotEmpty) { - for (var st in type) { - url += "${ll(url)}type[]=${st.value}"; - } - } - } else if (filter.type == "StatusFilter") { - final status = (filter.state as List).where((e) => e.state).toList(); - if (status.isNotEmpty) { - for (var st in status) { - url += "${ll(url)}status[]=${st.value}"; - } - } - } else if (filter.type == "LanguageFilter") { - final language = (filter.state as List).where((e) => e.state).toList(); - if (language.isNotEmpty) { - for (var st in language) { - url += "${ll(url)}language[]=${st.value}"; - } - } - } else if (filter.type == "RatingFilter") { - final rating = (filter.state as List).where((e) => e.state).toList(); - if (rating.isNotEmpty) { - for (var st in rating) { - url += "${ll(url)}rating[]=${st.value}"; - } - } - } - } - - final res = (await client.get(Uri.parse("$url&page=$page"))).body; - return parseAnimeList(res); - } - - @override - Future getDetail(String url) async { - final statusList = [ - {"Releasing": 0, "Completed": 1} - ]; - final res = (await client.get(Uri.parse("$baseUrl$url"))).body; - MManga anime = MManga(); - final status = xpath(res, '//div[contains(text(),"Status")]/span/text()'); - if (status.isNotEmpty) { - anime.status = parseStatus(status.first, statusList); - } - final description = xpath(res, - '//*[contains(@class,"synopsis")]/div[@class="shorting"]/div[@class="content"]/text()'); - if (description.isNotEmpty) { - anime.description = description.first; - } - final author = xpath(res, '//div[contains(text(),"Studio")]/span/text()'); - if (author.isNotEmpty) { - anime.author = author.first; - } - - anime.genre = xpath(res, '//div[contains(text(),"Genre")]/span/a/text()'); - final id = parseHtml(res).selectFirst("div[data-id]").attr("data-id"); - final encrypt = vrfEncrypt(id); - final vrf = "vrf=${Uri.encodeComponent(encrypt)}"; - - final resEp = - (await client.get(Uri.parse("$baseUrl/ajax/episode/list/$id?$vrf"))) - .body; - - final html = json.decode(resEp)["result"]; - List? episodesList = []; - - final epsHtmls = parseHtml(html).select("div.episodes ul > li"); - - for (var epH in epsHtmls) { - final epHtml = epH.outerHtml; - final title = xpath(epHtml, '//li/@title').isNotEmpty - ? xpath(epHtml, '//li/@title').first - : ""; - final ids = xpath(epHtml, '//a/@data-ids').first; - final sub = xpath(epHtml, '//a/@data-sub').first; - final dub = xpath(epHtml, '//a/@data-dub').first; - final softsub = title.toLowerCase().contains("softsub") ? "1" : ""; - final fillerEp = title.toLowerCase().contains("filler") ? "1" : ""; - final epNum = xpath(epHtml, '//a/@data-num').first; - String scanlator = ""; - if (sub == "1") { - scanlator += "Sub"; - } - if (softsub == "1") { - scanlator += ", Softsub"; - } - if (dub == "1") { - scanlator += ", Dub"; - } - if (fillerEp == "1") { - scanlator += ", • Filler Episode"; - } - MChapter episode = MChapter(); - episode.name = "Episode $epNum"; - episode.scanlator = scanlator; - episode.url = "$ids&epurl=$url/ep-$epNum"; - episodesList.add(episode); - } - - anime.chapters = episodesList.reversed.toList(); - return anime; - } - - @override - Future> getVideoList(String url) async { - final ids = substringBefore(url, "&"); - final encrypt = vrfEncrypt(ids); - final vrf = "vrf=${Uri.encodeComponent(encrypt)}"; - final res = - (await client.get(Uri.parse("$baseUrl/ajax/server/list/$ids?$vrf"))) - .body; - final html = json.decode(res)["result"]; - - final vidsHtmls = parseHtml(html).select("div.servers > div"); - - List videos = []; - for (var vidH in vidsHtmls) { - final vidHtml = vidH.outerHtml; - final type = xpath(vidHtml, '//div/@data-type').first; - final serversIds = xpath(vidHtml, '//li/@data-link-id'); - for (int i = 0; i < serversIds.length; i++) { - final serverId = serversIds[i]; - - final encrypt = vrfEncrypt(serverId); - final vrf = "vrf=${Uri.encodeComponent(encrypt)}"; - final res = - (await client.get(Uri.parse("$baseUrl/ajax/server/$serverId?$vrf"))) - .body; - final status = json.decode(res)["status"]; - if (status == 200) { - List a = []; - final url = vrfDecrypt(json.decode(res)["result"]["url"]); - final hosterSelection = preferenceHosterSelection(source.id); - final typeSelection = preferenceTypeSelection(source.id); - if (typeSelection.contains(type.toLowerCase())) { - if (url.contains("vidplay") || url.contains("mcloud")) { - final hosterName = - url.contains("vidplay") ? "VidPlay" : "MyCloud"; - if (hosterSelection.contains(hosterName.toLowerCase())) { - a = await vidsrcExtractor(url, hosterName, type); - } - } else if (url.contains("mp4upload") && - hosterSelection.contains("mp4upload")) { - a = await mp4UploadExtractor(url, null, "", type); - } else if (url.contains("streamtape") && - hosterSelection.contains("streamtape")) { - a = await streamTapeExtractor(url, "StreamTape - $type"); - } else if (url.contains("filemoon") && - hosterSelection.contains("filemoon")) { - a = await filemoonExtractor(url, "", type); - } - videos.addAll(a); - } - } - } - } - - return sortVideos(videos, source.id); - } - - MPages parseAnimeList(String res) { - List animeList = []; - final urls = xpath(res, '//div[@class="item "]/div/div/div/a/@href'); - final names = xpath(res, '//div[@class="item "]/div/div/div/a/text()'); - final images = xpath(res, '//div[@class="item "]/div/div/a/img/@src'); - - for (var i = 0; i < names.length; i++) { - MManga anime = MManga(); - anime.name = names[i]; - anime.imageUrl = images[i]; - anime.link = urls[i]; - animeList.add(anime); - } - - return MPages(animeList, true); - } - - List rc4Encrypt(String key, List message) { - List _key = utf8.encode(key); - int _i = 0, _j = 0; - List _box = List.generate(256, (i) => i); - - int x = 0; - for (int i = 0; i < 256; i++) { - x = (x + _box[i] + _key[i % _key.length]) % 256; - var tmp = _box[i]; - _box[i] = _box[x]; - _box[x] = tmp; - } - - List out = []; - for (var char in message) { - _i = (_i + 1) % 256; - _j = (_j + _box[_i]) % 256; - - var tmp = _box[_i]; - _box[_i] = _box[_j]; - _box[_j] = tmp; - - final c = char ^ (_box[(_box[_i] + _box[_j]) % 256]); - out.add(c); - } - - return out; - } - - String vrfEncrypt(String input) { - final rc4 = rc4Encrypt("ysJhV6U27FVIjjuk", input.codeUnits); - final vrf = base64Url.encode(rc4); - final vrf1 = base64.encode(vrf.codeUnits); - List vrf2 = vrfShift(vrf1.codeUnits); - final vrf3 = base64.encode(vrf2); - return utf8.decode(rot13(vrf3.codeUnits)); - } - - String vrfDecrypt(String input) { - final decode = base64Url.decode(input); - final rc4 = rc4Encrypt("hlPeNwkncH0fq9so", decode); - return Uri.decodeComponent(utf8.decode(rc4)); - } - - List vrfShift(List vrf) { - var shifts = [-3, 3, -4, 2, -2, 5, 4, 5]; - for (var i = 0; i < vrf.length; i++) { - var shift = shifts[i % 8]; - vrf[i] = (vrf[i] + shift) & 0xFF; - } - return vrf; - } - - List rot13(List vrf) { - for (var i = 0; i < vrf.length; i++) { - var byte = vrf[i]; - if (byte >= 'A'.codeUnitAt(0) && byte <= 'Z'.codeUnitAt(0)) { - vrf[i] = (byte - 'A'.codeUnitAt(0) + 13) % 26 + 'A'.codeUnitAt(0); - } else if (byte >= 'a'.codeUnitAt(0) && byte <= 'z'.codeUnitAt(0)) { - vrf[i] = (byte - 'a'.codeUnitAt(0) + 13) % 26 + 'a'.codeUnitAt(0); - } - } - return vrf; - } - - Future> vidsrcExtractor( - String url, String name, String type) async { - List keys = json.decode((await client.get(Uri.parse( - "https://raw.githubusercontent.com/KillerDogeEmpire/vidplay-keys/keys/keys.json"))) - .body); - List videoList = []; - final host = Uri.parse(url).host; - final apiUrl = await getApiUrl(url, keys); - - final res = await client.get(Uri.parse(apiUrl), headers: { - "Host": host, - "Referer": Uri.decodeComponent(url), - "X-Requested-With": "XMLHttpRequest" - }); - final result = json.decode(res.body)['result']; - - if (result != 404) { - String masterUrl = - ((result['sources'] as List>).first)['file']; - final tracks = (result['tracks'] as List) - .where((e) => e['kind'] == 'captions' ? true : false) - .toList(); - List subtitles = []; - - for (var sub in tracks) { - try { - MTrack subtitle = MTrack(); - subtitle - ..label = sub["label"] - ..file = sub["file"]; - subtitles.add(subtitle); - } catch (_) {} - } - - final masterPlaylistRes = (await client.get(Uri.parse(masterUrl))).body; - - for (var it in substringAfter(masterPlaylistRes, "#EXT-X-STREAM-INF:") - .split("#EXT-X-STREAM-INF:")) { - final quality = - "${substringBefore(substringBefore(substringAfter(substringAfter(it, "RESOLUTION="), "x"), ","), "\n")}p"; - - String videoUrl = substringBefore(substringAfter(it, "\n"), "\n"); - - if (!videoUrl.startsWith("http")) { - videoUrl = - "${masterUrl.split("/").sublist(0, masterUrl.split("/").length - 1).join("/")}/$videoUrl"; - } - - MVideo video = MVideo(); - video - ..url = videoUrl - ..originalUrl = videoUrl - ..quality = "$name - $type - $quality" - ..headers = {"Referer": "https://$host/"} - ..subtitles = subtitles; - videoList.add(video); - } - } - - return videoList; - } - - Future getApiUrl(String url, List keyList) async { - final host = Uri.parse(url).host; - final paramsToString = Uri.parse(url) - .queryParameters - .entries - .map((e) => "${e.key}=${e.value}") - .join("&"); - var vidId = substringBefore(substringAfterLast(url, "/"), "?"); - var encodedID = encodeID(vidId, keyList); - final apiSlug = await callFromFuToken(host, encodedID); - String apiUrlString = ""; - apiUrlString += "https://$host/$apiSlug"; - if (paramsToString.isNotEmpty) { - apiUrlString += "?$paramsToString"; - } - - return apiUrlString; - } - - String encodeID(String vidId, List keyList) { - var rc4Key1 = keyList[0]; - var rc4Key2 = keyList[1]; - final rc4 = rc4Encrypt(rc4Key1, vidId.codeUnits); - final rc41 = rc4Encrypt(rc4Key2, rc4); - return base64.encode(rc41).replaceAll("/", "_").trim(); - } - - Future callFromFuToken(String host, String data) async { - final fuTokenScript = - (await client.get(Uri.parse("https://$host/futoken"))).body; - - String js = ""; - js += "(function"; - js += substringBefore( - substringAfter(substringAfter(fuTokenScript, "window"), "function") - .replaceAll("jQuery.ajax(", ""), - "+location.search"); - js += "}(\"$data\"))"; - final jsRes = await evalJs(js); - if (jsRes == "error") return ""; - return jsRes; - } - - @override - List getFilterList() { - return [ - SelectFilter("OrderFilter", "Sort order", 0, [ - SelectFilterOption("Most relevance", "most_relevance"), - SelectFilterOption("Recently updated", "recently_updated"), - SelectFilterOption("Recently added", "recently_added"), - SelectFilterOption("Release date", "release_date"), - SelectFilterOption("Trending", "trending"), - SelectFilterOption("Name A-Z", "title_az"), - SelectFilterOption("Scores", "scores"), - SelectFilterOption("MAL scores", "mal_scores"), - SelectFilterOption("Most watched", "most_watched"), - SelectFilterOption("Most favourited", "most_favourited"), - SelectFilterOption("Number of episodes", "number_of_episodes"), - ]), - SeparatorFilter(), - GroupFilter("GenreFilter", "Genre", [ - CheckBoxFilter("Action", "1"), - CheckBoxFilter("Adventure", "2"), - CheckBoxFilter("Avant Garde", "2262888"), - CheckBoxFilter("Boys Love", "2262603"), - CheckBoxFilter("Comedy", "4"), - CheckBoxFilter("Demons", "4424081"), - CheckBoxFilter("Drama", "7"), - CheckBoxFilter("Ecchi", "8"), - CheckBoxFilter("Fantasy", "9"), - CheckBoxFilter("Girls Love", "2263743"), - CheckBoxFilter("Gourmet", "2263289"), - CheckBoxFilter("Harem", "11"), - CheckBoxFilter("Horror", "14"), - CheckBoxFilter("Isekai", "3457284"), - CheckBoxFilter("Iyashikei", "4398552"), - CheckBoxFilter("Josei", "15"), - CheckBoxFilter("Kids", "16"), - CheckBoxFilter("Magic", "4424082"), - CheckBoxFilter("Mahou Shoujo", "3457321"), - CheckBoxFilter("Martial Arts", "18"), - CheckBoxFilter("Mecha", "19"), - CheckBoxFilter("Military", "20"), - CheckBoxFilter("Music", "21"), - CheckBoxFilter("Mystery", "22"), - CheckBoxFilter("Parody", "23"), - CheckBoxFilter("Psychological", "25"), - CheckBoxFilter("Reverse Harem", "4398403"), - CheckBoxFilter("Romance", "26"), - CheckBoxFilter("School", "28"), - CheckBoxFilter("Sci-Fi", "29"), - CheckBoxFilter("Seinen", "30"), - CheckBoxFilter("Shoujo", "31"), - CheckBoxFilter("Shounen", "33"), - CheckBoxFilter("Slice of Life", "35"), - CheckBoxFilter("Space", "36"), - CheckBoxFilter("Sports", "37"), - CheckBoxFilter("Super Power", "38"), - CheckBoxFilter("Supernatural", "39"), - CheckBoxFilter("Suspense", "2262590"), - CheckBoxFilter("Thriller", "40"), - CheckBoxFilter("Vampire", "41") - ]), - GroupFilter("CountryFilter", "Country", [ - CheckBoxFilter("China", "120823"), - CheckBoxFilter("Japan", "120822") - ]), - GroupFilter("SeasonFilter", "Season", [ - CheckBoxFilter("Fall", "fall"), - CheckBoxFilter("Summer", "summer"), - CheckBoxFilter("Spring", "spring"), - CheckBoxFilter("Winter", "winter"), - CheckBoxFilter("Unknown", "unknown") - ]), - GroupFilter("YearFilter", "Year", [ - CheckBoxFilter("2023", "2023"), - CheckBoxFilter("2022", "2022"), - CheckBoxFilter("2021", "2021"), - CheckBoxFilter("2020", "2020"), - CheckBoxFilter("2019", "2019"), - CheckBoxFilter("2018", "2018"), - CheckBoxFilter("2017", "2017"), - CheckBoxFilter("2016", "2016"), - CheckBoxFilter("2015", "2015"), - CheckBoxFilter("2014", "2014"), - CheckBoxFilter("2013", "2013"), - CheckBoxFilter("2012", "2012"), - CheckBoxFilter("2011", "2011"), - CheckBoxFilter("2010", "2010"), - CheckBoxFilter("2009", "2009"), - CheckBoxFilter("2008", "2008"), - CheckBoxFilter("2007", "2007"), - CheckBoxFilter("2006", "2006"), - CheckBoxFilter("2005", "2005"), - CheckBoxFilter("2004", "2004"), - CheckBoxFilter("2003", "2003"), - CheckBoxFilter("2000s", "2000s"), - CheckBoxFilter("1990s", "1990s"), - CheckBoxFilter("1980s", "1980s"), - CheckBoxFilter("1970s", "1970s"), - CheckBoxFilter("1960s", "1960s"), - CheckBoxFilter("1950s", "1950s"), - CheckBoxFilter("1940s", "1940s"), - CheckBoxFilter("1930s", "1930s"), - CheckBoxFilter("1920s", "1920s"), - CheckBoxFilter("1910s", "1910s") - ]), - GroupFilter("TypeFilter", "Type", [ - CheckBoxFilter("Movie", "movie"), - CheckBoxFilter("TV", "tv"), - CheckBoxFilter("OVA", "ova"), - CheckBoxFilter("ONA", "ona"), - CheckBoxFilter("Special", "special"), - CheckBoxFilter("Music", "music") - ]), - GroupFilter("StatusFilter", "Status", [ - CheckBoxFilter("Not Yet Aired", "info"), - CheckBoxFilter("Releasing", "releasing"), - CheckBoxFilter("Completed", "completed") - ]), - GroupFilter("LanguageFilter", "Language", [ - CheckBoxFilter("Sub and Dub", "subdub"), - CheckBoxFilter("Sub", "sub"), - CheckBoxFilter("Dub", "dub") - ]), - GroupFilter("RatingFilter", "Rating", [ - CheckBoxFilter("G - All Ages", "g"), - CheckBoxFilter("PG - Children", "pg"), - CheckBoxFilter("PG 13 - Teens 13 and Older", "pg_13"), - CheckBoxFilter("R - 17+, Violence & Profanity", "r"), - CheckBoxFilter("R+ - Profanity & Mild Nudity", "r+"), - CheckBoxFilter("Rx - Hentai", "rx") - ]), - ]; - } - - @override - List getSourcePreferences() { - return [ - ListPreference( - key: "preferred_domain1", - title: "Preferred domain", - summary: "", - valueIndex: 0, - entries: [ - "aniwave.to", - "aniwave.ws", - "aniwave.li", - "aniwave.vc" - ], - entryValues: [ - "https://aniwave.to", - "https://aniwave.ws", - "https://aniwave.li", - "https://aniwave.vc" - ]), - ListPreference( - key: "preferred_quality", - title: "Preferred Quality", - summary: "", - valueIndex: 0, - entries: ["1080p", "720p", "480p", "360p"], - entryValues: ["1080", "720", "480", "360"]), - ListPreference( - key: "preferred_language", - title: "Preferred Type", - summary: "", - valueIndex: 0, - entries: ["Sub", "Softsub", "Dub"], - entryValues: ["Sub", "Softsub", "Dub"]), - ListPreference( - key: "preferred_server", - title: "Preferred server", - summary: "", - valueIndex: 0, - entries: [ - "VidPlay", - "MyCloud", - "Filemoon", - "StreamTape", - "Mp4Upload" - ], - entryValues: [ - "vidplay", - "mycloud", - "filemoon", - "streamtape", - "mp4upload" - ]), - MultiSelectListPreference( - key: "hoster_selection", - title: "Enable/Disable Hosts", - summary: "", - entries: [ - "VidPlay", - "MyCloud", - "Filemoon", - "StreamTape", - "Mp4Upload" - ], - entryValues: [ - "vidplay", - "mycloud", - "filemoon", - "streamtape", - "mp4upload" - ], - values: [ - "vidplay", - "mycloud", - "filemoon", - "streamtape", - "mp4upload" - ]), - MultiSelectListPreference( - key: "type_selection", - title: "Enable/Disable Type", - summary: "", - entries: ["Sub", "Softsub", "Dub"], - entryValues: ["sub", "softsub", "dub"], - values: ["sub", "softsub", "dub"]), - ]; - } - - List preferenceHosterSelection(int sourceId) { - return getPreferenceValue(sourceId, "hoster_selection"); - } - - List preferenceTypeSelection(int sourceId) { - return getPreferenceValue(sourceId, "type_selection"); - } - - List sortVideos(List videos, int sourceId) { - String quality = getPreferenceValue(sourceId, "preferred_quality"); - String server = getPreferenceValue(sourceId, "preferred_server"); - String lang = getPreferenceValue(sourceId, "preferred_language"); - videos.sort((MVideo a, MVideo b) { - int qualityMatchA = 0; - - if (a.quality.contains(quality) && - a.quality.toLowerCase().contains(lang.toLowerCase()) && - a.quality.toLowerCase().contains(server.toLowerCase())) { - qualityMatchA = 1; - } - int qualityMatchB = 0; - if (b.quality.contains(quality) && - b.quality.toLowerCase().contains(lang.toLowerCase()) && - b.quality.toLowerCase().contains(server.toLowerCase())) { - qualityMatchB = 1; - } - if (qualityMatchA != qualityMatchB) { - return qualityMatchB - qualityMatchA; - } - - final regex = RegExp(r'(\d+)p'); - final matchA = regex.firstMatch(a.quality); - final matchB = regex.firstMatch(b.quality); - final int qualityNumA = int.tryParse(matchA?.group(1) ?? '0') ?? 0; - final int qualityNumB = int.tryParse(matchB?.group(1) ?? '0') ?? 0; - return qualityNumB - qualityNumA; - }); - - return videos; - } - - String ll(String url) { - if (url.contains("?")) { - return "&"; - } - return "?"; - } -} - -Aniwave main(MSource source) { - return Aniwave(source: source); -} diff --git a/dart/anime/src/en/aniwave/icon.png b/dart/anime/src/en/aniwave/icon.png deleted file mode 100644 index 516f974eca5f6968a871100fcabcc5acbb664188..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3775 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 diff --git a/dart/anime/src/en/aniwave/source.dart b/dart/anime/src/en/aniwave/source.dart deleted file mode 100644 index b8ed096a..00000000 --- a/dart/anime/src/en/aniwave/source.dart +++ /dev/null @@ -1,16 +0,0 @@ -import '../../../../../model/source.dart'; - -Source get aniwave => _aniwave; -const _aniwaveVersion = "0.0.65"; -const _aniwaveCodeUrl = - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/en/aniwave/aniwave.dart"; -Source _aniwave = Source( - name: "Aniwave", - baseUrl: "https://aniwave.to", - lang: "en", - typeSource: "single", - iconUrl: - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/en/aniwave/icon.png", - sourceCodeUrl: _aniwaveCodeUrl, - version: _aniwaveVersion, - isManga: false); diff --git a/dart/anime/src/en/dramacool/dramacool.dart b/dart/anime/src/en/dramacool/dramacool.dart deleted file mode 100644 index 2bf01042..00000000 --- a/dart/anime/src/en/dramacool/dramacool.dart +++ /dev/null @@ -1,210 +0,0 @@ -import 'package:mangayomi/bridge_lib.dart'; -import 'dart:convert'; - -class DramaCool extends MProvider { - DramaCool({required this.source}); - - MSource source; - - final Client client = Client(source); - - @override - String get baseUrl => getPreferenceValue(source.id, "overrideBaseUrl"); - - @override - Future getPopular(int page) async { - final res = - (await client.get(Uri.parse("$baseUrl/most-popular-drama?page=$page"))) - .body; - final document = parseHtml(res); - return animeFromElement(document.select("ul.list-episode-item li a"), - document.selectFirst("li.next a")?.attr("href") != null); - } - - @override - Future getLatestUpdates(int page) async { - final res = - (await client.get(Uri.parse("$baseUrl/recently-added?page=$page"))) - .body; - final document = parseHtml(res); - return animeFromElement(document.select("ul.switch-block a"), - document.selectFirst("li.next a")?.attr("href") != null); - } - - @override - Future search(String query, int page, FilterList filterList) async { - final res = (await client - .get(Uri.parse("$baseUrl/search?keyword=$query&page=$page"))) - .body; - final document = parseHtml(res); - return animeFromElement(document.select("ul.list-episode-item li a"), - document.selectFirst("li.next a")?.attr("href") != null); - } - - @override - Future getDetail(String url) async { - final statusList = [ - {"Ongoing": 0, "Completed": 1} - ]; - url = getUrlWithoutDomain(url); - if (url.contains("-episode-") && url.endsWith(".html")) { - final res = (await client.get(Uri.parse("$baseUrl$url"))).body; - url = parseHtml(res).selectFirst("div.category a").attr("href"); - } - url = getUrlWithoutDomain(url); - - final res = (await client.get(Uri.parse("$baseUrl$url"))).body; - final document = parseHtml(res); - MManga anime = MManga(); - anime.description = document - .selectFirst("div.info") - .select("p") - .map((MElement e) { - if (!e.outerHtml.contains(" episodesList = []; - final episodeListElements = document.select("ul.all-episode li a"); - - for (var element in episodeListElements) { - var epNum = - substringAfterLast(element.selectFirst("h3").text, "Episode "); - var type = element.selectFirst("span.type")?.text ?? "RAW"; - var date = element.selectFirst("span.time")?.text ?? ""; - MChapter ep = MChapter(); - ep.name = "$type: Episode $epNum".trim(); - ep.url = element.getHref; - if (date.isNotEmpty) - ep.dateUpload = parseDates([element.selectFirst("span.time")?.text], - "yyyy-MM-dd HH:mm:ss", "en") - .first; - episodesList.add(ep); - } - - anime.chapters = episodesList; - return anime; - } - - @override - Future> getVideoList(String url) async { - url = getUrlWithoutDomain(url); - - final res = (await client.get(Uri.parse("$baseUrl$url"))).body; - final document = parseHtml(res); - String iframeUrl = document.selectFirst("iframe")?.getSrc ?? ""; - if (iframeUrl.isEmpty) return []; - if (iframeUrl.startsWith("//")) { - iframeUrl = "https:$iframeUrl"; - } - var iframeDoc = parseHtml((await client.get(Uri.parse(iframeUrl))).body); - final serverElements = iframeDoc.select("ul.list-server-items li"); - List videos = []; - for (var serverElement in serverElements) { - var url = serverElement.attr("data-video"); - List a = []; - if (url.contains("dood")) { - a = await doodExtractor(url, "DoodStream"); - } else if (url.contains("dwish")) { - a = await streamWishExtractor(url, "StreamWish"); - } else if (url.contains("streamtape")) { - a = await streamTapeExtractor(url, "StreamTape"); - } - videos.addAll(a); - } - return sortVideos(videos, source.id); - } - - @override - List getSourcePreferences() { - return [ - EditTextPreference( - key: "overrideBaseUrl", - title: "Override BaseUrl", - summary: "", - value: "https://dramacool.pa", - dialogTitle: "Override BaseUrl", - dialogMessage: "", - text: "https://dramacool.pa"), - ListPreference( - key: "preferred_quality", - title: "Preferred quality", - summary: "", - valueIndex: 0, - entries: [ - "1080p", - "720p", - "480p", - "360p", - "Doodstream", - "StreamTape" - ], - entryValues: [ - "1080", - "720", - "480", - "360", - "Doodstream", - "StreamTape" - ]) - ]; - } - - MPages animeFromElement(List elements, bool hasNextPage) { - List animeList = []; - for (var element in elements) { - MManga anime = MManga(); - anime.name = element.selectFirst("h3")?.text ?? "Serie"; - anime.imageUrl = (element.selectFirst("img")?.attr("data-original") ?? "") - .replaceAll(" ", "%20") ?? - ""; - anime.link = element.getHref; - animeList.add(anime); - } - return MPages(animeList, hasNextPage); - } - - List sortVideos(List videos, int sourceId) { - String quality = getPreferenceValue(sourceId, "preferred_quality"); - - videos.sort((MVideo a, MVideo b) { - int qualityMatchA = 0; - if (a.quality.contains(quality)) { - qualityMatchA = 1; - } - int qualityMatchB = 0; - if (b.quality.contains(quality)) { - qualityMatchB = 1; - } - if (qualityMatchA != qualityMatchB) { - return qualityMatchB - qualityMatchA; - } - - final regex = RegExp(r'(\d+)p'); - final matchA = regex.firstMatch(a.quality); - final matchB = regex.firstMatch(b.quality); - final int qualityNumA = int.tryParse(matchA?.group(1) ?? '0') ?? 0; - final int qualityNumB = int.tryParse(matchB?.group(1) ?? '0') ?? 0; - return qualityNumB - qualityNumA; - }); - - return videos; - } -} - -DramaCool main(MSource source) { - return DramaCool(source: source); -} diff --git a/dart/anime/src/en/dramacool/icon.png b/dart/anime/src/en/dramacool/icon.png deleted file mode 100644 index ceb49c5d358c16b17efc8937f283f624a41efb53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6955 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 _dramacoolSource; -const _dramacoolVersion = "0.0.25"; -const _dramacoolSourceCodeUrl = - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/en/dramacool/dramacool.dart"; -Source _dramacoolSource = Source( - name: "DramaCool", - baseUrl: "https://dramacool.pa", - lang: "en", - typeSource: "single", - iconUrl: - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/en/dramacool/icon.png", - sourceCodeUrl: _dramacoolSourceCodeUrl, - version: _dramacoolVersion, - isManga: false); diff --git a/dart/anime/src/en/gogoanime/gogoanime.dart b/dart/anime/src/en/gogoanime/gogoanime.dart deleted file mode 100644 index f8e80266..00000000 --- a/dart/anime/src/en/gogoanime/gogoanime.dart +++ /dev/null @@ -1,1137 +0,0 @@ -import 'package:mangayomi/bridge_lib.dart'; -import 'dart:convert'; - -class GogoAnime extends MProvider { - GogoAnime({required this.source}); - - MSource source; - - final Client client = Client(source); - - @override - String get baseUrl => - getPreferenceValue(source.id, "override_baseurl_v${source.id}"); - - @override - Future getPopular(int page) async { - final res = - (await client.get(Uri.parse("$baseUrl/popular.html?page=$page"))).body; - - List animeList = []; - final urls = xpath(res, '//*[@class="img"]/a/@href'); - final names = xpath(res, '//*[@class="img"]/a/@title'); - final images = xpath(res, '//*[@class="img"]/a/img/@src'); - - for (var i = 0; i < names.length; i++) { - MManga anime = MManga(); - anime.name = names[i]; - anime.imageUrl = images[i]; - anime.link = urls[i]; - animeList.add(anime); - } - - return MPages(animeList, true); - } - - @override - Future getLatestUpdates(int page) async { - final res = (await client.get(Uri.parse( - "https://ajax.gogo-load.com/ajax/page-recent-release-ongoing.html?page=$page&type=1"))) - .body; - - List animeList = []; - final urls = - xpath(res, '//*[@class="added_series_body popular"]/ul/li/a[1]/@href'); - final names = xpath( - res, '//*[//*[@class="added_series_body popular"]/ul/li/a[1]/@title'); - List images = []; - List imagess = xpath(res, - '//*[//*[@class="added_series_body popular"]/ul/li/a/div[@class="thumbnail-popular"]/@style'); - for (var url in imagess) { - images.add(url.replaceAll("background: url('", "").replaceAll("');", "")); - } - - for (var i = 0; i < names.length; i++) { - MManga anime = MManga(); - anime.name = names[i]; - anime.imageUrl = images[i]; - anime.link = urls[i]; - animeList.add(anime); - } - - return MPages(animeList, true); - } - - @override - Future search(String query, int page, FilterList filterList) async { - final filters = filterList.filters; - String filterStr = ""; - String url = ""; - - String genre = ""; - String recent = ""; - String season = ""; - - for (var filter in filters) { - if (filter.type == "SortFilter") { - final sort = filter.values[filter.state].value; - filterStr += "&sort=$sort"; - } else if (filter.type == "GenreFilter") { - final genre = (filter.state as List).where((e) => e.state).toList(); - if (genre.isNotEmpty) { - for (var st in genre) { - filterStr += "&genre[]=${st.value}"; - } - } - } else if (filter.type == "CountryFilter") { - final country = (filter.state as List).where((e) => e.state).toList(); - if (country.isNotEmpty) { - for (var st in country) { - filterStr += "&country[]=${st.value}"; - } - } - } else if (filter.type == "SeasonFilter") { - final season = (filter.state as List).where((e) => e.state).toList(); - if (season.isNotEmpty) { - for (var st in season) { - filterStr += "&season[]=${st.value}"; - } - } - } else if (filter.type == "YearFilter") { - final year = (filter.state as List).where((e) => e.state).toList(); - if (year.isNotEmpty) { - for (var st in year) { - filterStr += "&year[]=${st.value}"; - } - } - } else if (filter.type == "TypeFilter") { - final type = (filter.state as List).where((e) => e.state).toList(); - if (type.isNotEmpty) { - for (var st in type) { - filterStr += "&type[]=${st.value}"; - } - } - } else if (filter.type == "StatusFilter") { - final status = (filter.state as List).where((e) => e.state).toList(); - if (status.isNotEmpty) { - for (var st in status) { - filterStr += "&status[]=${st.value}"; - } - } - } else if (filter.type == "LanguageFilter") { - final language = (filter.state as List).where((e) => e.state).toList(); - if (language.isNotEmpty) { - for (var st in language) { - filterStr += "&language[]=${st.value}"; - } - } - } - if (filter.type == "GenreIFilter") { - genre = filter.values[filter.state].value; - } else if (filter.type == "RecentFilter") { - recent = filter.values[filter.state].value; - } else if (filter.type == "SeasonIFilter") { - season = filter.values[filter.state].value; - } - } - if (genre.isNotEmpty) { - url = "$baseUrl/genre/$genre?page=$page"; - } else if (recent.isNotEmpty) { - url = - "https://ajax.gogo-load.com/ajax/page-recent-release.html?page=$page&type=$recent"; - } else if (season.isNotEmpty) { - url = "$baseUrl/$season?page=$page"; - } else { - url = "$baseUrl/filter.html?keyword=$query$filterStr&page=$page"; - } - - final res = (await client.get(Uri.parse(url))).body; - - List animeList = []; - final urls = xpath(res, '//*[@class="img"]/a/@href'); - final names = xpath(res, '//*[@class="img"]/a/@title'); - final images = xpath(res, '//*[@class="img"]/a/img/@src'); - - for (var i = 0; i < names.length; i++) { - MManga anime = MManga(); - anime.name = names[i]; - anime.imageUrl = images[i]; - anime.link = urls[i]; - animeList.add(anime); - } - - return MPages(animeList, true); - } - - @override - Future getDetail(String url) async { - final statusList = [ - {"Ongoing": 0, "Completed": 1} - ]; - - final res = (await client.get(Uri.parse("$baseUrl$url"))).body; - MManga anime = MManga(); - final status = xpath( - res, '//*[@class="anime_info_body_bg"]/p[@class="type"][5]/text()') - .first - .replaceAll("Status: ", ""); - anime.description = xpath( - res, '//*[@class="anime_info_body_bg"]/p[@class="type"][2]/text()') - .first - .replaceAll("Plot Summary: ", ""); - anime.status = parseStatus(status, statusList); - anime.genre = xpath( - res, '//*[@class="anime_info_body_bg"]/p[@class="type"][3]/text()') - .first - .replaceAll("Genre: ", "") - .split(","); - - final id = xpath(res, '//*[@id="movie_id"]/@value').first; - final urlEp = - "https://ajax.gogocdn.net/ajax/load-list-episode?ep_start=0&ep_end=4000&id=$id"; - - final resEp = (await client.get(Uri.parse(urlEp))).body; - - final epUrls = xpath(resEp, '//*[@id="episode_related"]/li/a/@href'); - final names = xpath( - resEp, '//*[@id="episode_related"]/li/a/div[@class="name"]/text()'); - List episodes = []; - - for (var a in names) { - episodes.add("Episode ${substringAfterLast(a, ' ')}"); - } - List? episodesList = []; - for (var i = 0; i < episodes.length; i++) { - MChapter episode = MChapter(); - episode.name = episodes[i]; - episode.url = epUrls[i]; - episodesList.add(episode); - } - - anime.chapters = episodesList; - return anime; - } - - @override - Future> getVideoList(String url) async { - final res = (await client.get(Uri.parse("$baseUrl$url"))).body; - final serverUrls = - xpath(res, '//*[@class="anime_muti_link"]/ul/li/a/@data-video'); - final serverNames = - xpath(res, '//*[@class="anime_muti_link"]/ul/li/@class'); - List videos = []; - final hosterSelection = preferenceHosterSelection(source.id); - for (var i = 0; i < serverNames.length; i++) { - final name = serverNames[i]; - final url = serverUrls[i]; - List a = []; - if (hosterSelection.contains(name)) { - if (name.contains("anime")) { - a = await gogoCdnExtractor(url); - } else if (name.contains("vidcdn")) { - a = await gogoCdnExtractor(url); - } else if (name.contains("doodstream")) { - a = await doodExtractor(url); - } else if (name.contains("mp4upload")) { - a = await mp4UploadExtractor(url, null, "", ""); - } else if (name.contains("filelions")) { - a = await streamWishExtractor(url, "FileLions"); - } else if (name.contains("streamwish")) { - a = await streamWishExtractor(url, "StreamWish"); - } - videos.addAll(a); - } - } - - return sortVideos(videos, source.id); - } - - @override - List getFilterList() { - return [ - HeaderFilter("Advanced search"), - GroupFilter("GenreFilter", "Genre", [ - { - "type": "CheckBox", - "filter": {"name": "Action", "value": "action"} - }, - { - "type": "CheckBox", - "filter": {"name": "Adult Cast", "value": "adult-cast"} - }, - { - "type": "CheckBox", - "filter": {"name": "Adventure", "value": "adventure"} - }, - { - "type": "CheckBox", - "filter": {"name": "Anthropomorphic", "value": "anthropomorphic"} - }, - { - "type": "CheckBox", - "filter": {"name": "Avant Garde", "value": "avant-garde"} - }, - { - "type": "CheckBox", - "filter": {"name": "Boys Love", "value": "shounen-ai"} - }, - { - "type": "CheckBox", - "filter": {"name": "Cars", "value": "cars"} - }, - { - "type": "CheckBox", - "filter": {"name": "CGDCT", "value": "cgdct"} - }, - { - "type": "CheckBox", - "filter": {"name": "Childcare", "value": "childcare"} - }, - { - "type": "CheckBox", - "filter": {"name": "Comedy", "value": "comedy"} - }, - { - "type": "CheckBox", - "filter": {"name": "Comic", "value": "comic"} - }, - { - "type": "CheckBox", - "filter": {"name": "Crime", "value": "crime"} - }, - { - "type": "CheckBox", - "filter": {"name": "Crossdressing", "value": "crossdressing"} - }, - { - "type": "CheckBox", - "filter": {"name": "Delinquents", "value": "delinquents"} - }, - { - "type": "CheckBox", - "filter": {"name": "Dementia", "value": "dementia"} - }, - { - "type": "CheckBox", - "filter": {"name": "Demons", "value": "demons"} - }, - { - "type": "CheckBox", - "filter": {"name": "Detective", "value": "detective"} - }, - { - "type": "CheckBox", - "filter": {"name": "Drama", "value": "drama"} - }, - { - "type": "CheckBox", - "filter": {"name": "Dub", "value": "dub"} - }, - { - "type": "CheckBox", - "filter": {"name": "Ecchi", "value": "ecchi"} - }, - { - "type": "CheckBox", - "filter": {"name": "Erotica", "value": "erotica"} - }, - { - "type": "CheckBox", - "filter": {"name": "Family", "value": "family"} - }, - { - "type": "CheckBox", - "filter": {"name": "Fantasy", "value": "fantasy"} - }, - { - "type": "CheckBox", - "filter": {"name": "Gag Humor", "value": "gag-humor"} - }, - { - "type": "CheckBox", - "filter": {"name": "Game", "value": "game"} - }, - { - "type": "CheckBox", - "filter": {"name": "Gender Bender", "value": "gender-bender"} - }, - { - "type": "CheckBox", - "filter": {"name": "Gore", "value": "gore"} - }, - { - "type": "CheckBox", - "filter": {"name": "Gourmet", "value": "gourmet"} - }, - { - "type": "CheckBox", - "filter": {"name": "Harem", "value": "harem"} - }, - { - "type": "CheckBox", - "filter": {"name": "Hentai", "value": "hentai"} - }, - { - "type": "CheckBox", - "filter": {"name": "High Stakes Game", "value": "high-stakes-game"} - }, - { - "type": "CheckBox", - "filter": {"name": "Historical", "value": "historical"} - }, - { - "type": "CheckBox", - "filter": {"name": "Horror", "value": "horror"} - }, - { - "type": "CheckBox", - "filter": {"name": "Isekai", "value": "isekai"} - }, - { - "type": "CheckBox", - "filter": {"name": "Iyashikei", "value": "iyashikei"} - }, - { - "type": "CheckBox", - "filter": {"name": "Josei", "value": "josei"} - }, - { - "type": "CheckBox", - "filter": {"name": "Kids", "value": "kids"} - }, - { - "type": "CheckBox", - "filter": {"name": "Magic", "value": "magic"} - }, - { - "type": "CheckBox", - "filter": {"name": "Magical Sex Shift", "value": "magical-sex-shift"} - }, - { - "type": "CheckBox", - "filter": {"name": "Mahou Shoujo", "value": "mahou-shoujo"} - }, - { - "type": "CheckBox", - "filter": {"name": "Martial Arts", "value": "martial-arts"} - }, - { - "type": "CheckBox", - "filter": {"name": "Mecha", "value": "mecha"} - }, - { - "type": "CheckBox", - "filter": {"name": "Medical", "value": "medical"} - }, - { - "type": "CheckBox", - "filter": {"name": "Military", "value": "military"} - }, - { - "type": "CheckBox", - "filter": {"name": "Music", "value": "music"} - }, - { - "type": "CheckBox", - "filter": {"name": "Mystery", "value": "mystery"} - }, - { - "type": "CheckBox", - "filter": {"name": "Mythology", "value": "mythology"} - }, - { - "type": "CheckBox", - "filter": {"name": "Organized Crime", "value": "organized-crime"} - }, - { - "type": "CheckBox", - "filter": {"name": "Parody", "value": "parody"} - }, - { - "type": "CheckBox", - "filter": {"name": "Performing Arts", "value": "performing-arts"} - }, - { - "type": "CheckBox", - "filter": {"name": "Pets", "value": "pets"} - }, - { - "type": "CheckBox", - "filter": {"name": "Police", "value": "police"} - }, - { - "type": "CheckBox", - "filter": {"name": "Psychological", "value": "psychological"} - }, - { - "type": "CheckBox", - "filter": {"name": "Racing", "value": "racing"} - }, - { - "type": "CheckBox", - "filter": {"name": "Reincarnation", "value": "reincarnation"} - }, - { - "type": "CheckBox", - "filter": {"name": "Romance", "value": "romance"} - }, - { - "type": "CheckBox", - "filter": {"name": "Romantic Subtext", "value": "romantic-subtext"} - }, - { - "type": "CheckBox", - "filter": {"name": "Samurai", "value": "samurai"} - }, - { - "type": "CheckBox", - "filter": {"name": "School", "value": "school"} - }, - { - "type": "CheckBox", - "filter": {"name": "Sci-Fi", "value": "sci-fi"} - }, - { - "type": "CheckBox", - "filter": {"name": "Seinen", "value": "seinen"} - }, - { - "type": "CheckBox", - "filter": {"name": "Shoujo", "value": "shoujo"} - }, - { - "type": "CheckBox", - "filter": {"name": "Shoujo Ai", "value": "shoujo-ai"} - }, - { - "type": "CheckBox", - "filter": {"name": "Shounen", "value": "shounen"} - }, - { - "type": "CheckBox", - "filter": {"name": "Showbiz", "value": "showbiz"} - }, - { - "type": "CheckBox", - "filter": {"name": "Slice of Life", "value": "slice-of-life"} - }, - { - "type": "CheckBox", - "filter": {"name": "Space", "value": "space"} - }, - { - "type": "CheckBox", - "filter": {"name": "Sports", "value": "sports"} - }, - { - "type": "CheckBox", - "filter": {"name": "Strategy Game", "value": "strategy-game"} - }, - { - "type": "CheckBox", - "filter": {"name": "Super Power", "value": "super-power"} - }, - { - "type": "CheckBox", - "filter": {"name": "Supernatural", "value": "supernatural"} - }, - { - "type": "CheckBox", - "filter": {"name": "Survival", "value": "survival"} - }, - { - "type": "CheckBox", - "filter": {"name": "Suspense", "value": "suspense"} - }, - { - "type": "CheckBox", - "filter": {"name": "Team Sports", "value": "team-sports"} - }, - { - "type": "CheckBox", - "filter": {"name": "Thriller", "value": "thriller"} - }, - { - "type": "CheckBox", - "filter": {"name": "Time Travel", "value": "time-travel"} - }, - { - "type": "CheckBox", - "filter": {"name": "Vampire", "value": "vampire"} - }, - { - "type": "CheckBox", - "filter": {"name": "Visual Arts", "value": "visual-arts"} - }, - { - "type": "CheckBox", - "filter": {"name": "Work Life", "value": "work-life"} - }, - { - "type": "CheckBox", - "filter": {"name": "Workplace", "value": "workplace"} - }, - { - "type": "CheckBox", - "filter": {"name": "Yaoi", "value": "yaoi"} - }, - { - "type": "CheckBox", - "filter": {"name": "Yuri", "value": "yuri"} - } - ]), - GroupFilter("CountryFilter", "Country", - [CheckBoxFilter("China", "5"), CheckBoxFilter("Japan", "2")]), - GroupFilter("SeasonFilter", "Season", [ - CheckBoxFilter("Fall", "fall"), - CheckBoxFilter("Summer", "summer"), - CheckBoxFilter("Spring", "spring"), - CheckBoxFilter("Winter", "winter"), - ]), - GroupFilter("YearFilter", "Year", [ - CheckBoxFilter("2023", "2023"), - CheckBoxFilter("2022", "2022"), - CheckBoxFilter("2021", "2021"), - CheckBoxFilter("2020", "2020"), - CheckBoxFilter("2019", "2019"), - CheckBoxFilter("2018", "2018"), - CheckBoxFilter("2017", "2017"), - CheckBoxFilter("2016", "2016"), - CheckBoxFilter("2015", "2015"), - CheckBoxFilter("2014", "2014"), - CheckBoxFilter("2013", "2013"), - CheckBoxFilter("2012", "2012"), - CheckBoxFilter("2011", "2011"), - CheckBoxFilter("2010", "2010"), - CheckBoxFilter("2009", "2009"), - CheckBoxFilter("2008", "2008"), - CheckBoxFilter("2007", "2007"), - CheckBoxFilter("2006", "2006"), - CheckBoxFilter("2005", "2005"), - CheckBoxFilter("2004", "2004"), - CheckBoxFilter("2003", "2003"), - CheckBoxFilter("2002", "2002"), - CheckBoxFilter("2001", "2001"), - CheckBoxFilter("2000", "2000"), - CheckBoxFilter("1999", "1999"), - ]), - GroupFilter("LanguageFilter", "Language", [ - CheckBoxFilter("Sub & Dub", "subdub"), - CheckBoxFilter("Sub", "sub"), - CheckBoxFilter("Dub", "dub"), - ]), - GroupFilter("TypeFilter", "Type", [ - CheckBoxFilter("Movie", "3"), - CheckBoxFilter("TV", "1"), - CheckBoxFilter("OVA", "26"), - CheckBoxFilter("ONA", "30"), - CheckBoxFilter("Special", "2"), - CheckBoxFilter("Music", "32"), - ]), - GroupFilter("StatusFilter", "Status", [ - CheckBoxFilter("Not Yet Aired", "Upcoming"), - CheckBoxFilter("Ongoing", "Ongoing"), - CheckBoxFilter("Completed", "Completed") - ]), - SelectFilter("SortFilter", "Sort by", 0, [ - SelectFilterOption("Name A-Z", "title_az"), - SelectFilterOption("Recently updated", "recently_updated"), - SelectFilterOption("Recently added", "recently_added"), - SelectFilterOption("Release date", "release_date") - ]), - SeparatorFilter(), - HeaderFilter("Select sub-page"), - HeaderFilter("Note: Ignores search & other filters"), - SelectFilter("GenreIFilter", "Genre", 0, [ - { - "type": "SelectOption", - "filter": {"name": "", "value": ""} - }, - { - "type": "SelectOption", - "filter": {"name": "Action", "value": "action"} - }, - { - "type": "SelectOption", - "filter": {"name": "Adult Cast", "value": "adult-cast"} - }, - { - "type": "SelectOption", - "filter": {"name": "Adventure", "value": "adventure"} - }, - { - "type": "SelectOption", - "filter": {"name": "Anthropomorphic", "value": "anthropomorphic"} - }, - { - "type": "SelectOption", - "filter": {"name": "Avant Garde", "value": "avant-garde"} - }, - { - "type": "SelectOption", - "filter": {"name": "Boys Love", "value": "shounen-ai"} - }, - { - "type": "SelectOption", - "filter": {"name": "Cars", "value": "cars"} - }, - { - "type": "SelectOption", - "filter": {"name": "CGDCT", "value": "cgdct"} - }, - { - "type": "SelectOption", - "filter": {"name": "Childcare", "value": "childcare"} - }, - { - "type": "SelectOption", - "filter": {"name": "Comedy", "value": "comedy"} - }, - { - "type": "SelectOption", - "filter": {"name": "Comic", "value": "comic"} - }, - { - "type": "SelectOption", - "filter": {"name": "Crime", "value": "crime"} - }, - { - "type": "SelectOption", - "filter": {"name": "Crossdressing", "value": "crossdressing"} - }, - { - "type": "SelectOption", - "filter": {"name": "Delinquents", "value": "delinquents"} - }, - { - "type": "SelectOption", - "filter": {"name": "Dementia", "value": "dementia"} - }, - { - "type": "SelectOption", - "filter": {"name": "Demons", "value": "demons"} - }, - { - "type": "SelectOption", - "filter": {"name": "Detective", "value": "detective"} - }, - { - "type": "SelectOption", - "filter": {"name": "Drama", "value": "drama"} - }, - { - "type": "SelectOption", - "filter": {"name": "Dub", "value": "dub"} - }, - { - "type": "SelectOption", - "filter": {"name": "Ecchi", "value": "ecchi"} - }, - { - "type": "SelectOption", - "filter": {"name": "Erotica", "value": "erotica"} - }, - { - "type": "SelectOption", - "filter": {"name": "Family", "value": "family"} - }, - { - "type": "SelectOption", - "filter": {"name": "Fantasy", "value": "fantasy"} - }, - { - "type": "SelectOption", - "filter": {"name": "Gag Humor", "value": "gag-humor"} - }, - { - "type": "SelectOption", - "filter": {"name": "Game", "value": "game"} - }, - { - "type": "SelectOption", - "filter": {"name": "Gender Bender", "value": "gender-bender"} - }, - { - "type": "SelectOption", - "filter": {"name": "Gore", "value": "gore"} - }, - { - "type": "SelectOption", - "filter": {"name": "Gourmet", "value": "gourmet"} - }, - { - "type": "SelectOption", - "filter": {"name": "Harem", "value": "harem"} - }, - { - "type": "SelectOption", - "filter": {"name": "Hentai", "value": "hentai"} - }, - { - "type": "SelectOption", - "filter": {"name": "High Stakes Game", "value": "high-stakes-game"} - }, - { - "type": "SelectOption", - "filter": {"name": "Historical", "value": "historical"} - }, - { - "type": "SelectOption", - "filter": {"name": "Horror", "value": "horror"} - }, - { - "type": "SelectOption", - "filter": {"name": "Isekai", "value": "isekai"} - }, - { - "type": "SelectOption", - "filter": {"name": "Iyashikei", "value": "iyashikei"} - }, - { - "type": "SelectOption", - "filter": {"name": "Josei", "value": "josei"} - }, - { - "type": "SelectOption", - "filter": {"name": "Kids", "value": "kids"} - }, - { - "type": "SelectOption", - "filter": {"name": "Magic", "value": "magic"} - }, - { - "type": "SelectOption", - "filter": {"name": "Magical Sex Shift", "value": "magical-sex-shift"} - }, - { - "type": "SelectOption", - "filter": {"name": "Mahou Shoujo", "value": "mahou-shoujo"} - }, - { - "type": "SelectOption", - "filter": {"name": "Martial Arts", "value": "martial-arts"} - }, - { - "type": "SelectOption", - "filter": {"name": "Mecha", "value": "mecha"} - }, - { - "type": "SelectOption", - "filter": {"name": "Medical", "value": "medical"} - }, - { - "type": "SelectOption", - "filter": {"name": "Military", "value": "military"} - }, - { - "type": "SelectOption", - "filter": {"name": "Music", "value": "music"} - }, - { - "type": "SelectOption", - "filter": {"name": "Mystery", "value": "mystery"} - }, - { - "type": "SelectOption", - "filter": {"name": "Mythology", "value": "mythology"} - }, - { - "type": "SelectOption", - "filter": {"name": "Organized Crime", "value": "organized-crime"} - }, - { - "type": "SelectOption", - "filter": {"name": "Parody", "value": "parody"} - }, - { - "type": "SelectOption", - "filter": {"name": "Performing Arts", "value": "performing-arts"} - }, - { - "type": "SelectOption", - "filter": {"name": "Pets", "value": "pets"} - }, - { - "type": "SelectOption", - "filter": {"name": "Police", "value": "police"} - }, - { - "type": "SelectOption", - "filter": {"name": "Psychological", "value": "psychological"} - }, - { - "type": "SelectOption", - "filter": {"name": "Racing", "value": "racing"} - }, - { - "type": "SelectOption", - "filter": {"name": "Reincarnation", "value": "reincarnation"} - }, - { - "type": "SelectOption", - "filter": {"name": "Romance", "value": "romance"} - }, - { - "type": "SelectOption", - "filter": {"name": "Romantic Subtext", "value": "romantic-subtext"} - }, - { - "type": "SelectOption", - "filter": {"name": "Samurai", "value": "samurai"} - }, - { - "type": "SelectOption", - "filter": {"name": "School", "value": "school"} - }, - { - "type": "SelectOption", - "filter": {"name": "Sci-Fi", "value": "sci-fi"} - }, - { - "type": "SelectOption", - "filter": {"name": "Seinen", "value": "seinen"} - }, - { - "type": "SelectOption", - "filter": {"name": "Shoujo", "value": "shoujo"} - }, - { - "type": "SelectOption", - "filter": {"name": "Shoujo Ai", "value": "shoujo-ai"} - }, - { - "type": "SelectOption", - "filter": {"name": "Shounen", "value": "shounen"} - }, - { - "type": "SelectOption", - "filter": {"name": "Showbiz", "value": "showbiz"} - }, - { - "type": "SelectOption", - "filter": {"name": "Slice of Life", "value": "slice-of-life"} - }, - { - "type": "SelectOption", - "filter": {"name": "Space", "value": "space"} - }, - { - "type": "SelectOption", - "filter": {"name": "Sports", "value": "sports"} - }, - { - "type": "SelectOption", - "filter": {"name": "Strategy Game", "value": "strategy-game"} - }, - { - "type": "SelectOption", - "filter": {"name": "Super Power", "value": "super-power"} - }, - { - "type": "SelectOption", - "filter": {"name": "Supernatural", "value": "supernatural"} - }, - { - "type": "SelectOption", - "filter": {"name": "Survival", "value": "survival"} - }, - { - "type": "SelectOption", - "filter": {"name": "Suspense", "value": "suspense"} - }, - { - "type": "SelectOption", - "filter": {"name": "Team Sports", "value": "team-sports"} - }, - { - "type": "SelectOption", - "filter": {"name": "Thriller", "value": "thriller"} - }, - { - "type": "SelectOption", - "filter": {"name": "Time Travel", "value": "time-travel"} - }, - { - "type": "SelectOption", - "filter": {"name": "Vampire", "value": "vampire"} - }, - { - "type": "SelectOption", - "filter": {"name": "Visual Arts", "value": "visual-arts"} - }, - { - "type": "SelectOption", - "filter": {"name": "Work Life", "value": "work-life"} - }, - { - "type": "SelectOption", - "filter": {"name": "Workplace", "value": "workplace"} - }, - { - "type": "SelectOption", - "filter": {"name": "Yaoi", "value": "yaoi"} - }, - { - "type": "SelectOption", - "filter": {"name": "Yuri", "value": "yuri"} - } - ]), - SelectFilter("RecentFilter", "Recent", 0, [ - SelectFilterOption("", ""), - SelectFilterOption("Recent Release", "1"), - SelectFilterOption("Recent Dub", "2"), - SelectFilterOption("Recent Chinese", "3") - ]), - SelectFilter("SeasonIFilter", "Season", 0, [ - SelectFilterOption("", ""), - SelectFilterOption("Latest season", "new-season.html"), - SelectFilterOption("Summer 2023", "sub-category/summer-2023-anime"), - SelectFilterOption("Spring 2023", "sub-category/spring-2023-anime"), - SelectFilterOption("Winter 2023", "sub-category/winter-2023-anime"), - SelectFilterOption("Fall 2022", "sub-category/fall-2022-anime"), - SelectFilterOption("Summer 2022", "sub-category/summer-2022-anime"), - SelectFilterOption("Spring 2022", "sub-category/spring-2022-anime"), - SelectFilterOption("Winter 2022", "sub-category/winter-2022-anime"), - SelectFilterOption("Fall 2021", "sub-category/fall-2021-anime"), - SelectFilterOption("Summer 2021", "sub-category/summer-2021-anime"), - SelectFilterOption("Spring 2021", "sub-category/spring-2021-anime"), - SelectFilterOption("Winter 2021", "sub-category/winter-2021-anime"), - SelectFilterOption("Fall 2020", "sub-category/fall-2020-anime"), - SelectFilterOption("Summer 2020", "sub-category/summer-2020-anime"), - SelectFilterOption("Spring 2020", "sub-category/spring-2020-anime"), - SelectFilterOption("Winter 2020", "sub-category/winter-2020-anime"), - SelectFilterOption("Fall 2019", "sub-category/fall-2019-anime"), - SelectFilterOption("Summer 2019", "sub-category/summer-2019-anime"), - SelectFilterOption("Spring 2019", "sub-category/spring-2019-anime"), - SelectFilterOption("Winter 2019", "sub-category/winter-2019-anime"), - SelectFilterOption("Fall 2018", "sub-category/fall-2018-anime"), - SelectFilterOption("Summer 2018", "sub-category/summer-2018-anime"), - SelectFilterOption("Spring 2018", "sub-category/spring-2018-anime"), - SelectFilterOption("Winter 2018", "sub-category/winter-2018-anime"), - SelectFilterOption("Fall 2017", "sub-category/fall-2017-anime"), - SelectFilterOption("Summer 2017", "sub-category/summer-2017-anime"), - SelectFilterOption("Spring 2017", "sub-category/spring-2017-anime"), - SelectFilterOption("Winter 2017", "sub-category/winter-2017-anime"), - SelectFilterOption("Fall 2016", "sub-category/fall-2016-anime"), - SelectFilterOption("Summer 2016", "sub-category/summer-2016-anime"), - SelectFilterOption("Spring 2016", "sub-category/spring-2016-anime"), - SelectFilterOption("Winter 2016", "sub-category/winter-2016-anime"), - SelectFilterOption("Fall 2015", "sub-category/fall-2015-anime"), - SelectFilterOption("Summer 2015", "sub-category/summer-2015-anime"), - SelectFilterOption("Spring 2015", "sub-category/spring-2015-anime"), - SelectFilterOption("Winter 2015", "sub-category/winter-2015-anime"), - SelectFilterOption("Fall 2014", "sub-category/fall-2014-anime"), - SelectFilterOption("Summer 2014", "sub-category/summer-2014-anime"), - SelectFilterOption("Spring 2014", "sub-category/spring-2014-anime"), - SelectFilterOption("Winter 2014", "sub-category/winter-2014-anime") - ]), - ]; - } - - @override - List getSourcePreferences() { - return [ - EditTextPreference( - key: "override_baseurl_v${source.id}", - title: "Override BaseUrl", - summary: - "For temporary uses. Updating the extension will erase this setting.", - value: "https://anitaku.to", - dialogTitle: "Override BaseUrl", - dialogMessage: "Default: https://anitaku.to", - text: "https://anitaku.to"), - ListPreference( - key: "preferred_quality", - title: "Preferred quality", - summary: "", - valueIndex: 0, - entries: ["1080p", "720p", "480p", "360p"], - entryValues: ["1080", "720", "480", "360"]), - ListPreference( - key: "preferred_server", - title: "Preferred server", - summary: "", - valueIndex: 0, - entries: [ - "Gogostream", - "Vidstreaming", - "Doodstream", - "StreamWish", - "Mp4upload", - "FileLions" - ], - entryValues: [ - "Gogostream", - "Vidstreaming", - "Doodstream", - "StreamWish", - "Mp4upload", - "FileLions" - ]), - MultiSelectListPreference( - key: "hoster_selection", - title: "Enable/Disable Hosts", - summary: "", - entries: [ - "Gogostream", - "Vidstreaming", - "Doodstream", - "StreamWish", - "Mp4upload", - "FileLions" - ], - entryValues: [ - "vidcdn", - "anime", - "doodstream", - "streamwish", - "mp4upload", - "filelions" - ], - values: [ - "vidcdn", - "anime", - "doodstream", - "streamwish", - "mp4upload", - "filelions" - ]), - ]; - } - - List preferenceHosterSelection(int sourceId) { - return getPreferenceValue(sourceId, "hoster_selection"); - } - - List sortVideos(List videos, int sourceId) { - String quality = getPreferenceValue(sourceId, "preferred_quality"); - String server = getPreferenceValue(sourceId, "preferred_server"); - - videos.sort((MVideo a, MVideo b) { - int qualityMatchA = 0; - if (a.quality.contains(quality) && a.quality.contains(server)) { - qualityMatchA = 1; - } - int qualityMatchB = 0; - if (b.quality.contains(quality) && b.quality.contains(server)) { - qualityMatchB = 1; - } - if (qualityMatchA != qualityMatchB) { - return qualityMatchB - qualityMatchA; - } - - final regex = RegExp(r'(\d+)p'); - final matchA = regex.firstMatch(a.quality); - final matchB = regex.firstMatch(b.quality); - final int qualityNumA = int.tryParse(matchA?.group(1) ?? '0') ?? 0; - final int qualityNumB = int.tryParse(matchB?.group(1) ?? '0') ?? 0; - return qualityNumB - qualityNumA; - }); - - return videos; - } -} - -GogoAnime main(MSource source) { - return GogoAnime(source: source); -} diff --git a/dart/anime/src/en/gogoanime/icon.png b/dart/anime/src/en/gogoanime/icon.png deleted file mode 100644 index 29abaec0eb81ae15a78bd9fa68e7663fb7f8103d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2993 zcmV;i3r_TjP)+fkcX8v3{%t#op@!p<=b_)k~kYYHM5Ut%BEQ6^pf6MWqFc zphXJQKtwU62DIf7K}1m$%R^oQAtA5LbCccdd*<|yjfwdL+Hh}Dh@9`|vwvjv%-NaW zcg}CloH>&Li9{liNF)-8L?V$$PA8QA!#cx(`+&(nHXu4br)&Hapb=OL%mR)K^&@GHLV)A5hbmf~FIw^f4LN{*Tp(w16fcOUAZO)O5Cjer*9x z8P`7J?rXsl5fGDc?K8=N5FqJ0LJAlpNC8rS6d;iTqyUK&AO%RI04YEs1xNuBDL@L4 zNC8rSL<*1sBvODBaLVA#)F^&94~sc9n%)_+4N6%7PV&^h!)uC!@Q)E@O%WMxlh|KUAW9ecL~vb^m^jwnqwGkZMTq^Qh4|o1 z0f@;LIz@2p8RF%I!$i%hLNP2?8^~>K`rHZFwx~e-;aB-$bfHB6V)J~jSo=GV0K^?r z(nYwuNLb8@0K_?GSVh~qk>c*#vV}KS6Lza2^tVQeo4-Cp0Akt9JW=|1{wX0qIY9ww zC!^^teJBr4w#KAs)c}ksvaor+kNj&Yh{jVhK=zds@I-MdOV$KAyt0tFue36EMF4dud2^=;Qy8{dZB@%~F6apO> zwN3E;C;w`bn@P(Ot#5K|a(R2$)V zj9@$hu?~dYh1upHp~pcrVJZKZ_^+2kB>w;2zf)eos>k!$vO5aES4P?J<(Ww&b?jD! ztRX7F4g;G7MtICvG`MoSo0%^(;c}Q5|0O%avNT5eG@=QC%cc-dfXksUs=!S7_Rl1M z(YZ|4hw`oLQG7LLIPJ+8&mVjrx7*C}qdV|-RD!B;)5vlBK#b8roz+`9xZyGLSQS=PCh)f;Dcuy}izBUA%@7O=KB?@PJ`!6#Vb!I7huXdD zY^z5B4%F;sz5gJQWCHANemG(*zYOh0yt)RR=K~;23fSD#M}y?rT+F`wc9t8JyjxNNuk9Fo7h>yX4`tev zG&Jq_9WT38VN{`+40md?&K_Z5+_`pqIsJ2-m^C=>92-T$%)P&iB`{vz3^{Iws21#s z26}>vvWGMCOJ8FT%`D#eH<-VP{(L0v-y)zOM`hyFOo}`j^X|;#Pfz9^v)uFdX0d;F z5lbG(!frG1@yo+`@9$@^Z068^TK^v(&0+b&y?cE>nB?SzUvxiHvhlZhY~N78p?3<2 zygh=&zszC$nC`1+W91f<1C4AnHB(-D043AMR{vrCdrv8gDmKGoulHN-|F;Ra_96#+ zRu6}Eoo)MK*enX)zbBgymU(endbS3`030SpdNpEkgZV20Y+Kt#$@Z!jmQTIf&C<06T>DiA067^d7hUBhur11c_xgE#Q<&>6aq!kM9~&2XDDtFQg|hf< zRz)j$BX}4!%g0k4+j;fi7Lc_C`5>f`e@( zUhL*>30rr^AY_n8rey4|iqalQaG>hgx%xPx62@UmZHMvRKA8O)YHk)vwhMJv1InGt z5!*i*kQfcvNqFj2ZWfdcgY8i|8k0B+EhKe;ZU|6;R-MsTIC=Z|JkI}N9RLSwk`OY` zjZT4+oQ%6RjdxcEDc>ILQU6mv&EUG9XAs>Q#^%)sMp7$TR9OF_hnA0`xGf6K&cL4G z)xdzwyP~~LHETHUpPE6|{<49b!qU8}uIaUv-|1yPxxN?@#NQ zG`#_Q=B_fUW(@_KLcwKK)KnxGmaBCNFoUMByCTu2eGrH12R!%#B4EO~HWt6=frlhgG3$rI*I7A)YF3qrO=Oi^9q`!+arM&@$xTzL2g*WC5W!#r-G_|Gz9*zpop(7@`dNNb)%c68<13Rlzbu_gZP?z9| z+cNN6?BF-gwszHhq&7h!ky>{|o(2{Z-+s7}8-LNj?^m{ez6AJkHNG)Di+k?&bIa4s z-2XrWoa5k`J2C-O{l8Ep_-m~xO8iT-%t0G`JZ;qKHo-TK<^s0Bq0bzQbBy= zN9hn3{9smhU%WA(6ORM=DxvoxEc|On*LO$#I`yqOX)Y6a=_W`B&M7)Ij{JTXu;9*2 zI1=aS&LeA9NgH#f*KqsXd~!2X{`h(bmrbD~COA^B_geps1+BdQQaj{pD4jjiNK`;f zq`I!a)cHJG*x|D@|qkP3in~ zp@*-Xq?2;L2$(X#Nvtl(VC`prTzR1#&a!|>Vd=v;y!!_a zyO#Ob`>KzheRBv~K8WzvN70iapkFS;bVKmt$B%y-^pc;~@k-plswwO|6sNXPKW^Ds zD}$tGshAYlaVXB87qoWe`bDdcJtXnii|u5m^*)wbf(Cml6I9mgI2Q)6Mh!44=mOr{ z8Rd;FVK$$nz< _gogoanimeSource; -const _gogoanimeVersion = "0.0.9"; -const _gogoanimeSourceCodeUrl = - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/en/gogoanime/gogoanime.dart"; -Source _gogoanimeSource = Source( - name: "Gogoanime", - baseUrl: "https://anitaku.to", - lang: "en", - typeSource: "single", - iconUrl: - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/en/gogoanime/icon.png", - sourceCodeUrl: _gogoanimeSourceCodeUrl, - version: _gogoanimeVersion, - isManga: false); diff --git a/dart/anime/src/en/kisskh/icon.png b/dart/anime/src/en/kisskh/icon.png deleted file mode 100644 index 5c440d80beb67f246591a19b6f9998f557522039..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3012 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 getPopular(int page) async { - final res = (await client.get(Uri.parse( - "${source.baseUrl}/api/DramaList/List?page=$page&type=0&sub=0&country=0&status=0&order=1&pageSize=40"))) - .body; - final jsonRes = json.decode(res); - final datas = jsonRes["data"]; - List animeList = []; - - for (var data in datas) { - MManga anime = MManga(); - anime.name = data["title"]; - anime.imageUrl = data["thumbnail"] ?? ""; - anime.link = - "${source.baseUrl}/api/DramaList/Drama/${data["id"]}?isq=false"; - animeList.add(anime); - } - - int lastPage = jsonRes["totalCount"]; - int pages = jsonRes["page"]; - return MPages(animeList, pages < lastPage); - } - - @override - Future getLatestUpdates(int page) async { - final res = (await client.get(Uri.parse( - "${source.baseUrl}/api/DramaList/List?page=$page&type=0&sub=0&country=0&status=0&order=12&pageSize=40"))) - .body; - final jsonRes = json.decode(res); - final datas = jsonRes["data"]; - - List animeList = []; - - for (var data in datas) { - MManga anime = MManga(); - anime.name = data["title"]; - anime.imageUrl = data["thumbnail"] ?? ""; - anime.link = - "${source.baseUrl}/api/DramaList/Drama/${data["id"]}?isq=false"; - animeList.add(anime); - } - - int lastPage = jsonRes["totalCount"]; - int pages = jsonRes["page"]; - return MPages(animeList, pages < lastPage); - } - - @override - Future search(String query, int page, FilterList filterList) async { - final res = (await client.get(Uri.parse( - "${source.baseUrl}/api/DramaList/Search?q=$query&type=0"))) - .body; - final jsonRes = json.decode(res); - List animeList = []; - for (var data in jsonRes) { - MManga anime = MManga(); - anime.name = data["title"]; - anime.imageUrl = data["thumbnail"] ?? ""; - anime.link = - "${source.baseUrl}/api/DramaList/Drama/${data["id"]}?isq=false"; - animeList.add(anime); - } - return MPages(animeList, false); - } - - @override - Future getDetail(String url) async { - final statusList = [ - {"Ongoing": 0, "Completed": 1} - ]; - final res = (await client.get(Uri.parse(url))).body; - MManga anime = MManga(); - final jsonRes = json.decode(res); - final status = jsonRes["status"] ?? ""; - anime.description = jsonRes["description"]; - anime.status = parseStatus(status, statusList); - anime.imageUrl = jsonRes["thumbnail"]; - var episodes = jsonRes["episodes"]; - String type = jsonRes["type"]; - final episodesCount = jsonRes["episodesCount"] as int; - final containsAnime = type.contains("Anime"); - final containsTVSeries = type.contains("TVSeries"); - final containsHollywood = type.contains("Hollywood"); - final containsMovie = type.contains("Movie"); - List? episodesList = []; - - for (var a in episodes) { - MChapter episode = MChapter(); - String number = (a["number"] as double).toString().replaceAll(".0", ""); - final id = a["id"]; - if (containsAnime || containsTVSeries) { - episode.name = "Episode $number"; - } else if (containsHollywood && episodesCount == 1 || containsMovie) { - episode.name = "Movie"; - } else if (containsHollywood && episodesCount > 1) { - episode.name = "Episode $number"; - } - episode.url = - "${source.baseUrl}/api/DramaList/Episode/$id.png?err=false&ts=&time="; - episodesList.add(episode); - } - - anime.chapters = episodesList; - return anime; - } - - @override - Future> getVideoList(String url) async { - final res = (await client.get(Uri.parse(url))).body; - final id = substringAfter(substringBefore(url, ".png"), "Episode/"); - final jsonRes = json.decode(res); - - final subRes = - (await client.get(Uri.parse("${source.baseUrl}/api/Sub/$id"))).body; - var jsonSubRes = json.decode(subRes); - - List subtitles = []; - - for (var sub in jsonSubRes) { - try { - final subUrl = sub["src"]; - final label = sub["label"]; - MTrack subtitle = MTrack(); - subtitle - ..label = label - ..file = subUrl; - subtitles.add(subtitle); - } catch (_) {} - } - final videoUrl = jsonRes["Video"]; - MVideo video = MVideo(); - video - ..url = videoUrl - ..originalUrl = videoUrl - ..quality = "kisskh" - ..subtitles = subtitles - ..headers = { - "referer": "https://kisskh.me/", - "origin": "https://kisskh.me" - }; - return [video]; - } -} - -KissKh main(MSource source) { - return KissKh(source: source); -} diff --git a/dart/anime/src/en/kisskh/source.dart b/dart/anime/src/en/kisskh/source.dart deleted file mode 100644 index 824f368c..00000000 --- a/dart/anime/src/en/kisskh/source.dart +++ /dev/null @@ -1,16 +0,0 @@ -import '../../../../../model/source.dart'; - -Source get kisskhSource => _kisskhSource; -const _kisskhVersion = "0.0.55"; -const _kisskhSourceCodeUrl = - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/en/kisskh/kisskh.dart"; -Source _kisskhSource = Source( - name: "KissKH", - baseUrl: "https://kisskh.co", - lang: "en", - typeSource: "single", - iconUrl: - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/en/kisskh/icon.png", - sourceCodeUrl: _kisskhSourceCodeUrl, - version: _kisskhVersion, - isManga: false); diff --git a/dart/anime/src/en/nineanimetv/icon.png b/dart/anime/src/en/nineanimetv/icon.png deleted file mode 100644 index e57234ee0c6cbd70c221ed2a2f4e729b0fc5d3ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6623 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 getPopular(int page) async { - final res = (await client - .get(Uri.parse("${source.baseUrl}/filter?sort=all&page=$page"))) - .body; - return parseAnimeList(res); - } - - @override - Future getLatestUpdates(int page) async { - final res = (await client.get(Uri.parse( - "${source.baseUrl}/filter?sort=recently_updated&page=$page"))) - .body; - return parseAnimeList(res); - } - - @override - Future search(String query, int page, FilterList filterList) async { - final filters = filterList.filters; - String url = "${source.baseUrl}/filter?keyword=$query"; - - for (var filter in filters) { - if (filter.type == "GenreFilter") { - final genre = (filter.state as List).where((e) => e.state).toList(); - url += "${ll(url)}genre="; - if (genre.isNotEmpty) { - for (var st in genre) { - url += "${st.value}"; - if (genre.length > 1) { - url += "%2C"; - } - } - if (genre.length > 1) { - url = substringBeforeLast(url, '%2C'); - } - } - } else if (filter.type == "SeasonFilter") { - final season = (filter.state as List).where((e) => e.state).toList(); - url += "${ll(url)}season="; - if (season.isNotEmpty) { - for (var st in season) { - url += "${st.value}"; - if (season.length > 1) { - url += "%2C"; - } - } - if (season.length > 1) { - url = substringBeforeLast(url, '%2C'); - } - } - } else if (filter.type == "YearFilter") { - final year = (filter.state as List).where((e) => e.state).toList(); - url += "${ll(url)}year="; - if (year.isNotEmpty) { - for (var st in year) { - url += "${st.value}"; - if (year.length > 1) { - url += "%2C"; - } - } - if (year.length > 1) { - url = substringBeforeLast(url, '%2C'); - } - } - } else if (filter.type == "TypeFilter") { - final type = (filter.state as List).where((e) => e.state).toList(); - url += "${ll(url)}type="; - if (type.isNotEmpty) { - for (var st in type) { - url += "${st.value}"; - if (type.length > 1) { - url += "%2C"; - } - } - if (type.length > 1) { - url = substringBeforeLast(url, '%2C'); - } - } - } else if (filter.type == "StatusFilter") { - final status = filter.values[filter.state].value; - url += "${ll(url)}status=$status"; - } else if (filter.type == "LanguageFilter") { - final language = (filter.state as List).where((e) => e.state).toList(); - url += "${ll(url)}language="; - if (language.isNotEmpty) { - for (var st in language) { - url += "${st.value}"; - if (language.length > 1) { - url += "%2C"; - } - } - if (language.length > 1) { - url = substringBeforeLast(url, '%2C'); - } - } - } else if (filter.type == "SortFilter") { - final sort = filter.values[filter.state].value; - url += "${ll(url)}sort=$sort"; - } - } - - final res = (await client.get(Uri.parse("$url&page=$page"))).body; - return parseAnimeList(res); - } - - @override - Future getDetail(String url) async { - final statusList = [ - {"Currently Airing": 0, "Finished Airing": 1} - ]; - - final res = (await client.get(Uri.parse("${source.baseUrl}$url"))).body; - MManga anime = MManga(); - final document = parseHtml(res); - final infoElement = document.selectFirst("div.film-infor"); - final status = infoElement.xpathFirst( - '//div[contains(text(),"Status:")]/following-sibling::div/span/text()') ?? - ""; - anime.status = parseStatus(status, statusList); - anime.description = - infoElement.selectFirst("div.film-description > p")?.text ?? ""; - anime.author = infoElement.xpathFirst( - '//div[contains(text(),"Studios:")]/following-sibling::div/a/text()') ?? - ""; - - anime.genre = infoElement.xpath( - '//div[contains(text(),"Genre:")]/following-sibling::div/a/text()'); - final id = parseHtml(res).selectFirst("div[data-id]").attr("data-id"); - - final resEp = - (await client.get(Uri.parse("${source.baseUrl}/ajax/episode/list/$id"))) - .body; - final html = json.decode(resEp)["html"]; - - List? episodesList = []; - - final epsElements = parseHtml(html).select("a"); - for (var epElement in epsElements) { - final id = epElement.attr('data-id'); - - final title = epElement.attr('title') ?? ""; - - final epNum = epElement.attr('data-number'); - - MChapter episode = MChapter(); - episode.name = "Episode $epNum $title"; - episode.url = id; - episodesList.add(episode); - } - anime.chapters = episodesList.reversed.toList(); - return anime; - } - - @override - Future> getVideoList(String url) async { - final res = (await client.get( - Uri.parse("${source.baseUrl}/ajax/episode/servers?episodeId=$url"))) - .body; - - final html = json.decode(res)["html"]; - - final serverElements = parseHtml(html).select("div.server-item"); - - List videos = []; - final hosterSelection = preferenceHosterSelection(source.id); - final typeSelection = preferenceTypeSelection(source.id); - for (var serverElement in serverElements) { - final name = serverElement.text; - final id = serverElement.attr("data-id"); - final subDub = serverElement.attr("data-type"); - final res = (await client - .get(Uri.parse("${source.baseUrl}/ajax/episode/sources?id=$id"))) - .body; - final epUrl = json.decode(res)["link"]; - List a = []; - - if (hosterSelection.contains(name) && typeSelection.contains(subDub)) { - if (name.contains("Vidstreaming")) { - a = await rapidCloudExtractor(epUrl, "Vidstreaming - $subDub"); - } else if (name.contains("Vidcloud")) { - a = await rapidCloudExtractor(epUrl, "Vidcloud - $subDub"); - } - videos.addAll(a); - } - } - - return sortVideos(videos, source.id); - } - - MPages parseAnimeList(String res) { - final elements = parseHtml(res).select("div.film_list-wrap > div"); - List animeList = []; - for (var element in elements) { - MManga anime = MManga(); - anime.name = element.selectFirst("div.film-detail > h3 > a").text; - anime.imageUrl = element.selectFirst(" div.film-poster > img").getSrc; - anime.link = element.selectFirst("div.film-detail > h3 > a").getHref; - animeList.add(anime); - } - - return MPages(animeList, true); - } - - Future> rapidCloudExtractor(String url, String name) async { - final serverUrl = ['https://megacloud.tv', 'https://rapid-cloud.co']; - - final serverType = url.startsWith('https://megacloud.tv') ? 0 : 1; - final sourceUrl = [ - '/embed-2/ajax/e-1/getSources?id=', - '/ajax/embed-6-v2/getSources?id=' - ]; - final sourceSpliter = ['/e-1/', '/embed-6-v2/']; - final id = url.split(sourceSpliter[serverType]).last.split('?').first; - final resServer = (await client.get( - Uri.parse('${serverUrl[serverType]}${sourceUrl[serverType]}$id'), - headers: {"X-Requested-With": "XMLHttpRequest"})) - .body; - final encrypted = getMapValue(resServer, "encrypted"); - String videoResJson = ""; - List videos = []; - if (encrypted == "true") { - final ciphered = getMapValue(resServer, "sources"); - List> indexPairs = await generateIndexPairs(serverType); - var password = ''; - String ciphertext = ciphered; - int index = 0; - for (List item in json.decode(json.encode(indexPairs))) { - int start = item.first + index; - int end = start + item.last; - String passSubstr = ciphered.substring(start, end); - password += passSubstr; - ciphertext = ciphertext.replaceFirst(passSubstr, ""); - index += item.last; - } - videoResJson = decryptAESCryptoJS(ciphertext, password); - } else { - videoResJson = resServer; - } - - String masterUrl = - ((json.decode(videoResJson) as List>) - .first)['file']; - String type = ((json.decode(videoResJson) as List>) - .first)['type']; - - final tracks = (json.decode(resServer)['tracks'] as List) - .where((e) => e['kind'] == 'captions' ? true : false) - .toList(); - List subtitles = []; - - for (var sub in tracks) { - try { - MTrack subtitle = MTrack(); - subtitle - ..label = sub["label"] - ..file = sub["file"]; - subtitles.add(subtitle); - } catch (_) {} - } - - if (type == "hls") { - final masterPlaylistRes = (await client.get(Uri.parse(masterUrl))).body; - - for (var it in substringAfter(masterPlaylistRes, "#EXT-X-STREAM-INF:") - .split("#EXT-X-STREAM-INF:")) { - final quality = - "${substringBefore(substringBefore(substringAfter(substringAfter(it, "RESOLUTION="), "x"), ","), "\n")}p"; - - String videoUrl = substringBefore(substringAfter(it, "\n"), "\n"); - - if (!videoUrl.startsWith("http")) { - videoUrl = - "${masterUrl.split("/").sublist(0, masterUrl.split("/").length - 1).join("/")}/$videoUrl"; - } - - MVideo video = MVideo(); - video - ..url = videoUrl - ..originalUrl = videoUrl - ..quality = "$name - $quality" - ..subtitles = subtitles; - videos.add(video); - } - } else { - MVideo video = MVideo(); - video - ..url = masterUrl - ..originalUrl = masterUrl - ..quality = "$name - Default" - ..subtitles = subtitles; - videos.add(video); - } - return videos; - } - - Future>> generateIndexPairs(int serverType) async { - final jsPlayerUrl = [ - "https://megacloud.tv/js/player/a/prod/e1-player.min.js", - "https://rapid-cloud.co/js/player/prod/e6-player-v2.min.js" - ]; - final scriptText = - (await client.get(Uri.parse(jsPlayerUrl[serverType]))).body; - - final switchCode = scriptText.substring( - scriptText.lastIndexOf('switch'), scriptText.indexOf('=partKey')); - - List indexes = []; - for (var variableMatch - in RegExp(r'=(\w+)').allMatches(switchCode).toList()) { - final regex = RegExp( - ',${(variableMatch as RegExpMatch).group(1)}=((?:0x)?([0-9a-fA-F]+))'); - Match? match = regex.firstMatch(scriptText); - - if (match != null) { - String value = match.group(1); - if (value.contains("0x")) { - indexes.add(int.parse(substringAfter(value, "0x"), radix: 16)); - } else { - indexes.add(int.parse(value)); - } - } - } - - return chunked(indexes, 2); - } - - List> chunked(List list, int size) { - List> chunks = []; - for (int i = 0; i < list.length; i += size) { - int end = list.length; - if (i + size < list.length) { - end = i + size; - } - chunks.add(list.sublist(i, end)); - } - return chunks; - } - - @override - List getFilterList() { - return [ - GroupFilter("GenreFilter", "Genre", [ - CheckBoxFilter("Action", "1"), - CheckBoxFilter("Adventure", "2"), - CheckBoxFilter("Cars", "3"), - CheckBoxFilter("Comedy", "4"), - CheckBoxFilter("Dementia", "5"), - CheckBoxFilter("Demons", "6"), - CheckBoxFilter("Drama", "8"), - CheckBoxFilter("Ecchi", "9"), - CheckBoxFilter("Fantasy", "10"), - CheckBoxFilter("Game", "11"), - CheckBoxFilter("Harem", "35"), - CheckBoxFilter("Historical", "13"), - CheckBoxFilter("Horror", "14"), - CheckBoxFilter("Isekai", "44"), - CheckBoxFilter("Josei", "43"), - CheckBoxFilter("Kids", "15"), - CheckBoxFilter("Magic", "16"), - CheckBoxFilter("Martial Arts", "17"), - CheckBoxFilter("Mecha", "18"), - CheckBoxFilter("Military", "38"), - CheckBoxFilter("Music", "19"), - CheckBoxFilter("Mystery", "7"), - CheckBoxFilter("Parody", "20"), - CheckBoxFilter("Police", "39"), - CheckBoxFilter("Psychological", "40"), - CheckBoxFilter("Romance", "22"), - CheckBoxFilter("Samurai", "21"), - CheckBoxFilter("School", "23"), - CheckBoxFilter("Sci-Fi", "24"), - CheckBoxFilter("Seinen", "42"), - CheckBoxFilter("Shoujo", "25"), - CheckBoxFilter("Shoujo Ai", "26"), - CheckBoxFilter("Shounen", "27"), - CheckBoxFilter("Shounen Ai", "28"), - CheckBoxFilter("Slice of Life", "36"), - CheckBoxFilter("Space", "29"), - CheckBoxFilter("Sports", "30"), - CheckBoxFilter("Super Power", "31"), - CheckBoxFilter("Supernatural", "37"), - CheckBoxFilter("Thriller", "41"), - CheckBoxFilter("Vampire", "32") - ]), - GroupFilter("SeasonFilter", "Season", [ - CheckBoxFilter("Fall", "3"), - CheckBoxFilter("Summer", "2"), - CheckBoxFilter("Spring", "1"), - CheckBoxFilter("Winter", "4") - ]), - GroupFilter("YearFilter", "Year", [ - CheckBoxFilter("2023", "2023"), - CheckBoxFilter("2022", "2022"), - CheckBoxFilter("2021", "2021"), - CheckBoxFilter("2020", "2020"), - CheckBoxFilter("2019", "2019"), - CheckBoxFilter("2018", "2018"), - CheckBoxFilter("2017", "2017"), - CheckBoxFilter("2016", "2016"), - CheckBoxFilter("2015", "2015"), - CheckBoxFilter("2014", "2014"), - CheckBoxFilter("2013", "2013"), - CheckBoxFilter("2012", "2012"), - CheckBoxFilter("2011", "2011"), - CheckBoxFilter("2010", "2010"), - CheckBoxFilter("2009", "2009"), - CheckBoxFilter("2008", "2008"), - CheckBoxFilter("2007", "2007"), - CheckBoxFilter("2006", "2006"), - CheckBoxFilter("2005", "2005"), - CheckBoxFilter("2004", "2004"), - CheckBoxFilter("2003", "2003"), - CheckBoxFilter("2002", "2002"), - CheckBoxFilter("2001", "2001") - ]), - SelectFilter("SortFilter", "Sort by", 0, [ - SelectFilterOption("All", "all"), - SelectFilterOption("Default", "default"), - SelectFilterOption("Recently Added", "recently_added"), - SelectFilterOption("Recently Updated", "recently_updated"), - SelectFilterOption("Score", "score"), - SelectFilterOption("Name A-Z", "name_az"), - SelectFilterOption("Released Date", "released_date"), - SelectFilterOption("Most Watched", "most_watched") - ]), - GroupFilter("TypeFilter", "Type", [ - CheckBoxFilter("Movie", "1"), - CheckBoxFilter("TV Series", "2"), - CheckBoxFilter("OVA", "3"), - CheckBoxFilter("ONA", "4"), - CheckBoxFilter("Special", "5"), - CheckBoxFilter("Music", "6") - ]), - SelectFilter("StatusFilter", "Status", 0, [ - SelectFilterOption("All", "all"), - SelectFilterOption("Finished Airing", "1"), - SelectFilterOption("Currently Airing", "2"), - SelectFilterOption("Not yet aired", "3") - ]), - GroupFilter("LanguageFilter", "Language", - [CheckBoxFilter("Sub", "sub"), CheckBoxFilter("Dub", "dub")]), - ]; - } - - @override - List getSourcePreferences() { - return [ - ListPreference( - key: "preferred_quality", - title: "Preferred Quality", - summary: "", - valueIndex: 1, - entries: ["1080p", "720p", "480p", "360p"], - entryValues: ["1080", "720", "480", "360"]), - ListPreference( - key: "preferred_server", - title: "Preferred server", - summary: "", - valueIndex: 0, - entries: ["Vidstreaming", "VidCloud"], - entryValues: ["Vidstreaming", "VidCloud"]), - ListPreference( - key: "preferred_type", - title: "Preferred Type", - summary: "", - valueIndex: 0, - entries: ["Sub", "Dub"], - entryValues: ["sub", "dub"]), - MultiSelectListPreference( - key: "hoster_selection", - title: "Enable/Disable Hosts", - summary: "", - entries: ["Vidstreaming", "VidCloud"], - entryValues: ["Vidstreaming", "Vidcloud"], - values: ["Vidstreaming", "Vidcloud"]), - MultiSelectListPreference( - key: "type_selection", - title: "Enable/Disable Types", - summary: "", - entries: ["Sub", "Dub"], - entryValues: ["sub", "dub"], - values: ["sub", "dub"]), - ]; - } - - List sortVideos(List videos, int sourceId) { - String quality = getPreferenceValue(sourceId, "preferred_quality"); - String server = getPreferenceValue(sourceId, "preferred_server"); - String type = getPreferenceValue(sourceId, "preferred_type"); - videos.sort((MVideo a, MVideo b) { - int qualityMatchA = 0; - - if (a.quality.contains(quality) && - a.quality.toLowerCase().contains(type.toLowerCase()) && - a.quality.toLowerCase().contains(server.toLowerCase())) { - qualityMatchA = 1; - } - int qualityMatchB = 0; - if (b.quality.contains(quality) && - b.quality.toLowerCase().contains(type.toLowerCase()) && - b.quality.toLowerCase().contains(server.toLowerCase())) { - qualityMatchB = 1; - } - if (qualityMatchA != qualityMatchB) { - return qualityMatchB - qualityMatchA; - } - - final regex = RegExp(r'(\d+)p'); - final matchA = regex.firstMatch(a.quality); - final matchB = regex.firstMatch(b.quality); - final int qualityNumA = int.tryParse(matchA?.group(1) ?? '0') ?? 0; - final int qualityNumB = int.tryParse(matchB?.group(1) ?? '0') ?? 0; - return qualityNumB - qualityNumA; - }); - return videos; - } - - List preferenceHosterSelection(int sourceId) { - return getPreferenceValue(sourceId, "hoster_selection"); - } - - List preferenceTypeSelection(int sourceId) { - return getPreferenceValue(sourceId, "type_selection"); - } - - String ll(String url) { - if (url.contains("?")) { - return "&"; - } - return "?"; - } -} - -NineAnimeTv main(MSource source) { - return NineAnimeTv(source: source); -} diff --git a/dart/anime/src/en/nineanimetv/source.dart b/dart/anime/src/en/nineanimetv/source.dart deleted file mode 100644 index adc00d53..00000000 --- a/dart/anime/src/en/nineanimetv/source.dart +++ /dev/null @@ -1,16 +0,0 @@ -import '../../../../../model/source.dart'; - -Source get nineanimetv => _nineanimetv; -const _nineanimetvVersion = "0.0.3"; -const _nineanimetvCodeUrl = - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/en/nineanimetv/nineanimetv.dart"; -Source _nineanimetv = Source( - name: "9AnimeTv", - baseUrl: "https://9animetv.to", - lang: "en", - typeSource: "single", - iconUrl: - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/en/nineanimetv/icon.png", - sourceCodeUrl: _nineanimetvCodeUrl, - version: _nineanimetvVersion, - isManga: false); diff --git a/dart/anime/src/en/uhdmovies/icon.png b/dart/anime/src/en/uhdmovies/icon.png deleted file mode 100644 index 073e44f12dec67ba315fb678518fbc08d8a66f32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3627 zcmV+`4%G39P)FllJg1T!rRLx!2O zrbE&W1NidIJJc!HBJo3vXL#xlJ)SuckjKYf9&dNwO+{* zv2iAx@667+9Qh{P^)-G&MDC0j#_jax`zyfwD&*ee{yf&dxWb!dXFgclVAhTei%~8@3q9 z19ZRy%6ocxUaP68xlGyd*+Xw{@7|i4nrnb`-V@xuzR>!;+qZAOLy>>>5ex<|-@AA3 z+PoKNBMLBQ&YYEsu5*K_Q>U)V_cCH60X)^!)fXwM&JC)nsxBVM1GKyVMp;=|jiTz@ zz~}ST7EJ9$p#T)k_Z7|^v=Iv`&^pg*C;>jR^p6-x0EP4H0SZb0C4hnwKnb9r1W*Df zC;^lJ3Q7PafPxa>j~B*R4w6!ym&yqtK7RrXl3hspAA$fvh(Ag}N(vzDB-vE_!63M5od@K7_s$XPOy zqsKF(G8U$;(Qu)U_Rb8+luc!Y&ZLPR&;-(v#FIA1x-w|Mq_77epuHnKBwk(@p=ksv z1)*B6Yh_Y8IMUD6x3|&O)<#7|1#N9@bar-f@x>Pd(A(QfDwX1@tFEH8wbixMnqZI* z4j$y`r=RA*2Onhd;>B#;x|Mb7*0Fi>W;So$Of(v0-MV$mpFf|co_dO=rY6_QFP#zQ zU+-H+g|v9%?cec!TQ@Ji)5bH;Ze;c9)g?W0B#$fbpb&71+zL5aatyGgz#EtVz$fhq z{`8J_0r=K!Q+e>78A$1Xgm3=iule9mjJjHrJwLyKd;YnFU$^wL^qPr0_sFF#v3uX| z=IiS|0N^M8b}71{^B3RzVAwSaUHi|jpU6MlJCljEJ_L|)%CPO+YQA_pPBa?jmRoLd z|2~t+@YrLI(c0R|lqpkKdDBh2_4eB|H#f6>{dyW38!-%nXf(>HQ>WOsZyx}&X3b*H zo;^q@u`G*JDuob&3&J55U3mpl8mFU0uIKt2S8(UG)4BEw7qQ~9Mj8XBNT-r`yuM)~ z44b$(HbT>oj)SHfWAB1&+eQkYq9SMM>A zeXi=Z;T@`+&xou{ujE_b{x(fbO{~51PBw1b$c`O52?PQp;tBfu`e|=(M@mU36vDP_Jf;W3 zFi0hnNGYkGGL?Jpe*mA?$G&%V5=*9NKAPsH>jT(v9ZOabk0-D!8%@)4A^_6PBBew# zz4RVEz@a_=g=u=Y_}agss%~n@?y96Tj^!Y18z}_D3zoH8CL*mPGifjk!}{9-w}D1O45-9NYdq2Il=e^%u<_V;rD?baHC> z%7^;4&h8ivS%i^ud&kL%V;BNF`8iAx>8JIHrUsfb^u2C_kwv1TdnAVL-7t%duYSZ=zq^U>1RrxR ztfTEj43Fu-vMkEHlB#mamm(AJRrq=Tz##$)BJ}_20FH#Vj~%`=H(hdkFiH*bL(023)Ki<9@Aq3MezlM2j$2olLIL#j)#c>=Wm;4D$OINac_imnf z`WYG<8~OU}Yhd$c7A#o64}b7OGy&O6iW@JnS+*w5i$8vb&0F8(#K0%)+PQof(1;UJ)Qd=_#T?3apdSxyk0LeX3QXbK^UP4I=VXO?eC?gt`2}? zB2Mdjza-JsOsFzOXXkN(!7^6N^-xuAVml6*Xg9UNYU=9hsH>|Z6w1}Brly8aC`5Ql zgez|OYZl*j4-M02VVdUH24Nut(zcNCST2SYf<>1a?A$b)4-cm}@Ntq4S`%D0x02b7 zUK;DYXn?d5JoKF~v3MQTRR%H^LyFuSbHQ|tt&c}Q2xd*w5mK^sLu6Rc<4W-0)YTG-+VJKz4Q`qyzvJ6_wT2_zaPUec<7;r z@caF_d3|*?-QC>;0s$5-T!^mg=(?U8I5iE!$kB1|x4+}A`_?nNaWaqm-Iv+$=&O9x zbqZ{U{$!TPlP5D}_Iy0Pa&%okEgl%Obidy}G)RvSxRo9QY#SMi4NEJSz(tc_&Lk6Y z^#lh0|4hc?ZX7lzoEtNRuyEorH?pk~g3BTz7rQwLgpgb|4TQ+eq6EUdjwFMOX53_k zgM$Q?ELlQNPY0t_0orfIHFXAH!m(ddT*$KIjrqwkI*o*Q2- zMRJDRQc>EeIh927_*+1_lOP4*-ADqRfX5<#Wc-f9#AUv zQ5dM@$B1Ep*l7a9VzCe7{m1C}_!S(-&cy|T{r7m1R;Q(qc}cQ9?vkB9xa0ljCfpeLanfUXKLf%^#?7#R2Nj7k1E`1nl^eQtZ5oPf0(MsSIJ~D zxooK8xKqyJixfAcFrqCP2aF@*IM^`LH1YX-=(>(!7$se~ScH+1cE!YeS^)~Xm9buD zOoQ;?i7P8BvF+g=Fj5AwlnCQ37jFwKxX{`L``eKkJVO5EjKrR)jm4s#DKk6PB;9EO z=(_GUevo{}aZU@a&KAj|UW+bYJ3Ar=tgzbsWc?qMgq> zVx_FER2MQ58E5Jm#@bb!tD7>$XpJ6=ReTorg3n}e;~}Hex&NSUNsg!AR5$0(@v4Z= z!>WYy4Ye*v37`Z}Py#3c6qEo;00kw05_} zNTpIeqj`V>I44e=IHagLH|Xu{JxI|rq_qO_ZNS>ObLW33s?H7e?Ah}ILl5(oFti*; z1H6DAs6Kr7@TP`_hA%40&K`~&IkKanpY}v9^LI_<^ z_xr=Lti=8I-+y~^b8{C%&yF7E0fS1)@NlqK9{jA`j3358wmJ@>>r>kK0vm)EIqwSvbwKfNZ|I zN#;M9{P&U(h#Y)@gIVw~D0 _uhdmoviesSource; -const _uhdmoviesVersion = "0.0.35"; -const _uhdmoviesSourceCodeUrl = - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/en/uhdmovies/uhdmovies.dart"; -Source _uhdmoviesSource = Source( - name: "UHD Movies", - baseUrl: "https://uhdmovies.zip", - lang: "en", - typeSource: "single", - iconUrl: - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/en/uhdmovies/icon.png", - sourceCodeUrl: _uhdmoviesSourceCodeUrl, - version: _uhdmoviesVersion, - isManga: false); diff --git a/dart/anime/src/en/uhdmovies/uhdmovies.dart b/dart/anime/src/en/uhdmovies/uhdmovies.dart deleted file mode 100644 index cda96779..00000000 --- a/dart/anime/src/en/uhdmovies/uhdmovies.dart +++ /dev/null @@ -1,234 +0,0 @@ -import 'package:mangayomi/bridge_lib.dart'; -import 'dart:convert'; - -class UHDMovies extends MProvider { - UHDMovies({required this.source}); - - MSource source; - - final Client client = Client(source); - - @override - bool get supportsLatest => false; - - @override - String get baseUrl => getPreferenceValue(source.id, "pref_domain"); - - @override - Future getPopular(int page) async { - final res = (await client.get(Uri.parse("$baseUrl/page/$page"))).body; - return animeFromElement(res); - } - - @override - Future getLatestUpdates(int page) async { - return MPages([], false); - } - - @override - Future search(String query, int page, FilterList filterList) async { - final res = (await client.get( - Uri.parse("$baseUrl/page/$page/?s=${query.replaceAll(" ", "+")}"))) - .body; - return animeFromElement(res); - } - - @override - Future getDetail(String url) async { - url = getUrlWithoutDomain(url); - final res = (await client.get(Uri.parse("$baseUrl${url}"))).body; - MManga anime = MManga(); - final description = xpath(res, '//pre/span/text()'); - if (description.isNotEmpty) { - anime.description = description.first; - } - anime.status = MStatus.ongoing; - final episodesTitles = xpath(res, - '//*[contains(@style, "center") or contains(@class, "maxbutton")]/a[contains(@class, "maxbutton") or contains(@href, "?sid=")]/text()'); - final episodesUrls = xpath(res, - '//*[contains(@style, "center") or contains(@class, "maxbutton")]/a[contains(@class, "maxbutton") or contains(@href, "?sid=")]/@href'); - bool isSeries = false; - if (episodesTitles.first.contains("Episode") || - episodesTitles.first.contains("Zip") || - episodesTitles.first.contains("Pack")) { - isSeries = true; - } - List? episodesList = []; - if (!isSeries) { - List moviesTitles = []; - moviesTitles = xpath(res, - '//*[contains(@style, "center") or contains(@class, "maxbutton")]/parent::p//preceding-sibling::p[contains(@style, "center")]/text()'); - List titles = []; - if (moviesTitles.isEmpty) { - moviesTitles = xpath(res, '//p[contains(@style, "center")]/text()'); - } - for (var title in moviesTitles) { - if (title.isNotEmpty && - !title.contains('Download') && - !title.contains('Note:') && - !title.contains('Copyright')) { - titles.add(title.split('[').first.trim()); - } - } - for (var i = 0; i < titles.length; i++) { - final title = titles[i]; - final quality = RegExp(r'\d{3,4}p').firstMatch(title)?.group(0) ?? ""; - final url = episodesUrls[i]; - MChapter ep = MChapter(); - ep.name = title; - ep.url = url; - ep.scanlator = quality; - episodesList.add(ep); - } - } else { - List seasonTitles = []; - final episodeTitles = xpath(res, - '//*[contains(@style, "center") or contains(@class, "maxbutton")]/parent::p//preceding-sibling::p[contains(@style, "center") and not(text()^="Episode")]/text()'); - List titles = []; - for (var title in episodeTitles) { - if (title.isNotEmpty) { - titles.add(title.split('[').first.trim()); - } - } - int number = 0; - for (var i = 0; i < episodesTitles.length; i++) { - final episode = episodesTitles[i]; - final episodeUrl = episodesUrls[i]; - if (!episode.contains("Zip") || !episode.contains("Pack")) { - if (episode == "Episode 1" && seasonTitles.contains("Episode 1")) { - number++; - } else if (episode == "Episode 1") { - seasonTitles.add(episode); - } - final season = - RegExp(r'S(\d{2})').firstMatch(titles[number])?.group(1) ?? ""; - final quality = - RegExp(r'\d{3,4}p').firstMatch(titles[number])?.group(0) ?? ""; - MChapter ep = MChapter(); - ep.name = "Season $season $episode $quality"; - ep.url = episodeUrl; - ep.scanlator = quality; - episodesList.add(ep); - } - } - } - anime.chapters = episodesList.reversed.toList(); - return anime; - } - - @override - Future> getVideoList(String url) async { - final res = await getMediaUrl(url); - return await extractVideos(res); - } - - @override - List getSourcePreferences() { - return [ - EditTextPreference( - key: "pref_domain", - title: "Currently used domain", - summary: "", - value: "https://uhdmovies.zip", - dialogTitle: "Currently used domain", - dialogMessage: "", - text: "https://uhdmovies.zip"), - ]; - } - - Future> extractVideos(String url) async { - List videos = []; - for (int type = 1; type < 3; type++) { - url = url.replaceAll("/file/", "/wfile/") + "?type=$type"; - final res = (await client.get(Uri.parse(url))).body; - final links = xpath(res, '//div[@class="mb-4"]/a/@href'); - for (int i = 0; i < links.length; i++) { - final link = links[i]; - String decodedLink = link; - if (!link.contains("workers.dev")) { - decodedLink = utf8 - .decode(base64Url.decode(substringAfter(link, "download?url="))); - } - MVideo video = MVideo(); - video - ..url = decodedLink - ..originalUrl = decodedLink - ..quality = "CF $type Worker ${i + 1}"; - videos.add(video); - } - } - return videos; - } - - Future getMediaUrl(String url) async { - String res = ""; - String host = ""; - if (url.contains("?sid=")) { - final finalUrl = await redirectorBypasser(url); - host = Uri.parse(finalUrl).host; - res = (await client.get(Uri.parse(finalUrl))).body; - } else if (url.contains("r?key=")) { - res = (await client.get(Uri.parse(url))).body; - host = Uri.parse(url).host; - } else { - return ""; - } - final path = substringBefore(substringAfter(res, "replace(\""), "\""); - if (path == "/404") return ""; - return "https://$host$path"; - } - - Future redirectorBypasser(String url) async { - final res = (await client.get(Uri.parse(url))).body; - String lastDoc = await recursiveDoc(url, res); - final js = xpath(lastDoc, '//script[contains(text(), "/?go=")]/text()'); - if (js.isEmpty) return ""; - String script = js.first; - String nextUrl = - substringBefore(substringAfter(script, "\"href\",\""), '"'); - if (!nextUrl.contains("http")) return ""; - String cookieName = substringAfter(nextUrl, "go="); - String cookieValue = - substringBefore(substringAfter(script, "'$cookieName', '"), "'"); - final response = (await client.get(Uri.parse(nextUrl), - headers: {"referer": url, "Cookie": "$cookieName=$cookieValue"})) - .body; - - final lastRes = - parseHtml(response).selectFirst("meta[http-equiv]").attr("content"); - return substringAfter(lastRes, "url="); - } - - MPages animeFromElement(String res) { - List animeList = []; - final urls = xpath(res, '//*[@class="entry-image"]/a/@href'); - final names = xpath(res, '//*[@class="entry-image"]/a/@title'); - final images = xpath(res, '//*[@class="entry-image"]/a/img/@src'); - - for (var i = 0; i < names.length; i++) { - MManga anime = MManga(); - anime.name = names[i].replaceAll("Download", ""); - anime.imageUrl = images[i]; - anime.link = urls[i]; - animeList.add(anime); - } - final nextPage = xpath(res, '//a[@class="next page-numbers"]/@href'); - return MPages(animeList, nextPage.isNotEmpty); - } - - Future recursiveDoc(String url, String html) async { - final urlR = xpath(html, '//form[@id="landing"]/@action'); - if (urlR.isEmpty) return html; - final name = xpath(html, '//input/@name').first; - final value = xpath(html, '//input/@value').first; - final body = {"$name": value}; - final response = (await client.post(Uri.parse(urlR.first), - headers: {"referer": url}, body: body)) - .body; - return recursiveDoc(url, response); - } -} - -UHDMovies main(MSource source) { - return UHDMovies(source: source); -} diff --git a/dart/anime/src/fr/animesama/animesama.dart b/dart/anime/src/fr/animesama/animesama.dart deleted file mode 100644 index 6cec6717..00000000 --- a/dart/anime/src/fr/animesama/animesama.dart +++ /dev/null @@ -1,409 +0,0 @@ -import 'package:mangayomi/bridge_lib.dart'; -import 'dart:convert'; - -class AnimeSama extends MProvider { - AnimeSama({required this.source}); - - MSource source; - - final Client client = Client(source); - - @override - Future getPopular(int page) async { - final doc = (await client.get(Uri.parse("${source.baseUrl}/#$page"))).body; - final regex = RegExp(r"""^\s*carteClassique\(\s*.*?\s*,\s*"(.*?)".*\)""", - multiLine: true); - var matches = regex.allMatches(doc).toList(); - List> chunks = chunked(matches, 5); - List seasons = []; - if (page > 0 && page <= chunks.length) { - for (RegExpMatch match in chunks[page - 1]) { - seasons.addAll(await fetchAnimeSeasons( - "${source.baseUrl}/catalogue/${match.group(1)}")); - } - } - return MPages(seasons, page < chunks.length); - } - - @override - Future getLatestUpdates(int page) async { - final res = (await client.get(Uri.parse(source.baseUrl))).body; - var document = parseHtml(res); - final latest = document - .select("h2") - .where((MElement e) => - e.outerHtml.toLowerCase().contains("derniers ajouts")) - .toList(); - final seasonElements = (latest.first.nextElementSibling as MElement) - .select(".scrollBarStyled > div") - .toList(); - List seasons = []; - for (var seasonElement in seasonElements) { - seasons.addAll(await fetchAnimeSeasons( - (seasonElement as MElement).getElementsByTagName("a").first.getHref)); - } - return MPages(seasons, false); - } - - @override - Future search(String query, int page, FilterList filterList) async { - final filters = filterList.filters; - final res = (await client - .get(Uri.parse("${source.baseUrl}/catalogue/listing_all.php"))) - .body; - var databaseElements = parseHtml(res).select(".cardListAnime"); - List elements = []; - elements = databaseElements - .where((MElement element) => element.select("h1, p").any((MElement e) => - e.text.toLowerCase().contains(query.toLowerCase().trim()))) - .toList(); - for (var filter in filters) { - if (filter.type == "TypeFilter") { - final types = (filter.state as List).where((e) => e.state).toList(); - elements = elements - .where((MElement element) => - types.isEmpty || - types.any((p) => element.className.contains(p.value))) - .toList(); - } else if (filter.type == "LanguageFilter") { - final language = (filter.state as List).where((e) => e.state).toList(); - elements = elements - .where((MElement element) => - language.isEmpty || - language.any((p) => element.className.contains(p.value))) - .toList(); - } else if (filter.type == "GenreFilter") { - final included = (filter.state as List) - .where((e) => e.state == 1 ? true : false) - .toList(); - final excluded = (filter.state as List) - .where((e) => e.state == 2 ? true : false) - .toList(); - if (included.isNotEmpty) { - elements = elements - .where((MElement element) => - included.every((p) => element.className.contains(p.value))) - .toList(); - } - if (excluded.isNotEmpty) { - elements = elements - .where((MElement element) => - excluded.every((p) => element.className.contains(p.value))) - .toList(); - } - } - } - List> chunks = chunked(elements, 5); - if (chunks.isEmpty) return MPages([], false); - List seasons = []; - for (var seasonElement in chunks[page - 1]) { - seasons.addAll(await fetchAnimeSeasons( - seasonElement.getElementsByTagName("a").first.getHref)); - } - - return MPages(seasons, page < chunks.length); - } - - @override - Future getDetail(String url) async { - var animeUrl = - "${source.baseUrl}${substringBeforeLast(getUrlWithoutDomain(url), "/")}"; - var movie = - int.tryParse(url.split("#").length >= 2 ? url.split("#")[1] : ""); - List> playersList = []; - for (var lang in ["vostfr", "vf"]) { - final players = await fetchPlayers("$animeUrl/$lang"); - if (players.isNotEmpty) { - playersList.add({"players": players, "lang": lang}); - } - } - int maxLength = 0; - for (var sublist in playersList) { - for (var innerList in sublist["players"]) { - if (innerList.length > maxLength) { - maxLength = innerList.length; - } - } - } - List? episodesList = []; - for (var episodeNumber = 0; episodeNumber < maxLength; episodeNumber++) { - List langs = []; - List> players = []; - for (var playerListt in playersList) { - for (var player in playerListt["players"]) { - if (player.length > episodeNumber) { - langs.add(playerListt["lang"]); - players.add( - {"lang": playerListt["lang"], "player": player[episodeNumber]}); - } - } - } - - MChapter episode = MChapter(); - episode.name = movie == null ? 'Episode ${episodeNumber + 1}' : 'Film'; - episode.scanlator = langs.toSet().toList().join(', ').toUpperCase(); - episode.url = json.encode(players); - episodesList.add(episode); - } - - MManga anime = MManga(); - anime.chapters = - movie == null ? episodesList.reversed.toList() : [episodesList[movie]]; - return anime; - } - - @override - Future> getVideoList(String url) async { - final players = json.decode(url); - List videos = []; - for (var player in players) { - String lang = (player["lang"] as String).toUpperCase(); - String playerUrl = player["player"]; - List a = []; - if (playerUrl.contains("sendvid")) { - a = await sendVidExtractor(playerUrl, null, lang); - } else if (playerUrl.contains("anime-sama.fr")) { - MVideo video = MVideo(); - video - ..url = playerUrl - ..originalUrl = playerUrl - ..quality = "${lang} - AS Player"; - a = [video]; - } else if (playerUrl.contains("sibnet.ru")) { - a = await sibnetExtractor(playerUrl, lang); - } - videos.addAll(a); - } - - return sortVideos(videos, source.id); - } - - @override - List getFilterList() { - return [ - GroupFilter("TypeFilter", "Type", [ - CheckBoxFilter("Anime", "Anime"), - CheckBoxFilter("Film", "Film"), - CheckBoxFilter("Autres", "Autres"), - ]), - GroupFilter("LanguageFilter", "Langue", [ - CheckBoxFilter("VF", "VF"), - CheckBoxFilter("VOSTFR", "VOSTFR"), - ]), - GroupFilter("GenreFilter", "Genre", [ - TriStateFilter("Action", "Action"), - TriStateFilter("Aventure", "Aventure"), - TriStateFilter("Combats", "Combats"), - TriStateFilter("Comédie", "Comédie"), - TriStateFilter("Drame", "Drame"), - TriStateFilter("Ecchi", "Ecchi"), - TriStateFilter("École", "School-Life"), - TriStateFilter("Fantaisie", "Fantasy"), - TriStateFilter("Horreur", "Horreur"), - TriStateFilter("Isekai", "Isekai"), - TriStateFilter("Josei", "Josei"), - TriStateFilter("Mystère", "Mystère"), - TriStateFilter("Psychologique", "Psychologique"), - TriStateFilter("Quotidien", "Slice-of-Life"), - TriStateFilter("Romance", "Romance"), - TriStateFilter("Seinen", "Seinen"), - TriStateFilter("Shônen", "Shônen"), - TriStateFilter("Shôjo", "Shôjo"), - TriStateFilter("Sports", "Sports"), - TriStateFilter("Surnaturel", "Surnaturel"), - TriStateFilter("Tournois", "Tournois"), - TriStateFilter("Yaoi", "Yaoi"), - TriStateFilter("Yuri", "Yuri"), - ]), - ]; - } - - @override - List getSourcePreferences() { - return [ - ListPreference( - key: "preferred_quality", - title: "Qualité préférée", - summary: "", - valueIndex: 0, - entries: ["1080p", "720p", "480p", "360p"], - entryValues: ["1080", "720", "480", "360"]), - ListPreference( - key: "voices_preference", - title: "Préférence des voix", - summary: "", - valueIndex: 0, - entries: ["Préférer VOSTFR", "Préférer VF"], - entryValues: ["vostfr", "vf"]), - ]; - } - - Future> fetchAnimeSeasons(String url) async { - final res = (await client.get(Uri.parse(url))).body; - - var document = parseHtml(res); - String animeName = document.getElementById("titreOeuvre")?.text ?? ""; - - var seasonRegex = - RegExp("^\\s*panneauAnime\\(\"(.*)\", \"(.*)\"\\)", multiLine: true); - var scripts = document - .select("h2 + p + div > script, h2 + div > script") - .map((MElement element) => element.text) - .toList() - .join(""); - List animeList = []; - - List seasonRegexReg = seasonRegex.allMatches(scripts).toList(); - for (var animeIndex = 0; animeIndex < seasonRegexReg.length; animeIndex++) { - final seasonName = seasonRegexReg[animeIndex].group(1); - final seasonStem = seasonRegexReg[animeIndex].group(2); - if (seasonStem.toLowerCase().contains("film")) { - var moviesUrl = "$url/$seasonStem"; - var movies = await fetchPlayers(moviesUrl); - if (movies.isNotEmpty) { - var movieNameRegex = - RegExp("^\\s*newSPF\\(\"(.*)\"\\);", multiLine: true); - var moviesDoc = (await client.get(Uri.parse(moviesUrl))).body; - List matches = - movieNameRegex.allMatches(moviesDoc).toList(); - - for (var i = 0; i < movies.length; i++) { - var title = ""; - if (animeIndex == 0 && movies.length == 1) { - title = animeName; - } else if (matches.length > i) { - title = "$animeName ${(matches[i]).group(1)}"; - } else if (movies.length == 1) { - title = "$animeName Film"; - } else { - title = "$animeName Film ${i + 1}"; - } - MManga anime = MManga(); - anime.imageUrl = document.getElementById("coverOeuvre")?.getSrc; - anime.genre = (document.xpathFirst( - '//h2[contains(text(),"Genres")]/following-sibling::a/text()') ?? - "") - .split(","); - anime.description = document.xpathFirst( - '//h2[contains(text(),"Synopsis")]/following-sibling::p/text()') ?? - ""; - - anime.name = title; - anime.link = "$moviesUrl#$i"; - anime.status = MStatus.completed; - animeList.add(anime); - } - } - } else { - MManga anime = MManga(); - anime.imageUrl = document.getElementById("coverOeuvre")?.getSrc; - anime.genre = (document.xpathFirst( - '//h2[contains(text(),"Genres")]/following-sibling::a/text()') ?? - "") - .split(","); - anime.description = document.xpathFirst( - '//h2[contains(text(),"Synopsis")]/following-sibling::p/text()') ?? - ""; - anime.name = - '$animeName ${substringBefore(seasonName, ',').replaceAll('"', "")}'; - anime.link = "$url/$seasonStem"; - animeList.add(anime); - } - } - return animeList; - } - - Future>> fetchPlayers(String url) async { - var docUrl = "$url/episodes.js"; - List> players = []; - var response = (await client.get(Uri.parse(docUrl))).body; - - if (response == "error") { - return []; - } - - var sanitizedDoc = sanitizeEpisodesJs(response); - for (var i = 1; i <= 8; i++) { - final numPlayers = getPlayers("eps$i", sanitizedDoc); - - if (numPlayers != null) players.add(numPlayers); - } - - final asPlayers = getPlayers("epsAS", sanitizedDoc); - if (asPlayers != null) players.add(asPlayers); - - if (players.isEmpty) return []; - List> finalPlayers = []; - for (var i = 0; i <= players[0].length; i++) { - for (var playerList in players) { - if (playerList.length > i) { - finalPlayers.add(playerList); - } - } - } - return finalPlayers.toSet().toList(); - } - - List? getPlayers(String playerName, String doc) { - var playerRegex = RegExp('$playerName\\s*=\\s*(\\[.*?\\])', dotAll: true); - var match = playerRegex.firstMatch(doc); - if (match == null) return null; - final regex = RegExp(r"""https?://[^\s\',\[\]]+"""); - final matches = regex.allMatches(match.group(1)); - List urls = []; - for (var match in matches.toList()) { - urls.add((match as RegExpMatch).group(0).toString()); - } - return urls; - } - - String sanitizeEpisodesJs(String doc) { - return doc.replaceAll( - RegExp(r'(?<=\[|\,)\s*\"\s*(https?://[^\s\"]+)\s*\"\s*(?=\,|\])'), ''); - } - - List> chunked(List list, int size) { - List> chunks = []; - for (int i = 0; i < list.length; i += size) { - int end = list.length; - if (i + size < list.length) { - end = i + size; - } - chunks.add(list.sublist(i, end)); - } - return chunks; - } - - List sortVideos(List videos, int sourceId) { - String quality = getPreferenceValue(sourceId, "preferred_quality"); - String voice = getPreferenceValue(sourceId, "voices_preference"); - - videos.sort((MVideo a, MVideo b) { - int qualityMatchA = 0; - if (a.quality.contains(quality) && - a.quality.toLowerCase().contains(voice)) { - qualityMatchA = 1; - } - int qualityMatchB = 0; - if (b.quality.contains(quality) && - b.quality.toLowerCase().contains(voice)) { - qualityMatchB = 1; - } - if (qualityMatchA != qualityMatchB) { - return qualityMatchB - qualityMatchA; - } - - final regex = RegExp(r'(\d+)p'); - final matchA = regex.firstMatch(a.quality); - final matchB = regex.firstMatch(b.quality); - final int qualityNumA = int.tryParse(matchA?.group(1) ?? '0') ?? 0; - final int qualityNumB = int.tryParse(matchB?.group(1) ?? '0') ?? 0; - return qualityNumB - qualityNumA; - }); - return videos; - } -} - -AnimeSama main(MSource source) { - return AnimeSama(source: source); -} diff --git a/dart/anime/src/fr/animesama/icon.png b/dart/anime/src/fr/animesama/icon.png deleted file mode 100644 index cca54e146a7a80b3fbcc6b540fd7fe27c96aadf8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4666 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 S#4PYn2y`2T(XG&S2>l _animesama; -const animesamaVersion = "0.0.25"; -const animesamaCodeUrl = - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/fr/animesama/animesama.dart"; -Source _animesama = Source( - name: "Anime-Sama", - baseUrl: "https://anime-sama.fr", - lang: "fr", - typeSource: "single", - iconUrl: - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/fr/animesama/icon.png", - sourceCodeUrl: animesamaCodeUrl, - version: animesamaVersion, - isManga: false); diff --git a/dart/anime/src/fr/animesultra/animesultra.dart b/dart/anime/src/fr/animesultra/animesultra.dart deleted file mode 100644 index 87447491..00000000 --- a/dart/anime/src/fr/animesultra/animesultra.dart +++ /dev/null @@ -1,158 +0,0 @@ -import 'package:mangayomi/bridge_lib.dart'; -import 'dart:convert'; - -class AnimesUltra extends MProvider { - AnimesUltra({required this.source}); - - MSource source; - - final Client client = Client(source); - - @override - Future getPopular(int page) async { - final res = (await client.get(Uri.parse(source.baseUrl))).body; - - List animeList = []; - final urls = xpath(res, - '//*[contains(@class,"swiper-slide item-qtip")]/div[@class="item"]/a/@href'); - final names = xpath(res, - '//*[contains(@class,"swiper-slide item-qtip")]/div[@class="item"]/a/img/@title'); - final images = xpath(res, - '//*[contains(@class,"swiper-slide item-qtip")]/div[@class="item"]/a/img/@data-src'); - - for (var i = 0; i < names.length; i++) { - MManga anime = MManga(); - anime.name = names[i]; - anime.imageUrl = images[i]; - anime.link = urls[i]; - animeList.add(anime); - } - - return MPages(animeList, false); - } - - @override - Future getLatestUpdates(int page) async { - final res = (await client.get(Uri.parse(source.baseUrl))).body; - - List animeList = []; - final urls = xpath(res, - '//*[@class="block_area block_area_home"]/div[@class="tab-content"]/div[contains(@class,"block_area-content block_area-list")]/div[@class="film_list-wrap"]/div[@class="flw-item"]/div[@class="film-poster"]/a/@href'); - final names = xpath(res, - '//*[@class="block_area block_area_home"]/div[@class="tab-content"]/div[contains(@class,"block_area-content block_area-list")]/div[@class="film_list-wrap"]/div[@class="flw-item"]/div[@class="film-poster"]/a/@title'); - final images = xpath(res, - '//*[@class="block_area block_area_home"]/div[@class="tab-content"]/div[contains(@class,"block_area-content block_area-list")]/div[@class="film_list-wrap"]/div[@class="flw-item"]/div[@class="film-poster"]/img/@data-src'); - - for (var i = 0; i < names.length; i++) { - MManga anime = MManga(); - anime.name = names[i]; - anime.imageUrl = images[i]; - anime.link = urls[i]; - animeList.add(anime); - } - - return MPages(animeList, false); - } - - @override - Future search(String query, int page, FilterList filterList) async { - final res = (await client.get(Uri.parse(source.baseUrl))).body; - - List animeList = []; - final urls = xpath(res, '//*[@class="film-poster"]/a/@href'); - final names = xpath(res, '//*[@class="film-poster"]/a/@title'); - final images = xpath(res, '//*[@class="film-poster"]/img/@data-src'); - - for (var i = 0; i < names.length; i++) { - MManga anime = MManga(); - anime.name = names[i]; - anime.imageUrl = images[i]; - anime.link = urls[i]; - animeList.add(anime); - } - - return MPages(animeList, false); - } - - @override - Future getDetail(String url) async { - final statusList = [ - {"En cours": 0, "Terminé": 1} - ]; - - final res = (await client.get(Uri.parse(url))).body; - MManga anime = MManga(); - anime.description = - xpath(res, '//*[@class="film-description m-hide"]/text()').first; - - final status = xpath(res, - '//*[@class="item item-title" and contains(text(),"Status:")]/span[2]/text()') - .first; - anime.status = parseStatus(status, statusList); - anime.genre = xpath(res, - '//*[@class="item item-list" and contains(text(),"Genres:")]/a/text()'); - anime.author = xpath(res, - '//*[@class="item item-title" and contains(text(),"Studio:")]/span[2]/text()') - .first; - final urlEp = url.replaceAll('.html', '/episode-1.html'); - final resEpWebview = - await getHtmlViaWebview(urlEp, '//*[@class="ss-list"]/a/@href'); - final epUrls = - xpath(resEpWebview, '//*[@class="ss-list"]/a/@href').reversed.toList(); - final names = xpath(resEpWebview, - '//*[@class="ss-list"]/a/div[@class="ssli-detail"]/div/text()') - .reversed - .toList(); - - List? episodesList = []; - for (var i = 0; i < names.length; i++) { - MChapter episode = MChapter(); - episode.name = names[i]; - episode.url = epUrls[i]; - episodesList.add(episode); - } - - anime.chapters = episodesList; - return anime; - } - - @override - Future> getVideoList(String url) async { - final resWebview = await getHtmlViaWebview( - url, '//*[@class="ps__-list"]/div/@data-server-id'); - - final serverIds = - xpath(resWebview, '//*[@class="ps__-list"]/div/@data-server-id'); - final serverNames = - xpath(resWebview, '//*[@class="ps__-list"]/div/a/text()'); - List serverUrls = []; - for (var id in serverIds) { - final serversUrls = - xpath(resWebview, '//*[@id="content_player_${id}"]/text()').first; - serverUrls.add(serversUrls); - } - List videos = []; - for (var i = 0; i < serverNames.length; i++) { - final name = serverNames[i]; - final url = serverUrls[i]; - - List a = []; - if (name.contains("Sendvid")) { - a = await sendVidExtractor(url.replaceAll("https:////", "https://"), - json.encode({"Referer": "${source.baseUrl}/"}), ""); - } else if (name.contains("Sibnet")) { - a = await sibnetExtractor( - "https://video.sibnet.ru/shell.php?videoid=$url"); - } else if (name.contains("Mytv")) { - a = await myTvExtractor("https://www.myvi.tv/embed/$url"); - } - videos.addAll(a); - } - - return videos; - } -} - -AnimesUltra main(MSource source) { - return AnimesUltra(source: source); -} diff --git a/dart/anime/src/fr/animesultra/icon.png b/dart/anime/src/fr/animesultra/icon.png deleted file mode 100644 index c2c07c2b78b95c4f1f7f0649ea730f4eec34c42d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9789 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 diff --git a/dart/anime/src/fr/animesultra/source.dart b/dart/anime/src/fr/animesultra/source.dart deleted file mode 100644 index bac175c7..00000000 --- a/dart/anime/src/fr/animesultra/source.dart +++ /dev/null @@ -1,17 +0,0 @@ -import '../../../../../model/source.dart'; - -Source get animesultraSource => _animesultraSource; -const _animesultraVersion = "0.0.65"; -const _animesultraSourceCodeUrl = - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/fr/animesultra/animesultra.dart"; -Source _animesultraSource = Source( - name: "AnimesUltra", - baseUrl: "https://ww.animesultra.net", - lang: "fr", - typeSource: "single", - iconUrl: - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/fr/animesultra/icon.png", - sourceCodeUrl: _animesultraSourceCodeUrl, - version: _animesultraVersion, - isManga: false, - isFullData: false); diff --git a/dart/anime/src/fr/franime/franime.dart b/dart/anime/src/fr/franime/franime.dart deleted file mode 100644 index 5c34b620..00000000 --- a/dart/anime/src/fr/franime/franime.dart +++ /dev/null @@ -1,342 +0,0 @@ -import 'package:mangayomi/bridge_lib.dart'; -import 'dart:convert'; - -class FrAnime extends MProvider { - FrAnime({required this.source}); - - MSource source; - - final Client client = Client(source); - - @override - Future getPopular(int page) async { - final res = await dataBase(); - - return animeResList(res); - } - - @override - Future getLatestUpdates(int page) async { - final res = await dataBase(); - - List list = json.decode(res); - return animeResList(json.encode(list.reversed.toList())); - } - - @override - Future search(String query, int page, FilterList filterList) async { - final res = await dataBase(); - - return animeSeachFetch(res, query); - } - - @override - Future getDetail(String url) async { - MManga anime = MManga(); - String language = "vo".toString(); - if (url.contains("lang=")) { - language = substringBefore(substringAfter(url, "lang="), "&"); - } - String stem = substringBefore(substringAfterLast(url, "/"), "?"); - final res = await dataBase(); - - final animeByTitleOJson = databaseAnimeByTitleO(res, stem); - final seasons = json.decode(animeByTitleOJson)["saisons"]; - - var seasonsJson = seasons.first; - - if (url.contains("s=")) { - int seasonNumber = - int.parse(substringBefore(substringAfter(url, "s="), "&")); - seasonsJson = seasons[seasonNumber - 1]; - } - - List? episodesList = []; - - final episodes = seasonsJson["episodes"]; - - for (int i = 0; i < episodes.length; i++) { - final ep = episodes[i]; - - final lang = ep["lang"]; - - final vo = lang["vo"]; - final vf = lang["vf"]; - bool hasVostfr = vo["lecteurs"].isNotEmpty; - bool hasVf = vf["lecteurs"].isNotEmpty; - bool playerIsNotEmpty = false; - - if (language == "vo" && hasVostfr) { - playerIsNotEmpty = true; - } else if (language == "vf" && hasVf) { - playerIsNotEmpty = true; - } - if (playerIsNotEmpty) { - MChapter episode = MChapter(); - episode.url = "$url&ep=${i + 1}"; - String title = ep["title"]; - episode.name = title.replaceAll('"', ""); - episodesList.add(episode); - } - } - - anime.chapters = episodesList.reversed.toList(); - return anime; - } - - @override - Future> getVideoList(String url) async { - String language = "vo"; - String videoBaseUrl = "https://api.franime.fr/api/anime"; - if (url.contains("lang=")) { - language = substringBefore(substringAfter(url, "lang="), "&"); - } - String stem = substringBefore(substringAfterLast(url, "/"), "?"); - final res = await dataBase(); - - final animeByTitleOJson = databaseAnimeByTitleO(res, stem); - final animeId = json.decode(animeByTitleOJson)["id"]; - final seasons = json.decode(animeByTitleOJson)["saisons"]; - - var seasonsJson = seasons.first; - - videoBaseUrl += "/$animeId/"; - - if (url.contains("s=")) { - int seasonNumber = - int.parse(substringBefore(substringAfter(url, "s="), "&")); - videoBaseUrl += "${seasonNumber - 1}/"; - seasonsJson = seasons[seasonNumber - 1]; - } else { - videoBaseUrl += "0/"; - } - final episodesJson = seasonsJson["episodes"]; - var episode = episodesJson.first; - if (url.contains("ep=")) { - int episodeNumber = int.parse(substringAfter(url, "ep=")); - episode = episodesJson[episodeNumber - 1]; - videoBaseUrl += "${episodeNumber - 1}"; - } else { - videoBaseUrl += "0"; - } - final lang = episode["lang"]; - - final vo = lang["vo"]; - final vf = lang["vf"]; - bool hasVostfr = vo["lecteurs"].isNotEmpty; - bool hasVf = vf["lecteurs"].isNotEmpty; - List vostfrPlayers = vo["lecteurs"]; - List vfPlayers = vf["lecteurs"]; - List players = []; - if (language == "vo" && hasVostfr) { - players = vostfrPlayers; - } else if (language == "vf" && hasVf) { - players = vfPlayers; - } - - List videos = []; - for (var i = 0; i < players.length; i++) { - String apiUrl = "$videoBaseUrl/$language/$i"; - String playerName = players[i]; - - MVideo video = MVideo(); - - final playerUrl = (await client.get(Uri.parse(apiUrl), - headers: {"Referer": "https://franime.fr/"})) - .body; - - List a = []; - if (playerName.contains("vido")) { - videos.add(video - ..url = playerUrl - ..originalUrl = playerUrl - ..quality = "FRAnime (Vido)"); - } else if (playerName.contains("sendvid")) { - a = await sendVidExtractor( - playerUrl, json.encode({"Referer": "https://franime.fr/"}), ""); - } else if (playerName.contains("sibnet")) { - a = await sibnetExtractor(playerUrl); - } - videos.addAll(a); - } - - return videos; - } - - MPages animeResList(String res) { - final statusList = [ - {"EN COURS": 0, "TERMINÉ": 1} - ]; - List animeList = []; - - var jsonResList = json.decode(res); - - for (var animeJson in jsonResList) { - final seasons = animeJson["saisons"]; - List vostfrListName = []; - List vfListName = []; - for (var season in seasons) { - for (var episode in season["episodes"]) { - final lang = episode["lang"]; - final vo = lang["vo"]; - final vf = lang["vf"]; - vostfrListName.add(vo["lecteurs"].isNotEmpty); - vfListName.add(vf["lecteurs"].isNotEmpty); - } - } - - String titleO = animeJson["titleO"]; - final title = animeJson["title"]; - final genre = animeJson["themes"]; - final description = animeJson["description"]; - final status = parseStatus(animeJson["status"], statusList); - final imageUrl = animeJson["affiche"]; - bool hasVostfr = vostfrListName.contains(true); - bool hasVf = vfListName.contains(true); - if (hasVostfr || hasVf) { - for (int i = 0; i < seasons.length; i++) { - MManga anime = MManga(); - int ind = i + 1; - anime.genre = genre; - anime.description = description; - String seasonTitle = "".toString(); - String lang = ""; - if (title.isEmpty) { - seasonTitle = titleO; - } else { - seasonTitle = title; - } - if (seasons.length > 1) { - seasonTitle += " S$ind"; - } - if (hasVf) { - seasonTitle += " VF"; - lang = "vf".toString(); - } - if (hasVostfr) { - seasonTitle += " VOSTFR"; - lang = "vo".toString(); - } - - anime.status = status; - anime.name = seasonTitle; - anime.imageUrl = imageUrl; - anime.link = - "/anime/${titleO.replaceAll(RegExp("[^A-Za-z0-9 ]"), "").replaceAll(" ", "-").toLowerCase()}?lang=$lang&s=$ind"; - - animeList.add(anime); - } - } - } - return MPages(animeList, true); - } - - MPages animeSeachFetch(String res, String query) { - final statusList = [ - {"EN COURS": 0, "TERMINÉ": 1} - ]; - List animeList = []; - final jsonResList = json.decode(res); - for (var animeJson in jsonResList) { - MManga anime = MManga(); - - final titleO = getMapValue(json.encode(animeJson), "titleO"); - final titleAlt = - getMapValue(json.encode(animeJson), "titles", encode: true); - final containsEn = getMapValue(titleAlt, "en") - .toString() - .toLowerCase() - .contains(query.toLowerCase()); - final containsEnJp = getMapValue(titleAlt, "en_jp") - .toString() - .toLowerCase() - .contains(query.toLowerCase()); - final containsJaJp = getMapValue(titleAlt, "ja_jp") - .toString() - .toLowerCase() - .contains(query.toLowerCase()); - final containsTitleO = titleO.toLowerCase().contains(query.toLowerCase()); - - if (containsEn || containsEnJp || containsJaJp || containsTitleO) { - final seasons = animeJson["saisons"]; - List vostfrListName = []; - List vfListName = []; - for (var season in seasons) { - for (var episode in season["episodes"]) { - final lang = episode["lang"]; - final vo = lang["vo"]; - final vf = lang["vf"]; - vostfrListName.add(vo["lecteurs"].isNotEmpty); - vfListName.add(vf["lecteurs"].isNotEmpty); - } - } - String titleO = animeJson["titleO"]; - final title = animeJson["title"]; - final genre = animeJson["themes"]; - final description = animeJson["description"]; - final status = parseStatus(animeJson["status"], statusList); - final imageUrl = animeJson["affiche"]; - - bool hasVostfr = vostfrListName.contains(true); - bool hasVf = vfListName.contains(true); - if (hasVostfr || hasVf) { - for (int i = 0; i < seasons.length; i++) { - MManga anime = MManga(); - int ind = i + 1; - anime.genre = genre; - anime.description = description; - String seasonTitle = "".toString(); - String lang = ""; - if (title.isEmpty) { - seasonTitle = titleO; - } else { - seasonTitle = title; - } - if (seasons.length > 1) { - seasonTitle += " S$ind"; - } - if (hasVf) { - seasonTitle += " VF"; - lang = "vf".toString(); - } - if (hasVostfr) { - seasonTitle += " VOSTFR"; - lang = "vo".toString(); - } - - anime.status = status; - anime.name = seasonTitle; - anime.imageUrl = imageUrl; - anime.link = - "/anime/${titleO.replaceAll(RegExp("[^A-Za-z0-9 ]"), "").replaceAll(" ", "-").toLowerCase()}?lang=$lang&s=$ind"; - - animeList.add(anime); - } - } - } - } - return MPages(animeList, true); - } - - Future dataBase() async { - return (await client.get(Uri.parse("https://api.franime.fr/api/animes/"), - headers: {"Referer": "https://franime.fr/"})) - .body; - } - - String databaseAnimeByTitleO(String res, String titleO) { - final datas = json.decode(res) as List>; - for (var data in datas) { - String title = - (data["titleO"] as String).replaceAll(RegExp("[^A-Za-z0-9 ]"), ""); - if (title.replaceAll(" ", "-").toLowerCase() == "${titleO}") { - return json.encode(data); - } - } - return ""; - } -} - -FrAnime main(MSource source) { - return FrAnime(source: source); -} diff --git a/dart/anime/src/fr/franime/icon.png b/dart/anime/src/fr/franime/icon.png deleted file mode 100644 index 07bd99bad32a74c1c75ef2fa207902bd879f070d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3369 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 diff --git a/dart/anime/src/fr/franime/source.dart b/dart/anime/src/fr/franime/source.dart deleted file mode 100644 index 7d3e5fcb..00000000 --- a/dart/anime/src/fr/franime/source.dart +++ /dev/null @@ -1,18 +0,0 @@ -import '../../../../../model/source.dart'; - -Source get franimeSource => _franimeSource; -const _franimeVersion = "0.0.7"; -const _franimeSourceCodeUrl = - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/fr/franime/franime.dart"; -Source _franimeSource = Source( - name: "FrAnime", - baseUrl: "https://franime.fr", - apiUrl: "https://api.franime.fr", - lang: "fr", - typeSource: "single", - iconUrl: - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/fr/franime/icon.png", - sourceCodeUrl: _franimeSourceCodeUrl, - version: _franimeVersion, - isManga: false, - isFullData: true); diff --git a/dart/anime/src/fr/otakufr/icon.png b/dart/anime/src/fr/otakufr/icon.png deleted file mode 100644 index aa0e42fc09db513824020b56e64380c650240924..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15379 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

q1_aDEt^{>a{{0JBT<2eB3 z*9Aa)34|DkfMC9ee;!oxO$_t=Tuocdn?0WYCXe#^`6|1ha()BmH=E4?(O)=I_$J2M zei?w-{F*;X^S^4-9%hQo{}Erz$@->d3i~fSpv4!ikF*8-L!VmlrPt0A0RH#u$bZ#l xe%<<}Cu+kVn5O-tp45|iQcvnhJ*of4`X4Jk^W-qgeChxI002ovPDHLkV1nzQWo`ff diff --git a/dart/anime/src/fr/otakufr/otakufr.dart b/dart/anime/src/fr/otakufr/otakufr.dart deleted file mode 100644 index baed8147..00000000 --- a/dart/anime/src/fr/otakufr/otakufr.dart +++ /dev/null @@ -1,442 +0,0 @@ -import 'package:mangayomi/bridge_lib.dart'; -import 'dart:convert'; - -class OtakuFr extends MProvider { - OtakuFr({required this.source}); - - MSource source; - - final Client client = Client(source); - - @override - Future getPopular(int page) async { - final res = - (await client.get(Uri.parse("${source.baseUrl}/en-cours/page/$page"))) - .body; - List animeList = []; - final urls = - xpath(res, '//*[@class="list"]/article/div/div/figure/a/@href'); - final names = - xpath(res, '//*[@class="list"]/article/div/div/figure/a/img/@title'); - final images = - xpath(res, '//*[@class="list"]/article/div/div/figure/a/img/@src'); - - for (var i = 0; i < names.length; i++) { - MManga anime = MManga(); - anime.name = names[i]; - anime.imageUrl = images[i]; - anime.link = urls[i]; - animeList.add(anime); - } - final nextPage = xpath(res, '//a[@class="next page-link"]/@href'); - return MPages(animeList, nextPage.isNotEmpty); - } - - @override - Future getLatestUpdates(int page) async { - final res = - (await client.get(Uri.parse("${source.baseUrl}/page/$page/"))).body; - - List animeList = []; - final urls = xpath(res, '//*[@class="episode"]/div/a/@href'); - final namess = xpath(res, '//*[@class="episode"]/div/a/text()'); - List names = []; - for (var name in namess) { - names.add(regExp( - name, - r'(?<=\bS\d\s*|)\d{2}\s*(?=\b(Vostfr|vostfr|VF|Vf|vf|\(VF\)|\(vf\)|\(Vf\)|\(Vostfr\)\b))?', - '', - 0, - 0) - .replaceAll(' vostfr', '') - .replaceAll(' Vostfr', '') - .replaceAll(' VF', '') - .replaceAll(' Vf', '') - .replaceAll(' vf', '') - .replaceAll(' (VF)', '') - .replaceAll(' (vf)', '') - .replaceAll(' (vf)', '') - .replaceAll(' (Vf)', '') - .replaceAll(' (Vostfr)', '')); - } - final images = xpath(res, '//*[@class="episode"]/div/figure/a/img/@src'); - - for (var i = 0; i < names.length; i++) { - MManga anime = MManga(); - anime.name = names[i]; - anime.imageUrl = images[i]; - anime.link = urls[i]; - animeList.add(anime); - } - final nextPage = xpath(res, '//a[@class="next page-link"]/@href'); - return MPages(animeList, nextPage.isNotEmpty); - } - - @override - Future search(String query, int page, FilterList filterList) async { - final filters = filterList.filters; - String url = ""; - if (query.isNotEmpty) { - url = "${source.baseUrl}/toute-la-liste-affiches/page/$page/?q=$query"; - } else { - for (var filter in filters) { - if (filter.type == "GenreFilter") { - if (filter.state != 0) { - url = - "${source.baseUrl}/${filter.values[filter.state].value}page/$page"; - } - } else if (filter.type == "SubPageFilter") { - if (url.isEmpty) { - if (filter.state != 0) { - url = - "${source.baseUrl}/${filter.values[filter.state].value}page/$page"; - } - } - } - } - } - - final res = (await client.get(Uri.parse(url))).body; - - List animeList = []; - final urls = - xpath(res, '//*[@class="list"]/article/div/div/figure/a/@href'); - final names = - xpath(res, '//*[@class="list"]/article/div/div/figure/a/img/@title'); - final images = - xpath(res, '//*[@class="list"]/article/div/div/figure/a/img/@src'); - - for (var i = 0; i < names.length; i++) { - MManga anime = MManga(); - anime.name = names[i]; - anime.imageUrl = images[i]; - anime.link = urls[i]; - animeList.add(anime); - } - final nextPage = xpath(res, '//a[@class="next page-link"]/@href'); - return MPages(animeList, nextPage.isNotEmpty); - } - - @override - Future getDetail(String url) async { - final statusList = [ - {"En cours": 0, "Terminé": 1} - ]; - String res = (await client.get(Uri.parse(url))).body; - MManga anime = MManga(); - final originalUrl = xpath(res, - '//*[@class="breadcrumb"]/li[@class="breadcrumb-item"][2]/a/@href'); - if (originalUrl.isNotEmpty) { - res = (await client.get(Uri.parse(originalUrl.first))).body; - } - final description = - xpath(res, '//*[@class="episode fz-sm synop"]/p/text()'); - if (description.isNotEmpty) { - anime.description = description.first.replaceAll("Synopsis:", ""); - } - final status = xpath(res, - '//*[@class="list-unstyled"]/li[contains(text(),"Statut")]/text()'); - if (status.isNotEmpty) { - anime.status = - parseStatus(status.first.replaceAll("Statut: ", ""), statusList); - } - - anime.genre = xpath(res, - '//*[@class="list-unstyled"]/li[contains(text(),"Genre")]/ul/li/a/text()'); - - final epUrls = xpath(res, '//*[@class="list-episodes list-group"]/a/@href'); - final dates = - xpath(res, '//*[@class="list-episodes list-group"]/a/span/text()'); - final names = xpath(res, '//*[@class="list-episodes list-group"]/a/text()'); - List episodes = []; - - for (var i = 0; i < names.length; i++) { - final date = dates[i]; - final name = names[i]; - episodes.add( - "Episode ${regExp(name.replaceAll(date, ""), r".* (\d*) [VvfF]{1,1}", '', 1, 1)}"); - } - final dateUploads = parseDates(dates, "dd MMMM yyyy", "fr"); - - List? episodesList = []; - for (var i = 0; i < episodes.length; i++) { - MChapter episode = MChapter(); - episode.name = episodes[i]; - episode.url = epUrls[i]; - episode.dateUpload = dateUploads[i]; - episodesList.add(episode); - } - - anime.chapters = episodesList; - return anime; - } - - @override - Future> getVideoList(String url) async { - final res = (await client.get(Uri.parse(url))).body; - - final servers = xpath(res, '//*[@id="nav-tabContent"]/div/iframe/@src'); - List videos = []; - final hosterSelection = preferenceHosterSelection(source.id); - for (var url in servers) { - final resServer = (await client.get(Uri.parse(fixUrl(url)), - headers: {"X-Requested-With": "XMLHttpRequest"})) - .body; - final serverUrl = - fixUrl(regExp(resServer, r"data-url='([^']+)'", '', 1, 1)); - List a = []; - if (serverUrl.contains("https://streamwish") && - hosterSelection.contains("Streamwish")) { - a = await streamWishExtractor(serverUrl, "StreamWish"); - } else if (serverUrl.contains("sibnet") && - hosterSelection.contains("Sibnet")) { - a = await sibnetExtractor(serverUrl); - } else if (serverUrl.contains("https://doo") && - hosterSelection.contains("Doodstream")) { - a = await doodExtractor(serverUrl); - } else if (serverUrl.contains("https://voe.sx") && - hosterSelection.contains("Voe")) { - a = await voeExtractor(serverUrl, null); - } else if (serverUrl.contains("https://ok.ru") && - hosterSelection.contains("Okru")) { - a = await okruExtractor(serverUrl); - } else if (serverUrl.contains("vadbam") && - hosterSelection.contains("Vidbm")) { - a = await vidbmExtractor(serverUrl); - } else if (serverUrl.contains("upstream") && - hosterSelection.contains("Upstream")) { - a = await upstreamExtractor(serverUrl); - } else if (serverUrl.contains("sendvid") && - hosterSelection.contains("Sendvid")) { - a = await sendVidExtractor(serverUrl, null, ""); - } - videos.addAll(a); - } - - return videos; - } - - String fixUrl(String url) { - return regExp(url, r"^(?:(?:https?:)?//|www\.)", 'https://', 0, 0); - } - - @override - List getFilterList() { - return [ - HeaderFilter("La recherche de texte ignore les filtres"), - SelectFilter("GenreFilter", "Genre", 0, [ - SelectFilterOption("", ""), - SelectFilterOption("Action", "/genre/action/"), - SelectFilterOption("Aventure", "/genre/aventure/"), - SelectFilterOption("Comedie", "/genre/comedie/"), - SelectFilterOption("Crime", "/genre/crime/"), - SelectFilterOption("Démons", "/genre/demons/"), - SelectFilterOption("Drame", "/genre/drame/"), - SelectFilterOption("Ecchi", "/genre/ecchi/"), - SelectFilterOption("Espace", "/genre/espace/"), - SelectFilterOption("Fantastique", "/genre/fantastique/"), - SelectFilterOption("Gore", "/genre/gore/"), - SelectFilterOption("Harem", "/genre/harem/"), - SelectFilterOption("Historique", "/genre/historique/"), - SelectFilterOption("Horreur", "/genre/horreur/"), - SelectFilterOption("Isekai", "/genre/isekai/"), - SelectFilterOption("Jeux", "/genre/jeu/"), - SelectFilterOption("L'école", "/genre/lecole/"), - SelectFilterOption("Magical girls", "/genre/magical-girls/"), - SelectFilterOption("Magie", "/genre/magie/"), - SelectFilterOption("Martial Arts", "/genre/martial-arts/"), - SelectFilterOption("Mecha", "/genre/mecha/"), - SelectFilterOption("Militaire", "/genre/militaire/"), - SelectFilterOption("Musique", "/genre/musique/"), - SelectFilterOption("Mysterieux", "/genre/mysterieux/"), - SelectFilterOption("Parodie", "/genre/Parodie/"), - SelectFilterOption("Police", "/genre/police/"), - SelectFilterOption("Psychologique", "/genre/psychologique/"), - SelectFilterOption("Romance", "/genre/romance/"), - SelectFilterOption("Samurai", "/genre/samurai/"), - SelectFilterOption("Sci-Fi", "/genre/sci-fi/"), - SelectFilterOption("Seinen", "/genre/seinen/"), - SelectFilterOption("Shoujo", "/genre/shoujo/"), - SelectFilterOption("Shoujo Ai", "/genre/shoujo-ai/"), - SelectFilterOption("Shounen", "/genre/shounen/"), - SelectFilterOption("Shounen Ai", "/genre/shounen-ai/"), - SelectFilterOption("Sport", "/genre/sport/"), - SelectFilterOption("Super Power", "/genre/super-power/"), - SelectFilterOption("Surnaturel", "/genre/surnaturel/"), - SelectFilterOption("Suspense", "/genre/suspense/"), - SelectFilterOption("Thriller", "/genre/thriller/"), - SelectFilterOption("Tranche de vie", "/genre/tranche-de-vie/"), - SelectFilterOption("Vampire", "/genre/vampire/") - ]), - SelectFilter("SubPageFilter", "Sous page", 0, [ - SelectFilterOption("", ""), - SelectFilterOption("Terminé", "/termine/"), - SelectFilterOption("Film", "/film/"), - ]) - ]; - } - - @override - List getSourcePreferences() { - return [ - ListPreference( - key: "preferred_quality", - title: "Qualité préférée", - summary: "", - valueIndex: 1, - entries: ["1080p", "720p", "480p", "360p"], - entryValues: ["1080", "720", "480", "360"]), - MultiSelectListPreference( - key: "hoster_selection", - title: "Enable/Disable Hosts", - summary: "", - entries: [ - "Streamwish", - "Doodstream", - "Sendvid", - "Vidbm", - "Okru", - "Voe", - "Sibnet", - "Upstream" - ], - entryValues: [ - "Streamwish", - "Doodstream", - "Sendvid", - "Vidbm", - "Okru", - "Voe", - "Sibnet", - "Upstream" - ], - values: [ - "Streamwish", - "Doodstream", - "Sendvid", - "Vidbm", - "Okru", - "Voe", - "Sibnet", - "Upstream" - ]), - ]; - } - - List sortVideos(List videos, int sourceId) { - String quality = getPreferenceValue(sourceId, "preferred_quality"); - - videos.sort((MVideo a, MVideo b) { - int qualityMatchA = 0; - if (a.quality.contains(quality)) { - qualityMatchA = 1; - } - int qualityMatchB = 0; - if (b.quality.contains(quality)) { - qualityMatchB = 1; - } - if (qualityMatchA != qualityMatchB) { - return qualityMatchB - qualityMatchA; - } - - final regex = RegExp(r'(\d+)p'); - final matchA = regex.firstMatch(a.quality); - final matchB = regex.firstMatch(b.quality); - final int qualityNumA = int.tryParse(matchA?.group(1) ?? '0') ?? 0; - final int qualityNumB = int.tryParse(matchB?.group(1) ?? '0') ?? 0; - return qualityNumB - qualityNumA; - }); - - return videos; - } - - List preferenceHosterSelection(int sourceId) { - return getPreferenceValue(sourceId, "hoster_selection"); - } - - Future> upstreamExtractor(String url) async { - final res = (await client.get(Uri.parse(url))).body; - final js = xpath(res, '//script[contains(text(), "m3u8")]/text()'); - if (js.isEmpty) { - return []; - } - final masterUrl = - substringBefore(substringAfter(unpackJs(js.first), "{file:\""), "\"}"); - final masterPlaylistRes = (await client.get(Uri.parse(masterUrl))).body; - List videos = []; - for (var it in substringAfter(masterPlaylistRes, "#EXT-X-STREAM-INF:") - .split("#EXT-X-STREAM-INF:")) { - final quality = - "${substringBefore(substringBefore(substringAfter(substringAfter(it, "RESOLUTION="), "x"), ","), "\n")}p"; - - String videoUrl = substringBefore(substringAfter(it, "\n"), "\n"); - - if (!videoUrl.startsWith("http")) { - videoUrl = - "${masterUrl.split("/").sublist(0, masterUrl.split("/").length - 1).join("/")}/$videoUrl"; - } - - MVideo video = MVideo(); - video - ..url = videoUrl - ..originalUrl = videoUrl - ..quality = "Upstream - $quality"; - videos.add(video); - } - return videos; - } - - Future> vidbmExtractor(String url) async { - final res = (await client.get(Uri.parse(url))).body; - final js = xpath(res, - '//script[contains(text(), "m3u8") or contains(text(), "mp4")]/text()'); - if (js.isEmpty) { - return []; - } - final masterUrl = substringBefore(substringAfter(js.first, "source"), "\""); - final quality = substringBefore( - substringAfter( - substringBefore( - substringAfter(substringAfter(js.first, "source"), "file"), - "]"), - "label:\""), - "\""); - List videos = []; - if (masterUrl.contains("m3u8")) { - final masterPlaylistRes = (await client.get(Uri.parse(masterUrl))).body; - - for (var it in substringAfter(masterPlaylistRes, "#EXT-X-STREAM-INF:") - .split("#EXT-X-STREAM-INF:")) { - final quality = - "${substringBefore(substringBefore(substringAfter(substringAfter(it, "RESOLUTION="), "x"), ","), "\n")}p"; - - String videoUrl = substringBefore(substringAfter(it, "\n"), "\n"); - - if (!videoUrl.startsWith("http")) { - videoUrl = - "${masterUrl.split("/").sublist(0, masterUrl.split("/").length - 1).join("/")}/$videoUrl"; - } - - MVideo video = MVideo(); - video - ..url = videoUrl - ..originalUrl = videoUrl - ..quality = "Vidbm - $quality"; - videos.add(video); - } - return videos; - } else { - MVideo video = MVideo(); - video - ..url = masterUrl - ..originalUrl = masterUrl - ..quality = "Vidbm - $quality"; - videos.add(video); - } - return videos; - } -} - -OtakuFr main(MSource source) { - return OtakuFr(source: source); -} diff --git a/dart/anime/src/fr/otakufr/source.dart b/dart/anime/src/fr/otakufr/source.dart deleted file mode 100644 index 4037336f..00000000 --- a/dart/anime/src/fr/otakufr/source.dart +++ /dev/null @@ -1,17 +0,0 @@ -import '../../../../../model/source.dart'; - -Source get otakufr => _otakufr; -const otakufrVersion = "0.0.8"; -const otakufrCodeUrl = - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/fr/otakufr/otakufr.dart"; -Source _otakufr = Source( - name: "OtakuFr", - baseUrl: "https://otakufr.co", - lang: "fr", - typeSource: "single", - iconUrl: - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/fr/otakufr/icon.png", - sourceCodeUrl: otakufrCodeUrl, - version: otakufrVersion, - isManga: false, - isFullData: false); diff --git a/dart/anime/src/hi/yomovies/icon.png b/dart/anime/src/hi/yomovies/icon.png deleted file mode 100644 index 6afd2b3fc5e4c7c1f25c86a188edc544fcf06a57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3499 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 _yomoviesSource; -const _yomoviesVersion = "0.0.2"; -const _yomoviesSourceCodeUrl = - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/hi/yomovies/yomovies.dart"; -Source _yomoviesSource = Source( - name: "YoMovies", - baseUrl: "https://yomovies.boo", - lang: "hi", - typeSource: "single", - iconUrl: - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/hi/yomovies/icon.png", - sourceCodeUrl: _yomoviesSourceCodeUrl, - version: _yomoviesVersion, - isManga: false); diff --git a/dart/anime/src/hi/yomovies/yomovies.dart b/dart/anime/src/hi/yomovies/yomovies.dart deleted file mode 100644 index fe1299f5..00000000 --- a/dart/anime/src/hi/yomovies/yomovies.dart +++ /dev/null @@ -1,340 +0,0 @@ -import 'package:mangayomi/bridge_lib.dart'; -import 'dart:convert'; - -class YoMovies extends MProvider { - YoMovies({required this.source}); - - MSource source; - - final Client client = Client(source); - - @override - String get baseUrl => getPreferenceValue(source.id, "overrideBaseUrl"); - - @override - bool get supportsLatest => false; - - @override - Future getPopular(int page) async { - String pageNu = page == 1 ? "" : "page/$page/"; - - final res = - (await client.get(Uri.parse("$baseUrl/most-favorites/$pageNu"))).body; - final document = parseHtml(res); - return animeFromElement( - document.select("div.movies-list > div.ml-item"), - document.selectFirst("ul.pagination > li.active + li")?.getHref != - null); - } - - @override - Future getLatestUpdates(int page) async { - return MPages([], false); - } - - @override - Future search(String query, int page, FilterList filterList) async { - final filters = filterList.filters; - String url = ""; - String pageNu = page == 1 ? "" : "/page/$page"; - if (query.isNotEmpty) { - url = "$baseUrl$pageNu/?s=$query"; - } else { - for (var filter in filters) { - if (filter.type.isNotEmpty) { - final first = filter.values[filter.state].value; - if (first.isNotEmpty) { - url = first; - } - } - } - url = "$baseUrl$url$pageNu"; - } - final res = (await client.get(Uri.parse(url))).body; - final document = parseHtml(res); - return animeFromElement( - document.select("div.movies-list > div.ml-item"), - document.selectFirst("ul.pagination > li.active + li")?.getHref != - null); - } - - @override - Future getDetail(String url) async { - url = getUrlWithoutDomain(url); - - final res = (await client.get(Uri.parse("$baseUrl$url"))).body; - final document = parseHtml(res); - MManga anime = MManga(); - var infoElement = document.selectFirst("div.mvi-content"); - anime.description = infoElement.selectFirst("p.f-desc")?.text ?? ""; - - anime.genre = xpath(res, - '//div[@class="mvici-left" and contains(text(),"Genre:")]/p/a/text()'); - - List episodeList = []; - final seasonListElements = document.select("div#seasons > div.tvseason"); - if (seasonListElements.isEmpty) { - MChapter ep = MChapter(); - ep.name = "Movie"; - ep.url = url; - episodeList.add(ep); - } else { - for (var season in seasonListElements) { - var seasonText = season.selectFirst("div.les-title").text.trim(); - for (var episode in season.select("div.les-content > a")) { - var epNumber = substringAfter(episode.text.trim(), "pisode "); - MChapter ep = MChapter(); - ep.name = "$seasonText Ep. $epNumber"; - ep.url = episode.getHref; - - episodeList.add(ep); - } - } - } - - anime.chapters = episodeList.reversed.toList(); - return anime; - } - - @override - Future> getVideoList(String url) async { - url = getUrlWithoutDomain(url); - final res = (await client.get(Uri.parse("$baseUrl$url"))).body; - final document = parseHtml(res); - final serverElements = document.select("div.movieplay > iframe"); - List videos = []; - for (var serverElement in serverElements) { - var url = serverElement.getSrc; - List a = []; - if (url.contains("minoplres")) { - a = await minoplresExtractor(url); - } - videos.addAll(a); - } - return sortVideos(videos, source.id); - } - - @override - List getSourcePreferences() { - return [ - EditTextPreference( - key: "overrideBaseUrl", - title: "Override BaseUrl", - summary: "", - value: "https://yomovies.boo", - dialogTitle: "Override BaseUrl", - dialogMessage: "", - text: "https://yomovies.boo"), - ListPreference( - key: "preferred_quality", - title: "Preferred quality", - summary: "", - valueIndex: 0, - entries: ["1080p", "720p", "480p", "360p"], - entryValues: ["1080", "720", "480", "360"]) - ]; - } - - Future> minoplresExtractor(String url) async { - List videos = []; - - final res = - (await client.get(Uri.parse(url), headers: {"Referer": url})).body; - final script = xpath(res, '//script[contains(text(),"sources:")]/text()'); - if (script.isEmpty) return []; - final masterUrl = - substringBefore(substringAfter(script.first, "file:\""), '"'); - final masterPlaylistRes = (await client.get(Uri.parse(masterUrl))).body; - for (var it in substringAfter(masterPlaylistRes, "#EXT-X-STREAM-INF:") - .split("#EXT-X-STREAM-INF:")) { - final quality = - "${substringBefore(substringBefore(substringAfter(substringAfter(it, "RESOLUTION="), "x"), ","), "\n")}p"; - - String videoUrl = substringBefore(substringAfter(it, "\n"), "\n"); - - MVideo video = MVideo(); - video - ..url = videoUrl - ..originalUrl = videoUrl - ..quality = "Minoplres - $quality"; - videos.add(video); - } - return videos; - } - - MPages animeFromElement(List elements, bool hasNextPage) { - List animeList = []; - for (var element in elements) { - MManga anime = MManga(); - anime.name = element.selectFirst("div.qtip-title").text; - anime.imageUrl = - element.selectFirst("img[data-original]")?.attr("data-original") ?? - ""; - anime.link = element.selectFirst("a[href]").getHref; - animeList.add(anime); - } - return MPages(animeList, hasNextPage); - } - - List sortVideos(List videos, int sourceId) { - String quality = getPreferenceValue(sourceId, "preferred_quality"); - - videos.sort((MVideo a, MVideo b) { - int qualityMatchA = 0; - if (a.quality.contains(quality)) { - qualityMatchA = 1; - } - int qualityMatchB = 0; - if (b.quality.contains(quality)) { - qualityMatchB = 1; - } - if (qualityMatchA != qualityMatchB) { - return qualityMatchB - qualityMatchA; - } - - final regex = RegExp(r'(\d+)p'); - final matchA = regex.firstMatch(a.quality); - final matchB = regex.firstMatch(b.quality); - final int qualityNumA = int.tryParse(matchA?.group(1) ?? '0') ?? 0; - final int qualityNumB = int.tryParse(matchB?.group(1) ?? '0') ?? 0; - return qualityNumB - qualityNumA; - }); - - return videos; - } - - @override - List getFilterList() { - return [ - HeaderFilter( - "Note: Only one selection at a time works, and it ignores text search"), - SeparatorFilter(), - SelectFilter("BollywoodFilter", "Bollywood", 0, [ - SelectFilterOption("", ""), - SelectFilterOption("Dual Audio", "/genre/dual-audio"), - SelectFilterOption("Hollywood Dubbed", - "/account/?ptype=post&tax_category%5B%5D=dual-audio&wpas=1"), - SelectFilterOption("South Dubbed", - "/account/?ptype=post&tax_category%5B%5D=dual-audio&tax_category%5B%5D=south-special&wpas=1"), - ]), - SelectFilter("HollywoodFilter", "Hollywood", 0, [ - SelectFilterOption("", ""), - SelectFilterOption("English Series", "/series"), - ]), - SelectFilter("HindiSeriesFilter", "English Series", 0, [ - SelectFilterOption("", ""), - SelectFilterOption("Action", "/genre/action"), - SelectFilterOption("Adventure", "/genre/adventure"), - SelectFilterOption("Animation", "/genre/animation"), - SelectFilterOption("Biography", "/genre/biography"), - SelectFilterOption("Comedy", "/genre/comedy"), - SelectFilterOption("Crime", "/genre/crime"), - SelectFilterOption("Drama", "/genre/drama"), - SelectFilterOption("Music", "/genre/music"), - SelectFilterOption("Mystery", "/genre/mystery"), - SelectFilterOption("Family", "/genre/family"), - SelectFilterOption("Fantasy", "/genre/fantasy"), - SelectFilterOption("Horror", "/genre/horror"), - SelectFilterOption("History", "/genre/history"), - SelectFilterOption("Romance", "/genre/romantic"), - SelectFilterOption("Science Fiction", "/genre/science-fiction"), - SelectFilterOption("Thriller", "/genre/thriller"), - SelectFilterOption("War", "/genre/war"), - ]), - SelectFilter("ExtraMoviesFilter", "ExtraMovies", 0, [ - SelectFilterOption("", ""), - SelectFilterOption("Erotic", "/genre/erotic-movies"), - ]), - SelectFilter("HotSeriesFilter", "Hot Series", 0, [ - SelectFilterOption("", ""), - SelectFilterOption("2023", "2023"), - SelectFilterOption("2022", "2022"), - SelectFilterOption("2021", "2021"), - SelectFilterOption("2020", "2020"), - SelectFilterOption("2019", "2019"), - SelectFilterOption("2018", "2018"), - SelectFilterOption("2017", "2017"), - SelectFilterOption("2016", "2016"), - SelectFilterOption("2011-2015", "2011-2015"), - SelectFilterOption("2006-2010", "2006-2010"), - SelectFilterOption("2001-2005", "2001-2005"), - SelectFilterOption("1991-2000", "1991-2000"), - SelectFilterOption("1900-1990", "1900-1990"), - ]), - SelectFilter("GenreFilter", "Zhanri", 0, [ - SelectFilterOption("