Skip to content

Commit d06afa3

Browse files
authored
Tracks naming fix and minor UI improvements (#2480)
1 parent f674b42 commit d06afa3

1 file changed

Lines changed: 98 additions & 44 deletions

File tree

app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt

Lines changed: 98 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1434,45 +1434,42 @@ class GeneratorPlayer : FullScreenPlayer() {
14341434

14351435
val audioArrayAdapter = ArrayAdapter<String>(ctx, R.layout.sort_bottom_single_choice)
14361436

1437-
audioArrayAdapter.addAll(currentAudioTracks.mapIndexed { index, track ->
1438-
val language = track.language?.let { fromTagToLanguageName(it) ?: it }
1439-
?: track.label
1440-
?: "Audio"
1441-
1442-
val codec = track.sampleMimeType?.let { mimeType ->
1443-
when {
1444-
mimeType.contains("mp4a") || mimeType.contains("aac") -> "aac"
1445-
mimeType.contains("ac-3") || mimeType.contains("ac3") -> "ac3"
1446-
mimeType.contains("eac3-joc") -> "Dolby Atmos"
1447-
mimeType.contains("eac3") -> "eac3"
1448-
mimeType.contains("opus") -> "opus"
1449-
mimeType.contains("vorbis") -> "vorbis"
1450-
mimeType.contains("mp3") || mimeType.contains("mpeg") -> "mp3"
1451-
mimeType.contains("flac") -> "flac"
1452-
mimeType.contains("dts") -> "dts"
1453-
else -> mimeType.substringAfter("/")
1437+
audioArrayAdapter.addAll(
1438+
currentAudioTracks.mapIndexed { _, track ->
1439+
1440+
val language = (
1441+
track.language?.trim()?.let { raw ->
1442+
fromTagToLanguageName(raw)
1443+
?: fromTagToLanguageName(raw.replace('_','-').substringBefore('-').lowercase())
1444+
?: raw
1445+
}
1446+
?: track.label
1447+
?: "Audio"
1448+
).replaceFirstChar { it.uppercaseChar() }
1449+
1450+
val codec = audioCodecName(track.sampleMimeType)
1451+
1452+
val channelCount = track.channelCount
1453+
1454+
val channels = when {
1455+
// May be below 1 or null when unknown
1456+
channelCount == null || channelCount <= 0 -> ""
1457+
channelCount == 1 -> "Mono"
1458+
channelCount == 2 -> "Stereo"
1459+
channelCount == 6 -> "5.1"
1460+
channelCount == 8 -> "7.1"
1461+
else -> "${channelCount}ch"
14541462
}
1455-
} ?: "codec?"
1456-
1457-
1458-
val channels: Int = track.channelCount ?: 0
1459-
val channelConfig = when (channels) {
1460-
1 -> "mono"
1461-
2 -> "stereo"
1462-
6 -> "5.1"
1463-
8 -> "7.1"
1464-
else -> "${channels}Ch"
1465-
}
14661463

1467-
listOfNotNull(
1468-
"[$index]",
1469-
language.replaceFirstChar { it.uppercaseChar() },
1470-
codec.uppercase(),
1471-
channelConfig.replaceFirstChar { it.uppercaseChar() }
1472-
).joinToString("")
1473-
1474-
"[$index] $language $codec $channelConfig"
1475-
})
1464+
listOfNotNull(
1465+
language.takeIf { it.isNotBlank() }?.replaceFirstChar { it.uppercaseChar() },
1466+
channels.takeIf { it.isNotBlank() },
1467+
codec.takeIf { it.isNotBlank() }?.uppercase()
1468+
).joinToString("")
1469+
1470+
1471+
}
1472+
)
14761473

14771474
audioList.adapter = audioArrayAdapter
14781475
audioList.choiceMode = AbsListView.CHOICE_MODE_SINGLE
@@ -1830,6 +1827,42 @@ class GeneratorPlayer : FullScreenPlayer() {
18301827
}
18311828
}
18321829

1830+
1831+
private fun videoCodecName(mime: String?): String? {
1832+
val m = mime?.lowercase() ?: return null
1833+
return when {
1834+
m.contains("avc") || m.contains("h264") -> "AVC"
1835+
m.contains("hevc") || m.contains("h265") -> "HEVC"
1836+
m.contains("av1") -> "AV1"
1837+
m.contains("vp9") -> "VP9"
1838+
m.contains("vp8") -> "VP8"
1839+
"/" in m -> m.substringAfter("/").uppercase()
1840+
else -> m.uppercase()
1841+
}
1842+
}
1843+
1844+
private fun audioCodecName(mime: String?): String {
1845+
val m = mime?.lowercase()?.trim().orEmpty()
1846+
if (m.isBlank()) return ""
1847+
return when {
1848+
m.contains("eac3-joc") -> "Dolby Atmos"
1849+
m.contains("truehd") -> "TrueHD"
1850+
m.contains("eac3") -> "E-AC3"
1851+
m.contains("ac-3") || m.contains("ac3") -> "AC3"
1852+
m.contains("aac") || m.contains("mp4a") -> "AAC"
1853+
m.contains("opus") -> "Opus"
1854+
m.contains("vorbis") -> "Vorbis"
1855+
m.contains("mp3") -> "MP3"
1856+
m.contains("flac") -> "FLAC"
1857+
m.contains("dts") -> "DTS"
1858+
m.contains("pcm") -> "PCM"
1859+
m.contains("alac") -> "ALAC"
1860+
m.contains("amr") -> "AMR"
1861+
m.contains("/") -> m.substringAfter("/").uppercase().takeIf { it.isNotBlank() } ?: ""
1862+
else -> ""
1863+
}
1864+
}
1865+
18331866
private fun updatePlayerInfo() {
18341867
val tracks = player.getVideoTracks()
18351868

@@ -1840,14 +1873,35 @@ class GeneratorPlayer : FullScreenPlayer() {
18401873
val prefs = PreferenceManager.getDefaultSharedPreferences(ctx)
18411874
showMediaInfo = prefs.getBoolean(ctx.getString(R.string.show_media_info_key), false)
18421875

1843-
val videoCodec = videoTrack?.sampleMimeType?.substringAfterLast('/')?.uppercase()
1844-
val audioCodec = audioTrack?.sampleMimeType?.substringAfterLast('/')?.uppercase()
1845-
val language = listOfNotNull(
1846-
audioTrack?.label,
1847-
fromTagToLanguageName(audioTrack?.language)?.let { "[$it]" }
1848-
).joinToString(" ")
1876+
val videoCodec = videoCodecName(videoTrack?.sampleMimeType)
1877+
val audioCodec = audioCodecName(audioTrack?.sampleMimeType)
1878+
val languageName = fromTagToLanguageName(audioTrack?.language)
1879+
val label = audioTrack?.label
1880+
1881+
val channelCount = audioTrack?.channelCount
1882+
1883+
val channels = when {
1884+
// May be below 1 or null when unknown
1885+
channelCount == null || channelCount <= 0 -> ""
1886+
channelCount == 1 -> "Mono"
1887+
channelCount == 2 -> "Stereo"
1888+
channelCount == 6 -> "5.1"
1889+
channelCount == 8 -> "7.1"
1890+
else -> "${channelCount}ch"
1891+
}
18491892

1850-
val stats = arrayOf(videoCodec, audioCodec, language).filter { !it.isNullOrBlank() }.joinToString("")
1893+
val language = languageName?.takeIf { it.isNotBlank() }?.let { lang ->
1894+
label?.takeIf { it.isNotBlank() && !it.equals(lang, true) }
1895+
?.let { lang }
1896+
?: lang
1897+
} ?: label?.takeIf { it.isNotBlank() }
1898+
1899+
val stats = arrayOf(
1900+
videoCodec,
1901+
language,
1902+
channels,
1903+
audioCodec
1904+
).filter { !it.isNullOrBlank() }.joinToString("")
18511905

18521906
playerBinding?.playerVideoInfo?.apply {
18531907
text = stats

0 commit comments

Comments
 (0)