Merge branch 'master' into refact/no-ref/logcat-filename
This commit is contained in:
commit
a034307f12
|
@ -1,19 +1,46 @@
|
|||
package com.lagradost.cloudstream3.extractors
|
||||
|
||||
import android.util.Base64
|
||||
import com.fasterxml.jackson.annotation.JsonProperty
|
||||
import com.lagradost.cloudstream3.SubtitleFile
|
||||
import com.lagradost.cloudstream3.app
|
||||
import com.lagradost.cloudstream3.utils.AppUtils
|
||||
import com.lagradost.cloudstream3.utils.ExtractorApi
|
||||
import com.lagradost.cloudstream3.utils.ExtractorLink
|
||||
import com.lagradost.cloudstream3.utils.M3u8Helper
|
||||
|
||||
class Tubeless : Voe() {
|
||||
override var mainUrl = "https://tubelessceliolymph.com"
|
||||
override val name = "Tubeless"
|
||||
override val mainUrl = "https://tubelessceliolymph.com"
|
||||
}
|
||||
|
||||
class Simpulumlamerop : Voe() {
|
||||
override val name = "Simplum"
|
||||
override var mainUrl = "https://simpulumlamerop.com"
|
||||
}
|
||||
|
||||
class Urochsunloath : Voe() {
|
||||
override val name = "Uroch"
|
||||
override var mainUrl = "https://urochsunloath.com"
|
||||
}
|
||||
|
||||
class Yipsu : Voe() {
|
||||
override val name = "Yipsu"
|
||||
override var mainUrl = "https://yip.su"
|
||||
}
|
||||
|
||||
class MetaGnathTuggers : Voe() {
|
||||
override val name = "Metagnath"
|
||||
override val mainUrl = "https://metagnathtuggers.com"
|
||||
}
|
||||
|
||||
open class Voe : ExtractorApi() {
|
||||
override val name = "Voe"
|
||||
override val mainUrl = "https://voe.sx"
|
||||
override val requiresReferer = true
|
||||
|
||||
private val linkRegex = "(http|https)://([\\w_-]+(?:\\.[\\w_-]+)+)([\\w.,@?^=%&:/~+#-]*[\\w@?^=%&/~+#-])".toRegex()
|
||||
private val base64Regex = Regex("'.*'")
|
||||
|
||||
override suspend fun getUrl(
|
||||
url: String,
|
||||
|
@ -25,12 +52,33 @@ open class Voe : ExtractorApi() {
|
|||
val script = res.select("script").find { it.data().contains("sources =") }?.data()
|
||||
val link = Regex("[\"']hls[\"']:\\s*[\"'](.*)[\"']").find(script ?: return)?.groupValues?.get(1)
|
||||
|
||||
M3u8Helper.generateM3u8(
|
||||
name,
|
||||
link ?: return,
|
||||
"$mainUrl/",
|
||||
headers = mapOf("Origin" to "$mainUrl/")
|
||||
).forEach(callback)
|
||||
|
||||
val videoLinks = mutableListOf<String>()
|
||||
|
||||
if (!link.isNullOrBlank()) {
|
||||
videoLinks.add(
|
||||
when {
|
||||
linkRegex.matches(link) -> link
|
||||
else -> String(Base64.decode(link, Base64.DEFAULT))
|
||||
}
|
||||
)
|
||||
} else {
|
||||
val link2 = base64Regex.find(script)?.value ?: return
|
||||
val decoded = Base64.decode(link2, Base64.DEFAULT).toString()
|
||||
val videoLinkDTO = AppUtils.parseJson<WcoSources>(decoded)
|
||||
videoLinkDTO.let { videoLinks.add(it.toString()) }
|
||||
}
|
||||
|
||||
videoLinks.forEach { videoLink ->
|
||||
M3u8Helper.generateM3u8(
|
||||
name,
|
||||
videoLink,
|
||||
"$mainUrl/",
|
||||
headers = mapOf("Origin" to "$mainUrl/")
|
||||
).forEach(callback)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
data class WcoSources(
|
||||
@JsonProperty("VideoLinkDTO") val VideoLinkDTO: String,
|
||||
)
|
||||
}
|
||||
|
|
|
@ -15,6 +15,7 @@ import com.lagradost.cloudstream3.utils.Coroutines.main
|
|||
import com.lagradost.cloudstream3.utils.DataStore.getKey
|
||||
import com.lagradost.cloudstream3.utils.DataStore.getKeys
|
||||
import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar
|
||||
import com.lagradost.cloudstream3.utils.UIHelper.setAppBarNoScrollFlagsOnTV
|
||||
import com.lagradost.cloudstream3.utils.VideoDownloadHelper
|
||||
import com.lagradost.cloudstream3.utils.VideoDownloadManager
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
|
@ -89,9 +90,9 @@ class DownloadChildFragment : Fragment() {
|
|||
setNavigationOnClickListener {
|
||||
activity?.onBackPressedDispatcher?.onBackPressed()
|
||||
}
|
||||
setAppBarNoScrollFlagsOnTV()
|
||||
}
|
||||
|
||||
|
||||
val adapter: RecyclerView.Adapter<RecyclerView.ViewHolder> =
|
||||
DownloadChildAdapter(
|
||||
ArrayList(),
|
||||
|
|
|
@ -41,6 +41,7 @@ import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe
|
|||
import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar
|
||||
import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard
|
||||
import com.lagradost.cloudstream3.utils.UIHelper.navigate
|
||||
import com.lagradost.cloudstream3.utils.UIHelper.setAppBarNoScrollFlagsOnTV
|
||||
import com.lagradost.cloudstream3.utils.VideoDownloadHelper
|
||||
import com.lagradost.cloudstream3.utils.VideoDownloadManager
|
||||
import java.net.URI
|
||||
|
@ -97,6 +98,8 @@ class DownloadFragment : Fragment() {
|
|||
super.onViewCreated(view, savedInstanceState)
|
||||
hideKeyboard()
|
||||
|
||||
binding?.downloadStorageAppbar?.setAppBarNoScrollFlagsOnTV()
|
||||
|
||||
observe(downloadsViewModel.noDownloadsText) {
|
||||
binding?.textNoDownloads?.text = it
|
||||
}
|
||||
|
|
|
@ -83,6 +83,7 @@ import com.lagradost.cloudstream3.extractors.Maxstream
|
|||
import com.lagradost.cloudstream3.extractors.Mcloud
|
||||
import com.lagradost.cloudstream3.extractors.Megacloud
|
||||
import com.lagradost.cloudstream3.extractors.Meownime
|
||||
import com.lagradost.cloudstream3.extractors.MetaGnathTuggers
|
||||
import com.lagradost.cloudstream3.extractors.Minoplres
|
||||
import com.lagradost.cloudstream3.extractors.MixDrop
|
||||
import com.lagradost.cloudstream3.extractors.MixDropBz
|
||||
|
@ -139,6 +140,7 @@ import com.lagradost.cloudstream3.extractors.Sbspeed
|
|||
import com.lagradost.cloudstream3.extractors.Sbthe
|
||||
import com.lagradost.cloudstream3.extractors.Sendvid
|
||||
import com.lagradost.cloudstream3.extractors.ShaveTape
|
||||
import com.lagradost.cloudstream3.extractors.Simpulumlamerop
|
||||
import com.lagradost.cloudstream3.extractors.Solidfiles
|
||||
import com.lagradost.cloudstream3.extractors.Ssbstream
|
||||
import com.lagradost.cloudstream3.extractors.StreamM4u
|
||||
|
@ -175,6 +177,7 @@ import com.lagradost.cloudstream3.extractors.UpstreamExtractor
|
|||
import com.lagradost.cloudstream3.extractors.Uqload
|
||||
import com.lagradost.cloudstream3.extractors.Uqload1
|
||||
import com.lagradost.cloudstream3.extractors.Uqload2
|
||||
import com.lagradost.cloudstream3.extractors.Urochsunloath
|
||||
import com.lagradost.cloudstream3.extractors.Userload
|
||||
import com.lagradost.cloudstream3.extractors.Userscloud
|
||||
import com.lagradost.cloudstream3.extractors.Uservideo
|
||||
|
@ -208,6 +211,7 @@ import com.lagradost.cloudstream3.extractors.Watchx
|
|||
import com.lagradost.cloudstream3.extractors.WcoStream
|
||||
import com.lagradost.cloudstream3.extractors.Wibufile
|
||||
import com.lagradost.cloudstream3.extractors.XStreamCdn
|
||||
import com.lagradost.cloudstream3.extractors.Yipsu
|
||||
import com.lagradost.cloudstream3.extractors.YourUpload
|
||||
import com.lagradost.cloudstream3.extractors.YoutubeExtractor
|
||||
import com.lagradost.cloudstream3.extractors.YoutubeMobileExtractor
|
||||
|
@ -890,7 +894,11 @@ val extractorApis: MutableList<ExtractorApi> = arrayListOf(
|
|||
EmturbovidExtractor(),
|
||||
Vtbe(),
|
||||
EPlayExtractor(),
|
||||
Vidguardto()
|
||||
Vidguardto(),
|
||||
Simpulumlamerop(),
|
||||
Urochsunloath(),
|
||||
Yipsu(),
|
||||
MetaGnathTuggers()
|
||||
)
|
||||
|
||||
|
||||
|
|
|
@ -45,6 +45,7 @@ import androidx.core.view.marginBottom
|
|||
import androidx.core.view.marginLeft
|
||||
import androidx.core.view.marginRight
|
||||
import androidx.core.view.marginTop
|
||||
import androidx.core.view.updateLayoutParams
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.FragmentActivity
|
||||
import androidx.navigation.fragment.NavHostFragment
|
||||
|
@ -58,6 +59,7 @@ import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions
|
|||
import com.bumptech.glide.request.RequestListener
|
||||
import com.bumptech.glide.request.RequestOptions.bitmapTransform
|
||||
import com.bumptech.glide.request.target.Target
|
||||
import com.google.android.material.appbar.AppBarLayout
|
||||
import com.google.android.material.chip.Chip
|
||||
import com.google.android.material.chip.ChipDrawable
|
||||
import com.google.android.material.chip.ChipGroup
|
||||
|
@ -208,6 +210,14 @@ object UIHelper {
|
|||
}
|
||||
}
|
||||
|
||||
fun View?.setAppBarNoScrollFlagsOnTV() {
|
||||
if (isLayout(Globals.TV or EMULATOR)) {
|
||||
this?.updateLayoutParams<AppBarLayout.LayoutParams> {
|
||||
scrollFlags = AppBarLayout.LayoutParams.SCROLL_FLAG_NO_SCROLL
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun Activity.hideKeyboard() {
|
||||
window?.decorView?.clearFocus()
|
||||
this.findViewById<View>(android.R.id.content)?.rootView?.let {
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
android:layout_height="50dp"
|
||||
android:layout_marginBottom="5dp"
|
||||
android:foreground="@drawable/outline_drawable"
|
||||
android:focusable="true"
|
||||
android:nextFocusLeft="@id/nav_rail_view"
|
||||
android:nextFocusRight="@id/download_button"
|
||||
app:cardBackgroundColor="@color/transparent"
|
||||
|
@ -84,7 +85,9 @@
|
|||
android:layout_height="@dimen/download_size"
|
||||
android:layout_gravity="center_vertical|end"
|
||||
android:layout_marginStart="-50dp"
|
||||
android:background="?selectableItemBackgroundBorderless"
|
||||
android:foreground="@drawable/outline_drawable"
|
||||
android:focusable="true"
|
||||
android:nextFocusLeft="@id/download_child_episode_holder"
|
||||
android:padding="10dp" />
|
||||
</GridLayout>
|
||||
</androidx.cardview.widget.CardView>
|
|
@ -9,6 +9,8 @@
|
|||
android:layout_marginTop="10dp"
|
||||
android:layout_marginEnd="10dp"
|
||||
android:foreground="@drawable/outline_drawable"
|
||||
android:focusable="true"
|
||||
android:nextFocusRight="@id/download_button"
|
||||
app:cardBackgroundColor="?attr/boxItemBackground"
|
||||
app:cardCornerRadius="@dimen/rounded_image_radius">
|
||||
|
||||
|
@ -71,7 +73,9 @@
|
|||
android:layout_height="@dimen/download_size"
|
||||
android:layout_gravity="center_vertical|end"
|
||||
android:layout_marginStart="-50dp"
|
||||
android:background="?selectableItemBackgroundBorderless"
|
||||
android:foreground="@drawable/outline_drawable"
|
||||
android:focusable="true"
|
||||
android:nextFocusLeft="@id/episode_holder"
|
||||
android:padding="10dp" />
|
||||
</LinearLayout>
|
||||
</androidx.cardview.widget.CardView>
|
Loading…
Reference in New Issue