diff --git a/app/src/main/java/audio/funkwhale/ffa/adapters/PlaylistsAdapter.kt b/app/src/main/java/audio/funkwhale/ffa/adapters/PlaylistsAdapter.kt index 11e3cd8..a7d714a 100644 --- a/app/src/main/java/audio/funkwhale/ffa/adapters/PlaylistsAdapter.kt +++ b/app/src/main/java/audio/funkwhale/ffa/adapters/PlaylistsAdapter.kt @@ -10,6 +10,7 @@ import audio.funkwhale.ffa.R import audio.funkwhale.ffa.databinding.RowPlaylistBinding import audio.funkwhale.ffa.fragments.FFAAdapter import audio.funkwhale.ffa.model.Playlist +import audio.funkwhale.ffa.utils.maybeLoad import audio.funkwhale.ffa.utils.toDurationString import com.squareup.picasso.Picasso import jp.wasabeef.picasso.transformations.RoundedCornersTransformation @@ -80,7 +81,7 @@ class PlaylistsAdapter( } Picasso.get() - .load(url) + .maybeLoad(url) .transform(RoundedCornersTransformation(32, 0, corner)) .into(imageView) } diff --git a/app/src/main/java/audio/funkwhale/ffa/playback/MediaControlsManager.kt b/app/src/main/java/audio/funkwhale/ffa/playback/MediaControlsManager.kt index 9e1faee..088864c 100644 --- a/app/src/main/java/audio/funkwhale/ffa/playback/MediaControlsManager.kt +++ b/app/src/main/java/audio/funkwhale/ffa/playback/MediaControlsManager.kt @@ -15,6 +15,7 @@ import audio.funkwhale.ffa.R import audio.funkwhale.ffa.activities.MainActivity import audio.funkwhale.ffa.model.Track import audio.funkwhale.ffa.utils.AppContext +import audio.funkwhale.ffa.utils.maybeLoad import audio.funkwhale.ffa.utils.maybeNormalizeUrl import com.squareup.picasso.Picasso import kotlinx.coroutines.CoroutineScope @@ -68,7 +69,7 @@ class MediaControlsManager( .run { coverUrl?.let { try { - setLargeIcon(Picasso.get().load(coverUrl).get()) + setLargeIcon(Picasso.get().maybeLoad(coverUrl).get()) } catch (_: Exception) { } diff --git a/app/src/main/java/audio/funkwhale/ffa/playback/PlayerService.kt b/app/src/main/java/audio/funkwhale/ffa/playback/PlayerService.kt index 6b1c606..75d8cc7 100644 --- a/app/src/main/java/audio/funkwhale/ffa/playback/PlayerService.kt +++ b/app/src/main/java/audio/funkwhale/ffa/playback/PlayerService.kt @@ -28,6 +28,7 @@ import audio.funkwhale.ffa.utils.Request import audio.funkwhale.ffa.utils.RequestBus import audio.funkwhale.ffa.utils.Response import audio.funkwhale.ffa.utils.log +import audio.funkwhale.ffa.utils.maybeLoad import audio.funkwhale.ffa.utils.maybeNormalizeUrl import audio.funkwhale.ffa.utils.onApi import com.google.android.exoplayer2.C @@ -376,7 +377,7 @@ class PlayerService : Service() { runBlocking(IO) { this@apply.putBitmap( MediaMetadataCompat.METADATA_KEY_ALBUM_ART, - Picasso.get().load(coverUrl).get() + Picasso.get().maybeLoad(coverUrl).get() ) } } catch (e: Exception) { diff --git a/app/src/main/java/audio/funkwhale/ffa/utils/Extensions.kt b/app/src/main/java/audio/funkwhale/ffa/utils/Extensions.kt index fbd5e81..0f30d81 100644 --- a/app/src/main/java/audio/funkwhale/ffa/utils/Extensions.kt +++ b/app/src/main/java/audio/funkwhale/ffa/utils/Extensions.kt @@ -62,6 +62,8 @@ fun Int.onApi(block: () -> T, elseBlock: (() -> U)) { fun Picasso.maybeLoad(url: String?): RequestCreator { return if (url == null) load(R.drawable.cover) else load(url) + // Remote storage may have (pre-signed) ephemeral credentials in the query string + .stableKey(url.replace(Regex("\\?.*$"), "")) } fun Request.authorize(context: Context, oAuth: OAuth): Request { diff --git a/changes/changelog.d/133.bugfix b/changes/changelog.d/133.bugfix new file mode 100644 index 0000000..25d6778 --- /dev/null +++ b/changes/changelog.d/133.bugfix @@ -0,0 +1 @@ +Use Picasso stableKey for better caching against pre-signed URLs (thanks @rickosborne) \ No newline at end of file