diff --git a/Cargo.lock b/Cargo.lock index 9870bb817f13edfa1828768e03e1f9f806bcf40e..b6b3c161aca6051637c062a6f69328cfee0aa131 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2108,7 +2108,7 @@ dependencies = [ [[package]] name = "triseratops" version = "0.0.1" -source = "git+https://github.com/Holzhaus/triseratops.git?rev=9b71e26f59d15ffe771090c5918cf150ebc7f5c5#9b71e26f59d15ffe771090c5918cf150ebc7f5c5" +source = "git+https://github.com/Holzhaus/triseratops.git?rev=3744aa23862de19999df2a5098a887315298a760#3744aa23862de19999df2a5098a887315298a760" dependencies = [ "base64", "nom", diff --git a/Cargo.toml b/Cargo.toml index f6577eaef431ac41560b162219bb5e03ca8da391..fa3e990f6470ebb5ce41e773454f5ca3669e442f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,7 +24,7 @@ aoide-core-serde = { path = "core-serde" } aoide-media = { path = "media" } aoide-repo = { path = "repo" } aoide-repo-sqlite = { path = "repo-sqlite" } -triseratops = { rev = "9b71e26f59d15ffe771090c5918cf150ebc7f5c5", git = "https://github.com/Holzhaus/triseratops.git" } +triseratops = { rev = "3744aa23862de19999df2a5098a887315298a760", git = "https://github.com/Holzhaus/triseratops.git" } #mp4ameta = { branch = "master", git = "https://github.com/Saecki/rust-mp4ameta.git" } #id3 = { branch = "master", git = "https://github.com/polyfloyd/rust-id3.git" } diff --git a/media/src/fmt/flac/mod.rs b/media/src/fmt/flac/mod.rs index cb47f6420ef67a53c307e2164542a169a5a1af1d..98a283e5d6f208f3a7b01365eab6f694c284e57c 100644 --- a/media/src/fmt/flac/mod.rs +++ b/media/src/fmt/flac/mod.rs @@ -302,6 +302,8 @@ impl import::ImportTrack for ImportTrack { if !track_cues.is_empty() { track.cues = Canonical::tie(track_cues); } + + track.color = serato::read_track_color(&serato_tags); } Ok(track) diff --git a/media/src/fmt/mp3/mod.rs b/media/src/fmt/mp3/mod.rs index 8219b379dee8c8c58abb124a4c770721346bca64..fdc0f3698bbaa0a40a5fc5b8deb5ef2eaa101e15 100644 --- a/media/src/fmt/mp3/mod.rs +++ b/media/src/fmt/mp3/mod.rs @@ -558,6 +558,8 @@ impl import::ImportTrack for ImportTrack { if !track_cues.is_empty() { track.cues = Canonical::tie(track_cues); } + + track.color = serato::read_track_color(&serato_tags); } Ok(track) diff --git a/media/src/fmt/mp4/mod.rs b/media/src/fmt/mp4/mod.rs index 5ff0f8ffb320c834a0eb8896145b156165601f6c..419e52d46bf896ac2d8ce87ce7420b13da0506e6 100644 --- a/media/src/fmt/mp4/mod.rs +++ b/media/src/fmt/mp4/mod.rs @@ -488,6 +488,8 @@ impl import::ImportTrack for ImportTrack { if !track_cues.is_empty() { track.cues = Canonical::tie(track_cues); } + + track.color = serato::read_track_color(&serato_tags); } Ok(track) diff --git a/media/src/fmt/ogg/mod.rs b/media/src/fmt/ogg/mod.rs index 1acaab8c62661673f705bf9cc27d81cb6c60f985..17fb6406a2e663cac120c215841ac01c7bd401d2 100644 --- a/media/src/fmt/ogg/mod.rs +++ b/media/src/fmt/ogg/mod.rs @@ -332,6 +332,8 @@ impl import::ImportTrack for ImportTrack { if !track_cues.is_empty() { track.cues = Canonical::tie(track_cues); } + + track.color = serato::read_track_color(&serato_tags); } Ok(track) diff --git a/media/src/util/serato.rs b/media/src/util/serato.rs index 017a59ea2c29bd3d3e114924b767626f756fa0cc..f828bec99cdf38582a843f7b59fa86181a3176a3 100644 --- a/media/src/util/serato.rs +++ b/media/src/util/serato.rs @@ -23,17 +23,13 @@ use aoide_core::{ CanonicalizeInto as _, }, }; -use triseratops::tag::TagContainer; +use triseratops::tag::{color::Color as SeratoColor, TagContainer}; /// Return a canonical vector of cues found in the tag container. pub fn read_cues(serato_tags: &TagContainer) -> Result> { let mut track_cues = vec![]; for serato_cue in serato_tags.cues() { - let color_code = (serato_cue.color.red as u32) << 16 - | (serato_cue.color.green as u32) << 8 - | serato_cue.color.blue as u32; - let cue = Cue { bank_index: 0, slot_index: Some(serato_cue.index.into()), @@ -41,7 +37,9 @@ pub fn read_cues(serato_tags: &TagContainer) -> Result> { out_position: None, out_mode: None, label: Some(serato_cue.label), - color: Some(Color::Rgb(RgbColor(color_code))), + color: Some(Color::Rgb(RgbColor( + serato_cue.color.into_pro_hotcue_color().into(), + ))), flags: CueFlags::empty(), }; track_cues.push(cue); @@ -69,3 +67,12 @@ pub fn read_cues(serato_tags: &TagContainer) -> Result> { let track_cues = track_cues.canonicalize_into(); Ok(track_cues) } + +pub fn read_track_color(serato_tags: &TagContainer) -> Option { + serato_tags + .track_color() + .and_then(SeratoColor::into_displayed_track_color) + .map(Into::into) + .map(RgbColor) + .map(Color::Rgb) +}