mirror of
https://github.com/libre-tube/LibreTube.git
synced 2024-12-15 14:50:30 +05:30
Merge pull request #3290 from Bnyro/disable-proxy
Add option to disable Piped proxy
This commit is contained in:
commit
aaae5d81ac
@ -2,6 +2,7 @@ package com.github.libretube.api.obj
|
|||||||
|
|
||||||
import com.github.libretube.db.obj.DownloadItem
|
import com.github.libretube.db.obj.DownloadItem
|
||||||
import com.github.libretube.enums.FileType
|
import com.github.libretube.enums.FileType
|
||||||
|
import com.github.libretube.helpers.ProxyHelper
|
||||||
import java.nio.file.Paths
|
import java.nio.file.Paths
|
||||||
import kotlinx.datetime.LocalDate
|
import kotlinx.datetime.LocalDate
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
@ -56,7 +57,7 @@ data class Streams(
|
|||||||
videoId = videoId,
|
videoId = videoId,
|
||||||
fileName = stream?.getQualityString(fileName).orEmpty(),
|
fileName = stream?.getQualityString(fileName).orEmpty(),
|
||||||
path = Paths.get(""),
|
path = Paths.get(""),
|
||||||
url = stream?.url,
|
url = stream?.url?.let { ProxyHelper.unwrapIfEnabled(it) },
|
||||||
format = videoFormat,
|
format = videoFormat,
|
||||||
quality = videoQuality
|
quality = videoQuality
|
||||||
)
|
)
|
||||||
@ -73,7 +74,7 @@ data class Streams(
|
|||||||
videoId = videoId,
|
videoId = videoId,
|
||||||
fileName = stream?.getQualityString(fileName).orEmpty(),
|
fileName = stream?.getQualityString(fileName).orEmpty(),
|
||||||
path = Paths.get(""),
|
path = Paths.get(""),
|
||||||
url = stream?.url,
|
url = stream?.url?.let { ProxyHelper.unwrapIfEnabled(it) },
|
||||||
format = audioFormat,
|
format = audioFormat,
|
||||||
quality = audioQuality
|
quality = audioQuality
|
||||||
)
|
)
|
||||||
@ -87,7 +88,9 @@ data class Streams(
|
|||||||
videoId = videoId,
|
videoId = videoId,
|
||||||
fileName = "${fileName}_$subtitleCode.srt",
|
fileName = "${fileName}_$subtitleCode.srt",
|
||||||
path = Paths.get(""),
|
path = Paths.get(""),
|
||||||
url = subtitles.find { it.code == subtitleCode }?.url
|
url = subtitles.find {
|
||||||
|
it.code == subtitleCode
|
||||||
|
}?.url?.let { ProxyHelper.unwrapIfEnabled(it) }
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -133,6 +133,7 @@ object PreferenceKeys {
|
|||||||
const val CONFIRM_UNSUBSCRIBE = "confirm_unsubscribing"
|
const val CONFIRM_UNSUBSCRIBE = "confirm_unsubscribing"
|
||||||
const val CLEAR_BOOKMARKS = "clear_bookmarks"
|
const val CLEAR_BOOKMARKS = "clear_bookmarks"
|
||||||
const val MAX_CONCURRENT_DOWNLOADS = "max_concurrent_downloads"
|
const val MAX_CONCURRENT_DOWNLOADS = "max_concurrent_downloads"
|
||||||
|
const val DISABLE_VIDEO_IMAGE_PROXY = "disable_video_image_proxy"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* History
|
* History
|
||||||
|
@ -149,7 +149,7 @@ object DashHelper {
|
|||||||
audioChannelConfiguration.setAttribute("value", "2")
|
audioChannelConfiguration.setAttribute("value", "2")
|
||||||
|
|
||||||
val baseUrl = doc.createElement("BaseURL")
|
val baseUrl = doc.createElement("BaseURL")
|
||||||
baseUrl.appendChild(doc.createTextNode(stream.url!!))
|
baseUrl.appendChild(doc.createTextNode(ProxyHelper.unwrapIfEnabled(stream.url!!)))
|
||||||
|
|
||||||
val segmentBase = doc.createElement("SegmentBase")
|
val segmentBase = doc.createElement("SegmentBase")
|
||||||
segmentBase.setAttribute("indexRange", "${stream.indexStart}-${stream.indexEnd}")
|
segmentBase.setAttribute("indexRange", "${stream.indexStart}-${stream.indexEnd}")
|
||||||
@ -175,7 +175,7 @@ object DashHelper {
|
|||||||
representation.setAttribute("frameRate", stream.fps.toString())
|
representation.setAttribute("frameRate", stream.fps.toString())
|
||||||
|
|
||||||
val baseUrl = doc.createElement("BaseURL")
|
val baseUrl = doc.createElement("BaseURL")
|
||||||
baseUrl.appendChild(doc.createTextNode(stream.url!!))
|
baseUrl.appendChild(doc.createTextNode(ProxyHelper.unwrapIfEnabled(stream.url!!)))
|
||||||
|
|
||||||
val segmentBase = doc.createElement("SegmentBase")
|
val segmentBase = doc.createElement("SegmentBase")
|
||||||
segmentBase.setAttribute("indexRange", "${stream.indexStart}-${stream.indexEnd}")
|
segmentBase.setAttribute("indexRange", "${stream.indexStart}-${stream.indexEnd}")
|
||||||
|
@ -53,7 +53,9 @@ object ImageHelper {
|
|||||||
*/
|
*/
|
||||||
fun loadImage(url: String?, target: ImageView) {
|
fun loadImage(url: String?, target: ImageView) {
|
||||||
// only load the image if the data saver mode is disabled
|
// only load the image if the data saver mode is disabled
|
||||||
if (!DataSaverMode.isEnabled(target.context)) target.load(url, imageLoader)
|
if (DataSaverMode.isEnabled(target.context) || url == null) return
|
||||||
|
val urlToLoad = ProxyHelper.unwrapIfEnabled(url)
|
||||||
|
target.load(urlToLoad, imageLoader)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun downloadImage(context: Context, url: String, path: Path) {
|
fun downloadImage(context: Context, url: String, path: Path) {
|
||||||
|
@ -27,4 +27,25 @@ object ProxyHelper {
|
|||||||
?.port(proxyUrl.port)
|
?.port(proxyUrl.port)
|
||||||
?.toString()
|
?.toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load the YT url directly instead of the proxied Piped URL if enabled
|
||||||
|
*/
|
||||||
|
fun unwrapIfEnabled(url: String): String {
|
||||||
|
if (!PreferenceHelper.getBoolean(
|
||||||
|
PreferenceKeys.DISABLE_VIDEO_IMAGE_PROXY,
|
||||||
|
false
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
return url
|
||||||
|
}
|
||||||
|
|
||||||
|
return url.toHttpUrlOrNull()?.let {
|
||||||
|
it.newBuilder()
|
||||||
|
.host(it.queryParameter("host").orEmpty())
|
||||||
|
.removeAllQueryParameters("host")
|
||||||
|
.build()
|
||||||
|
.toString()
|
||||||
|
} ?: url
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,7 @@ import com.github.libretube.extensions.toID
|
|||||||
import com.github.libretube.helpers.PlayerHelper
|
import com.github.libretube.helpers.PlayerHelper
|
||||||
import com.github.libretube.helpers.PlayerHelper.checkForSegments
|
import com.github.libretube.helpers.PlayerHelper.checkForSegments
|
||||||
import com.github.libretube.helpers.PlayerHelper.loadPlaybackParams
|
import com.github.libretube.helpers.PlayerHelper.loadPlaybackParams
|
||||||
|
import com.github.libretube.helpers.ProxyHelper
|
||||||
import com.github.libretube.util.NowPlayingNotification
|
import com.github.libretube.util.NowPlayingNotification
|
||||||
import com.github.libretube.util.PlayingQueue
|
import com.github.libretube.util.PlayingQueue
|
||||||
import com.google.android.exoplayer2.ExoPlayer
|
import com.google.android.exoplayer2.ExoPlayer
|
||||||
@ -304,7 +305,7 @@ class BackgroundMode : LifecycleService() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val mediaItem = MediaItem.Builder()
|
val mediaItem = MediaItem.Builder()
|
||||||
.setUri(uri)
|
.setUri(ProxyHelper.rewriteUrl(uri))
|
||||||
.build()
|
.build()
|
||||||
player?.setMediaItem(mediaItem)
|
player?.setMediaItem(mediaItem)
|
||||||
}
|
}
|
||||||
|
@ -67,6 +67,7 @@ import com.github.libretube.helpers.PlayerHelper
|
|||||||
import com.github.libretube.helpers.PlayerHelper.checkForSegments
|
import com.github.libretube.helpers.PlayerHelper.checkForSegments
|
||||||
import com.github.libretube.helpers.PlayerHelper.loadPlaybackParams
|
import com.github.libretube.helpers.PlayerHelper.loadPlaybackParams
|
||||||
import com.github.libretube.helpers.PreferenceHelper
|
import com.github.libretube.helpers.PreferenceHelper
|
||||||
|
import com.github.libretube.helpers.ProxyHelper
|
||||||
import com.github.libretube.obj.ShareData
|
import com.github.libretube.obj.ShareData
|
||||||
import com.github.libretube.obj.VideoResolution
|
import com.github.libretube.obj.VideoResolution
|
||||||
import com.github.libretube.services.BackgroundMode
|
import com.github.libretube.services.BackgroundMode
|
||||||
@ -424,7 +425,7 @@ class PlayerFragment : Fragment(R.layout.fragment_player), OnlinePlayerOptions {
|
|||||||
streams.hls ?: return@setOnLongClickListener true
|
streams.hls ?: return@setOnLongClickListener true
|
||||||
|
|
||||||
// start an intent with video as mimetype using the hls stream
|
// start an intent with video as mimetype using the hls stream
|
||||||
val uri: Uri = Uri.parse(streams.hls)
|
val uri = Uri.parse(ProxyHelper.unwrapIfEnabled(streams.hls!!))
|
||||||
val intent = Intent(Intent.ACTION_VIEW).apply {
|
val intent = Intent(Intent.ACTION_VIEW).apply {
|
||||||
setDataAndType(uri, "video/*")
|
setDataAndType(uri, "video/*")
|
||||||
putExtra(Intent.EXTRA_TITLE, streams.title)
|
putExtra(Intent.EXTRA_TITLE, streams.title)
|
||||||
@ -971,7 +972,6 @@ class PlayerFragment : Fragment(R.layout.fragment_player), OnlinePlayerOptions {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (streams.hls != null) {
|
|
||||||
binding.relPlayerPip.setOnClickListener {
|
binding.relPlayerPip.setOnClickListener {
|
||||||
if (SDK_INT < Build.VERSION_CODES.O) return@setOnClickListener
|
if (SDK_INT < Build.VERSION_CODES.O) return@setOnClickListener
|
||||||
try {
|
try {
|
||||||
@ -980,7 +980,6 @@ class PlayerFragment : Fragment(R.layout.fragment_player), OnlinePlayerOptions {
|
|||||||
e.printStackTrace()
|
e.printStackTrace()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
initializeRelatedVideos(streams.relatedStreams.filter { !it.title.isNullOrBlank() })
|
initializeRelatedVideos(streams.relatedStreams.filter { !it.title.isNullOrBlank() })
|
||||||
// set video description
|
// set video description
|
||||||
val description = streams.description
|
val description = streams.description
|
||||||
@ -1286,7 +1285,7 @@ class PlayerFragment : Fragment(R.layout.fragment_player), OnlinePlayerOptions {
|
|||||||
// DASH
|
// DASH
|
||||||
!PreferenceHelper.getBoolean(PreferenceKeys.USE_HLS_OVER_DASH, false) && streams.videoStreams.isNotEmpty() -> {
|
!PreferenceHelper.getBoolean(PreferenceKeys.USE_HLS_OVER_DASH, false) && streams.videoStreams.isNotEmpty() -> {
|
||||||
// only use the dash manifest generated by YT if either it's a livestream or no other source is available
|
// only use the dash manifest generated by YT if either it's a livestream or no other source is available
|
||||||
val uri = streams.dash?.toUri().takeIf {
|
val uri = streams.dash?.let { ProxyHelper.unwrapIfEnabled(it) }?.toUri().takeIf {
|
||||||
streams.livestream || streams.videoStreams.isEmpty()
|
streams.livestream || streams.videoStreams.isEmpty()
|
||||||
} ?: let {
|
} ?: let {
|
||||||
val manifest = DashHelper.createManifest(streams)
|
val manifest = DashHelper.createManifest(streams)
|
||||||
@ -1301,7 +1300,10 @@ class PlayerFragment : Fragment(R.layout.fragment_player), OnlinePlayerOptions {
|
|||||||
}
|
}
|
||||||
// HLS
|
// HLS
|
||||||
streams.hls != null -> {
|
streams.hls != null -> {
|
||||||
setMediaSource(streams.hls!!.toUri(), MimeTypes.APPLICATION_M3U8)
|
setMediaSource(
|
||||||
|
ProxyHelper.unwrapIfEnabled(streams.hls!!).toUri(),
|
||||||
|
MimeTypes.APPLICATION_M3U8
|
||||||
|
)
|
||||||
}
|
}
|
||||||
// NO STREAM FOUND
|
// NO STREAM FOUND
|
||||||
else -> {
|
else -> {
|
||||||
|
@ -453,6 +453,10 @@
|
|||||||
<string name="playing_next">Playing next in %1$s</string>
|
<string name="playing_next">Playing next in %1$s</string>
|
||||||
<string name="lbry_hls">LBRY HLS</string>
|
<string name="lbry_hls">LBRY HLS</string>
|
||||||
<string name="lbry_hls_summary">Use LBRY HLS for streaming if available.</string>
|
<string name="lbry_hls_summary">Use LBRY HLS for streaming if available.</string>
|
||||||
|
<string name="disable_proxy">Disable Piped proxy</string>
|
||||||
|
<string name="disable_proxy_summary">Load videos and images directly from YouTube\'s servers. Only enable the option if you use a VPN anyways! Note that this might not work with content from YT music.</string>
|
||||||
|
|
||||||
|
|
||||||
<!-- Notification channel strings -->
|
<!-- Notification channel strings -->
|
||||||
<string name="download_channel_name">Download Service</string>
|
<string name="download_channel_name">Download Service</string>
|
||||||
<string name="download_channel_description">Shows a notification when downloading media.</string>
|
<string name="download_channel_description">Shows a notification when downloading media.</string>
|
||||||
|
@ -96,6 +96,13 @@
|
|||||||
app:title="@string/codecs"
|
app:title="@string/codecs"
|
||||||
app:useSimpleSummaryProvider="true" />
|
app:useSimpleSummaryProvider="true" />
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
Loading…
Reference in New Issue
Block a user