From 5b02a37fc191969b5ffbf8d34625c1fcffce1413 Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Wed, 16 Mar 2022 22:31:21 +0100 Subject: [PATCH] more video cache settings --- .../ui/player/AbstractPlayerFragment.kt | 17 +++-- .../cloudstream3/ui/player/CS3IPlayer.kt | 16 ++-- .../ui/settings/SettingsFragment.kt | 54 ++++++++++++-- app/src/main/res/values-ar/strings.xml | 2 +- app/src/main/res/values-fr/strings.xml | 2 +- app/src/main/res/values-it/strings.xml | 2 +- app/src/main/res/values-vi/strings.xml | 2 +- app/src/main/res/values/array.xml | 74 ++++++++++++++++++- app/src/main/res/values/strings.xml | 10 ++- app/src/main/res/xml/settings.xml | 22 +++++- 10 files changed, 170 insertions(+), 31 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt index 6489b665..64769cd9 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt @@ -339,14 +339,21 @@ abstract class AbstractPlayerFragment( SubtitlesFragment.applyStyleEvent += ::onSubStyleChanged try { - context?.let { + context?.let { ctx -> val settingsManager = PreferenceManager.getDefaultSharedPreferences( - it + ctx ) - val currentPrefSize = - settingsManager.getInt(getString(R.string.video_cache_key), 300) - player.cacheSize = currentPrefSize * 1024L * 1024L + val currentPrefCacheSize = + settingsManager.getInt(getString(R.string.video_buffer_size_key), 0) + val currentPrefDiskSize = + settingsManager.getInt(getString(R.string.video_buffer_disk_key), 0) + val currentPrefBufferSec = + settingsManager.getInt(getString(R.string.video_buffer_length_key), 0) + + player.cacheSize = currentPrefCacheSize * 1024L * 1024L + player.simpleCacheSize = currentPrefDiskSize * 1024L * 1024L + player.videoBufferMs = currentPrefBufferSec * 1000L } } catch (e: Exception) { logError(e) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/CS3IPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/CS3IPlayer.kt index 099b5525..dcfb6a0e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/CS3IPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/CS3IPlayer.kt @@ -39,8 +39,9 @@ const val TAG = "CS3ExoPlayer" class CS3IPlayer : IPlayer { private var isPlaying = false private var exoPlayer: ExoPlayer? = null - var cacheSize = 300L * 1024L * 1024L // 300 mb - private val simpleCacheSize : Long get() = cacheSize / 2 // idk chosen at random kinda + var cacheSize = 0L + var simpleCacheSize = 0L + var videoBufferMs = 0L private val seekActionTime = 30000L @@ -423,6 +424,7 @@ class CS3IPlayer : IPlayer { playBackSpeed: Float, subtitleOffset: Long, cacheSize: Long, + videoBufferMs: Long, playWhenReady: Boolean = true, cacheFactory: CacheDataSource.Factory? = null, trackSelector: TrackSelector? = null, @@ -460,10 +462,11 @@ class CS3IPlayer : IPlayer { ) .setBufferDurationsMs( DefaultLoadControl.DEFAULT_MIN_BUFFER_MS, - maxOf( - DefaultLoadControl.DEFAULT_MAX_BUFFER_MS, - ((cacheSize * 75L) / 32768L).toInt() - ), // 500mb = 20min + if(videoBufferMs <= 0) { + DefaultLoadControl.DEFAULT_MAX_BUFFER_MS + } else { + videoBufferMs.toInt() + }, DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_MS, DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_AFTER_REBUFFER_MS ).build() @@ -574,6 +577,7 @@ class CS3IPlayer : IPlayer { playbackPosition, playBackSpeed, cacheSize = cacheSize, + videoBufferMs = videoBufferMs, playWhenReady = isPlaying, // this keep the current state of the player cacheFactory = cacheFactory, subtitleOffset = currentSubtitleOffset diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt index 8256e348..aa85c08f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt @@ -209,21 +209,61 @@ class SettingsFragment : PreferenceFragmentCompat() { setPreferencesFromResource(R.xml.settings, rootKey) val settingsManager = PreferenceManager.getDefaultSharedPreferences(requireContext()) - getPref(R.string.video_cache_key)?.setOnPreferenceClickListener { - val prefNames = resources.getStringArray(R.array.video_cache_size_names) - val prefValues = resources.getIntArray(R.array.video_cache_size_values) + getPref(R.string.video_buffer_length_key)?.setOnPreferenceClickListener { + val prefNames = resources.getStringArray(R.array.video_buffer_length_names) + val prefValues = resources.getIntArray(R.array.video_buffer_length_values) val currentPrefSize = - settingsManager.getInt(getString(R.string.video_cache_key), 300) + settingsManager.getInt(getString(R.string.video_buffer_length_key), 0) - activity?.showBottomDialog( + activity?.showDialog( prefNames.toList(), prefValues.indexOf(currentPrefSize), - getString(R.string.video_cache_settings), + getString(R.string.video_buffer_length_settings), true, {}) { settingsManager.edit() - .putInt(getString(R.string.video_cache_key), prefValues[it]) + .putInt(getString(R.string.video_buffer_length_key), prefValues[it]) + .apply() + } + return@setOnPreferenceClickListener true + } + + getPref(R.string.video_buffer_size_key)?.setOnPreferenceClickListener { + val prefNames = resources.getStringArray(R.array.video_buffer_size_names) + val prefValues = resources.getIntArray(R.array.video_buffer_size_values) + + val currentPrefSize = + settingsManager.getInt(getString(R.string.video_buffer_size_key), 0) + + activity?.showDialog( + prefNames.toList(), + prefValues.indexOf(currentPrefSize), + getString(R.string.video_buffer_size_settings), + true, + {}) { + settingsManager.edit() + .putInt(getString(R.string.video_buffer_size_key), prefValues[it]) + .apply() + } + return@setOnPreferenceClickListener true + } + + getPref(R.string.video_buffer_disk_key)?.setOnPreferenceClickListener { + val prefNames = resources.getStringArray(R.array.video_buffer_size_names) + val prefValues = resources.getIntArray(R.array.video_buffer_size_values) + + val currentPrefSize = + settingsManager.getInt(getString(R.string.video_buffer_disk_key), 0) + + activity?.showDialog( + prefNames.toList(), + prefValues.indexOf(currentPrefSize), + getString(R.string.video_buffer_disk_settings), + true, + {}) { + settingsManager.edit() + .putInt(getString(R.string.video_buffer_disk_key), prefValues[it]) .apply() } return@setOnPreferenceClickListener true diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index dc6f7569..b50a31e5 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -232,7 +232,7 @@ لا تظهر مرة أخرى تحديث جودة المشاهدة المفضلة - حجم ذاكرة التخزين المؤقت للفيديو + حجم ذاكرة التخزين المؤقت للفيديو DNS فوق HTTPS مفيد لتجاوز كتل مزود خدمة الإنترنت diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 77e92e87..c98002a0 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -186,7 +186,7 @@ \n%s -> %s Épisode spécial Qualité de visionnage préférée - Taille de la mémoire cache + Taille de la mémoire cache Étendre Non-responsabilité Couleur principale diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index f8fa3592..74e8d9f8 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -269,7 +269,7 @@ Non mostrare di nuovo Aggiorna Risoluzione preferita - Dimensione cache video + Dimensione cache video DNS over HTTPS Utile per bypassare i blocchi ISP diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 299d6a4a..e518f420 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -232,7 +232,7 @@ Không hiển thị lại Cập nhật Tự động chọn chất lượng phim - Kích thước video cache + Kích thước video cache Rất hữu ích để bỏ chặn ISP Đường dẫn tải xuống diff --git a/app/src/main/res/values/array.xml b/app/src/main/res/values/array.xml index cd73e2a8..e08c7280 100644 --- a/app/src/main/res/values/array.xml +++ b/app/src/main/res/values/array.xml @@ -56,20 +56,88 @@ 1 2 - - @string/none + + + @string/automatic + 1min + 1min 30s + 2min + 2min 30s + 3min + 3min 30s + 4min + 5min + 6min + 7min + 8min + 9min + 10min + 15min + 20min + 30min + + + + 0 + 60 + 90 + 120 + 150 + 180 + 210 + 240 + 300 + 360 + 420 + 480 + 540 + 600 + 900 + 1200 + 1800 + + + + @string/automatic + 10MB + 20MB + 30MB + 40MB + 50MB + 60MB + 70MB + 80MB + 90MB 100MB + 150MB 200MB + 250MB 300MB + 350MB 400MB + 450MB 500MB - + + 0 + 10 + 20 + 30 + 40 + 50 + 60 + 70 + 80 + 90 100 + 150 200 + 250 300 + 350 400 + 450 500 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c6f60da3..ae03e7b6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -13,7 +13,9 @@ subtitle_settings_key subtitle_settings_chromecast_key quality_pref_key - video_cache_key + video_buffer_size_key + video_buffer_length_key + video_buffer_disk_key unknown_prerelease use_system_brightness_key swipe_enabled_key @@ -319,7 +321,11 @@ Don\'t show again Update Preferred watch quality - Video cache size + Video buffer size + Video buffer length + Video cache on disk + May cause problems on systems with low ram or storage such as Android TV devices or old phones if you set it too high + DNS over HTTPS Useful for bypassing ISP blocks diff --git a/app/src/main/res/xml/settings.xml b/app/src/main/res/xml/settings.xml index c1fec4aa..4104e6d1 100644 --- a/app/src/main/res/xml/settings.xml +++ b/app/src/main/res/xml/settings.xml @@ -20,10 +20,7 @@ android:key="@string/quality_pref_key" android:title="@string/watch_quality_pref" android:icon="@drawable/ic_baseline_hd_24" /> - + + + + + +