From 1e9ddd117361f3247d6dd959fc7b8b68a6eba63b Mon Sep 17 00:00:00 2001 From: Jarne Demeulemeester Date: Tue, 28 Dec 2021 18:26:43 +0100 Subject: [PATCH] Clean up --- .../dev/jdtech/jellyfin/BindingAdapters.kt | 11 ---- .../dev/jdtech/jellyfin/api/JellyfinApi.kt | 1 - .../java/dev/jdtech/jellyfin/mpv/MPVPlayer.kt | 6 +- .../jdtech/jellyfin/tv/TvPlayerActivity.kt | 9 ++- .../jellyfin/tv/ui/MediaDetailViewModel.kt | 65 ------------------- .../jdtech/jellyfin/utils/AudioController.kt | 18 ----- .../jellyfin/utils/DownloadUtilities.kt | 2 +- .../jellyfin/viewmodels/AddServerViewModel.kt | 37 ++++++----- .../viewmodels/EpisodeBottomSheetViewModel.kt | 15 ++--- 9 files changed, 36 insertions(+), 128 deletions(-) delete mode 100644 app/src/main/java/dev/jdtech/jellyfin/tv/ui/MediaDetailViewModel.kt delete mode 100644 app/src/main/java/dev/jdtech/jellyfin/utils/AudioController.kt diff --git a/app/src/main/java/dev/jdtech/jellyfin/BindingAdapters.kt b/app/src/main/java/dev/jdtech/jellyfin/BindingAdapters.kt index 42a7de62..c40bfa85 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/BindingAdapters.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/BindingAdapters.kt @@ -6,16 +6,11 @@ import androidx.databinding.BindingAdapter import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions -import dev.jdtech.jellyfin.adapters.DownloadsListAdapter import dev.jdtech.jellyfin.adapters.HomeEpisodeListAdapter -import dev.jdtech.jellyfin.adapters.HomeItem -import dev.jdtech.jellyfin.adapters.PersonListAdapter import dev.jdtech.jellyfin.adapters.ServerGridAdapter import dev.jdtech.jellyfin.adapters.ViewItemListAdapter -import dev.jdtech.jellyfin.adapters.ViewListAdapter import dev.jdtech.jellyfin.api.JellyfinApi import dev.jdtech.jellyfin.database.Server -import dev.jdtech.jellyfin.models.DownloadSection import org.jellyfin.sdk.model.api.BaseItemDto import org.jellyfin.sdk.model.api.BaseItemPerson import org.jellyfin.sdk.model.api.ImageType @@ -57,12 +52,6 @@ fun bindItemBackdropById(imageView: ImageView, itemId: UUID) { imageView.loadImage("/items/$itemId/Images/${ImageType.BACKDROP}") } -@BindingAdapter("people") -fun bindPeople(recyclerView: RecyclerView, data: List?) { - val adapter = recyclerView.adapter as PersonListAdapter - adapter.submitList(data) -} - @BindingAdapter("personImage") fun bindPersonImage(imageView: ImageView, person: BaseItemPerson) { imageView diff --git a/app/src/main/java/dev/jdtech/jellyfin/api/JellyfinApi.kt b/app/src/main/java/dev/jdtech/jellyfin/api/JellyfinApi.kt index c0086fad..2d56aaaa 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/api/JellyfinApi.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/api/JellyfinApi.kt @@ -21,7 +21,6 @@ import java.util.UUID * Jellyfin API class using org.jellyfin.sdk:jellyfin-platform-android * * @param androidContext The context - * @param baseUrl The url of the server * @constructor Creates a new [JellyfinApi] instance */ class JellyfinApi(androidContext: Context) { diff --git a/app/src/main/java/dev/jdtech/jellyfin/mpv/MPVPlayer.kt b/app/src/main/java/dev/jdtech/jellyfin/mpv/MPVPlayer.kt index 2e60ac3e..69a31166 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/mpv/MPVPlayer.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/mpv/MPVPlayer.kt @@ -815,11 +815,11 @@ class MPVPlayer( override fun seekTo(windowIndex: Int, positionMs: Long) { if (windowIndex == 0) { val seekTo = if (positionMs != C.TIME_UNSET) positionMs / C.MILLIS_PER_SECOND else initialSeekTo - if (isPlayerReady) { + initialSeekTo = if (isPlayerReady) { MPVLib.command(arrayOf("seek", "$seekTo", "absolute")) - initialSeekTo = 0L + 0L } else { - initialSeekTo = seekTo + seekTo } } } diff --git a/app/src/main/java/dev/jdtech/jellyfin/tv/TvPlayerActivity.kt b/app/src/main/java/dev/jdtech/jellyfin/tv/TvPlayerActivity.kt index 5af58b91..fc571894 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/tv/TvPlayerActivity.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/tv/TvPlayerActivity.kt @@ -10,6 +10,7 @@ import android.widget.ImageButton import android.widget.PopupWindow import android.widget.TextView import androidx.activity.viewModels +import androidx.core.content.res.ResourcesCompat import androidx.navigation.navArgs import androidx.recyclerview.widget.RecyclerView import dagger.hilt.android.AndroidEntryPoint @@ -69,12 +70,14 @@ internal class TvPlayerActivity : BasePlayerActivity() { when { viewModel.player.isPlaying -> { viewModel.player.pause() - setImageDrawable(resources.getDrawable(R.drawable.ic_play)) + setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.ic_play, theme) + ) } viewModel.player.isLoading -> Unit else -> { viewModel.player.play() - setImageDrawable(resources.getDrawable(R.drawable.ic_pause)) + setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.ic_play, theme) + ) } } } @@ -91,7 +94,7 @@ internal class TvPlayerActivity : BasePlayerActivity() { private fun bindAudioControl() { val audioBtn = binding.playerView.findViewById(R.id.btn_audio_track) - audioBtn.setOnFocusChangeListener { v, hasFocus -> + audioBtn.setOnFocusChangeListener { _, hasFocus -> displayedPopup = if (hasFocus) { val items = viewModel.currentSubtitleTracks.toUiTrack() audioBtn.showPopupWindowAbove(items, AUDIO) diff --git a/app/src/main/java/dev/jdtech/jellyfin/tv/ui/MediaDetailViewModel.kt b/app/src/main/java/dev/jdtech/jellyfin/tv/ui/MediaDetailViewModel.kt deleted file mode 100644 index 35214149..00000000 --- a/app/src/main/java/dev/jdtech/jellyfin/tv/ui/MediaDetailViewModel.kt +++ /dev/null @@ -1,65 +0,0 @@ -package dev.jdtech.jellyfin.tv.ui - -import android.content.res.Resources -import androidx.lifecycle.ViewModel -import dagger.hilt.android.lifecycle.HiltViewModel -import dev.jdtech.jellyfin.R -import dev.jdtech.jellyfin.models.ContentType.MOVIE -import org.jellyfin.sdk.model.api.BaseItemDto -import javax.inject.Inject - -@HiltViewModel -internal class MediaDetailViewModel @Inject internal constructor() : ViewModel() { - - fun transformData( - data: BaseItemDto, - resources: Resources, - transformed: (State) -> Unit - ): State { - return State( - dto = data, - description = data.overview.orEmpty(), - year = data.productionYear.toString(), - officialRating = data.officialRating.orEmpty(), - communityRating = data.communityRating.toString(), - runtimeMinutes = String.format( - resources.getString(R.string.runtime_minutes), - data.runTimeTicks?.div(600_000_000) - ), - genres = data.genres?.joinToString(" / ").orEmpty(), - trailerUrl = data.remoteTrailers?.firstOrNull()?.url, - isPlayed = data.userData?.played == true, - isFavorite = data.userData?.isFavorite == true, - media = if (data.type == MOVIE.type) { - State.Movie( - title = data.name.orEmpty() - ) - } else { - State.TvShow( - episode = data.episodeTitle ?: data.name.orEmpty(), - show = data.seriesName.orEmpty() - ) - } - ).also(transformed) - } - - data class State( - val dto: BaseItemDto, - val description: String, - val year: String, - val officialRating: String, - val communityRating: String, - val runtimeMinutes: String, - val genres: String, - val trailerUrl: String?, - val isPlayed: Boolean, - val isFavorite: Boolean, - val media: Media - ) { - - sealed class Media - - data class Movie(val title: String): Media() - data class TvShow(val episode: String, val show: String): Media() - } -} \ No newline at end of file diff --git a/app/src/main/java/dev/jdtech/jellyfin/utils/AudioController.kt b/app/src/main/java/dev/jdtech/jellyfin/utils/AudioController.kt deleted file mode 100644 index 39894b02..00000000 --- a/app/src/main/java/dev/jdtech/jellyfin/utils/AudioController.kt +++ /dev/null @@ -1,18 +0,0 @@ -package dev.jdtech.jellyfin.utils - -import android.content.Context -import android.media.AudioManager -import android.media.AudioManager.ADJUST_LOWER -import android.media.AudioManager.ADJUST_RAISE -import android.media.AudioManager.ADJUST_SAME -import android.media.AudioManager.FLAG_SHOW_UI -import android.media.AudioManager.STREAM_MUSIC - -internal class AudioController internal constructor(context: Context) { - - private val manager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager - - fun volumeUp() = manager.adjustStreamVolume(STREAM_MUSIC, ADJUST_RAISE, FLAG_SHOW_UI) - fun volumeDown() = manager.adjustStreamVolume(STREAM_MUSIC, ADJUST_LOWER, FLAG_SHOW_UI) - fun showVolumeSlider() = manager.adjustStreamVolume(STREAM_MUSIC, ADJUST_SAME, FLAG_SHOW_UI) -} \ No newline at end of file diff --git a/app/src/main/java/dev/jdtech/jellyfin/utils/DownloadUtilities.kt b/app/src/main/java/dev/jdtech/jellyfin/utils/DownloadUtilities.kt index c9934314..31536e4f 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/utils/DownloadUtilities.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/utils/DownloadUtilities.kt @@ -241,7 +241,7 @@ fun parseMetadataFile(metadataFile: List): DownloadMetadata { suspend fun syncPlaybackProgress(jellyfinRepository: JellyfinRepository) { val items = loadDownloadedEpisodes() - items.forEach() { + items.forEach { try { val localPlaybackProgress = it.metadata?.playbackPosition val localPlayedPercentage = it.metadata?.playedPercentage diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/AddServerViewModel.kt b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/AddServerViewModel.kt index 8212cc0b..77479286 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/AddServerViewModel.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/AddServerViewModel.kt @@ -80,22 +80,27 @@ constructor( recommended .onCompletion { - if (greatServers.isNotEmpty()) { - connectToServer(greatServers.first()) - } else if (goodServers.isNotEmpty()) { - val issuesString = createIssuesString(goodServers.first()) - Toast.makeText( - application, - issuesString, - Toast.LENGTH_LONG - ).show() - connectToServer(goodServers.first()) - } else if (okServers.isNotEmpty()) { - val okServer = okServers.first() - val issuesString = createIssuesString(okServer) - throw Exception(issuesString) - } else { - throw Exception(resources.getString(R.string.add_server_error_not_found)) + when { + greatServers.isNotEmpty() -> { + connectToServer(greatServers.first()) + } + goodServers.isNotEmpty() -> { + val issuesString = createIssuesString(goodServers.first()) + Toast.makeText( + application, + issuesString, + Toast.LENGTH_LONG + ).show() + connectToServer(goodServers.first()) + } + okServers.isNotEmpty() -> { + val okServer = okServers.first() + val issuesString = createIssuesString(okServer) + throw Exception(issuesString) + } + else -> { + throw Exception(resources.getString(R.string.add_server_error_not_found)) + } } } .collect { recommendedServerInfo -> 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 b686b3c1..2a40a53c 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/EpisodeBottomSheetViewModel.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/EpisodeBottomSheetViewModel.kt @@ -49,15 +49,15 @@ constructor( } var item: BaseItemDto? = null - var runTime: String = "" - var dateString: String = "" + private var runTime: String = "" + private var dateString: String = "" var played: Boolean = false var favorite: Boolean = false - var downloaded: Boolean = false - var downloadEpisode: Boolean = false + private var downloaded: Boolean = false + private var downloadEpisode: Boolean = false var playerItems: MutableList = mutableListOf() - lateinit var downloadRequestItem: DownloadRequestItem + private lateinit var downloadRequestItem: DownloadRequestItem fun loadEpisode(episodeId: UUID) { viewModelScope.launch { @@ -161,9 +161,4 @@ constructor( item.premiereDate.toString() } } - - fun doneDownloadEpisode() { - downloadEpisode = false - downloaded = true - } } \ No newline at end of file