From 1db48334ab65b1a4bdf081f095b19ef6e461aceb Mon Sep 17 00:00:00 2001 From: damontecres <154766448+damontecres@users.noreply.github.com> Date: Tue, 28 Oct 2025 13:07:30 -0400 Subject: [PATCH] Sort & format subtitle download options (#88) Sorts the subtitle download options by community rating and downloads. Also abbreviates the download count if it's large (eg 5133->5.1k). --- .../ui/playback/DownloadSubtitlesDialog.kt | 3 ++- .../wholphin/ui/playback/PlaybackViewModel.kt | 15 +++++++++++---- .../damontecres/wholphin/util/Formatting.kt | 19 +++++++++++++++++++ 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/playback/DownloadSubtitlesDialog.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/playback/DownloadSubtitlesDialog.kt index d6bef681..ab19bbf6 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/playback/DownloadSubtitlesDialog.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/playback/DownloadSubtitlesDialog.kt @@ -42,6 +42,7 @@ import com.github.damontecres.wholphin.ui.components.EditTextBox import com.github.damontecres.wholphin.ui.components.ErrorMessage import com.github.damontecres.wholphin.ui.ifElse import com.github.damontecres.wholphin.ui.tryRequestFocus +import com.github.damontecres.wholphin.util.abbreviateNumber import org.jellyfin.sdk.model.api.RemoteSubtitleInfo @Composable @@ -200,7 +201,7 @@ fun convertRemoteSubtitles( if (op.forced == true) { add("Forced") } - add("${op.downloadCount ?: 0} downloads") + add("${abbreviateNumber(op.downloadCount ?: 0)} downloads") } Text( text = strings.joinToString(" - "), diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/playback/PlaybackViewModel.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/playback/PlaybackViewModel.kt index f915cf0c..67925aae 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/playback/PlaybackViewModel.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/playback/PlaybackViewModel.kt @@ -836,10 +836,17 @@ class PlaybackViewModel try { currentItemPlayback.value?.itemId?.let { Timber.v("Searching for remote subtitles for %s", it) - val results by api.subtitleApi.searchRemoteSubtitles( - itemId = it, - language = language, - ) + val results = + api.subtitleApi + .searchRemoteSubtitles( + itemId = it, + language = language, + ).content + .sortedWith( + compareByDescending { it.communityRating } + .thenByDescending { it.downloadCount }, + ) + subtitleSearch.setValueOnMain(SubtitleSearch.Success(results)) } } catch (ex: Exception) { diff --git a/app/src/main/java/com/github/damontecres/wholphin/util/Formatting.kt b/app/src/main/java/com/github/damontecres/wholphin/util/Formatting.kt index b8810585..7bb3fbf5 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/util/Formatting.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/util/Formatting.kt @@ -15,6 +15,7 @@ import org.jellyfin.sdk.model.api.MediaStream import org.jellyfin.sdk.model.api.MediaStreamType import java.time.LocalDateTime import java.time.format.DateTimeFormatter +import java.util.Locale /** * Format a [LocalDateTime] as `Aug 24, 2000` @@ -108,3 +109,21 @@ fun getSubtitleDisplay( formatSubtitleLang(it.mediaStreams) } } + +private val abbrevSuffixes = listOf("", "K", "M", "B") + +/** + * Format a number by abbreviation, eg 5533 => 5.5K + */ +fun abbreviateNumber(number: Int): String { + if (number < 1000) { + return number.toString() + } + var unit = 0 + var count = number.toDouble() + while (count >= 1000 && unit + 1 < abbrevSuffixes.size) { + count /= 1000 + unit++ + } + return String.format(Locale.getDefault(), "%.1f%s", count, abbrevSuffixes[unit]) +}