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

53 lines
1.4 KiB
Kotlin
Raw Normal View History

2021-07-23 14:10:13 +02:00
package audio.funkwhale.ffa.playback
import android.content.Context
import android.net.Uri
import audio.funkwhale.ffa.utils.OAuth
2021-09-09 09:56:15 +02:00
import com.google.android.exoplayer2.upstream.DataSource
import com.google.android.exoplayer2.upstream.DataSpec
import com.google.android.exoplayer2.upstream.DefaultHttpDataSource
import com.google.android.exoplayer2.upstream.HttpDataSource
import com.google.android.exoplayer2.upstream.TransferListener
2021-07-23 14:10:13 +02:00
class OAuthDatasource(
private val context: Context,
2021-07-30 10:57:49 +02:00
private val http: HttpDataSource,
private val oauth: OAuth
2021-07-23 14:10:13 +02:00
) : DataSource {
2021-08-29 15:41:50 +02:00
override fun addTransferListener(transferListener: TransferListener) {
2021-07-23 14:10:13 +02:00
http.addTransferListener(transferListener)
}
2021-08-29 15:41:50 +02:00
override fun open(dataSpec: DataSpec): Long {
2021-07-30 10:57:49 +02:00
oauth.tryRefreshAccessToken(context)
http.apply {
setRequestProperty("Authorization", "Bearer ${oauth.state().accessToken}")
}
2021-07-23 14:10:13 +02:00
return http.open(dataSpec)
}
2021-08-29 15:41:50 +02:00
override fun read(buffer: ByteArray, offset: Int, readLength: Int): Int {
2021-07-23 14:10:13 +02:00
return http.read(buffer, offset, readLength)
}
override fun getUri(): Uri? {
return http.uri
}
override fun close() {
http.close()
}
}
class OAuth2DatasourceFactory(
private val context: Context,
2021-09-09 09:56:15 +02:00
private val http: DefaultHttpDataSource.Factory,
2021-07-30 10:57:49 +02:00
private val oauth: OAuth
2021-07-23 14:10:13 +02:00
) : DataSource.Factory {
override fun createDataSource(): DataSource {
2021-07-30 10:57:49 +02:00
return OAuthDatasource(context, http.createDataSource(), oauth)
2021-07-23 14:10:13 +02:00
}
}