From 99ef1fc168a6cc1d097e9da9800b48856772ff62 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Tue, 1 Apr 2025 11:56:47 -0400 Subject: [PATCH] Removes Tor leaks when loading thumbnails for vides automatically from the ExoPlayer --- .../service/playback/playerPool/MediaSessionPool.kt | 11 +++++++++++ .../service/playback/service/PlaybackService.kt | 1 + 2 files changed, 12 insertions(+) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/playerPool/MediaSessionPool.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/playerPool/MediaSessionPool.kt index e84cfff7a..8b14591f3 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/playerPool/MediaSessionPool.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/playerPool/MediaSessionPool.kt @@ -27,6 +27,8 @@ import androidx.annotation.OptIn import androidx.media3.common.MediaItem import androidx.media3.common.Player import androidx.media3.common.util.UnstableApi +import androidx.media3.datasource.DataSourceBitmapLoader +import androidx.media3.datasource.okhttp.OkHttpDataSource import androidx.media3.exoplayer.ExoPlayer import androidx.media3.session.MediaSession import com.google.common.util.concurrent.Futures @@ -36,6 +38,7 @@ import com.vitorpamplona.quartz.utils.TimeUtils import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch +import okhttp3.OkHttpClient class SessionListener( val session: MediaSession, @@ -51,6 +54,7 @@ class SessionListener( */ class MediaSessionPool( val exoPlayerPool: ExoPlayerPool, + val okHttpClient: OkHttpClient, val reset: (MediaSession) -> Unit, ) { val globalCallback = MediaSessionCallback(this) @@ -79,6 +83,7 @@ class MediaSessionPool( } } + @UnstableApi fun newSession( id: String, context: Context, @@ -87,6 +92,12 @@ class MediaSessionPool( MediaSession .Builder(context, exoPlayerPool.acquirePlayer(context)) .apply { + setBitmapLoader( + DataSourceBitmapLoader( + DataSourceBitmapLoader.DEFAULT_EXECUTOR_SERVICE.get(), + OkHttpDataSource.Factory(okHttpClient), + ), + ) setId(id) setCallback(globalCallback) }.build() diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/service/PlaybackService.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/service/PlaybackService.kt index 460670804..0ff0ddb4d 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/service/PlaybackService.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/playback/service/PlaybackService.kt @@ -43,6 +43,7 @@ class PlaybackService : MediaSessionService() { fun newPool(okHttp: OkHttpClient): MediaSessionPool = MediaSessionPool( ExoPlayerPool(ExoPlayerBuilder(okHttp)), + okHttpClient = okHttp, reset = { session -> (session.player as ExoPlayer).apply { repeatMode = Player.REPEAT_MODE_ONE