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
)
}