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 121c13c1..9179f586 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/EpisodeBottomSheetFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/EpisodeBottomSheetFragment.kt @@ -6,11 +6,13 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.viewModels +import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import com.google.android.material.bottomsheet.BottomSheetDialogFragment import dagger.hilt.android.AndroidEntryPoint import dev.jdtech.jellyfin.databinding.EpisodeBottomSheetBinding import dev.jdtech.jellyfin.viewmodels.EpisodeBottomSheetViewModel +import java.util.* @AndroidEntryPoint class EpisodeBottomSheetFragment : BottomSheetDialogFragment() { @@ -29,11 +31,20 @@ class EpisodeBottomSheetFragment : BottomSheetDialogFragment() { binding.lifecycleOwner = this binding.viewModel = viewModel + binding.playButton.setOnClickListener { + viewModel.mediaSources.value?.get(0)?.id?.let { mediaSourceId -> + navigateToPlayerActivity(args.episodeId, + mediaSourceId + ) + } + } + viewModel.item.observe(viewLifecycleOwner, { episode -> if (episode.userData?.playedPercentage != null) { binding.progressBar.layoutParams.width = TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, - (episode.userData?.playedPercentage?.times(1.26))!!.toFloat(), context?.resources?.displayMetrics + (episode.userData?.playedPercentage?.times(1.26))!!.toFloat(), + context?.resources?.displayMetrics ).toInt() binding.progressBar.visibility = View.VISIBLE } @@ -43,4 +54,13 @@ class EpisodeBottomSheetFragment : BottomSheetDialogFragment() { return binding.root } + + private fun navigateToPlayerActivity(itemId: UUID, mediaSourceId: String) { + findNavController().navigate( + EpisodeBottomSheetFragmentDirections.actionEpisodeBottomSheetFragmentToPlayerActivity( + itemId, + mediaSourceId + ) + ) + } } \ No newline at end of file diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/EpisodeBottomSheetViewModel.kt b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/EpisodeBottomSheetViewModel.kt index 6bf96236..31c5fe7a 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/EpisodeBottomSheetViewModel.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/EpisodeBottomSheetViewModel.kt @@ -9,6 +9,7 @@ import dagger.hilt.android.lifecycle.HiltViewModel import dev.jdtech.jellyfin.repository.JellyfinRepository import kotlinx.coroutines.launch import org.jellyfin.sdk.model.api.BaseItemDto +import org.jellyfin.sdk.model.api.MediaSourceInfo import java.text.DateFormat import java.time.ZoneOffset import java.util.* @@ -30,11 +31,15 @@ constructor( private val _dateString = MutableLiveData() val dateString: LiveData = _dateString + private val _mediaSources = MutableLiveData>() + val mediaSources: LiveData> = _mediaSources + fun loadEpisode(episodeId: UUID) { viewModelScope.launch { _item.value = jellyfinRepository.getItem(episodeId) _runTime.value = "${_item.value?.runTimeTicks?.div(600000000)} min" _dateString.value = getDateString(_item.value!!) + _mediaSources.value = jellyfinRepository.getMediaSources(episodeId) } } diff --git a/app/src/main/res/navigation/main_navigation.xml b/app/src/main/res/navigation/main_navigation.xml index 8c74de73..2e86b148 100644 --- a/app/src/main/res/navigation/main_navigation.xml +++ b/app/src/main/res/navigation/main_navigation.xml @@ -128,6 +128,9 @@ +