feat: add full local mode option to instance settings

This commit is contained in:
Bnyro 2025-03-02 12:42:30 +01:00
parent 7db8212c72
commit 676c62a7e0
No known key found for this signature in database
5 changed files with 67 additions and 46 deletions

View File

@ -39,13 +39,11 @@ interface MediaServiceRepository {
suspend fun getPlaylistNextPage(playlistId: String, nextPage: String): Playlist
companion object {
val instance by lazy {
if (PlayerHelper.disablePipedProxy && PlayerHelper.localStreamExtraction) {
// TODO: LocalStreamsExtractionPipedMediaServiceRepository()
NewPipeMediaServiceRepository()
} else {
PipedMediaServiceRepository()
}
val instance: MediaServiceRepository
get() = when {
PlayerHelper.fullLocalMode -> NewPipeMediaServiceRepository()
PlayerHelper.localStreamExtraction -> LocalStreamsExtractionPipedMediaServiceRepository()
else -> PipedMediaServiceRepository()
}
}
}

View File

@ -133,6 +133,7 @@ object PreferenceKeys {
const val MAX_CONCURRENT_DOWNLOADS = "max_parallel_downloads"
const val EXTERNAL_DOWNLOAD_PROVIDER = "external_download_provider"
const val DISABLE_VIDEO_IMAGE_PROXY = "disable_video_image_proxy"
const val FULL_LOCAL_MODE = "full_local_mode"
const val LOCAL_RYD = "local_return_youtube_dislikes"
const val LOCAL_STREAM_EXTRACTION = "local_stream_extraction"

View File

@ -357,6 +357,12 @@ object PlayerHelper {
false
)
val fullLocalMode: Boolean
get() = PreferenceHelper.getBoolean(
PreferenceKeys.FULL_LOCAL_MODE,
false
)
val localStreamExtraction: Boolean
get() = PreferenceHelper.getBoolean(
PreferenceKeys.LOCAL_STREAM_EXTRACTION,

View File

@ -472,6 +472,7 @@
<string name="crashlog">Crashlog</string>
<string name="never_show_again">Never show this again</string>
<string name="update_information">Update information</string>
<string name="mode_of_operation">Mode of operation</string>
<!-- Backup & Restore Settings -->
<string name="import_subscriptions_from">Import subscriptions from</string>
@ -532,6 +533,9 @@
<string name="local_feed_extraction_summary">Directly fetch the feed from YouTube. This may be significantly slower.</string>
<string name="show_upcoming_videos">Show upcoming videos</string>
<string name="updating_feed">Updating feed …</string>
<string name="full_local_mode">Full local mode</string>
<string name="full_local_mode_desc">Directly fetch everything from YouTube, without using Piped.</string>
<string name="authentication">Authentication</string>
<!-- Notification channel strings -->
<string name="download_channel_name">Download Service</string>

View File

@ -2,6 +2,26 @@
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<PreferenceCategory app:title="@string/mode_of_operation">
<SwitchPreferenceCompat
android:icon="@drawable/ic_region"
android:defaultValue="false"
android:title="@string/full_local_mode"
android:key="full_local_mode"
android:disableDependentsState="true"
android:summary="@string/full_local_mode_desc" />
<SwitchPreferenceCompat
android:defaultValue="true"
android:icon="@drawable/ic_region"
android:dependency="full_local_mode"
android:summary="@string/local_stream_extraction_summary"
android:title="@string/local_stream_extraction"
app:key="local_stream_extraction" />
</PreferenceCategory>
<PreferenceCategory app:title="@string/instance">
<ListPreference
@ -10,19 +30,41 @@
app:entries="@array/instances"
app:entryValues="@array/instancesValue"
app:key="selectInstance"
android:dependency="full_local_mode"
app:title="@string/instances" />
<Preference
android:icon="@drawable/ic_add_instance"
app:key="customInstance"
android:dependency="full_local_mode"
app:summary="@string/customInstance_summary"
app:title="@string/customInstance" />
<Preference
android:icon="@drawable/ic_trash"
app:key="clearCustomInstances"
android:dependency="full_local_mode"
app:title="@string/clear_customInstances" />
<SwitchPreferenceCompat
android:defaultValue="false"
android:icon="@drawable/ic_server"
android:dependency="full_local_mode"
android:summary="@string/disable_proxy_summary"
android:title="@string/disable_proxy"
app:key="disable_video_image_proxy" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/authentication">
<SwitchPreferenceCompat
android:defaultValue="false"
android:icon="@drawable/ic_region"
android:summary="@string/local_feed_extraction_summary"
android:title="@string/local_feed_extraction"
app:key="local_feed_extraction" />
<SwitchPreferenceCompat
android:defaultValue="false"
android:icon="@drawable/ic_auth"
@ -39,21 +81,6 @@
app:key="selectAuthInstance"
app:title="@string/auth_instances" />
</PreferenceCategory>
<PreferenceCategory app:title="@string/audio_video">
<SwitchPreferenceCompat
android:defaultValue="false"
android:icon="@drawable/ic_list"
android:summary="@string/hls_instead_of_dash_summary"
android:title="@string/hls_instead_of_dash"
app:key="use_hls" />
</PreferenceCategory>
<PreferenceCategory app:title="@string/account">
<Preference
android:icon="@drawable/ic_login_filled"
android:summary="@string/notgmail"
@ -75,42 +102,27 @@
</PreferenceCategory>
<PreferenceCategory app:title="@string/proxy">
<PreferenceCategory app:title="@string/audio_video">
<SwitchPreferenceCompat
android:defaultValue="false"
android:icon="@drawable/ic_server"
android:summary="@string/disable_proxy_summary"
android:title="@string/disable_proxy"
app:key="disable_video_image_proxy" />
android:icon="@drawable/ic_list"
android:summary="@string/hls_instead_of_dash_summary"
android:title="@string/hls_instead_of_dash"
app:key="use_hls" />
<SwitchPreferenceCompat
android:defaultValue="true"
android:icon="@drawable/ic_region"
android:summary="@string/local_stream_extraction_summary"
android:title="@string/local_stream_extraction"
android:dependency="disable_video_image_proxy"
app:key="local_stream_extraction" />
</PreferenceCategory>
<PreferenceCategory app:title="@string/misc">
<SwitchPreferenceCompat
android:defaultValue="true"
android:icon="@drawable/ic_dislike"
android:dependency="local_stream_extraction"
android:summary="@string/local_ryd_summary"
android:title="@string/local_ryd"
android:dependency="local_stream_extraction"
app:key="local_return_youtube_dislikes" />
</PreferenceCategory>
<PreferenceCategory app:title="@string/subscriptions">
<SwitchPreferenceCompat
android:defaultValue="false"
android:icon="@drawable/ic_region"
android:summary="@string/local_feed_extraction_summary"
android:title="@string/local_feed_extraction"
app:key="local_feed_extraction" />
</PreferenceCategory>
</PreferenceScreen>