fix: Use defined media type for live radio detection, relocate DynamicMediaSourceFactory

This commit is contained in:
Jaime García 2025-09-05 11:19:47 +02:00
parent e43a2b6fe5
commit bd753f4489
No known key found for this signature in database
GPG key ID: BC4E5F71A71BDA5B
3 changed files with 5 additions and 17 deletions

View file

@ -2,7 +2,6 @@ package com.cappielloantonio.tempo.util;
import android.app.Notification; import android.app.Notification;
import android.content.Context; import android.content.Context;
import android.net.Uri;
import androidx.core.app.NotificationCompat; import androidx.core.app.NotificationCompat;
import androidx.media3.common.util.UnstableApi; import androidx.media3.common.util.UnstableApi;
@ -102,13 +101,6 @@ public final class DownloadUtil {
return dataSourceFactory; return dataSourceFactory;
} }
public static boolean shouldBypassCache(Uri uri) {
if (uri == null) return true;
String url = uri.toString();
String mainServer = Preferences.getServer();
return mainServer != null && !url.startsWith(mainServer);
}
public static synchronized DownloadNotificationHelper getDownloadNotificationHelper(Context context) { public static synchronized DownloadNotificationHelper getDownloadNotificationHelper(Context context) {
if (downloadNotificationHelper == null) { if (downloadNotificationHelper == null) {
downloadNotificationHelper = new DownloadNotificationHelper(context, DOWNLOAD_NOTIFICATION_CHANNEL_ID); downloadNotificationHelper = new DownloadNotificationHelper(context, DOWNLOAD_NOTIFICATION_CHANNEL_ID);

View file

@ -1,7 +1,6 @@
package com.cappielloantonio.tempo.service package com.cappielloantonio.tempo.util
import android.content.Context import android.content.Context
import android.net.Uri
import androidx.media3.common.C import androidx.media3.common.C
import androidx.media3.common.MediaItem import androidx.media3.common.MediaItem
import androidx.media3.common.MimeTypes import androidx.media3.common.MimeTypes
@ -14,8 +13,6 @@ import androidx.media3.exoplayer.source.ProgressiveMediaSource
import androidx.media3.exoplayer.upstream.LoadErrorHandlingPolicy import androidx.media3.exoplayer.upstream.LoadErrorHandlingPolicy
import androidx.media3.extractor.DefaultExtractorsFactory import androidx.media3.extractor.DefaultExtractorsFactory
import androidx.media3.extractor.ExtractorsFactory import androidx.media3.extractor.ExtractorsFactory
import com.cappielloantonio.tempo.util.DownloadUtil
import com.cappielloantonio.tempo.util.Preferences
@UnstableApi @UnstableApi
class DynamicMediaSourceFactory( class DynamicMediaSourceFactory(
@ -23,11 +20,10 @@ class DynamicMediaSourceFactory(
) : MediaSource.Factory { ) : MediaSource.Factory {
override fun createMediaSource(mediaItem: MediaItem): MediaSource { override fun createMediaSource(mediaItem: MediaItem): MediaSource {
val uri: Uri = mediaItem.localConfiguration?.uri ?: mediaItem.requestMetadata.mediaUri val mediaType: String? = mediaItem.mediaMetadata.extras?.getString("type", "")
?: throw IllegalArgumentException("MediaItem must contain a valid URI")
val streamingCacheSize = Preferences.getStreamingCacheSize() val streamingCacheSize = Preferences.getStreamingCacheSize()
val bypassCache = DownloadUtil.shouldBypassCache(uri) val bypassCache = mediaType == Constants.MEDIA_TYPE_RADIO
val useUpstream = when { val useUpstream = when {
streamingCacheSize.toInt() == 0 -> true streamingCacheSize.toInt() == 0 -> true
@ -44,7 +40,7 @@ class DynamicMediaSourceFactory(
return when { return when {
mediaItem.localConfiguration?.mimeType == MimeTypes.APPLICATION_M3U8 || mediaItem.localConfiguration?.mimeType == MimeTypes.APPLICATION_M3U8 ||
uri.toString().endsWith(".m3u8") -> { mediaItem.localConfiguration?.uri.toString().endsWith(".m3u8") -> {
HlsMediaSource.Factory(dataSourceFactory).createMediaSource(mediaItem) HlsMediaSource.Factory(dataSourceFactory).createMediaSource(mediaItem)
} }

View file

@ -18,7 +18,7 @@ import com.cappielloantonio.tempo.R
import com.cappielloantonio.tempo.ui.activity.MainActivity import com.cappielloantonio.tempo.ui.activity.MainActivity
import com.cappielloantonio.tempo.util.Constants import com.cappielloantonio.tempo.util.Constants
import com.cappielloantonio.tempo.util.DownloadUtil import com.cappielloantonio.tempo.util.DownloadUtil
import com.cappielloantonio.tempo.service.DynamicMediaSourceFactory import com.cappielloantonio.tempo.util.DynamicMediaSourceFactory
import com.cappielloantonio.tempo.util.Preferences import com.cappielloantonio.tempo.util.Preferences
import com.cappielloantonio.tempo.util.ReplayGainUtil import com.cappielloantonio.tempo.util.ReplayGainUtil
import com.google.common.collect.ImmutableList import com.google.common.collect.ImmutableList