diff --git a/app/phone/src/main/java/dev/jdtech/jellyfin/adapters/EpisodeListAdapter.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/adapters/EpisodeListAdapter.kt index 33ade90c..cc46b57b 100644 --- a/app/phone/src/main/java/dev/jdtech/jellyfin/adapters/EpisodeListAdapter.kt +++ b/app/phone/src/main/java/dev/jdtech/jellyfin/adapters/EpisodeListAdapter.kt @@ -8,6 +8,7 @@ import androidx.core.view.isVisible import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView +import dev.jdtech.jellyfin.core.R as CoreR import dev.jdtech.jellyfin.databinding.EpisodeItemBinding import dev.jdtech.jellyfin.databinding.SeasonHeaderBinding import dev.jdtech.jellyfin.models.EpisodeItem @@ -37,6 +38,13 @@ class EpisodeListAdapter( RecyclerView.ViewHolder(binding.root) { fun bind(episode: FindroidEpisode) { binding.episode = episode + + binding.episodeTitle.text = if (episode.indexNumberEnd == null) { + binding.root.context.getString(CoreR.string.episode_name, episode.indexNumber, episode.name) + } else { + binding.root.context.getString(CoreR.string.episode_name_with_end, episode.indexNumber, episode.indexNumberEnd, episode.name) + } + if (episode.playbackPositionTicks > 0) { binding.progressBar.layoutParams.width = TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, diff --git a/app/phone/src/main/java/dev/jdtech/jellyfin/adapters/HomeEpisodeListAdapter.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/adapters/HomeEpisodeListAdapter.kt index 82be6498..3265ae8c 100644 --- a/app/phone/src/main/java/dev/jdtech/jellyfin/adapters/HomeEpisodeListAdapter.kt +++ b/app/phone/src/main/java/dev/jdtech/jellyfin/adapters/HomeEpisodeListAdapter.kt @@ -40,7 +40,11 @@ class HomeEpisodeListAdapter(private val onClickListener: OnClickListener) : Lis } is FindroidEpisode -> { binding.primaryName.text = item.seriesName - binding.secondaryName.text = parent.resources.getString(CoreR.string.episode_name_extended, item.parentIndexNumber, item.indexNumber, item.name) + binding.secondaryName.text = if (item.indexNumberEnd == null) { + parent.resources.getString(CoreR.string.episode_name_extended, item.parentIndexNumber, item.indexNumber, item.name) + } else { + parent.resources.getString(CoreR.string.episode_name_extended_with_end, item.parentIndexNumber, item.indexNumber, item.indexNumberEnd, item.name) + } } } diff --git a/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/EpisodeBottomSheetFragment.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/EpisodeBottomSheetFragment.kt index 6de4f47a..c6d55f4e 100644 --- a/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/EpisodeBottomSheetFragment.kt +++ b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/EpisodeBottomSheetFragment.kt @@ -259,12 +259,23 @@ class EpisodeBottomSheetFragment : BottomSheetDialogFragment() { false -> binding.itemActions.downloadButton.isVisible = false } - binding.episodeName.text = getString( - CoreR.string.episode_name_extended, - episode.parentIndexNumber, - episode.indexNumber, - episode.name - ) + binding.episodeName.text = if (episode.indexNumberEnd == null) { + getString( + CoreR.string.episode_name_extended, + episode.parentIndexNumber, + episode.indexNumber, + episode.name + ) + } else { + getString( + CoreR.string.episode_name_extended_with_end, + episode.parentIndexNumber, + episode.indexNumber, + episode.indexNumberEnd, + episode.name + ) + } + binding.seriesName.text = episode.seriesName binding.overview.text = episode.overview binding.year.text = formatDateTime(episode.premiereDate) diff --git a/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/ShowFragment.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/ShowFragment.kt index 79ad96b4..a0d8bfaa 100644 --- a/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/ShowFragment.kt +++ b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/ShowFragment.kt @@ -226,12 +226,23 @@ class ShowFragment : Fragment() { binding.writers.text = writersString binding.description.text = item.overview binding.nextUpLayout.isVisible = nextUp != null - binding.nextUpName.text = getString( - CoreR.string.episode_name_extended, - nextUp?.parentIndexNumber, - nextUp?.indexNumber, - nextUp?.name - ) + if (nextUp?.indexNumberEnd == null) { + binding.nextUpName.text = getString( + CoreR.string.episode_name_extended, + nextUp?.parentIndexNumber, + nextUp?.indexNumber, + nextUp?.name + ) + } else { + binding.nextUpName.text = getString( + CoreR.string.episode_name_extended_with_end, + nextUp?.parentIndexNumber, + nextUp?.indexNumber, + nextUp?.indexNumberEnd, + nextUp?.name + ) + } + binding.seasonsLayout.isVisible = seasons.isNotEmpty() val seasonsAdapter = binding.seasonsRecyclerView.adapter as ViewItemListAdapter seasonsAdapter.submitList(seasons) diff --git a/app/phone/src/main/res/layout/episode_item.xml b/app/phone/src/main/res/layout/episode_item.xml index 4ee38eee..34c20ea0 100644 --- a/app/phone/src/main/res/layout/episode_item.xml +++ b/app/phone/src/main/res/layout/episode_item.xml @@ -112,7 +112,6 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="12dp" - android:text="@{String.format(@string/episode_name, episode.indexNumber, episode.name)}" android:textAppearance="@style/TextAppearance.Material3.BodyMedium" app:layout_constraintBottom_toTopOf="@id/episode_desc" app:layout_constraintEnd_toEndOf="parent" diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index 81aae1f7..1554f899 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -45,7 +45,9 @@ Episode watched indicator Downloaded indicator %1$d. %2$s + %1$d-%2$d. %3$s S%1$d:E%2$d - %3$s + S%1$d:E%2$d-%3$d - %4$s Next Up Continue Watching Latest %1$s diff --git a/player/core/src/main/java/dev/jdtech/jellyfin/models/PlayerItem.kt b/player/core/src/main/java/dev/jdtech/jellyfin/models/PlayerItem.kt index ce0fa4bb..15551338 100644 --- a/player/core/src/main/java/dev/jdtech/jellyfin/models/PlayerItem.kt +++ b/player/core/src/main/java/dev/jdtech/jellyfin/models/PlayerItem.kt @@ -13,5 +13,6 @@ data class PlayerItem( val mediaSourceUri: String = "", val parentIndexNumber: Int? = null, val indexNumber: Int? = null, + val indexNumberEnd: Int? = null, val externalSubtitles: List = emptyList() ) : Parcelable diff --git a/player/video/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerActivityViewModel.kt b/player/video/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerActivityViewModel.kt index 833440a8..dae670a1 100644 --- a/player/video/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerActivityViewModel.kt +++ b/player/video/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerActivityViewModel.kt @@ -245,8 +245,12 @@ constructor( .let { item -> if (appPreferences.displayExtendedTitle && item.parentIndexNumber != null && item.indexNumber != null && item.name != null ) - _currentItemTitle.value = + _currentItemTitle.value = if (item.indexNumberEnd == null) { "S${item.parentIndexNumber}:E${item.indexNumber} - ${item.name}" + } else { + "S${item.parentIndexNumber}:E${item.indexNumber}-${item.indexNumberEnd} - ${item.name}" + } + else _currentItemTitle.value = item.name.orEmpty() diff --git a/player/video/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerViewModel.kt b/player/video/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerViewModel.kt index 4193285d..5d2c2017 100644 --- a/player/video/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerViewModel.kt +++ b/player/video/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerViewModel.kt @@ -173,6 +173,7 @@ class PlayerViewModel @Inject internal constructor( playbackPosition = playbackPosition, parentIndexNumber = if (this is FindroidEpisode) parentIndexNumber else null, indexNumber = if (this is FindroidEpisode) indexNumber else null, + indexNumberEnd = if (this is FindroidEpisode) indexNumberEnd else null, externalSubtitles = externalSubtitles ) }