From d2bfc2eb25e4588fb3ee7e860c5e338e3de6edc9 Mon Sep 17 00:00:00 2001 From: Jace <54625750+Jacekun@users.noreply.github.com> Date: Sat, 19 Nov 2022 12:41:27 +0800 Subject: [PATCH] Xvideos - Added duration in minutes. Updated version --- XvideosProvider/build.gradle.kts | 2 +- .../kotlin/com/jacekun/XvideosProvider.kt | 53 +++++++++++++------ 2 files changed, 39 insertions(+), 16 deletions(-) diff --git a/XvideosProvider/build.gradle.kts b/XvideosProvider/build.gradle.kts index c353c86..580d975 100644 --- a/XvideosProvider/build.gradle.kts +++ b/XvideosProvider/build.gradle.kts @@ -1,5 +1,5 @@ // use an integer for version numbers -version = 4 +version = 5 cloudstream { diff --git a/XvideosProvider/src/main/kotlin/com/jacekun/XvideosProvider.kt b/XvideosProvider/src/main/kotlin/com/jacekun/XvideosProvider.kt index 9d3ae77..dce5d67 100644 --- a/XvideosProvider/src/main/kotlin/com/jacekun/XvideosProvider.kt +++ b/XvideosProvider/src/main/kotlin/com/jacekun/XvideosProvider.kt @@ -17,6 +17,29 @@ class XvideosProvider : MainAPI() { override val hasDownloadSupport = true override val supportedTypes = setOf(TvType.NSFW) + fun getDurationFromTitle(title: String?): Int? { + if (title.isNullOrBlank()) { + return null + } + var seconds = 0 + "(\\s\\d+\\shr)|(\\s\\d+\\shour)|(\\s\\d+\\smin)|(\\s\\d+\\ssec)".toRegex() + .findAll(title).forEach { + //Output: 5 hr, 41 min, 30 sec + val time_text = it.value + val time = time_text.filter { s -> s.isDigit() }.trim().toInt() + val scale = time_text.filter { s -> !s.isDigit() }.trim() + //println("Scale: $scale") + val timeval = when (scale) { + "hr", "hour" -> time * 60 * 60 + "min" -> time * 60 + "sec" -> time + else -> 0 + } + seconds += timeval + } + return if (seconds > 0) { seconds / 60 } else 0 + } + override val mainPage = mainPageOf( Pair(mainUrl, "Main Page"), Pair("$mainUrl/new/", "New") @@ -35,14 +58,13 @@ class XvideosProvider : MainAPI() { val title = it.selectFirst("p.title a")?.text() ?: "" val link = fixUrlNull(it.selectFirst("div.thumb a")?.attr("href")) ?: return@mapNotNull null val image = it.selectFirst("div.thumb a img")?.attr("data-src") - MovieSearchResponse( + newMovieSearchResponse( name = title, url = link, - apiName = this.name, type = globalTvType, - posterUrl = image, - year = null - ) + ) { + this.posterUrl = image + } } if (home.isNotEmpty()) { return newHomePageResponse( @@ -74,13 +96,13 @@ class XvideosProvider : MainAPI() { val href = fixUrlNull(it.selectFirst("div.thumb a")?.attr("href")) ?: return@mapNotNull null val image = if (href.contains("channels") || href.contains("pornstars")) null else it.selectFirst("div.thumb-inside a img")?.attr("data-src") val finaltitle = if (href.contains("channels") || href.contains("pornstars")) "" else title - MovieSearchResponse( + newMovieSearchResponse( name = finaltitle, url = href, - apiName = this.name, type = globalTvType, - posterUrl = image - ) + ) { + this.posterUrl = image + } }.toList() } @@ -118,16 +140,17 @@ class XvideosProvider : MainAPI() { ) } else -> { - MovieLoadResponse( + newMovieLoadResponse( name = title ?: "", url = url, - apiName = this.name, type = globalTvType, dataUrl = url, - posterUrl = poster, - plot = title, - tags = tags, - ) + ) { + this.posterUrl = poster + this.plot = title + this.tags = tags + this.duration = getDurationFromTitle(title) + } } } }