implement playhead reporting to crunchyroll
This commit is contained in:
parent
4fed3ddb91
commit
bec0dc2628
@ -151,14 +151,14 @@ class MediaFragmentViewModel(application: Application) : AndroidViewModel(applic
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun updateOnResume(): List<Job> {
|
suspend fun updateOnResume() {
|
||||||
return listOf(
|
listOf(
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
val episodeIDs = episodesCrunchy.items.map { it.id }
|
val episodeIDs = episodesCrunchy.items.map { it.id }
|
||||||
currentPlayheads = Crunchyroll.playheads(episodeIDs)
|
currentPlayheads = Crunchyroll.playheads(episodeIDs)
|
||||||
},
|
},
|
||||||
viewModelScope.launch { upNextSeries = Crunchyroll.upNextSeries(seriesCrunchy.id) }
|
viewModelScope.launch { upNextSeries = Crunchyroll.upNextSeries(seriesCrunchy.id) }
|
||||||
)
|
).joinAll()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -27,12 +27,16 @@ import android.net.Uri
|
|||||||
import android.support.v4.media.session.MediaSessionCompat
|
import android.support.v4.media.session.MediaSessionCompat
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.lifecycle.AndroidViewModel
|
import androidx.lifecycle.AndroidViewModel
|
||||||
|
import androidx.lifecycle.viewModelScope
|
||||||
|
import com.google.android.exoplayer2.ExoPlayer
|
||||||
import com.google.android.exoplayer2.MediaItem
|
import com.google.android.exoplayer2.MediaItem
|
||||||
|
import com.google.android.exoplayer2.Player
|
||||||
import com.google.android.exoplayer2.SimpleExoPlayer
|
import com.google.android.exoplayer2.SimpleExoPlayer
|
||||||
import com.google.android.exoplayer2.ext.mediasession.MediaSessionConnector
|
import com.google.android.exoplayer2.ext.mediasession.MediaSessionConnector
|
||||||
import com.google.android.exoplayer2.source.hls.HlsMediaSource
|
import com.google.android.exoplayer2.source.hls.HlsMediaSource
|
||||||
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory
|
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory
|
||||||
import com.google.android.exoplayer2.util.Util
|
import com.google.android.exoplayer2.util.Util
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
import org.mosad.teapod.R
|
import org.mosad.teapod.R
|
||||||
import org.mosad.teapod.parser.crunchyroll.Crunchyroll
|
import org.mosad.teapod.parser.crunchyroll.Crunchyroll
|
||||||
@ -82,6 +86,22 @@ class PlayerViewModel(application: Application) : AndroidViewModel(application)
|
|||||||
|
|
||||||
init {
|
init {
|
||||||
initMediaSession()
|
initMediaSession()
|
||||||
|
|
||||||
|
player.addListener(object : Player.Listener {
|
||||||
|
override fun onPlaybackStateChanged(state: Int) {
|
||||||
|
super.onPlaybackStateChanged(state)
|
||||||
|
|
||||||
|
if (state == ExoPlayer.STATE_ENDED) updatePlayhead()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onIsPlayingChanged(isPlaying: Boolean) {
|
||||||
|
super.onIsPlayingChanged(isPlaying)
|
||||||
|
|
||||||
|
if (!isPlaying) updatePlayhead()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCleared() {
|
override fun onCleared() {
|
||||||
@ -200,8 +220,6 @@ class PlayerViewModel(application: Application) : AndroidViewModel(application)
|
|||||||
currentPlayback.streams.adaptive_hls[Locale.ROOT.toLanguageTag()]?.url ?: ""
|
currentPlayback.streams.adaptive_hls[Locale.ROOT.toLanguageTag()]?.url ?: ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
println("stream url: $url")
|
println("stream url: $url")
|
||||||
|
|
||||||
// create the media source object
|
// create the media source object
|
||||||
@ -214,8 +232,6 @@ class PlayerViewModel(application: Application) : AndroidViewModel(application)
|
|||||||
player.prepare()
|
player.prepare()
|
||||||
if (seekPosition > 0) player.seekTo(seekPosition)
|
if (seekPosition > 0) player.seekTo(seekPosition)
|
||||||
player.playWhenReady = true
|
player.playWhenReady = true
|
||||||
|
|
||||||
// TODO reimplement mark as watched for cr, if needed
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -254,4 +270,16 @@ class PlayerViewModel(application: Application) : AndroidViewModel(application)
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the playhead of the current episode, if currentPosition > 1000ms.
|
||||||
|
*/
|
||||||
|
private fun updatePlayhead() {
|
||||||
|
val playhead = (player.currentPosition / 1000)
|
||||||
|
|
||||||
|
if (playhead > 0) {
|
||||||
|
viewModelScope.launch { Crunchyroll.postPlayheads(currentEpisode.id, playhead.toInt()) }
|
||||||
|
Log.i(javaClass.name, "Set playhead for episode ${currentEpisode.id} to $playhead sec.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user