add progress listerner in castService

This commit is contained in:
Felix 2019-02-15 16:55:30 +01:00
parent b7964f7cd5
commit 0c58968209

View file

@ -1,25 +1,37 @@
package de.nicidienase.chaosflix.touch.browse.cast
import android.app.Activity
import android.util.Log
import android.view.Menu
import com.google.android.gms.cast.framework.media.RemoteMediaClient
import de.nicidienase.chaosflix.common.mediadata.entities.recording.persistence.Event
import de.nicidienase.chaosflix.common.mediadata.entities.recording.persistence.Recording
import de.nicidienase.chaosflix.common.mediadata.entities.streaming.StreamUrl
import de.nicidienase.chaosflix.touch.browse.streaming.StreamingItem
import pl.droidsonroids.casty.Casty
import pl.droidsonroids.casty.MediaData
import java.util.*
class CastService(val activity: Activity, withMiniController: Boolean = true) {
private val casty: Casty
private val casty: Casty = if (withMiniController) {
Casty.create(activity).withMiniController()
} else {
Casty.create(activity)
}
val connected: Boolean
get() = casty.isConnected
private var remoteMediaClient: RemoteMediaClient? = null
private var progressUpdater: UpdateSaver? = null
init {
casty = if (withMiniController) {
Casty.create(activity).withMiniController()
} else {
Casty.create(activity)
casty.setOnCastSessionUpdatedListener { castSession ->
remoteMediaClient = castSession.remoteMediaClient
with(castSession.remoteMediaClient){
remoteMediaClient = this
progressUpdater?.let { this.addProgressListener(it, UPDATE_INTERVAL) }
}
}
}
@ -37,6 +49,9 @@ class CastService(val activity: Activity, withMiniController: Boolean = true) {
fun loadMediaAndPlay(recording: Recording, event: Event) {
val mediaData = buildCastMediaData(recording, event)
progressUpdater?.let { remoteMediaClient?.removeProgressListener(it) }
progressUpdater = UpdateSaver(event)
remoteMediaClient?.addProgressListener(progressUpdater, UPDATE_INTERVAL)
casty.player.loadMediaAndPlay(mediaData)
}
@ -55,7 +70,7 @@ class CastService(val activity: Activity, withMiniController: Boolean = true) {
}
}
fun buildCastMediaData(recording: Recording, event: Event): MediaData {
private fun buildCastMediaData(recording: Recording, event: Event): MediaData {
return MediaData.Builder(recording.recordingUrl)
.setStreamType(MediaData.STREAM_TYPE_BUFFERED)
.setContentType(recording.mimeType)
@ -64,4 +79,20 @@ class CastService(val activity: Activity, withMiniController: Boolean = true) {
.addPhotoUrl(event.thumbUrl)
.build()
}
inner class UpdateSaver(val event: Event) : RemoteMediaClient.ProgressListener {
private val date = Date()
override fun onProgressUpdated(progress: Long, duration: Long) {
Log.i(TAG, "Progress: $progress of $duration, event-duration: ${event.length * 1000}")
// progressDao.saveProgress(PlaybackProgress(event.id, event.guid, progress, date.time))
}
}
companion object {
val TAG = CastService::class.java.simpleName
const val UPDATE_INTERVAL: Long = 2500
}
}