From 4c28c0567c6de6e8d1e8093df25277737674e1ff Mon Sep 17 00:00:00 2001
From: Bnyro <82752168+Bnyro@users.noreply.github.com>
Date: Sun, 27 Aug 2023 01:12:26 +0200
Subject: [PATCH 1/5] add German FilmPalast provider (#241)
---
FilmPalast/build.gradle.kts | 24 ++++++
FilmPalast/src/main/AndroidManifest.xml | 2 +
.../com/example/FilmpalastExtractors.kt | 30 +++++++
.../kotlin/com/example/FilmpalastPlugin.kt | 18 ++++
.../kotlin/com/example/FilmpalastProvider.kt | 82 +++++++++++++++++++
5 files changed, 156 insertions(+)
create mode 100644 FilmPalast/build.gradle.kts
create mode 100644 FilmPalast/src/main/AndroidManifest.xml
create mode 100644 FilmPalast/src/main/kotlin/com/example/FilmpalastExtractors.kt
create mode 100644 FilmPalast/src/main/kotlin/com/example/FilmpalastPlugin.kt
create mode 100644 FilmPalast/src/main/kotlin/com/example/FilmpalastProvider.kt
diff --git a/FilmPalast/build.gradle.kts b/FilmPalast/build.gradle.kts
new file mode 100644
index 00000000..6f3a4bdc
--- /dev/null
+++ b/FilmPalast/build.gradle.kts
@@ -0,0 +1,24 @@
+// use an integer for version numbers
+version = 1
+
+
+cloudstream {
+ // All of these properties are optional, you can safely remove them
+
+ description = "German Filmpalast provider"
+ authors = listOf("Bnyro")
+
+ /**
+ * Status int as the following:
+ * 0: Down
+ * 1: Ok
+ * 2: Slow
+ * 3: Beta only
+ * */
+ status = 1 // will be 3 if unspecified
+
+ // List of video source types. Users are able to filter for extensions in a given category.
+ // You can find a list of avaliable types here:
+ // https://recloudstream.github.io/cloudstream/html/app/com.lagradost.cloudstream3/-tv-type/index.html
+ tvTypes = listOf("TvSeries", "Movie")
+}
diff --git a/FilmPalast/src/main/AndroidManifest.xml b/FilmPalast/src/main/AndroidManifest.xml
new file mode 100644
index 00000000..1863f02a
--- /dev/null
+++ b/FilmPalast/src/main/AndroidManifest.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/FilmPalast/src/main/kotlin/com/example/FilmpalastExtractors.kt b/FilmPalast/src/main/kotlin/com/example/FilmpalastExtractors.kt
new file mode 100644
index 00000000..11611566
--- /dev/null
+++ b/FilmPalast/src/main/kotlin/com/example/FilmpalastExtractors.kt
@@ -0,0 +1,30 @@
+package com.example
+
+import com.lagradost.cloudstream3.extractors.Filesim
+import com.lagradost.cloudstream3.extractors.StreamTape
+import com.lagradost.cloudstream3.extractors.Streamhub
+import com.lagradost.cloudstream3.extractors.Voe
+
+class StreamTapeTo : StreamTape() {
+ override var mainUrl = "https://streamtape.com"
+}
+
+class StreamHubGg : Streamhub() {
+ override var name = "Streamhub Gg"
+ override var mainUrl = "https://streamhub.gg"
+}
+
+class VoeSx: Voe() {
+ override val name = "Voe Sx"
+ override val mainUrl = "https://voe.sx"
+}
+
+class MetaGnathTuggers : Voe() {
+ override val name = "Metagnathtuggers"
+ override val mainUrl = "https://metagnathtuggers.com"
+}
+
+class FileLions : Filesim() {
+ override val name = "Filelions"
+ override var mainUrl = "https://filelions.to"
+}
diff --git a/FilmPalast/src/main/kotlin/com/example/FilmpalastPlugin.kt b/FilmPalast/src/main/kotlin/com/example/FilmpalastPlugin.kt
new file mode 100644
index 00000000..023c0f59
--- /dev/null
+++ b/FilmPalast/src/main/kotlin/com/example/FilmpalastPlugin.kt
@@ -0,0 +1,18 @@
+package com.example
+
+import com.lagradost.cloudstream3.plugins.CloudstreamPlugin
+import com.lagradost.cloudstream3.plugins.Plugin
+import android.content.Context
+
+@CloudstreamPlugin
+class FilmpalastPlugin: Plugin() {
+ override fun load(context: Context) {
+ // All providers should be added in this manner. Please don't edit the providers list directly.
+ registerMainAPI(FilmpalastProvider())
+ registerExtractorAPI(StreamTapeTo())
+ registerExtractorAPI(StreamHubGg())
+ registerExtractorAPI(VoeSx())
+ registerExtractorAPI(MetaGnathTuggers())
+ registerExtractorAPI(FileLions())
+ }
+}
\ No newline at end of file
diff --git a/FilmPalast/src/main/kotlin/com/example/FilmpalastProvider.kt b/FilmPalast/src/main/kotlin/com/example/FilmpalastProvider.kt
new file mode 100644
index 00000000..7c606967
--- /dev/null
+++ b/FilmPalast/src/main/kotlin/com/example/FilmpalastProvider.kt
@@ -0,0 +1,82 @@
+package com.example
+
+import com.lagradost.cloudstream3.*
+import com.lagradost.cloudstream3.utils.AppUtils.parseJson
+import com.lagradost.cloudstream3.utils.AppUtils.toJson
+import com.lagradost.cloudstream3.utils.ExtractorLink
+import com.lagradost.cloudstream3.utils.loadExtractor
+import org.jsoup.nodes.Element
+import org.jsoup.select.Elements
+
+class FilmpalastProvider : MainAPI() {
+ override var mainUrl = "https://filmpalast.to"
+ override var name = "Filmpalast"
+ override val supportedTypes = setOf(TvType.Movie, TvType.TvSeries)
+
+ override var lang = "de"
+ override val hasMainPage = true
+
+ private fun Element.toSearchResponse(): SearchResponse {
+ val title = select("cite a.rb").text()
+ val url = select("a.rb").attr("href")
+ val posterPath = select("img.cover-opacity").attr("src")
+ return newMovieSearchResponse(title, type = TvType.Movie, url = url).apply {
+ this.posterUrl = "$mainUrl$posterPath"
+ }
+ }
+
+ override suspend fun getMainPage(page: Int, request: MainPageRequest): HomePageResponse {
+ val movies = app.get("$mainUrl/movies/top").document
+ val movieResults = movies.select("#content .liste.rb").mapNotNull {
+ it.toSearchResponse()
+ }
+ val series = app.get("$mainUrl/serien/view").document
+ val seriesResults = series.select("#content .liste.rb").mapNotNull {
+ it.toSearchResponse()
+ }
+ val homePageLists = listOf(HomePageList("Movies", movieResults), HomePageList("Series", seriesResults))
+ return newHomePageResponse(homePageLists, hasNext = false)
+ }
+
+ override suspend fun search(query: String): List {
+ val document = app.get("$mainUrl/search/title/$query").document
+ return document.select("#content .glowliste").mapNotNull {
+ it.toSearchResponse()
+ }
+ }
+
+ override suspend fun load(url: String): LoadResponse {
+ val document = app.get(url).document.select("#content")
+
+ val title = document.select("h2.rb.bgDark").text()
+ val imagePath = document.select(".detail.rb img.cover2").attr("src")
+ val description = document.select("span[itemprop=description]").text()
+ val details = document.select("detail-content-list li")
+ val year = details.first()?.html()?.split("
")?.getOrNull(1)?.filter { it.isDigit() }?.toIntOrNull()
+ val duration = details.select("em").first()?.ownText()?.filter { it.isDigit() }?.toIntOrNull()
+
+ val links = document.select(".currentStreamLinks a.iconPlay").mapNotNull {
+ it.attr("href") ?: it.attr("data-player-url")
+ }
+ return newMovieLoadResponse(title, url, TvType.Movie, links.toJson()).apply {
+ this.posterUrl = "$mainUrl$imagePath"
+ this.plot = description
+ this.duration = duration
+ this.year = year
+ }
+ }
+
+ override suspend fun loadLinks(
+ data: String,
+ isCasting: Boolean,
+ subtitleCallback: (SubtitleFile) -> Unit,
+ callback: (ExtractorLink) -> Unit
+ ): Boolean {
+ val links = parseJson>(data)
+ links.apmap {
+ val link = fixUrlNull(it) ?: return@apmap null
+ loadExtractor(link, "$mainUrl/", subtitleCallback, callback)
+ }
+ return links.isNotEmpty()
+ }
+}
From e4736f1e942bb95d2db10aa2d1bd6ce9469c77f2 Mon Sep 17 00:00:00 2001
From: Hexated <37908684+hexated@users.noreply.github.com>
Date: Sun, 27 Aug 2023 06:13:47 +0700
Subject: [PATCH 2/5] Update KuramanimeProvider.kt
---
.../src/main/kotlin/com/hexated/KuramanimeProvider.kt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/KuramanimeProvider/src/main/kotlin/com/hexated/KuramanimeProvider.kt b/KuramanimeProvider/src/main/kotlin/com/hexated/KuramanimeProvider.kt
index 989740bb..b8751442 100644
--- a/KuramanimeProvider/src/main/kotlin/com/hexated/KuramanimeProvider.kt
+++ b/KuramanimeProvider/src/main/kotlin/com/hexated/KuramanimeProvider.kt
@@ -9,7 +9,7 @@ import org.jsoup.Jsoup
import org.jsoup.nodes.Element
class KuramanimeProvider : MainAPI() {
- override var mainUrl = "https://kuramanime.xyz"
+ override var mainUrl = "https://kuramanime.pro"
override var name = "Kuramanime"
override val hasQuickSearch = false
override val hasMainPage = true
From 4bb810839857e4cc5b0896fb556edbd62ab54b69 Mon Sep 17 00:00:00 2001
From: Hexated <37908684+hexated@users.noreply.github.com>
Date: Sun, 27 Aug 2023 06:14:10 +0700
Subject: [PATCH 3/5] Update build.gradle.kts
---
KuramanimeProvider/build.gradle.kts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/KuramanimeProvider/build.gradle.kts b/KuramanimeProvider/build.gradle.kts
index e9c83545..400d87fb 100644
--- a/KuramanimeProvider/build.gradle.kts
+++ b/KuramanimeProvider/build.gradle.kts
@@ -1,5 +1,5 @@
// use an integer for version numbers
-version = 13
+version = 14
cloudstream {
From bd99f996433947da9927bd0d0411e77b6e57c45e Mon Sep 17 00:00:00 2001
From: IndusAryan <125901294+IndusAryan@users.noreply.github.com>
Date: Mon, 28 Aug 2023 01:46:15 +0530
Subject: [PATCH 4/5] Update YomoviesProvider.kt (#246)
---
.../src/main/kotlin/com/hexated/YomoviesProvider.kt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/YomoviesProvider/src/main/kotlin/com/hexated/YomoviesProvider.kt b/YomoviesProvider/src/main/kotlin/com/hexated/YomoviesProvider.kt
index 9f9fce7c..f75772cc 100644
--- a/YomoviesProvider/src/main/kotlin/com/hexated/YomoviesProvider.kt
+++ b/YomoviesProvider/src/main/kotlin/com/hexated/YomoviesProvider.kt
@@ -10,7 +10,7 @@ import org.jsoup.nodes.Element
import java.net.URI
open class YomoviesProvider : MainAPI() {
- override var mainUrl = "https://yomovies.ltd"
+ override var mainUrl = "https://yomovies.fan"
private var directUrl = ""
override var name = "Yomovies"
override val hasMainPage = true
From 029046bcc6099b88e4aa447cdd518df4de38975f Mon Sep 17 00:00:00 2001
From: movieforme <142312645+movieforme@users.noreply.github.com>
Date: Mon, 28 Aug 2023 03:16:24 +0700
Subject: [PATCH 5/5] Update domain Phimmoichill (#242)
* update domain
* fix domain
* update domain
---
.../src/main/kotlin/com/hexated/PhimmoichillProvider.kt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/PhimmoichillProvider/src/main/kotlin/com/hexated/PhimmoichillProvider.kt b/PhimmoichillProvider/src/main/kotlin/com/hexated/PhimmoichillProvider.kt
index 79823186..aa7c4f5d 100644
--- a/PhimmoichillProvider/src/main/kotlin/com/hexated/PhimmoichillProvider.kt
+++ b/PhimmoichillProvider/src/main/kotlin/com/hexated/PhimmoichillProvider.kt
@@ -9,7 +9,7 @@ import org.jsoup.nodes.Element
import java.net.URLDecoder
class PhimmoichillProvider : MainAPI() {
- override var mainUrl = "https://phimmoichilld.net"
+ override var mainUrl = "https://phimmoichillg.net"
override var name = "Phimmoichill"
override val hasMainPage = true
override var lang = "vi"