-
Notifications
You must be signed in to change notification settings - Fork 259
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add: DatalifeEngine multisrc, Wiflix theme and migrated FrenchAnime
- Loading branch information
1 parent
4e7a213
commit cb5ad3c
Showing
24 changed files
with
303 additions
and
406 deletions.
There are no files selected for viewing
12 changes: 12 additions & 0 deletions
12
multisrc/overrides/datalifeengine/frenchanime/additional.gradle
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
dependencies { | ||
implementation(project(':lib-dood-extractor')) | ||
implementation(project(':lib-vido-extractor')) | ||
implementation(project(':lib-uqload-extractor')) | ||
implementation(project(':lib-vudeo-extractor')) | ||
implementation(project(':lib-streamhidevid-extractor')) | ||
implementation(project(':lib-upstream-extractor')) | ||
implementation(project(':lib-streamvid-extractor')) | ||
implementation(project(':lib-sibnet-extractor')) | ||
implementation(project(':lib-okru-extractor')) | ||
implementation(project(':lib-streamhub-extractor')) | ||
} |
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
119 changes: 119 additions & 0 deletions
119
multisrc/overrides/datalifeengine/frenchanime/src/FrenchAnime.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,119 @@ | ||
package eu.kanade.tachiyomi.animeextension.fr.frenchanime | ||
|
||
import eu.kanade.tachiyomi.animesource.model.SEpisode | ||
import eu.kanade.tachiyomi.animesource.model.Video | ||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor | ||
import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor | ||
import eu.kanade.tachiyomi.lib.sibnetextractor.SibnetExtractor | ||
import eu.kanade.tachiyomi.lib.streamhidevidextractor.StreamHideVidExtractor | ||
import eu.kanade.tachiyomi.lib.streamhubextractor.StreamHubExtractor | ||
import eu.kanade.tachiyomi.lib.streamvidextractor.StreamVidExtractor | ||
import eu.kanade.tachiyomi.lib.upstreamextractor.UpstreamExtractor | ||
import eu.kanade.tachiyomi.lib.uqloadextractor.UqloadExtractor | ||
import eu.kanade.tachiyomi.lib.vidoextractor.VidoExtractor | ||
import eu.kanade.tachiyomi.lib.vudeoextractor.VudeoExtractor | ||
import eu.kanade.tachiyomi.multisrc.datalifeengine.DataLifeEngine | ||
import eu.kanade.tachiyomi.network.GET | ||
import eu.kanade.tachiyomi.util.asJsoup | ||
import okhttp3.Request | ||
import okhttp3.Response | ||
import org.jsoup.nodes.Document | ||
import org.jsoup.nodes.Element | ||
import rx.Observable | ||
import java.lang.Exception | ||
|
||
class FrenchAnime : DataLifeEngine( | ||
"French Anime", | ||
"https://french-anime.com", | ||
"fr", | ||
) { | ||
|
||
override val categories = arrayOf( | ||
Pair("<Sélectionner>", ""), | ||
Pair("Animes VF", "/animes-vf/"), | ||
Pair("Animes VOSTFR", "/animes-vostfr/"), | ||
Pair("Films VF et VOSTFR", "/films-vf-vostfr/"), | ||
) | ||
|
||
override val genres = arrayOf( | ||
Pair("<Sélectionner>", ""), | ||
Pair("Action", "/genre/action/"), | ||
Pair("Aventure", "/genre/aventure/"), | ||
Pair("Arts martiaux", "/genre/arts-martiaux/"), | ||
Pair("Combat", "/genre/combat/"), | ||
Pair("Comédie", "/genre/comedie/"), | ||
Pair("Drame", "/genre/drame/"), | ||
Pair("Epouvante", "/genre/epouvante/"), | ||
Pair("Fantastique", "/genre/fantastique/"), | ||
Pair("Fantasy", "/genre/fantasy/"), | ||
Pair("Mystère", "/genre/mystere/"), | ||
Pair("Romance", "/genre/romance/"), | ||
Pair("Shonen", "/genre/shonen/"), | ||
Pair("Surnaturel", "/genre/surnaturel/"), | ||
Pair("Sci-Fi", "/genre/sci-fi/"), | ||
Pair("School life", "/genre/school-life/"), | ||
Pair("Ninja", "/genre/ninja/"), | ||
Pair("Seinen", "/genre/seinen/"), | ||
Pair("Horreur", "/genre/horreur/"), | ||
Pair("Tranche de vie", "/genre/tranchedevie/"), | ||
Pair("Psychologique", "/genre/psychologique/"), | ||
) | ||
|
||
// ============================== Popular =============================== | ||
|
||
override fun popularAnimeRequest(page: Int): Request = GET("$baseUrl/animes-vostfr/page/$page/") | ||
|
||
// ============================== Episodes ============================== | ||
|
||
override fun episodeListParse(response: Response): List<SEpisode> { | ||
val document = response.asJsoup() | ||
val episodeList = mutableListOf<SEpisode>() | ||
|
||
val epsData = document.selectFirst("div.eps")?.text() ?: return emptyList() | ||
epsData.split(" ").filter { it.isNotBlank() }.forEach { | ||
val data = it.split("!", limit = 2) | ||
val episode = SEpisode.create() | ||
episode.episode_number = data[0].toFloatOrNull() ?: 0F | ||
episode.name = "Episode ${data[0]}" | ||
episode.url = data[1] | ||
episodeList.add(episode) | ||
} | ||
|
||
return episodeList.reversed() | ||
} | ||
|
||
override fun episodeListSelector(): String = throw Exception("not used") | ||
|
||
override fun episodeFromElement(element: Element): SEpisode = throw Exception("not used") | ||
|
||
// ============================ Video Links ============================= | ||
|
||
override fun fetchVideoList(episode: SEpisode): Observable<List<Video>> { | ||
val list = episode.url.split(",").filter { it.isNotBlank() }.parallelCatchingFlatMap { | ||
with(it) { | ||
when { | ||
contains("dood") -> DoodExtractor(client).videosFromUrl(this) | ||
contains("upstream") -> UpstreamExtractor(client).videosFromUrl(this) | ||
contains("vudeo") -> VudeoExtractor(client).videosFromUrl(this) | ||
contains("uqload") -> UqloadExtractor(client).videosFromUrl(this) | ||
contains("guccihide") || | ||
contains("streamhide") -> StreamHideVidExtractor(client).videosFromUrl(this) | ||
contains("streamvid") -> StreamVidExtractor(client).videosFromUrl(this) | ||
contains("vido") -> VidoExtractor(client).videosFromUrl(this) | ||
contains("sibnet") -> SibnetExtractor(client).videosFromUrl(this) | ||
contains("ok.ru") -> OkruExtractor(client).videosFromUrl(this) | ||
contains("streamhub.gg") -> StreamHubExtractor(client).videosFromUrl(this) | ||
else -> emptyList() | ||
} | ||
} | ||
}.sort() | ||
if (list.isEmpty()) throw Exception("no player found") | ||
return Observable.just(list) | ||
} | ||
|
||
override fun videoFromElement(element: Element): Video = throw Exception("Not Used") | ||
|
||
override fun videoListSelector(): String = throw Exception("Not Used") | ||
|
||
override fun videoUrlParse(document: Document): String = throw Exception("Not Used") | ||
} |
11 changes: 11 additions & 0 deletions
11
multisrc/overrides/datalifeengine/wiflix/additional.gradle
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
dependencies { | ||
implementation(project(':lib-dood-extractor')) | ||
implementation(project(':lib-vido-extractor')) | ||
implementation(project(':lib-uqload-extractor')) | ||
implementation(project(':lib-streamdav-extractor')) | ||
// ? implementation(project(':lib-waaw1-extractor')) | ||
implementation(project(':lib-vudeo-extractor')) | ||
implementation(project(':lib-streamhidevid-extractor')) | ||
implementation(project(':lib-upstream-extractor')) | ||
implementation(project(':lib-voe-extractor')) | ||
} |
Binary file added
BIN
+4.44 KB
multisrc/overrides/datalifeengine/wiflix/res/mipmap-hdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+2.48 KB
multisrc/overrides/datalifeengine/wiflix/res/mipmap-mdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+5.91 KB
multisrc/overrides/datalifeengine/wiflix/res/mipmap-xhdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+10.8 KB
multisrc/overrides/datalifeengine/wiflix/res/mipmap-xxhdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+15.4 KB
multisrc/overrides/datalifeengine/wiflix/res/mipmap-xxxhdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
package eu.kanade.tachiyomi.animeextension.fr.wiflix | ||
|
||
import eu.kanade.tachiyomi.animesource.model.SEpisode | ||
import eu.kanade.tachiyomi.animesource.model.Video | ||
import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor | ||
import eu.kanade.tachiyomi.lib.streamdavextractor.StreamDavExtractor | ||
import eu.kanade.tachiyomi.lib.streamhidevidextractor.StreamHideVidExtractor | ||
import eu.kanade.tachiyomi.lib.upstreamextractor.UpstreamExtractor | ||
import eu.kanade.tachiyomi.lib.uqloadextractor.UqloadExtractor | ||
import eu.kanade.tachiyomi.lib.vidoextractor.VidoExtractor | ||
import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor | ||
import eu.kanade.tachiyomi.lib.vudeoextractor.VudeoExtractor | ||
import eu.kanade.tachiyomi.multisrc.datalifeengine.DataLifeEngine | ||
import eu.kanade.tachiyomi.network.GET | ||
import okhttp3.Request | ||
import okhttp3.Response | ||
import org.jsoup.nodes.Document | ||
import org.jsoup.nodes.Element | ||
import rx.Observable | ||
|
||
class Wiflix : DataLifeEngine( | ||
"Wiflix", | ||
"https://wiflix.voto", | ||
"fr", | ||
) { | ||
|
||
override val categories = arrayOf( | ||
Pair("<Sélectionner>", ""), | ||
Pair("Séries", "/serie-en-streaming/"), | ||
Pair("Films", "/film-en-streaming/"), | ||
) | ||
|
||
override val genres = arrayOf( | ||
Pair("<Sélectionner>", ""), | ||
Pair("Action", "/film-en-streaming/action/"), | ||
Pair("Animation", "/film-en-streaming/animation/"), | ||
Pair("Arts Martiaux", "/film-en-streaming/arts-martiaux/"), | ||
Pair("Aventure", "/film-en-streaming/aventure/"), | ||
Pair("Biopic", "/film-en-streaming/biopic/"), | ||
Pair("Comédie", "/film-en-streaming/comedie/"), | ||
Pair("Comédie Dramatique", "/film-en-streaming/comedie-dramatique/"), | ||
Pair("Épouvante Horreur", "/film-en-streaming/horreur/"), | ||
Pair("Drame", "/film-en-streaming/drame/"), | ||
Pair("Documentaire", "/film-en-streaming/documentaire/"), | ||
Pair("Espionnage", "/film-en-streaming/espionnage/"), | ||
Pair("Famille", "/film-en-streaming/famille/"), | ||
Pair("Fantastique", "/film-en-streaming/fantastique/"), | ||
Pair("Guerre", "/film-en-streaming/guerre/"), | ||
Pair("Historique", "/film-en-streaming/historique/"), | ||
Pair("Musical", "/film-en-streaming/musical/"), | ||
Pair("Policier", "/film-en-streaming/policier/"), | ||
Pair("Romance", "/film-en-streaming/romance/"), | ||
Pair("Science-Fiction", "/film-en-streaming/science-fiction/"), | ||
Pair("Spectacles", "/film-en-streaming/spectacles/"), | ||
Pair("Thriller", "/film-en-streaming/thriller/"), | ||
Pair("Western", "/film-en-streaming/western/"), | ||
) | ||
|
||
// ============================== Popular =============================== | ||
|
||
override fun popularAnimeRequest(page: Int): Request = GET("$baseUrl/serie-en-streaming/page/$page/") | ||
|
||
// ============================== Episodes ============================== | ||
|
||
override fun episodeListSelector(): String = ".hostsblock div:has(a[href*=https])" | ||
|
||
override fun episodeListParse(response: Response): List<SEpisode> = super.episodeListParse(response).sort() | ||
|
||
override fun episodeFromElement(element: Element): SEpisode = SEpisode.create().apply { | ||
episode_number = element.className().filter { it.isDigit() }.toFloat() | ||
name = "Episode ${episode_number.toInt()}" | ||
scanlator = if (element.className().contains("vf")) "VF" else "VOSTFR" | ||
url = element.select("a").joinToString(",") { it.attr("href").removePrefix("/vd.php?u=") } | ||
} | ||
|
||
// ============================ Video Links ============================= | ||
|
||
override fun fetchVideoList(episode: SEpisode): Observable<List<Video>> { | ||
val list = episode.url.split(",").filter { it.isNotBlank() }.parallelCatchingFlatMap { | ||
with(it) { | ||
when { | ||
contains("doods.pro") -> DoodExtractor(client).videosFromUrl(this) | ||
contains("vido.lol") -> VidoExtractor(client).videosFromUrl(this) | ||
contains("uqload.co") -> UqloadExtractor(client).videosFromUrl(this) | ||
contains("waaw1.tv") -> emptyList() | ||
contains("vudeo.co") -> VudeoExtractor(client).videosFromUrl(this) | ||
contains("streamvid.net") -> StreamHideVidExtractor(client).videosFromUrl(this) | ||
contains("upstream.to") -> UpstreamExtractor(client).videosFromUrl(this) | ||
contains("streamdav.com") -> StreamDavExtractor(client).videosFromUrl(this) | ||
contains("voe.sx") -> listOfNotNull(VoeExtractor(client).videoFromUrl(this)) | ||
else -> emptyList() | ||
} | ||
} | ||
}.sort() | ||
if (list.isEmpty()) throw Exception("no player found") | ||
return Observable.just(list) | ||
} | ||
|
||
override fun videoFromElement(element: Element): Video = throw Exception("Not Used") | ||
|
||
override fun videoListSelector(): String = throw Exception("Not Used") | ||
|
||
override fun videoUrlParse(document: Document): String = throw Exception("Not Used") | ||
} |
Oops, something went wrong.