Play episodes
This commit is contained in:
parent
e69a653453
commit
5ee1cbf340
3 changed files with 29 additions and 1 deletions
|
@ -6,11 +6,13 @@ import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.fragment.app.viewModels
|
import androidx.fragment.app.viewModels
|
||||||
|
import androidx.navigation.fragment.findNavController
|
||||||
import androidx.navigation.fragment.navArgs
|
import androidx.navigation.fragment.navArgs
|
||||||
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
|
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import dev.jdtech.jellyfin.databinding.EpisodeBottomSheetBinding
|
import dev.jdtech.jellyfin.databinding.EpisodeBottomSheetBinding
|
||||||
import dev.jdtech.jellyfin.viewmodels.EpisodeBottomSheetViewModel
|
import dev.jdtech.jellyfin.viewmodels.EpisodeBottomSheetViewModel
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class EpisodeBottomSheetFragment : BottomSheetDialogFragment() {
|
class EpisodeBottomSheetFragment : BottomSheetDialogFragment() {
|
||||||
|
@ -29,11 +31,20 @@ class EpisodeBottomSheetFragment : BottomSheetDialogFragment() {
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = this
|
||||||
binding.viewModel = viewModel
|
binding.viewModel = viewModel
|
||||||
|
|
||||||
|
binding.playButton.setOnClickListener {
|
||||||
|
viewModel.mediaSources.value?.get(0)?.id?.let { mediaSourceId ->
|
||||||
|
navigateToPlayerActivity(args.episodeId,
|
||||||
|
mediaSourceId
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
viewModel.item.observe(viewLifecycleOwner, { episode ->
|
viewModel.item.observe(viewLifecycleOwner, { episode ->
|
||||||
if (episode.userData?.playedPercentage != null) {
|
if (episode.userData?.playedPercentage != null) {
|
||||||
binding.progressBar.layoutParams.width = TypedValue.applyDimension(
|
binding.progressBar.layoutParams.width = TypedValue.applyDimension(
|
||||||
TypedValue.COMPLEX_UNIT_DIP,
|
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()
|
).toInt()
|
||||||
binding.progressBar.visibility = View.VISIBLE
|
binding.progressBar.visibility = View.VISIBLE
|
||||||
}
|
}
|
||||||
|
@ -43,4 +54,13 @@ class EpisodeBottomSheetFragment : BottomSheetDialogFragment() {
|
||||||
|
|
||||||
return binding.root
|
return binding.root
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun navigateToPlayerActivity(itemId: UUID, mediaSourceId: String) {
|
||||||
|
findNavController().navigate(
|
||||||
|
EpisodeBottomSheetFragmentDirections.actionEpisodeBottomSheetFragmentToPlayerActivity(
|
||||||
|
itemId,
|
||||||
|
mediaSourceId
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -9,6 +9,7 @@ import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
import dev.jdtech.jellyfin.repository.JellyfinRepository
|
import dev.jdtech.jellyfin.repository.JellyfinRepository
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import org.jellyfin.sdk.model.api.BaseItemDto
|
import org.jellyfin.sdk.model.api.BaseItemDto
|
||||||
|
import org.jellyfin.sdk.model.api.MediaSourceInfo
|
||||||
import java.text.DateFormat
|
import java.text.DateFormat
|
||||||
import java.time.ZoneOffset
|
import java.time.ZoneOffset
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
@ -30,11 +31,15 @@ constructor(
|
||||||
private val _dateString = MutableLiveData<String>()
|
private val _dateString = MutableLiveData<String>()
|
||||||
val dateString: LiveData<String> = _dateString
|
val dateString: LiveData<String> = _dateString
|
||||||
|
|
||||||
|
private val _mediaSources = MutableLiveData<List<MediaSourceInfo>>()
|
||||||
|
val mediaSources: LiveData<List<MediaSourceInfo>> = _mediaSources
|
||||||
|
|
||||||
fun loadEpisode(episodeId: UUID) {
|
fun loadEpisode(episodeId: UUID) {
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
_item.value = jellyfinRepository.getItem(episodeId)
|
_item.value = jellyfinRepository.getItem(episodeId)
|
||||||
_runTime.value = "${_item.value?.runTimeTicks?.div(600000000)} min"
|
_runTime.value = "${_item.value?.runTimeTicks?.div(600000000)} min"
|
||||||
_dateString.value = getDateString(_item.value!!)
|
_dateString.value = getDateString(_item.value!!)
|
||||||
|
_mediaSources.value = jellyfinRepository.getMediaSources(episodeId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -128,6 +128,9 @@
|
||||||
<argument
|
<argument
|
||||||
android:name="episodeId"
|
android:name="episodeId"
|
||||||
app:argType="java.util.UUID" />
|
app:argType="java.util.UUID" />
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_episodeBottomSheetFragment_to_playerActivity"
|
||||||
|
app:destination="@id/playerActivity" />
|
||||||
</dialog>
|
</dialog>
|
||||||
<activity
|
<activity
|
||||||
android:id="@+id/playerActivity"
|
android:id="@+id/playerActivity"
|
||||||
|
|
Loading…
Reference in a new issue