Skip to content

Commit

Permalink
Merge branch 'feature/114-auto-select-from-sources' into main
Browse files Browse the repository at this point in the history
Close #114
  • Loading branch information
stantanasi committed Apr 11, 2024
2 parents e330090 + 63ee23a commit 46fb5b5
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@ class PlayerMobileFragment : Fragment() {
private lateinit var player: ExoPlayer
private lateinit var mediaSession: MediaSession

private var servers = listOf<Video.Server>()

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
Expand All @@ -76,6 +78,7 @@ class PlayerMobileFragment : Fragment() {
when (state) {
PlayerViewModel.State.LoadingServers -> {}
is PlayerViewModel.State.SuccessLoadingServers -> {
servers = state.servers
player.playlistMetadata = MediaMetadata.Builder()
.setTitle(state.toString())
.setMediaServers(state.servers.map {
Expand All @@ -88,6 +91,7 @@ class PlayerMobileFragment : Fragment() {
binding.settings.setOnServerSelected { server ->
viewModel.getVideo(state.servers.find { server.id == it.id }!!)
}
viewModel.getVideo(state.servers.first())
}
is PlayerViewModel.State.FailedLoadingServers -> {
Toast.makeText(
Expand All @@ -98,7 +102,18 @@ class PlayerMobileFragment : Fragment() {
findNavController().navigateUp()
}

PlayerViewModel.State.LoadingVideo -> {}
is PlayerViewModel.State.LoadingVideo -> {
player.setMediaItem(
MediaItem.Builder()
.setUri(Uri.parse(""))
.setMediaMetadata(
MediaMetadata.Builder()
.setMediaServerId(state.server.id)
.build()
)
.build()
)
}
is PlayerViewModel.State.SuccessLoadingVideo -> {
displayVideo(state.video, state.server)
}
Expand All @@ -108,6 +123,9 @@ class PlayerMobileFragment : Fragment() {
state.error.message ?: "",
Toast.LENGTH_LONG
).show()
servers.getOrNull(servers.indexOf(state.server) + 1)?.let {
viewModel.getVideo(it)
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ class PlayerTvFragment : Fragment() {
private lateinit var player: ExoPlayer
private lateinit var mediaSession: MediaSession

private var servers = listOf<Video.Server>()

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
Expand All @@ -81,6 +83,7 @@ class PlayerTvFragment : Fragment() {
when (state) {
PlayerViewModel.State.LoadingServers -> {}
is PlayerViewModel.State.SuccessLoadingServers -> {
servers = state.servers
player.playlistMetadata = MediaMetadata.Builder()
.setTitle(state.toString())
.setMediaServers(state.servers.map {
Expand All @@ -93,6 +96,7 @@ class PlayerTvFragment : Fragment() {
binding.settings.setOnServerSelected { server ->
viewModel.getVideo(state.servers.find { server.id == it.id }!!)
}
viewModel.getVideo(state.servers.first())
}
is PlayerViewModel.State.FailedLoadingServers -> {
Toast.makeText(
Expand All @@ -103,7 +107,18 @@ class PlayerTvFragment : Fragment() {
findNavController().navigateUp()
}

PlayerViewModel.State.LoadingVideo -> {}
is PlayerViewModel.State.LoadingVideo -> {
player.setMediaItem(
MediaItem.Builder()
.setUri(Uri.parse(""))
.setMediaMetadata(
MediaMetadata.Builder()
.setMediaServerId(state.server.id)
.build()
)
.build()
)
}
is PlayerViewModel.State.SuccessLoadingVideo -> {
displayVideo(state.video, state.server)
}
Expand All @@ -113,8 +128,8 @@ class PlayerTvFragment : Fragment() {
state.error.message ?: "",
Toast.LENGTH_LONG
).show()
if (player.currentMediaItem == null) {
binding.pvPlayer.controller.exoSettings.requestFocus()
servers.getOrNull(servers.indexOf(state.server) + 1)?.let {
viewModel.getVideo(it)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ class PlayerViewModel(
data class SuccessLoadingServers(val servers: List<Video.Server>) : State()
data class FailedLoadingServers(val error: Exception) : State()

data object LoadingVideo : State()
data class LoadingVideo(val server: Video.Server) : State()
data class SuccessLoadingVideo(val video: Video, val server: Video.Server) : State()
data class FailedLoadingVideo(val error: Exception) : State()
data class FailedLoadingVideo(val error: Exception, val server: Video.Server) : State()
}

init {
Expand All @@ -45,16 +45,14 @@ class PlayerViewModel(
if (servers.isEmpty()) throw Exception("No servers found")

_state.postValue(State.SuccessLoadingServers(servers))

getVideo(servers.first())
} catch (e: Exception) {
Log.e("PlayerViewModel", "getServers: ", e)
_state.postValue(State.FailedLoadingServers(e))
}
}

fun getVideo(server: Video.Server) = viewModelScope.launch(Dispatchers.IO) {
_state.postValue(State.LoadingVideo)
_state.postValue(State.LoadingVideo(server))

try {
val video = UserPreferences.currentProvider!!.getVideo(server)
Expand All @@ -64,7 +62,7 @@ class PlayerViewModel(
_state.postValue(State.SuccessLoadingVideo(video, server))
} catch (e: Exception) {
Log.e("PlayerViewModel", "getVideo: ", e)
_state.postValue(State.FailedLoadingVideo(e))
_state.postValue(State.FailedLoadingVideo(e, server))
}
}
}
1 change: 0 additions & 1 deletion app/src/main/res/layout/content_exo_controller_tv.xml
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@
android:focusableInTouchMode="true"
android:nextFocusLeft="@id/exo_play_pause"
android:nextFocusRight="@id/exo_play_pause"
android:nextFocusDown="@id/exo_progress"
android:padding="2dp"
android:src="@drawable/exo_styled_controls_play"
android:tint="#FFFFFF"
Expand Down

0 comments on commit 46fb5b5

Please sign in to comment.