aboutsummaryrefslogtreecommitdiff
path: root/ui/src/components/node_page.rs
diff options
context:
space:
mode:
Diffstat (limited to 'ui/src/components/node_page.rs')
-rw-r--r--ui/src/components/node_page.rs56
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(),
+ }
+}