diff --git a/app/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt b/app/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt
index 3cdcf33c..ddd48bc9 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt
+++ b/app/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt
@@ -34,7 +34,7 @@ class PlayerActivity : AppCompatActivity() {
})
if (viewModel.player.value == null) {
- viewModel.initializePlayer(args.itemId, args.mediaSourceId)
+ viewModel.initializePlayer(args.itemId, args.mediaSourceId, args.playbackPosition)
}
hideSystemUI()
}
diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/EpisodeBottomSheetFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/EpisodeBottomSheetFragment.kt
index 9179f586..cadba184 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/fragments/EpisodeBottomSheetFragment.kt
+++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/EpisodeBottomSheetFragment.kt
@@ -34,7 +34,8 @@ class EpisodeBottomSheetFragment : BottomSheetDialogFragment() {
binding.playButton.setOnClickListener {
viewModel.mediaSources.value?.get(0)?.id?.let { mediaSourceId ->
navigateToPlayerActivity(args.episodeId,
- mediaSourceId
+ mediaSourceId,
+ viewModel.item.value!!.userData!!.playbackPositionTicks.div(10000)
)
}
}
@@ -55,11 +56,12 @@ class EpisodeBottomSheetFragment : BottomSheetDialogFragment() {
return binding.root
}
- private fun navigateToPlayerActivity(itemId: UUID, mediaSourceId: String) {
+ private fun navigateToPlayerActivity(itemId: UUID, mediaSourceId: String, playbackPosition: Long) {
findNavController().navigate(
EpisodeBottomSheetFragmentDirections.actionEpisodeBottomSheetFragmentToPlayerActivity(
itemId,
- mediaSourceId
+ mediaSourceId,
+ playbackPosition
)
)
}
diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt
index 169a8870..7e5608c9 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt
+++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt
@@ -55,7 +55,13 @@ class MediaInfoFragment : Fragment() {
})
viewModel.navigateToPlayer.observe(viewLifecycleOwner, { mediaSource ->
- mediaSource.id?.let { navigateToPlayerActivity(args.itemId, it) }
+ mediaSource.id?.let {
+ navigateToPlayerActivity(
+ args.itemId,
+ it,
+ viewModel.item.value!!.userData!!.playbackPositionTicks.div(10000)
+ )
+ }
})
binding.trailerButton.setOnClickListener {
@@ -87,7 +93,8 @@ class MediaInfoFragment : Fragment() {
} else {
navigateToPlayerActivity(
args.itemId,
- viewModel.mediaSources.value!![0].id!!
+ viewModel.mediaSources.value!![0].id!!,
+ viewModel.item.value!!.userData!!.playbackPositionTicks.div(10000)
)
}
}
@@ -116,11 +123,16 @@ class MediaInfoFragment : Fragment() {
)
}
- private fun navigateToPlayerActivity(itemId: UUID, mediaSourceId: String) {
+ private fun navigateToPlayerActivity(
+ itemId: UUID,
+ mediaSourceId: String,
+ playbackPosition: Long
+ ) {
findNavController().navigate(
MediaInfoFragmentDirections.actionMediaInfoFragmentToPlayerActivity(
itemId,
- mediaSourceId
+ mediaSourceId,
+ playbackPosition
)
)
}
diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerActivityViewModel.kt b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerActivityViewModel.kt
index e2d54c37..6c775a01 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerActivityViewModel.kt
+++ b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerActivityViewModel.kt
@@ -7,7 +7,6 @@ import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.google.android.exoplayer2.*
-import com.google.android.exoplayer2.trackselection.DefaultTrackSelector
import dagger.hilt.android.lifecycle.HiltViewModel
import dev.jdtech.jellyfin.repository.JellyfinRepository
import kotlinx.coroutines.launch
@@ -33,31 +32,29 @@ constructor(
playbackStateListener = PlaybackStateListener()
}
- fun initializePlayer(itemId: UUID, mediaSourceId: String) {
- if (player.value == null) {
- val trackSelector = DefaultTrackSelector(application)
- val renderersFactory = DefaultRenderersFactory(application).setExtensionRendererMode(DefaultRenderersFactory.EXTENSION_RENDERER_MODE_ON)
- trackSelector.parameters.buildUpon().setMaxVideoSizeSd()
- _player.value = SimpleExoPlayer.Builder(application, renderersFactory)
- .setTrackSelector(trackSelector)
- .build()
- }
+ fun initializePlayer(itemId: UUID, mediaSourceId: String, playbackPosition: Long) {
+ val renderersFactory =
+ DefaultRenderersFactory(application).setExtensionRendererMode(DefaultRenderersFactory.EXTENSION_RENDERER_MODE_ON)
+ val player = SimpleExoPlayer.Builder(application, renderersFactory)
+ .build()
- player.value?.addListener(playbackStateListener)
+ player.addListener(playbackStateListener)
viewModelScope.launch {
val streamUrl = jellyfinRepository.getStreamUrl(itemId, mediaSourceId)
+ Log.d("PlayerActivity", streamUrl)
val mediaItem =
MediaItem.Builder()
.setMediaId(itemId.toString())
.setUri(streamUrl)
.build()
- player.value?.setMediaItem(mediaItem)
+ player.setMediaItem(mediaItem, playbackPosition)
}
- player.value?.playWhenReady = playWhenReady
- player.value?.seekTo(currentWindow, playbackPosition)
- player.value?.prepare()
+ player.playWhenReady = playWhenReady
+ player.prepare()
+
+ _player.value = player
}
private fun releasePlayer() {
diff --git a/app/src/main/res/navigation/main_navigation.xml b/app/src/main/res/navigation/main_navigation.xml
index 2e86b148..afedf67f 100644
--- a/app/src/main/res/navigation/main_navigation.xml
+++ b/app/src/main/res/navigation/main_navigation.xml
@@ -143,5 +143,8 @@
+
\ No newline at end of file