funkwhale-app-android/app/src/main/java/audio/funkwhale/ffa/playback/CacheDataSourceFactoryProvi...

45 lines
1.5 KiB
Kotlin

package audio.funkwhale.ffa.playback
import android.content.Context
import audio.funkwhale.ffa.R
import audio.funkwhale.ffa.utils.OAuth
import audio.funkwhale.ffa.utils.Settings
import com.google.android.exoplayer2.upstream.DataSource
import com.google.android.exoplayer2.upstream.DefaultHttpDataSourceFactory
import com.google.android.exoplayer2.upstream.FileDataSource
import com.google.android.exoplayer2.upstream.cache.Cache
import com.google.android.exoplayer2.upstream.cache.CacheDataSource
import com.google.android.exoplayer2.util.Util
class CacheDataSourceFactoryProvider(
private val oAuth: OAuth,
private val exoCache: Cache,
private val exoDownloadCache: Cache
) {
fun create(context: Context): CacheDataSource.Factory {
val playbackCache = CacheDataSource.Factory().apply {
setCache(exoCache)
setUpstreamDataSourceFactory(createDatasourceFactory(context, oAuth))
}
return CacheDataSource.Factory().apply {
setCache(exoDownloadCache)
setUpstreamDataSourceFactory(playbackCache)
setCacheReadDataSourceFactory(FileDataSource.Factory())
setFlags(CacheDataSource.FLAG_IGNORE_CACHE_ON_ERROR)
}
}
private fun createDatasourceFactory(context: Context, oAuth: OAuth): DataSource.Factory {
val http = DefaultHttpDataSourceFactory(
Util.getUserAgent(context, context.getString(R.string.app_name))
)
return if (!Settings.isAnonymous()) {
OAuth2DatasourceFactory(context, http, oAuth)
} else {
http
}
}
}