live_provenance: name the track's media kind TrackKind #397

Merged
dcharlot merged 1 commit from fix/track-kind-name into main 2026-10-21 16:06:26 -04:00

View file

@ -376,9 +376,9 @@ fn manifest_uuid(s: &str) -> Option<&str> {
ok.then_some(u) ok.then_some(u)
} }
/// A media kind of live-rooms §6.1. /// A track's media kind, live-rooms §6.1.
#[derive(Clone, Copy, Debug, PartialEq, Eq)] #[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum MediaKind { pub enum TrackKind {
Audio, Audio,
Video, Video,
Screen, Screen,
@ -386,7 +386,7 @@ pub enum MediaKind {
/// The media kind of a track's rendering `<room>-<owner>-<kind>--<layer>` (§5.1), whose /// The media kind of a track's rendering `<room>-<owner>-<kind>--<layer>` (§5.1), whose
/// room field is `room`. /// room field is `room`.
pub fn track_kind(track: &str, room: &[u8; 32]) -> Option<MediaKind> { pub fn track_kind(track: &str, room: &[u8; 32]) -> Option<TrackKind> {
let (ns, layer) = track.split_once("--")?; let (ns, layer) = track.split_once("--")?;
let layer_ok = !layer.is_empty() && layer.bytes().all(|c| c.is_ascii_digit()) && (layer == "0" || !layer.starts_with('0')); let layer_ok = !layer.is_empty() && layer.bytes().all(|c| c.is_ascii_digit()) && (layer == "0" || !layer.starts_with('0'));
let f: Vec<&str> = ns.split('-').collect(); let f: Vec<&str> = ns.split('-').collect();
@ -397,9 +397,9 @@ pub fn track_kind(track: &str, room: &[u8; 32]) -> Option<MediaKind> {
return None; return None;
} }
match *kind { match *kind {
"audio" => Some(MediaKind::Audio), "audio" => Some(TrackKind::Audio),
"video" => Some(MediaKind::Video), "video" => Some(TrackKind::Video),
"screen" => Some(MediaKind::Screen), "screen" => Some(TrackKind::Screen),
_ => None, _ => None,
} }
} }
@ -645,7 +645,7 @@ pub fn disclosure(id: &Identity) -> (&'static str, Vec<([u8; 32], bool)>) {
Identity::Track(s) => match &s.label { Identity::Track(s) => match &s.label {
Label::Own { origin: o, model } => { Label::Own { origin: o, model } => {
let term = match (*o, track_kind(&s.track, &s.room)) { let term = match (*o, track_kind(&s.track, &s.room)) {
(origin::HUMAN, Some(MediaKind::Screen)) => "screenCapture", (origin::HUMAN, Some(TrackKind::Screen)) => "screenCapture",
(origin::HUMAN, _) => "digitalCapture", (origin::HUMAN, _) => "digitalCapture",
(origin::MACHINE, _) => "trainedAlgorithmicMedia", (origin::MACHINE, _) => "trainedAlgorithmicMedia",
_ => "compositeWithTrainedAlgorithmicMedia", _ => "compositeWithTrainedAlgorithmicMedia",
@ -654,7 +654,7 @@ pub fn disclosure(id: &Identity) -> (&'static str, Vec<([u8; 32], bool)>) {
} }
Label::Inputs(v) => { Label::Inputs(v) => {
let capture = |i: &Input| { let capture = |i: &Input| {
i.origin == origin::HUMAN && matches!(track_kind(&i.track, &s.room), Some(MediaKind::Audio | MediaKind::Video)) i.origin == origin::HUMAN && matches!(track_kind(&i.track, &s.room), Some(TrackKind::Audio | TrackKind::Video))
}; };
let term = if v.iter().all(capture) { let term = if v.iter().all(capture) {
"compositeCapture" "compositeCapture"
@ -1777,8 +1777,8 @@ mod tests {
fn a_track_rendering_names_its_kind() { fn a_track_rendering_names_its_kind() {
let room = [0xab; 32]; let room = [0xab; 32];
let r = hex(&room); let r = hex(&room);
assert_eq!(track_kind(&format!("{r}-{}-video--0", hex(&[1; 32])), &room), Some(MediaKind::Video)); assert_eq!(track_kind(&format!("{r}-{}-video--0", hex(&[1; 32])), &room), Some(TrackKind::Video));
assert_eq!(track_kind(&format!("{r}-_stage-screen--1"), &room), Some(MediaKind::Screen)); assert_eq!(track_kind(&format!("{r}-_stage-screen--1"), &room), Some(TrackKind::Screen));
assert_eq!(track_kind(&format!("{r}-_stage-events--0"), &room), None); assert_eq!(track_kind(&format!("{r}-_stage-events--0"), &room), None);
assert_eq!(track_kind(&format!("{r}-_stage-video--01"), &room), None); assert_eq!(track_kind(&format!("{r}-_stage-video--01"), &room), None);
assert_eq!(track_kind(&format!("{}-_stage-video--0", hex(&[0xac; 32])), &room), None); assert_eq!(track_kind(&format!("{}-_stage-video--0", hex(&[0xac; 32])), &room), None);