diff options
Diffstat (limited to 'ui/src/components/node_page.rs')
| -rw-r--r-- | ui/src/components/node_page.rs | 56 |
1 files changed, 53 insertions, 3 deletions
diff --git a/ui/src/components/node_page.rs b/ui/src/components/node_page.rs index 06d8b55..d6aeb33 100644 --- a/ui/src/components/node_page.rs +++ b/ui/src/components/node_page.rs @@ -96,9 +96,20 @@ markup::define! { @if node.has(NO_TRACK.0) { details { summary { @tr(ri.lang, "tag.trak") } - ol { @for track in node.iter(NO_TRACK) { - li { "track" @track.get(TR_NAME) } - }} + table { + tr { + th { @tr(ri.lang, "tag.trak.kind") } + th { @tr(ri.lang, "tag.trak.name") } + th { @tr(ri.lang, "track_quality") } + th { @tr(ri.lang, "tag.trak.codc") } + } + @for track in node.iter(NO_TRACK) { tr { + td { @tr(ri.lang, &format!("tag.trak.kind.{}", track.get(TR_KIND).unwrap_or(TRKIND_UNKNOWN))) } + td { @track.get(TR_NAME).unwrap_or("") } + td { @track_quality(track) } + td { @codec_pretty_name(track.get(TR_CODEC).unwrap_or("")) } + }} + } } } @if let Some(idents) = node.get(NO_IDENTIFIERS) { @@ -239,3 +250,42 @@ fn external_id_url(key: Tag, value: &str) -> Option<String> { _ => return None, }) } + +fn codec_pretty_name(s: &str) -> &str { + match s { + "A_OPUS" => "Opus", + "A_VORBIS" => "Vorbis", + "V_MPEG4/ISO/AVC" => "AVC", + "V_MPEGH/ISO/HEVC" => "HEVC", + "D_WEBVTT/SUBTITLES" => "WebVTT", + "S_TEXT/ASS" => "ASS", + "S_TEXT/UTF8" => "UTF-8 Plain", + "S_HDMV/PGS" => "HDMV PGS", + "S_VOBSUB" => "VobSub", + x if let Some(k) = x.strip_prefix("V_") => k, + x if let Some(k) = x.strip_prefix("A_") => k, + x => x, + } +} + +fn track_quality(track: &Object) -> String { + match track.get(TR_KIND).unwrap_or(TRKIND_UNKNOWN) { + TRKIND_AUDIO => format!( + "{}ch {:.1}kHz", + track.get(TR_CHANNELS).unwrap_or(1), + track.get(TR_RATE).unwrap_or(0.) / 1000. + ), + TRKIND_VIDEO => format!( + "{}x{} {:.1}fps{}", + track.get(TR_PIXEL_WIDTH).unwrap_or(0), + track.get(TR_PIXEL_HEIGHT).unwrap_or(0), + track.get(TR_RATE).unwrap_or(0.), + if let Some(d) = track.get(TR_BIT_DEPTH) { + format!(" {d}bit") + } else { + String::new() + }, + ), + _ => "".to_string(), + } +} |