mirror of
https://github.com/libre-tube/LibreTube.git
synced 2025-04-28 16:00:31 +05:30
rewrite proxied URLs
This commit is contained in:
parent
ef20253db4
commit
592f1b5648
@ -16,6 +16,7 @@ import com.github.libretube.util.ExceptionHandler
|
||||
import com.github.libretube.util.ImageHelper
|
||||
import com.github.libretube.util.NotificationHelper
|
||||
import com.github.libretube.util.PreferenceHelper
|
||||
import com.github.libretube.util.ProxyHelper
|
||||
|
||||
class LibreTubeApp : Application() {
|
||||
override fun onCreate() {
|
||||
@ -57,6 +58,11 @@ class LibreTubeApp : Application() {
|
||||
existingPeriodicWorkPolicy = ExistingPeriodicWorkPolicy.KEEP
|
||||
)
|
||||
|
||||
/**
|
||||
* Fetch the image proxy URL for local playlists and the watch history
|
||||
*/
|
||||
ProxyHelper.fetchProxyUrl()
|
||||
|
||||
/**
|
||||
* Handler for uncaught exceptions
|
||||
*/
|
||||
|
@ -6,6 +6,7 @@ import com.github.libretube.api.obj.CommentsPage
|
||||
import com.github.libretube.api.obj.DeleteUserRequest
|
||||
import com.github.libretube.api.obj.Login
|
||||
import com.github.libretube.api.obj.Message
|
||||
import com.github.libretube.api.obj.PipedConfig
|
||||
import com.github.libretube.api.obj.Playlist
|
||||
import com.github.libretube.api.obj.PlaylistId
|
||||
import com.github.libretube.api.obj.Playlists
|
||||
@ -24,6 +25,9 @@ import retrofit2.http.Path
|
||||
import retrofit2.http.Query
|
||||
|
||||
interface PipedApi {
|
||||
@GET("config")
|
||||
suspend fun getConfig(): PipedConfig
|
||||
|
||||
@GET("trending")
|
||||
suspend fun getTrending(@Query("region") region: String): List<StreamItem>
|
||||
|
||||
|
@ -15,6 +15,7 @@ import com.github.libretube.extensions.toLocalPlaylistItem
|
||||
import com.github.libretube.extensions.toStreamItem
|
||||
import com.github.libretube.extensions.toastFromMainThread
|
||||
import com.github.libretube.util.PreferenceHelper
|
||||
import com.github.libretube.util.ProxyHelper
|
||||
import retrofit2.HttpException
|
||||
import java.io.IOException
|
||||
|
||||
@ -56,7 +57,7 @@ object PlaylistsHelper {
|
||||
}.first { it.playlist.id.toString() == playlistId }
|
||||
return Playlist(
|
||||
name = relation.playlist.name,
|
||||
thumbnailUrl = relation.playlist.thumbnailUrl,
|
||||
thumbnailUrl = ProxyHelper.rewriteUrl(relation.playlist.thumbnailUrl),
|
||||
videos = relation.videos.size,
|
||||
relatedStreams = relation.videos.map { it.toStreamItem() }
|
||||
)
|
||||
|
@ -0,0 +1,7 @@
|
||||
package com.github.libretube.api.obj
|
||||
|
||||
data class PipedConfig(
|
||||
val donationUrl: String? = null,
|
||||
val statusPageUrl: String? = null,
|
||||
val imageProxyUrl: String? = null
|
||||
)
|
@ -10,6 +10,7 @@ object PreferenceKeys {
|
||||
const val AUTH_PREF_FILE = "auth"
|
||||
const val TOKEN = "token"
|
||||
const val USERNAME = "username"
|
||||
const val IMAGE_PROXY_URL = "image_proxy_url"
|
||||
|
||||
/**
|
||||
* General
|
||||
|
@ -11,7 +11,7 @@ data class WatchHistoryItem(
|
||||
@ColumnInfo val uploadDate: String? = null,
|
||||
@ColumnInfo val uploader: String? = null,
|
||||
@ColumnInfo val uploaderUrl: String? = null,
|
||||
@ColumnInfo val uploaderAvatar: String? = null,
|
||||
@ColumnInfo val thumbnailUrl: String? = null,
|
||||
@ColumnInfo var uploaderAvatar: String? = null,
|
||||
@ColumnInfo var thumbnailUrl: String? = null,
|
||||
@ColumnInfo val duration: Long? = null
|
||||
)
|
||||
|
@ -1,8 +1,10 @@
|
||||
package com.github.libretube.extensions
|
||||
|
||||
import android.util.Log
|
||||
import com.github.libretube.api.obj.StreamItem
|
||||
import com.github.libretube.api.obj.Streams
|
||||
import com.github.libretube.db.obj.LocalPlaylistItem
|
||||
import com.github.libretube.util.ProxyHelper
|
||||
|
||||
fun Streams.toStreamItem(videoId: String): StreamItem {
|
||||
return StreamItem(
|
||||
@ -22,13 +24,14 @@ fun Streams.toStreamItem(videoId: String): StreamItem {
|
||||
}
|
||||
|
||||
fun LocalPlaylistItem.toStreamItem(): StreamItem {
|
||||
Log.e("thumb", ProxyHelper.rewriteUrl(thumbnailUrl).toString())
|
||||
return StreamItem(
|
||||
url = videoId,
|
||||
title = title,
|
||||
thumbnail = thumbnailUrl,
|
||||
thumbnail = ProxyHelper.rewriteUrl(thumbnailUrl),
|
||||
uploaderName = uploader,
|
||||
uploaderUrl = uploaderUrl,
|
||||
uploaderAvatar = uploaderAvatar,
|
||||
uploaderAvatar = ProxyHelper.rewriteUrl(uploaderAvatar),
|
||||
uploadedDate = uploadDate,
|
||||
uploaded = null,
|
||||
duration = duration
|
||||
|
@ -12,6 +12,7 @@ import com.github.libretube.db.DatabaseHolder.Companion.Database
|
||||
import com.github.libretube.extensions.awaitQuery
|
||||
import com.github.libretube.ui.adapters.WatchHistoryAdapter
|
||||
import com.github.libretube.ui.base.BaseFragment
|
||||
import com.github.libretube.util.ProxyHelper
|
||||
|
||||
class WatchHistoryFragment : BaseFragment() {
|
||||
private lateinit var binding: FragmentWatchHistoryBinding
|
||||
@ -34,6 +35,11 @@ class WatchHistoryFragment : BaseFragment() {
|
||||
|
||||
if (watchHistory.isEmpty()) return
|
||||
|
||||
watchHistory.forEach {
|
||||
it.thumbnailUrl = ProxyHelper.rewriteUrl(it.thumbnailUrl)
|
||||
it.uploaderAvatar = ProxyHelper.rewriteUrl(it.uploaderAvatar)
|
||||
}
|
||||
|
||||
// reversed order
|
||||
binding.watchHistoryRecView.layoutManager = LinearLayoutManager(requireContext()).apply {
|
||||
reverseLayout = true
|
||||
|
@ -33,8 +33,8 @@ object PreferenceHelper {
|
||||
editor.putString(key, value).commit()
|
||||
}
|
||||
|
||||
fun getString(key: String?, defValue: String?): String {
|
||||
return settings.getString(key, defValue)!!
|
||||
fun getString(key: String?, defValue: String): String {
|
||||
return settings.getString(key, defValue) ?: defValue
|
||||
}
|
||||
|
||||
fun getBoolean(key: String?, defValue: Boolean): Boolean {
|
||||
@ -49,10 +49,6 @@ object PreferenceHelper {
|
||||
editor.clear().apply()
|
||||
}
|
||||
|
||||
fun removePreference(value: String?) {
|
||||
editor.remove(value).apply()
|
||||
}
|
||||
|
||||
fun getToken(): String {
|
||||
return authSettings.getString(PreferenceKeys.TOKEN, "")!!
|
||||
}
|
||||
|
48
app/src/main/java/com/github/libretube/util/ProxyHelper.kt
Normal file
48
app/src/main/java/com/github/libretube/util/ProxyHelper.kt
Normal file
@ -0,0 +1,48 @@
|
||||
package com.github.libretube.util
|
||||
|
||||
import com.github.libretube.api.RetrofitInstance
|
||||
import com.github.libretube.constants.PreferenceKeys
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import java.net.URI
|
||||
|
||||
object ProxyHelper {
|
||||
private fun getImageProxyUrl(): String? {
|
||||
val url = PreferenceHelper.getString(PreferenceKeys.IMAGE_PROXY_URL, "")
|
||||
return if (url != "") url else null
|
||||
}
|
||||
|
||||
private fun setImageProxyUrl(url: String) {
|
||||
PreferenceHelper.putString(PreferenceKeys.IMAGE_PROXY_URL, url)
|
||||
}
|
||||
|
||||
fun fetchProxyUrl() {
|
||||
CoroutineScope(Dispatchers.IO).launch {
|
||||
runCatching {
|
||||
RetrofitInstance.api.getConfig().imageProxyUrl?.let {
|
||||
setImageProxyUrl(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun rewriteUrl(url: String?): String? {
|
||||
url ?: return null
|
||||
|
||||
val proxyUrl = getImageProxyUrl()
|
||||
proxyUrl ?: return url
|
||||
|
||||
runCatching {
|
||||
val originalUri = URI(url)
|
||||
return URI(
|
||||
originalUri.scheme.lowercase(),
|
||||
proxyUrl,
|
||||
originalUri.path,
|
||||
originalUri.query,
|
||||
originalUri.fragment
|
||||
).toString()
|
||||
}
|
||||
return url
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user