diff options
| author | metamuffin <metamuffin@disroot.org> | 2026-03-12 16:54:29 +0100 |
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2026-03-12 16:54:29 +0100 |
| commit | 1fd039e1da489954d4115189877d51b62b8e9d6a (patch) | |
| tree | 76df48b2d6f4ca30a647e6c3c00c0b14da1cf216 | |
| parent | b23d8a2f7786119fc49bb2d531618c78344b8357 (diff) | |
| download | jellything-1fd039e1da489954d4115189877d51b62b8e9d6a.tar jellything-1fd039e1da489954d4115189877d51b62b8e9d6a.tar.bz2 jellything-1fd039e1da489954d4115189877d51b62b8e9d6a.tar.zst | |
| -rw-r--r-- | locale/en.ini | 8 | ||||
| -rw-r--r-- | server/src/routes/admin/import.rs | 14 | ||||
| -rw-r--r-- | server/src/routes/node.rs | 2 | ||||
| -rw-r--r-- | ui/src/components/node_page.rs | 56 |
4 files changed, 66 insertions, 14 deletions
diff --git a/locale/en.ini b/locale/en.ini index b1b295c..80da660 100644 --- a/locale/en.ini +++ b/locale/en.ini @@ -48,6 +48,7 @@ node.watchlist.unset=Remove from Watchlist node.update_rating=Update Rating node.credited=Featured node.similar=Similar Media +track_quality=Quality tag.chpt=Chapters tag.cred.kind.arra=Arranger @@ -142,6 +143,13 @@ tag.stsz=Size on Filesystem tag.tag1=Tags tag.tgln=Tagline tag.titl=Title +tag.trak.codc=Codec +tag.trak.kind.audi=Audio +tag.trak.kind.text=Subtitle +tag.trak.kind.unkn=Unknown +tag.trak.kind.vide=Video +tag.trak.kind=Type +tag.trak.name=Name tag.trak=Tracks tag.Uadm=Admin tag.Ulgn=Login diff --git a/server/src/routes/admin/import.rs b/server/src/routes/admin/import.rs index 31e7d70..f58901a 100644 --- a/server/src/routes/admin/import.rs +++ b/server/src/routes/admin/import.rs @@ -10,10 +10,10 @@ use jellyimport::{ ImportConfig, import_wrap, is_importing, reporting::{IMPORT_ERRORS, IMPORT_PROGRESS}, }; -use jellyui::{components::admin::AdminImport, tr}; +use jellyui::components::admin::AdminImport; use rocket::{ get, post, - response::{Flash, Redirect, content::RawHtml}, + response::{Redirect, content::RawHtml}, }; use rocket_ws::{Message, Stream, WebSocket}; use std::time::Duration; @@ -37,10 +37,7 @@ pub async fn r_admin_import(ri: RequestInfo<'_>) -> MyResult<RawHtml<String>> { } #[post("/admin/import?<incremental>")] -pub async fn r_admin_import_post( - ri: RequestInfo<'_>, - incremental: bool, -) -> MyResult<Flash<Redirect>> { +pub async fn r_admin_import_post(ri: RequestInfo<'_>, incremental: bool) -> MyResult<Redirect> { ri.require_admin()?; spawn(async move { let _ = import_wrap( @@ -53,10 +50,7 @@ pub async fn r_admin_import_post( ) .await; }); - Ok(Flash::success( - Redirect::to(u_admin_import()), - tr(ri.lang, "admin.import_success"), - )) + Ok(Redirect::to(u_admin_import())) } #[get("/admin/import", rank = 1)] diff --git a/server/src/routes/node.rs b/server/src/routes/node.rs index d8d9ba5..506d771 100644 --- a/server/src/routes/node.rs +++ b/server/src/routes/node.rs @@ -30,10 +30,10 @@ pub fn r_node(ri: RequestInfo<'_>, slug: &str) -> MyResult<RawHtml<String>> { ..Default::default() })? { let n = txn.get(row)?.unwrap(); + nku = Some(create_nku(txn, row)?); children = c_children(txn, row, &n)?; credits = c_credits(txn, &n)?; credited = c_credited(txn, row)?; - nku = Some(create_nku(txn, row)?); } Ok(()) })?; 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(), + } +} |