From 4a193d5d27449e232387e929d2645104aa1e8dc8 Mon Sep 17 00:00:00 2001
From: reduplicated <110570621+reduplicated@users.noreply.github.com>
Date: Wed, 2 Nov 2022 21:41:39 +0100
Subject: [PATCH 01/13] small fix
---
.../cloudstream3/extractors/BullStream.kt | 2 +-
.../extractors/YoutubeExtractor.kt | 1 -
.../cloudstream3/ui/home/HomeFragment.kt | 5 ++
.../ui/player/FullScreenPlayer.kt | 8 +--
.../ui/result/ResultTrailerPlayer.kt | 49 ++++++++++++++++++-
app/src/main/res/layout/fragment_result.xml | 25 +++++-----
app/src/main/res/layout/fragment_trailer.xml | 2 +-
.../main/res/layout/trailer_custom_layout.xml | 2 +-
app/src/main/res/values/styles.xml | 1 +
9 files changed, 71 insertions(+), 24 deletions(-)
diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/BullStream.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/BullStream.kt
index d4f87f4c..e5368bc3 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/extractors/BullStream.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/BullStream.kt
@@ -18,7 +18,7 @@ class BullStream : ExtractorApi() {
?: return null
val m3u8 = "$mainUrl/m3u8/${data[1]}/${data[2]}/master.txt?s=1&cache=${data[4]}"
- println("shiv : $m3u8")
+ //println("shiv : $m3u8")
return M3u8Helper.generateM3u8(
name,
m3u8,
diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/YoutubeExtractor.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/YoutubeExtractor.kt
index 572d93a3..23704e90 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/extractors/YoutubeExtractor.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/YoutubeExtractor.kt
@@ -46,7 +46,6 @@ open class YoutubeExtractor : ExtractorApi() {
subtitleCallback: (SubtitleFile) -> Unit,
callback: (ExtractorLink) -> Unit
) {
- println("TRYING TO ExTRACT: $url")
if (ytVideos[url].isNullOrEmpty()) {
val link =
YoutubeStreamLinkHandlerFactory.getInstance().fromUrl(
diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt
index 4b9dd5be..a73fc873 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt
@@ -585,6 +585,11 @@ class HomeFragment : Fragment() {
setPageTransformer(HomeScrollTransformer())
val callback: OnPageChangeCallback = object : OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
+
+ // home_search?.isIconified = true
+ //home_search?.isVisible = true
+ //home_search?.clearFocus()
+
(home_preview_viewpager?.adapter as? HomeScrollAdapter)?.apply {
if (position >= itemCount - 1 && hasMoreItems) {
hasMoreItems = false // dont make two requests
diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/FullScreenPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/FullScreenPlayer.kt
index 1ddd752f..52125c68 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/FullScreenPlayer.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/FullScreenPlayer.kt
@@ -587,7 +587,7 @@ open class FullScreenPlayer : AbstractPlayerFragment() {
updateLockUI()
}
- private fun updateUIVisibility() {
+ fun updateUIVisibility() {
val isGone = isLocked || !isShowing
var togglePlayerTitleGone = isGone
context?.let {
@@ -1306,12 +1306,6 @@ open class FullScreenPlayer : AbstractPlayerFragment() {
showTracksDialogue()
}
- player_intro_play?.setOnClickListener {
- player_intro_play?.isGone = true
- player.handleEvent(CSPlayerEvent.Play)
- updateUIVisibility()
- }
-
// it is !not! a bug that you cant touch the right side, it does not register inputs on navbar or status bar
player_holder?.setOnTouchListener { callView, event ->
return@setOnTouchListener handleMotionEvent(callView, event)
diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultTrailerPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultTrailerPlayer.kt
index 8a6e5b37..bf47209a 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultTrailerPlayer.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultTrailerPlayer.kt
@@ -1,5 +1,6 @@
package com.lagradost.cloudstream3.ui.result
+import android.animation.ValueAnimator
import android.content.Context
import android.content.res.Configuration
import android.graphics.Rect
@@ -7,9 +8,11 @@ import android.os.Bundle
import android.view.View
import android.view.ViewGroup
import android.widget.FrameLayout
+import androidx.core.view.isGone
import androidx.core.view.isVisible
import com.discord.panels.PanelsChildGestureRegionObserver
import com.lagradost.cloudstream3.R
+import com.lagradost.cloudstream3.ui.player.CSPlayerEvent
import com.lagradost.cloudstream3.ui.player.SubtitleData
import com.lagradost.cloudstream3.utils.IOnBackPressed
import kotlinx.android.synthetic.main.fragment_result.*
@@ -19,6 +22,7 @@ import kotlinx.android.synthetic.main.fragment_result_tv.*
import kotlinx.android.synthetic.main.fragment_trailer.*
import kotlinx.android.synthetic.main.trailer_custom_layout.*
+
open class ResultTrailerPlayer : com.lagradost.cloudstream3.ui.player.FullScreenPlayer(),
PanelsChildGestureRegionObserver.GestureRegionsListener, IOnBackPressed {
@@ -60,14 +64,43 @@ open class ResultTrailerPlayer : com.lagradost.cloudstream3.ui.player.FullScreen
result_smallscreen_holder?.isVisible = !isFullScreenPlayer
result_fullscreen_holder?.isVisible = isFullScreenPlayer
+ val to = sw * h / w
+
player_background?.apply {
isVisible = true
layoutParams =
FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
- if (isFullScreenPlayer) FrameLayout.LayoutParams.MATCH_PARENT else sw * h / w
+ if (isFullScreenPlayer) FrameLayout.LayoutParams.MATCH_PARENT else to
)
}
+
+ player_intro_play?.apply {
+ layoutParams =
+ FrameLayout.LayoutParams(
+ FrameLayout.LayoutParams.MATCH_PARENT,
+ result_top_holder?.measuredHeight ?: FrameLayout.LayoutParams.MATCH_PARENT
+ )
+ }
+
+ if (player_intro_play?.isGone == true) {
+ result_top_holder?.apply {
+
+ val anim = ValueAnimator.ofInt(
+ measuredHeight,
+ if (isFullScreenPlayer) ViewGroup.LayoutParams.MATCH_PARENT else to
+ )
+ anim.addUpdateListener { valueAnimator ->
+ val `val` = valueAnimator.animatedValue as Int
+ val layoutParams: ViewGroup.LayoutParams =
+ layoutParams
+ layoutParams.height = `val`
+ setLayoutParams(layoutParams)
+ }
+ anim.duration = 200
+ anim.start()
+ }
+ }
}
}
@@ -79,7 +112,12 @@ open class ResultTrailerPlayer : com.lagradost.cloudstream3.ui.player.FullScreen
override fun showMirrorsDialogue() {}
override fun showTracksDialogue() {}
- override fun openOnlineSubPicker(context: Context, imdbId: Long?, dismissCallback: () -> Unit) {}
+ override fun openOnlineSubPicker(
+ context: Context,
+ imdbId: Long?,
+ dismissCallback: () -> Unit
+ ) {
+ }
override fun subtitlesChanged() {}
@@ -124,6 +162,13 @@ open class ResultTrailerPlayer : com.lagradost.cloudstream3.ui.player.FullScreen
}
updateFullscreen(isFullScreenPlayer)
uiReset()
+
+ player_intro_play?.setOnClickListener {
+ player_intro_play?.isGone = true
+ player.handleEvent(CSPlayerEvent.Play)
+ updateUIVisibility()
+ fixPlayerSize()
+ }
}
override fun onBackPressed(): Boolean {
diff --git a/app/src/main/res/layout/fragment_result.xml b/app/src/main/res/layout/fragment_result.xml
index ed2ec6bd..f88fc173 100644
--- a/app/src/main/res/layout/fragment_result.xml
+++ b/app/src/main/res/layout/fragment_result.xml
@@ -267,10 +267,10 @@
-->
-
+
-
-
+
+
+
@@ -330,6 +332,7 @@
android:contentDescription="@string/result_poster_img_des"
android:foreground="@drawable/outline_drawable"
android:scaleType="centerCrop"
+ android:layout_gravity="bottom"
tools:src="@drawable/example_poster" />
diff --git a/app/src/main/res/layout/fragment_trailer.xml b/app/src/main/res/layout/fragment_trailer.xml
index fd348760..ff477118 100644
--- a/app/src/main/res/layout/fragment_trailer.xml
+++ b/app/src/main/res/layout/fragment_trailer.xml
@@ -3,7 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
- android:layout_height="0dp"
+ android:layout_height="match_parent"
android:visibility="visible"
android:orientation="horizontal"
android:id="@+id/player_background"
diff --git a/app/src/main/res/layout/trailer_custom_layout.xml b/app/src/main/res/layout/trailer_custom_layout.xml
index 854855ef..0dd19a5b 100644
--- a/app/src/main/res/layout/trailer_custom_layout.xml
+++ b/app/src/main/res/layout/trailer_custom_layout.xml
@@ -62,7 +62,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start|bottom"
- android:padding="10dp"
+ android:padding="15dp"
android:text="@string/trailer"
android:textColor="@android:color/white"
android:textSize="20sp"
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 13089cc2..9c2f62fc 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -83,6 +83,7 @@
- @color/chip_color_text
- @color/chip_color_text
- @font/google_sans
+ - @color/chip_color_text
- @font/google_sans
From c09b6881e5ac00fc7b2b9a4b096cd96e6076bde6 Mon Sep 17 00:00:00 2001
From: reduplicated <110570621+reduplicated@users.noreply.github.com>
Date: Wed, 2 Nov 2022 22:56:03 +0100
Subject: [PATCH 02/13] bump
---
app/build.gradle.kts | 4 ++--
.../lagradost/cloudstream3/ui/home/HomeFragment.kt | 12 ++++++++++--
app/src/main/res/layout/fragment_home.xml | 6 +++++-
3 files changed, 17 insertions(+), 5 deletions(-)
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 99eec423..a2c31d0b 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -47,8 +47,8 @@ android {
minSdk = 21
targetSdk = 30
- versionCode = 52
- versionName = "3.1.6"
+ versionCode = 53
+ versionName = "3.2.0"
resValue("string", "app_version", "${defaultConfig.versionName}${versionNameSuffix ?: ""}")
diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt
index a73fc873..ac6daa53 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt
@@ -74,8 +74,10 @@ import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showOptionSelectSt
import com.lagradost.cloudstream3.utils.SubtitleHelper.getFlagFromIso
import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe
import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar
+import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbarView
import com.lagradost.cloudstream3.utils.UIHelper.getResourceColor
import com.lagradost.cloudstream3.utils.UIHelper.getSpanCount
+import com.lagradost.cloudstream3.utils.UIHelper.getStatusBarHeight
import com.lagradost.cloudstream3.utils.UIHelper.popupMenuNoIconsAndNoStringRes
import com.lagradost.cloudstream3.utils.UIHelper.setImage
import com.lagradost.cloudstream3.utils.UIHelper.setImageBlur
@@ -548,7 +550,13 @@ class HomeFragment : Fragment() {
observe(homeViewModel.preview) { preview ->
// Always reset the padding, otherwise the will move lower and lower
- home_watch_holder?.setPadding(0, 0, 0, 0)
+ // home_fix_padding?.setPadding(0, 0, 0, 0)
+ home_fix_padding?.let { v ->
+ val params = v.layoutParams
+ params.height = 0
+ v.layoutParams = params
+ }
+
when (preview) {
is Resource.Success -> {
home_preview?.isVisible = true
@@ -569,7 +577,7 @@ class HomeFragment : Fragment() {
false
)
home_preview?.isVisible = false
- context?.fixPaddingStatusbar(home_watch_holder)
+ context?.fixPaddingStatusbarView(home_fix_padding)
}
}
}
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml
index 4eb7b9ee..e6270a77 100644
--- a/app/src/main/res/layout/fragment_home.xml
+++ b/app/src/main/res/layout/fragment_home.xml
@@ -405,7 +405,11 @@
-
+
+
+ android:id="@+id/player_view"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@android:color/black"
+ app:auto_show="true"
+ app:backgroundTint="@android:color/black"
+ app:controller_layout_id="@layout/player_custom_layout"
+ app:hide_on_touch="false"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:show_timeout="0" />
+ android:id="@+id/player_loading_overlay"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@android:color/black"
+ android:backgroundTint="@android:color/black"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent">
+ android:text="@string/skip_loading"
+ android:textAllCaps="false"
+ android:textColor="?attr/textColor"
+ android:visibility="gone"
+ app:cornerRadius="4dp"
+ app:icon="@drawable/ic_baseline_skip_next_24"
+ app:iconTint="?attr/textColor"
+ app:rippleColor="?attr/colorPrimary"
+ tools:visibility="visible" />
+ android:id="@+id/main_load"
+ android:layout_width="50dp"
+ android:layout_height="50dp"
+ android:layout_gravity="center" />
+ android:id="@+id/video_go_back_holder_holder"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_margin="5dp"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent">
+ android:layout_width="30dp"
+ android:layout_height="30dp"
+ android:layout_gravity="center"
+ android:contentDescription="@string/go_back_img_des"
+ android:src="@drawable/ic_baseline_arrow_back_24"
+ app:tint="@android:color/white" />
+ android:id="@+id/player_loading_go_back"
+ android:layout_width="70dp"
+ android:layout_height="70dp"
+ android:layout_gravity="center"
+ android:background="@drawable/video_tap_button_always_white"
+ android:clickable="true"
+ android:contentDescription="@string/go_back_img_des"
+ android:focusable="true" />
+
+
+ android:layout_height="wrap_content"
+ android:layout_marginTop="15dp"
+ android:gravity="start"
+ android:textColor="@color/white"
+ android:textStyle="bold"
+ app:layout_constraintLeft_toLeftOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ tools:text="78% at 18kb/s" />
-
-
+ android:id="@+id/video_torrent_seeders"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="0dp"
+ android:gravity="start"
+ android:textColor="@color/white"
+ app:layout_constraintLeft_toLeftOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/player_video_title"
+ tools:text="17 seeders" />
\ No newline at end of file
diff --git a/app/src/main/res/layout/player_custom_layout.xml b/app/src/main/res/layout/player_custom_layout.xml
index 9bbded4e..2cdcbf22 100644
--- a/app/src/main/res/layout/player_custom_layout.xml
+++ b/app/src/main/res/layout/player_custom_layout.xml
@@ -318,6 +318,25 @@
+
+
#66000000
#C0121212
+ #4D121212
#121212
#66B5B5B5
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 5665ea5c..144d2477 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -638,4 +638,13 @@
Browser
App not found
All Languages
+
+ Skip %s
+ Opening
+ Ending
+ Recap
+ Mixed ending
+ Mixed opening
+ Credits
+ Intro
From 9e67e856a0d12d326bcab23edc5925c881f9a496 Mon Sep 17 00:00:00 2001
From: reduplicated <110570621+reduplicated@users.noreply.github.com>
Date: Sat, 5 Nov 2022 00:40:31 +0100
Subject: [PATCH 07/13] small fix for multi request
---
.../com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt
index e1f1d99d..f4d2cd2f 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt
@@ -166,7 +166,8 @@ class GeneratorPlayer : FullScreenPlayer() {
isActive = true
setPlayerDimen(null)
setTitle()
- hasRequestedStamps = false
+ if (!sameEpisode)
+ hasRequestedStamps = false
loadExtractorJob(link.first)
// load player
@@ -186,7 +187,8 @@ class GeneratorPlayer : FullScreenPlayer() {
),
)
}
- player.addTimeStamps(listOf()) // clear stamps
+ if (!sameEpisode)
+ player.addTimeStamps(listOf()) // clear stamps
}
private fun sortLinks(useQualitySettings: Boolean = true): List> {
From 60a2f7c1c51456d025f92c191b51cf38e411ae21 Mon Sep 17 00:00:00 2001
From: reduplicated <110570621+reduplicated@users.noreply.github.com>
Date: Sat, 5 Nov 2022 01:27:35 +0100
Subject: [PATCH 08/13] clear history
---
.../cloudstream3/ui/search/SearchFragment.kt | 39 ++++++++++++++++++-
app/src/main/res/drawable/delete_all.xml | 9 +++++
app/src/main/res/layout/fragment_search.xml | 19 +++++++++
app/src/main/res/values/strings.xml | 3 ++
4 files changed, 69 insertions(+), 1 deletion(-)
create mode 100644 app/src/main/res/drawable/delete_all.xml
diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt
index bcb36f7e..e6e290c1 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt
@@ -1,5 +1,6 @@
package com.lagradost.cloudstream3.ui.search
+import android.content.DialogInterface
import android.content.res.Configuration
import android.os.Bundle
import android.view.LayoutInflater
@@ -10,6 +11,7 @@ import android.widget.AbsListView
import android.widget.ArrayAdapter
import android.widget.ImageView
import android.widget.ListView
+import androidx.appcompat.app.AlertDialog
import androidx.appcompat.widget.SearchView
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment
@@ -28,6 +30,7 @@ import com.lagradost.cloudstream3.APIHolder.getApiProviderLangSettings
import com.lagradost.cloudstream3.APIHolder.getApiSettings
import com.lagradost.cloudstream3.AcraApplication.Companion.getKey
import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey
+import com.lagradost.cloudstream3.AcraApplication.Companion.removeKeys
import com.lagradost.cloudstream3.AcraApplication.Companion.setKey
import com.lagradost.cloudstream3.MainActivity.Companion.afterPluginsLoadedEvent
import com.lagradost.cloudstream3.mvvm.Resource
@@ -343,7 +346,7 @@ class SearchFragment : Fragment() {
searchViewModel.updateHistory()
}
- search_history_recycler?.isVisible = showHistory
+ search_history_holder?.isVisible = showHistory
search_master_recycler?.isVisible = !showHistory && isAdvancedSearch
search_autofit_results?.isVisible = !showHistory && !isAdvancedSearch
@@ -352,7 +355,41 @@ class SearchFragment : Fragment() {
}
})
+ search_clear_call_history?.setOnClickListener {
+ activity?.let { ctx ->
+ val builder: AlertDialog.Builder = AlertDialog.Builder(ctx)
+ val dialogClickListener =
+ DialogInterface.OnClickListener { _, which ->
+ when (which) {
+ DialogInterface.BUTTON_POSITIVE -> {
+ removeKeys(SEARCH_HISTORY_KEY)
+ searchViewModel.updateHistory()
+ }
+ DialogInterface.BUTTON_NEGATIVE -> {
+ }
+ }
+ }
+
+ try {
+ builder.setTitle(R.string.clear_history).setMessage(
+ ctx.getString(R.string.delete_message).format(
+ ctx.getString(R.string.history)
+ )
+ )
+ .setPositiveButton(R.string.sort_clear, dialogClickListener)
+ .setNegativeButton(R.string.cancel, dialogClickListener)
+ .show()
+ } catch (e: Exception) {
+ logError(e)
+ // ye you somehow fucked up formatting did you?
+ }
+ }
+
+
+ }
+
observe(searchViewModel.currentHistory) { list ->
+ search_clear_call_history?.isVisible = list.isNotEmpty()
(search_history_recycler.adapter as? SearchHistoryAdaptor?)?.updateList(list)
}
diff --git a/app/src/main/res/drawable/delete_all.xml b/app/src/main/res/drawable/delete_all.xml
new file mode 100644
index 00000000..a5e8775c
--- /dev/null
+++ b/app/src/main/res/drawable/delete_all.xml
@@ -0,0 +1,9 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_search.xml b/app/src/main/res/layout/fragment_search.xml
index 083cd64e..6df5837f 100644
--- a/app/src/main/res/layout/fragment_search.xml
+++ b/app/src/main/res/layout/fragment_search.xml
@@ -112,6 +112,11 @@
android:nextFocusLeft="@id/nav_rail_view"
android:visibility="gone"
tools:listitem="@layout/homepage_parent" />
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 144d2477..e3ef9f6b 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -647,4 +647,7 @@
Mixed opening
Credits
Intro
+
+ Clear history
+ History
From 60bcbf0060750f661f5ae53f197b29b71eae365c Mon Sep 17 00:00:00 2001
From: Blatzar <46196380+Blatzar@users.noreply.github.com>
Date: Sat, 5 Nov 2022 19:54:04 +0100
Subject: [PATCH 09/13] A lil cache fixing & search fixes
---
app/build.gradle.kts | 6 +++---
.../main/java/com/lagradost/cloudstream3/CommonActivity.kt | 2 ++
.../com/lagradost/cloudstream3/ui/search/SearchFragment.kt | 6 +++---
.../ui/settings/extensions/ExtensionsFragment.kt | 4 +++-
4 files changed, 11 insertions(+), 7 deletions(-)
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 4a1fcada..f72eb321 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -47,8 +47,8 @@ android {
minSdk = 21
targetSdk = 30
- versionCode = 54
- versionName = "3.2.2"
+ versionCode = 55
+ versionName = "3.2.3"
resValue("string", "app_version", "${defaultConfig.versionName}${versionNameSuffix ?: ""}")
@@ -190,7 +190,7 @@ dependencies {
// Networking
// implementation("com.squareup.okhttp3:okhttp:4.9.2")
// implementation("com.squareup.okhttp3:okhttp-dnsoverhttps:4.9.1")
- implementation("com.github.Blatzar:NiceHttp:0.3.4")
+ implementation("com.github.Blatzar:NiceHttp:0.3.5")
// Util to skip the URI file fuckery 🙏
implementation("com.github.tachiyomiorg:unifile:17bec43")
diff --git a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt
index af04a1a2..342dc6f7 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt
@@ -61,6 +61,7 @@ object CommonActivity {
}
}
+ @MainThread
fun showToast(act: Activity?, @StringRes message: Int, duration: Int) {
if (act == null) return
showToast(act, act.getString(message), duration)
@@ -69,6 +70,7 @@ object CommonActivity {
const val TAG = "COMPACT"
/** duration is Toast.LENGTH_SHORT if null*/
+ @MainThread
fun showToast(act: Activity?, message: String?, duration: Int? = null) {
if (act == null || message == null) {
Log.w(TAG, "invalid showToast act = $act message = $message")
diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt
index e6e290c1..4da88af7 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt
@@ -131,9 +131,9 @@ class SearchFragment : Fragment() {
context?.let { ctx ->
val default = enumValues().sorted().filter { it != TvType.NSFW }
.map { it.ordinal.toString() }.toSet()
- val preferredTypes = PreferenceManager.getDefaultSharedPreferences(ctx)
- .getStringSet(this.getString(R.string.prefer_media_type_key), default)
- ?.mapNotNull { it.toIntOrNull() ?: return@mapNotNull null } ?: default
+ val preferredTypes = (PreferenceManager.getDefaultSharedPreferences(ctx)
+ .getStringSet(this.getString(R.string.prefer_media_type_key), default)?.ifEmpty { default } ?: default)
+ .mapNotNull { it.toIntOrNull() ?: return@mapNotNull null }
val settings = ctx.getApiSettings()
diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt
index 49f40879..fbf10499 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt
@@ -200,7 +200,9 @@ class ExtensionsFragment : Fragment() {
val url = dialog.repo_url_input?.text?.toString()
?.let { it1 -> RepositoryManager.parseRepoUrl(it1) }
if (url.isNullOrBlank()) {
- showToast(activity, R.string.error_invalid_data, Toast.LENGTH_SHORT)
+ main {
+ showToast(activity, R.string.error_invalid_data, Toast.LENGTH_SHORT)
+ }
} else {
val fixedName = if (!name.isNullOrBlank()) name
else RepositoryManager.parseRepository(url)?.name ?: "No name"
From 4fb65e724290a5a130f10c665e45acf0c8f20a99 Mon Sep 17 00:00:00 2001
From: Sdarfeesh <50188628+Sdarfeesh@users.noreply.github.com>
Date: Sun, 6 Nov 2022 04:55:41 +0800
Subject: [PATCH 10/13] Update Simplified Chinese Translation (#198)
---
app/src/main/res/values-zh/strings.xml | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml
index 8f436fe9..a9cc91b7 100644
--- a/app/src/main/res/values-zh/strings.xml
+++ b/app/src/main/res/values-zh/strings.xml
@@ -577,4 +577,17 @@
投屏
浏览器
未找到应用
+ 所有语言
+
+ 跳过 %s
+ 片头
+ 片尾
+ 前情回顾
+ 混合片尾
+ 混合片头
+ 致谢名单
+ 介绍
+
+ 清除历史记录
+ 历史记录
From 8fa00f4ca902683430d1f12f128edb645a09e78d Mon Sep 17 00:00:00 2001
From: reduplicated <110570621+reduplicated@users.noreply.github.com>
Date: Sat, 5 Nov 2022 22:15:34 +0100
Subject: [PATCH 11/13] added setting for skip op and changed key for player
seek amount
---
.../cloudstream3/ui/player/GeneratorPlayer.kt | 11 +-
app/src/main/res/values/strings.xml | 5 +-
app/src/main/res/xml/settings_player.xml | 190 +++++++++---------
3 files changed, 112 insertions(+), 94 deletions(-)
diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt
index f4d2cd2f..95a9393f 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt
@@ -187,6 +187,7 @@ class GeneratorPlayer : FullScreenPlayer() {
),
)
}
+
if (!sameEpisode)
player.addTimeStamps(listOf()) // clear stamps
}
@@ -874,7 +875,15 @@ class GeneratorPlayer : FullScreenPlayer() {
if (duration <= 0L) return // idk how you achieved this, but div by zero crash
if (!hasRequestedStamps) {
hasRequestedStamps = true
- viewModel.loadStamps(duration)
+ val fetchStamps = context?.let { ctx ->
+ val settingsManager = PreferenceManager.getDefaultSharedPreferences(ctx)
+ settingsManager.getBoolean(
+ ctx.getString(R.string.enable_skip_op_from_database),
+ true
+ )
+ } ?: true
+ if (fetchStamps)
+ viewModel.loadStamps(duration)
}
viewModel.getId()?.let {
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index e3ef9f6b..e2ebf0ab 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -28,7 +28,7 @@
pip_enabled_key
double_tap_enabled_key
double_tap_pause_enabled_key
- double_tap_seek_time_key
+ double_tap_seek_time_key2
swipe_vertical_enabled_key
autoplay_next_key
display_sub_key
@@ -57,6 +57,7 @@
filter_sub_lang_key
pref_filter_search_quality_key
enable_nsfw_on_providers_key
+ enable_skip_op_from_database
%d %s | %s
@@ -650,4 +651,6 @@
Clear history
History
+ Show skip popups for opening/ending
+
diff --git a/app/src/main/res/xml/settings_player.xml b/app/src/main/res/xml/settings_player.xml
index 6946a5c9..0be6313f 100644
--- a/app/src/main/res/xml/settings_player.xml
+++ b/app/src/main/res/xml/settings_player.xml
@@ -1,126 +1,132 @@
+ xmlns:app="http://schemas.android.com/apk/res-auto">
+ android:icon="@drawable/ic_outline_subtitles_24"
+ android:key="@string/subtitle_settings_key"
+ android:title="@string/player_subtitles_settings"
+ app:summary="@string/player_subtitles_settings_des" />
+ android:icon="@drawable/ic_outline_subtitles_24"
+ android:key="@string/subtitle_settings_chromecast_key"
+ android:title="@string/chromecast_subtitles_settings"
+ app:summary="@string/chromecast_subtitles_settings_des" />
+ android:icon="@drawable/ic_baseline_hd_24"
+ android:key="@string/quality_pref_key"
+ android:title="@string/watch_quality_pref" />
+ android:icon="@drawable/netflix_play"
+ android:key="@string/player_pref_key"
+ android:title="@string/player_pref" />
+ android:icon="@drawable/ic_baseline_text_format_24"
+ android:key="@string/prefer_limit_title_key"
+ android:title="@string/limit_title" />
+ android:icon="@drawable/ic_baseline_text_format_24"
+ android:key="@string/prefer_limit_title_rez_key"
+ android:title="@string/limit_title_rez" />
+ android:icon="@drawable/ic_baseline_picture_in_picture_alt_24"
+ android:summary="@string/picture_in_picture_des"
+ android:title="@string/picture_in_picture"
+ app:defaultValue="true"
+ app:key="@string/pip_enabled_key" />
+ android:icon="@drawable/ic_baseline_aspect_ratio_24"
+ android:summary="@string/player_size_settings_des"
+ android:title="@string/player_size_settings"
+ app:defaultValue="true"
+ app:key="@string/player_resize_enabled_key" />
+ android:icon="@drawable/ic_baseline_speed_24"
+ android:summary="@string/eigengraumode_settings_des"
+ android:title="@string/eigengraumode_settings"
+ app:defaultValue="false"
+ app:key="@string/playback_speed_enabled_key" />
+ android:icon="@drawable/ic_baseline_ondemand_video_24"
+ android:summary="@string/swipe_to_seek_settings_des"
+ android:title="@string/swipe_to_seek_settings"
+ app:defaultValue="true"
+ app:key="@string/swipe_enabled_key" />
-
+ android:icon="@drawable/ic_baseline_ondemand_video_24"
+ android:summary="@string/swipe_to_change_settings_des"
+ android:title="@string/swipe_to_change_settings"
+ app:defaultValue="true"
+ app:key="@string/swipe_vertical_enabled_key" />
+ android:icon="@drawable/ic_baseline_skip_next_24"
+ android:summary="@string/autoplay_next_settings_des"
+ android:title="@string/autoplay_next_settings"
+ app:defaultValue="true"
+ app:key="@string/autoplay_next_key" />
+ android:icon="@drawable/ic_baseline_skip_next_24"
+ android:title="@string/video_skip_op"
+ app:defaultValue="true"
+ android:summary="@string/enable_skip_op_from_database_des"
+ app:key="@string/enable_skip_op_from_database" />
+
+
+ android:defaultValue="10"
+ android:max="60"
+ android:title="@string/double_tap_to_seek_amount_settings"
+ app:adjustable="true"
+ app:defaultValue="10"
+ app:icon="@drawable/go_forward_30"
+ app:key="@string/double_tap_seek_time_key"
+ app:min="5"
+ app:seekBarIncrement="5"
+ app:showSeekBarValue="true" />
+ android:icon="@drawable/baseline_sync_24"
+ android:summary="@string/episode_sync_settings_des"
+ android:title="@string/episode_sync_settings"
+ app:defaultValue="true"
+ app:key="@string/episode_sync_enabled_key" />
+ android:icon="@drawable/ic_baseline_storage_24"
+ android:key="@string/video_buffer_disk_key"
+ android:summary="@string/video_disk_description"
+ android:title="@string/video_buffer_disk_settings" />
+ android:icon="@drawable/ic_baseline_storage_24"
+ android:key="@string/video_buffer_size_key"
+ android:summary="@string/video_ram_description"
+ android:title="@string/video_buffer_size_settings" />
+ android:icon="@drawable/ic_baseline_storage_24"
+ android:key="@string/video_buffer_length_key"
+ android:summary="@string/video_ram_description"
+ android:title="@string/video_buffer_length_settings" />
+ android:icon="@drawable/ic_baseline_delete_outline_24"
+ android:key="@string/video_buffer_clear_key"
+ android:title="@string/video_buffer_clear_settings" />
\ No newline at end of file
From aef6f93efe212837e0009035c082c6ea3f2bcb08 Mon Sep 17 00:00:00 2001
From: darkdemon
Date: Sun, 6 Nov 2022 16:43:45 +0530
Subject: [PATCH 12/13] - Open all extractor classes - Add StreamTape
clones[Streamtape.net, ShaveTape.cash] - optimize imports for AstreamHub,
GMplayer
---
.../lagradost/cloudstream3/extractors/AStreamHub.kt | 7 ++++---
.../lagradost/cloudstream3/extractors/Acefile.kt | 2 +-
.../lagradost/cloudstream3/extractors/AsianLoad.kt | 2 +-
.../lagradost/cloudstream3/extractors/Blogger.kt | 2 +-
.../lagradost/cloudstream3/extractors/BullStream.kt | 2 +-
.../lagradost/cloudstream3/extractors/Embedgram.kt | 2 +-
.../lagradost/cloudstream3/extractors/Fastream.kt | 2 +-
.../lagradost/cloudstream3/extractors/Filesim.kt | 2 +-
.../lagradost/cloudstream3/extractors/GMPlayer.kt | 3 +--
.../lagradost/cloudstream3/extractors/Linkbox.kt | 2 +-
.../com/lagradost/cloudstream3/extractors/Mcloud.kt | 7 -------
.../lagradost/cloudstream3/extractors/Mp4Upload.kt | 2 +-
.../cloudstream3/extractors/MultiQuality.kt | 2 +-
.../com/lagradost/cloudstream3/extractors/Mvidoo.kt | 2 +-
.../lagradost/cloudstream3/extractors/Pelisplus.kt | 2 +-
.../lagradost/cloudstream3/extractors/PlayLtXyz.kt | 2 +-
.../lagradost/cloudstream3/extractors/Solidfiles.kt | 2 +-
.../lagradost/cloudstream3/extractors/StreamTape.kt | 13 +++++++++++--
.../lagradost/cloudstream3/extractors/Streamhub.kt | 2 +-
.../lagradost/cloudstream3/extractors/Streamplay.kt | 2 +-
.../lagradost/cloudstream3/extractors/Supervideo.kt | 11 ++++++-----
.../cloudstream3/extractors/UpstreamExtractor.kt | 2 +-
.../lagradost/cloudstream3/extractors/VideoVard.kt | 2 +-
.../lagradost/cloudstream3/extractors/WcoStream.kt | 6 ++++++
.../lagradost/cloudstream3/extractors/YourUpload.kt | 2 +-
.../lagradost/cloudstream3/extractors/Zorofile.kt | 2 +-
.../lagradost/cloudstream3/utils/ExtractorApi.kt | 2 ++
27 files changed, 50 insertions(+), 39 deletions(-)
delete mode 100644 app/src/main/java/com/lagradost/cloudstream3/extractors/Mcloud.kt
diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/AStreamHub.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/AStreamHub.kt
index 18602664..b0051ba7 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/extractors/AStreamHub.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/AStreamHub.kt
@@ -2,10 +2,11 @@ package com.lagradost.cloudstream3.extractors
import android.util.Log
import com.lagradost.cloudstream3.app
-import com.lagradost.cloudstream3.base64Decode
-import com.lagradost.cloudstream3.utils.*
+import com.lagradost.cloudstream3.utils.ExtractorApi
+import com.lagradost.cloudstream3.utils.ExtractorLink
+import com.lagradost.cloudstream3.utils.Qualities
-class AStreamHub : ExtractorApi() {
+open class AStreamHub : ExtractorApi() {
override val name = "AStreamHub"
override val mainUrl = "https://astreamhub.com"
override val requiresReferer = true
diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Acefile.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Acefile.kt
index fe46791b..18198f44 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Acefile.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Acefile.kt
@@ -4,7 +4,7 @@ import com.lagradost.cloudstream3.app
import com.lagradost.cloudstream3.base64Decode
import com.lagradost.cloudstream3.utils.*
-class Acefile : ExtractorApi() {
+open class Acefile : ExtractorApi() {
override val name = "Acefile"
override val mainUrl = "https://acefile.co"
override val requiresReferer = false
diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/AsianLoad.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/AsianLoad.kt
index cf16f200..7a62fb52 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/extractors/AsianLoad.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/AsianLoad.kt
@@ -7,7 +7,7 @@ import com.lagradost.cloudstream3.utils.M3u8Helper
import com.lagradost.cloudstream3.utils.getQualityFromName
import java.net.URI
-class AsianLoad : ExtractorApi() {
+open class AsianLoad : ExtractorApi() {
override var name = "AsianLoad"
override var mainUrl = "https://asianembed.io"
override val requiresReferer = true
diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Blogger.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Blogger.kt
index cae77322..44e700b1 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Blogger.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Blogger.kt
@@ -5,7 +5,7 @@ import com.lagradost.cloudstream3.app
import com.lagradost.cloudstream3.utils.*
import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson
-class Blogger : ExtractorApi() {
+open class Blogger : ExtractorApi() {
override val name = "Blogger"
override val mainUrl = "https://www.blogger.com"
override val requiresReferer = false
diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/BullStream.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/BullStream.kt
index e5368bc3..71fa7066 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/extractors/BullStream.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/BullStream.kt
@@ -5,7 +5,7 @@ import com.lagradost.cloudstream3.utils.ExtractorApi
import com.lagradost.cloudstream3.utils.ExtractorLink
import com.lagradost.cloudstream3.utils.M3u8Helper
-class BullStream : ExtractorApi() {
+open class BullStream : ExtractorApi() {
override val name = "BullStream"
override val mainUrl = "https://bullstream.xyz"
override val requiresReferer = false
diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Embedgram.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Embedgram.kt
index 35569663..45a06dcc 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Embedgram.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Embedgram.kt
@@ -7,7 +7,7 @@ import com.lagradost.cloudstream3.utils.ExtractorLink
import com.lagradost.cloudstream3.utils.getQualityFromName
import com.lagradost.cloudstream3.utils.httpsify
-class Embedgram : ExtractorApi() {
+open class Embedgram : ExtractorApi() {
override val name = "Embedgram"
override val mainUrl = "https://embedgram.com"
override val requiresReferer = true
diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Fastream.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Fastream.kt
index 0d5a5c78..f813d7ea 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Fastream.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Fastream.kt
@@ -6,7 +6,7 @@ import com.lagradost.cloudstream3.utils.ExtractorApi
import com.lagradost.cloudstream3.utils.ExtractorLink
import com.lagradost.cloudstream3.utils.M3u8Helper.Companion.generateM3u8
-class Fastream: ExtractorApi() {
+open class Fastream: ExtractorApi() {
override var mainUrl = "https://fastream.to"
override var name = "Fastream"
override val requiresReferer = false
diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Filesim.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Filesim.kt
index 5c8af1c5..8e3dc730 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Filesim.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Filesim.kt
@@ -5,7 +5,7 @@ import com.lagradost.cloudstream3.app
import com.lagradost.cloudstream3.utils.*
import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson
-class Filesim : ExtractorApi() {
+open class Filesim : ExtractorApi() {
override val name = "Filesim"
override val mainUrl = "https://files.im"
override val requiresReferer = false
diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/GMPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/GMPlayer.kt
index af02ee8a..52c45096 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/extractors/GMPlayer.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/GMPlayer.kt
@@ -3,10 +3,9 @@ package com.lagradost.cloudstream3.extractors
import com.lagradost.cloudstream3.app
import com.lagradost.cloudstream3.utils.ExtractorApi
import com.lagradost.cloudstream3.utils.ExtractorLink
-import com.lagradost.cloudstream3.utils.M3u8Helper
import com.lagradost.cloudstream3.utils.Qualities
-class GMPlayer : ExtractorApi() {
+open class GMPlayer : ExtractorApi() {
override val name = "GM Player"
override val mainUrl = "https://gmplayer.xyz"
override val requiresReferer = true
diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Linkbox.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Linkbox.kt
index 52fc5532..73734e2a 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Linkbox.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Linkbox.kt
@@ -6,7 +6,7 @@ import com.lagradost.cloudstream3.utils.ExtractorApi
import com.lagradost.cloudstream3.utils.ExtractorLink
import com.lagradost.cloudstream3.utils.getQualityFromName
-class Linkbox : ExtractorApi() {
+open class Linkbox : ExtractorApi() {
override val name = "Linkbox"
override val mainUrl = "https://www.linkbox.to"
override val requiresReferer = true
diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Mcloud.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Mcloud.kt
deleted file mode 100644
index 29d98557..00000000
--- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Mcloud.kt
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.lagradost.cloudstream3.extractors
-
-open class Mcloud : WcoStream() {
- override var name = "Mcloud"
- override var mainUrl = "https://mcloud.to"
- override val requiresReferer = true
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Mp4Upload.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Mp4Upload.kt
index 68a4a103..93a280ed 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Mp4Upload.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Mp4Upload.kt
@@ -6,7 +6,7 @@ import com.lagradost.cloudstream3.utils.ExtractorLink
import com.lagradost.cloudstream3.utils.Qualities
import com.lagradost.cloudstream3.utils.getAndUnpack
-class Mp4Upload : ExtractorApi() {
+open class Mp4Upload : ExtractorApi() {
override var name = "Mp4Upload"
override var mainUrl = "https://www.mp4upload.com"
private val srcRegex = Regex("""player\.src\("(.*?)"""")
diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/MultiQuality.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/MultiQuality.kt
index 0c0b5c68..44657196 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/extractors/MultiQuality.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/MultiQuality.kt
@@ -7,7 +7,7 @@ import com.lagradost.cloudstream3.utils.Qualities
import com.lagradost.cloudstream3.utils.getQualityFromName
import java.net.URI
-class MultiQuality : ExtractorApi() {
+open class MultiQuality : ExtractorApi() {
override var name = "MultiQuality"
override var mainUrl = "https://gogo-play.net"
private val sourceRegex = Regex("""file:\s*['"](.*?)['"],label:\s*['"](.*?)['"]""")
diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Mvidoo.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Mvidoo.kt
index c00df942..9e5f5e74 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Mvidoo.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Mvidoo.kt
@@ -6,7 +6,7 @@ import com.lagradost.cloudstream3.utils.ExtractorApi
import com.lagradost.cloudstream3.utils.ExtractorLink
import com.lagradost.cloudstream3.utils.Qualities
-class Mvidoo : ExtractorApi() {
+open class Mvidoo : ExtractorApi() {
override val name = "Mvidoo"
override val mainUrl = "https://mvidoo.com"
override val requiresReferer = true
diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Pelisplus.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Pelisplus.kt
index de469b22..45ec4c2f 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Pelisplus.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Pelisplus.kt
@@ -14,7 +14,7 @@ import org.jsoup.Jsoup
* overrideMainUrl is necessary for for other vidstream clones like vidembed.cc
* If they diverge it'd be better to make them separate.
* */
-class Pelisplus(val mainUrl: String) {
+open class Pelisplus(val mainUrl: String) {
val name: String = "Vidstream"
private fun getExtractorUrl(id: String): String {
diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/PlayLtXyz.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/PlayLtXyz.kt
index 9a031556..2b286abb 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/extractors/PlayLtXyz.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/PlayLtXyz.kt
@@ -6,7 +6,7 @@ import com.lagradost.cloudstream3.app
import com.lagradost.cloudstream3.utils.*
import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson
-class PlayLtXyz: ExtractorApi() {
+open class PlayLtXyz: ExtractorApi() {
override val name: String = "PlayLt"
override val mainUrl: String = "https://play.playlt.xyz"
override val requiresReferer = true
diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Solidfiles.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Solidfiles.kt
index 849f5fc8..cc34781c 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Solidfiles.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Solidfiles.kt
@@ -8,7 +8,7 @@ import com.lagradost.cloudstream3.utils.ExtractorLink
import com.lagradost.cloudstream3.utils.getQualityFromName
-class Solidfiles : ExtractorApi() {
+open class Solidfiles : ExtractorApi() {
override val name = "Solidfiles"
override val mainUrl = "https://www.solidfiles.com"
override val requiresReferer = false
diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamTape.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamTape.kt
index af436ff3..ece8dc4b 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamTape.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamTape.kt
@@ -5,7 +5,15 @@ import com.lagradost.cloudstream3.utils.ExtractorApi
import com.lagradost.cloudstream3.utils.ExtractorLink
import com.lagradost.cloudstream3.utils.Qualities
-class StreamTape : ExtractorApi() {
+class StreamTapeNet : StreamTape() {
+ override var mainUrl = "https://streamtape.net"
+}
+
+class ShaveTape : StreamTape(){
+ override var mainUrl = "https://shavetape.cash"
+}
+
+open class StreamTape : ExtractorApi() {
override var name = "StreamTape"
override var mainUrl = "https://streamtape.com"
override val requiresReferer = false
@@ -16,7 +24,8 @@ class StreamTape : ExtractorApi() {
override suspend fun getUrl(url: String, referer: String?): List? {
with(app.get(url)) {
linkRegex.find(this.text)?.let {
- val extractedUrl = "https:${it.groups[1]!!.value + it.groups[2]!!.value.substring(3,)}"
+ val extractedUrl =
+ "https:${it.groups[1]!!.value + it.groups[2]!!.value.substring(3)}"
return listOf(
ExtractorLink(
name,
diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Streamhub.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Streamhub.kt
index 2765ae17..c7689c58 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Streamhub.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Streamhub.kt
@@ -7,7 +7,7 @@ import com.lagradost.cloudstream3.utils.JsUnpacker
import com.lagradost.cloudstream3.utils.Qualities
import java.net.URI
-class Streamhub : ExtractorApi() {
+open class Streamhub : ExtractorApi() {
override var mainUrl = "https://streamhub.to"
override var name = "Streamhub"
override val requiresReferer = false
diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Streamplay.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Streamplay.kt
index 3f5e5bd6..e6bbfeba 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Streamplay.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Streamplay.kt
@@ -9,7 +9,7 @@ import com.lagradost.cloudstream3.utils.*
import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson
import java.net.URI
-class Streamplay : ExtractorApi() {
+open class Streamplay : ExtractorApi() {
override val name = "Streamplay"
override val mainUrl = "https://streamplay.to"
override val requiresReferer = true
diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Supervideo.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Supervideo.kt
index 955345aa..dd49d994 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Supervideo.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Supervideo.kt
@@ -11,7 +11,7 @@ data class Files(
@JsonProperty("label") val label: String? = null,
)
- open class Supervideo : ExtractorApi() {
+open class Supervideo : ExtractorApi() {
override var name = "Supervideo"
override var mainUrl = "https://supervideo.tv"
override val requiresReferer = false
@@ -20,10 +20,13 @@ data class Files(
val response = app.get(url).text
val jstounpack = Regex("eval((.|\\n)*?)").find(response)?.groups?.get(1)?.value
val unpacjed = JsUnpacker(jstounpack).unpack()
- val extractedUrl = unpacjed?.let { Regex("""sources:((.|\n)*?)image""").find(it) }?.groups?.get(1)?.value.toString().replace("file",""""file"""").replace("label",""""label"""").substringBeforeLast(",")
+ val extractedUrl =
+ unpacjed?.let { Regex("""sources:((.|\n)*?)image""").find(it) }?.groups?.get(1)?.value.toString()
+ .replace("file", """"file"""").replace("label", """"label"""")
+ .substringBeforeLast(",")
val parsedlinks = parseJson>(extractedUrl)
parsedlinks.forEach { data ->
- if (data.label.isNullOrBlank()){ // mp4 links (with labels) are slow. Use only m3u8 link.
+ if (data.label.isNullOrBlank()) { // mp4 links (with labels) are slow. Use only m3u8 link.
M3u8Helper.generateM3u8(
name,
data.id,
@@ -34,8 +37,6 @@ data class Files(
}
}
}
-
-
return extractedLinksList
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/UpstreamExtractor.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/UpstreamExtractor.kt
index 1eb384c4..09e47d03 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/extractors/UpstreamExtractor.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/UpstreamExtractor.kt
@@ -6,7 +6,7 @@ import com.lagradost.cloudstream3.utils.ExtractorApi
import com.lagradost.cloudstream3.utils.ExtractorLink
import com.lagradost.cloudstream3.utils.M3u8Helper
-class UpstreamExtractor : ExtractorApi() {
+open class UpstreamExtractor : ExtractorApi() {
override val name: String = "Upstream"
override val mainUrl: String = "https://upstream.to"
override val requiresReferer = true
diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/VideoVard.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/VideoVard.kt
index 41e77967..30a1d8fe 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/extractors/VideoVard.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/VideoVard.kt
@@ -11,7 +11,7 @@ class VideovardSX : WcoStream() {
override var mainUrl = "https://videovard.sx"
}
-class VideoVard : ExtractorApi() {
+open class VideoVard : ExtractorApi() {
override var name = "Videovard" // Cause works for animekisa and wco
override var mainUrl = "https://videovard.to"
override val requiresReferer = false
diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/WcoStream.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/WcoStream.kt
index d99485ea..6cc486cd 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/extractors/WcoStream.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/WcoStream.kt
@@ -53,6 +53,12 @@ class VizcloudSite : WcoStream() {
override var mainUrl = "https://vizcloud.site"
}
+class Mcloud : WcoStream() {
+ override var name = "Mcloud"
+ override var mainUrl = "https://mcloud.to"
+ override val requiresReferer = true
+}
+
open class WcoStream : ExtractorApi() {
override var name = "VidStream" // Cause works for animekisa and wco
override var mainUrl = "https://vidstream.pro"
diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/YourUpload.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/YourUpload.kt
index 3c564f67..c7aa989d 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/extractors/YourUpload.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/YourUpload.kt
@@ -7,7 +7,7 @@ import com.lagradost.cloudstream3.utils.ExtractorApi
import com.lagradost.cloudstream3.utils.ExtractorLink
import com.lagradost.cloudstream3.utils.getQualityFromName
-class YourUpload: ExtractorApi() {
+open class YourUpload: ExtractorApi() {
override val name = "Yourupload"
override val mainUrl = "https://www.yourupload.com"
override val requiresReferer = false
diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Zorofile.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Zorofile.kt
index 84785b6c..43c4eefb 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Zorofile.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Zorofile.kt
@@ -10,7 +10,7 @@ import com.lagradost.cloudstream3.utils.ExtractorApi
import com.lagradost.cloudstream3.utils.ExtractorLink
import com.lagradost.cloudstream3.utils.M3u8Helper
-class Zorofile : ExtractorApi() {
+open class Zorofile : ExtractorApi() {
override val name = "Zorofile"
override val mainUrl = "https://zorofile.com"
override val requiresReferer = true
diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt
index 1a1afb68..24708e99 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt
@@ -205,6 +205,8 @@ val extractorApis: MutableList = arrayListOf(
VideovardSX(),
Mp4Upload(),
StreamTape(),
+ StreamTapeNet(),
+ ShaveTape(),
//mixdrop extractors
MixDropBz(),
From 1226426389ac327514f3189826b8712516dd9270 Mon Sep 17 00:00:00 2001
From: Blatzar <46196380+Blatzar@users.noreply.github.com>
Date: Sun, 6 Nov 2022 20:16:48 +0100
Subject: [PATCH 13/13] More crash fixes
---
.../lagradost/cloudstream3/CommonActivity.kt | 3 ++-
.../com/lagradost/cloudstream3/MainAPI.kt | 11 +++++++++--
.../ui/settings/SettingsUpdates.kt | 19 +++++++++++++------
app/src/main/res/values/strings.xml | 2 +-
4 files changed, 25 insertions(+), 10 deletions(-)
diff --git a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt
index 342dc6f7..47a195d1 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt
@@ -61,8 +61,9 @@ object CommonActivity {
}
}
+ /** duration is Toast.LENGTH_SHORT if null*/
@MainThread
- fun showToast(act: Activity?, @StringRes message: Int, duration: Int) {
+ fun showToast(act: Activity?, @StringRes message: Int, duration: Int? = null) {
if (act == null) return
showToast(act, act.getString(message), duration)
}
diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt
index 4b271192..5c9f3071 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt
@@ -81,7 +81,8 @@ object APIHolder {
synchronized(allProviders) {
initMap()
return apiMap?.get(apiName)?.let { apis.getOrNull(it) }
- ?: allProviders.firstOrNull { it.name == apiName }
+ // Leave the ?. null check, it can crash regardless
+ ?: allProviders.firstOrNull { it?.name == apiName }
}
}
@@ -244,11 +245,17 @@ object APIHolder {
fun Context.filterProviderByPreferredMedia(hasHomePageIsRequired: Boolean = true): List {
// We are getting the weirdest crash ever done:
// java.lang.ClassCastException: com.lagradost.cloudstream3.TvType cannot be cast to com.lagradost.cloudstream3.TvType
- // enumValues() might be the cause, hence I am trying TvType.values()
+ // Trying fixing using classloader fuckery
+ val oldLoader = Thread.currentThread().contextClassLoader
+ Thread.currentThread().contextClassLoader = TvType::class.java.classLoader
+
val default = TvType.values()
.sorted()
.filter { it != TvType.NSFW }
.map { it.ordinal }
+
+ Thread.currentThread().contextClassLoader = oldLoader
+
val defaultSet = default.map { it.toString() }.toSet()
val currentPrefMedia = try {
PreferenceManager.getDefaultSharedPreferences(this)
diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt
index 6b19042a..78f6d628 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUpdates.kt
@@ -4,12 +4,14 @@ import android.content.ClipData
import android.content.ClipboardManager
import android.content.Context
import android.os.Bundle
+import android.os.TransactionTooLargeException
import android.view.View
import android.widget.Toast
import androidx.appcompat.app.AlertDialog
import androidx.navigation.fragment.findNavController
import androidx.preference.PreferenceFragmentCompat
import com.lagradost.cloudstream3.CommonActivity
+import com.lagradost.cloudstream3.CommonActivity.showToast
import com.lagradost.cloudstream3.R
import com.lagradost.cloudstream3.mvvm.logError
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref
@@ -81,12 +83,17 @@ class SettingsUpdates : PreferenceFragmentCompat() {
dialog.text1?.text = text
dialog.copy_btt?.setOnClickListener {
- val serviceClipboard =
- (activity?.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager?)
- ?: return@setOnClickListener
- val clip = ClipData.newPlainText("logcat", text)
- serviceClipboard.setPrimaryClip(clip)
- dialog.dismissSafe(activity)
+ // Can crash on too much text
+ try {
+ val serviceClipboard =
+ (activity?.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager?)
+ ?: return@setOnClickListener
+ val clip = ClipData.newPlainText("logcat", text)
+ serviceClipboard.setPrimaryClip(clip)
+ dialog.dismissSafe(activity)
+ } catch (e: TransactionTooLargeException) {
+ showToast(activity, R.string.clipboard_too_large)
+ }
}
dialog.clear_btt?.setOnClickListener {
Runtime.getRuntime().exec("logcat -c")
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index e2ebf0ab..9381372c 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -652,5 +652,5 @@
Clear history
History
Show skip popups for opening/ending
-
+ Too much text. Unable to save to clipboard.