From 5c94aa746b728c0b5c42c047abae8a7661413b7c Mon Sep 17 00:00:00 2001 From: Wojciech Kozlowski Date: Wed, 10 May 2023 23:38:24 +0200 Subject: [PATCH] Replace TrackFormat with a Quality field --- src/database/json/mod.rs | 13 +- src/lib.rs | 6 +- src/library/beets/executor.rs | 2 +- src/library/beets/mod.rs | 31 ++--- src/testlib.rs | 26 ++-- src/tui/ui.rs | 10 +- tests/files/database/database.json | 2 +- tests/lib.rs | 201 ++++++++++++++++++----------- 8 files changed, 175 insertions(+), 116 deletions(-) diff --git a/src/database/json/mod.rs b/src/database/json/mod.rs index 32abaa0..ee4c66e 100644 --- a/src/database/json/mod.rs +++ b/src/database/json/mod.rs @@ -61,7 +61,7 @@ mod tests { use super::*; - use crate::{tests::COLLECTION, Artist, ArtistId, TrackFormat}; + use crate::{tests::COLLECTION, Artist, ArtistId, Quality}; fn artist_to_json(artist: &Artist) -> String { let album_artist = &artist.id.name; @@ -82,9 +82,12 @@ mod tests { } let track_artist = track_artist.join(","); - let track_format: &'static str = match track.format { - TrackFormat::Flac => stringify!(Flac), - TrackFormat::Mp3 => stringify!(Mp3), + let quality_field = match track.quality { + Quality::Flac => format!("\"quality\":\"{format}\"", format = stringify!(Flac)), + Quality::Mp3(bitrate) => format!( + "\"quality\":{{\"{format}\":{bitrate}}}", + format = stringify!(Mp3) + ), }; tracks.push(format!( @@ -92,7 +95,7 @@ mod tests { \"number\":{track_number},\ \"title\":\"{track_title}\",\ \"artist\":[{track_artist}],\ - \"format\":\"{track_format}\"\ + {quality_field}\ }}" )); } diff --git a/src/lib.rs b/src/lib.rs index 768fab4..fad5c4e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -15,9 +15,9 @@ pub type Mbid = Uuid; /// The track file format. #[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)] -pub enum TrackFormat { +pub enum Quality { Flac, - Mp3, + Mp3(u32), } /// A single track on an album. @@ -26,7 +26,7 @@ pub struct Track { pub number: u32, pub title: String, pub artist: Vec, - pub format: TrackFormat, + pub quality: Quality, } /// The album identifier. diff --git a/src/library/beets/executor.rs b/src/library/beets/executor.rs index 434b89c..50fa943 100644 --- a/src/library/beets/executor.rs +++ b/src/library/beets/executor.rs @@ -8,7 +8,7 @@ use std::{ str, }; -use super::{IBeetsLibraryExecutor, Error}; +use super::{Error, IBeetsLibraryExecutor}; const BEET_DEFAULT: &str = "beet"; diff --git a/src/library/beets/mod.rs b/src/library/beets/mod.rs index eccfb49..41934e6 100644 --- a/src/library/beets/mod.rs +++ b/src/library/beets/mod.rs @@ -9,7 +9,7 @@ use std::{ #[cfg(test)] use mockall::automock; -use crate::{Album, AlbumId, Artist, ArtistId, Track, TrackFormat}; +use crate::{Album, AlbumId, Artist, ArtistId, Quality, Track}; use super::{Error, Field, ILibrary, Query}; @@ -37,7 +37,9 @@ const LIST_FORMAT_ARG: &str = concat!( list_format_separator!(), "$artist", list_format_separator!(), - "$format" + "$format", + list_format_separator!(), + "$bitrate" ); const TRACK_FORMAT_FLAC: &str = "FLAC"; const TRACK_FORMAT_MP3: &str = "MP3"; @@ -127,7 +129,7 @@ impl ILibraryPrivate for BeetsLibrary { } let split: Vec<&str> = line.split(LIST_FORMAT_SEPARATOR).collect(); - if split.len() != 7 { + if split.len() != 8 { return Err(Error::Invalid(line.to_string())); } @@ -138,6 +140,7 @@ impl ILibraryPrivate for BeetsLibrary { let track_title = split[4].to_string(); let track_artist = split[5].to_string(); let track_format = split[6].to_string(); + let track_bitrate = split[7].trim_end_matches("kbps").parse::()?; let artist_id = ArtistId { name: album_artist }; @@ -150,9 +153,9 @@ impl ILibraryPrivate for BeetsLibrary { number: track_number, title: track_title, artist: track_artist.split("; ").map(|s| s.to_owned()).collect(), - format: match track_format.as_ref() { - TRACK_FORMAT_FLAC => TrackFormat::Flac, - TRACK_FORMAT_MP3 => TrackFormat::Mp3, + quality: match track_format.as_ref() { + TRACK_FORMAT_FLAC => Quality::Flac, + TRACK_FORMAT_MP3 => Quality::Mp3(track_bitrate), _ => return Err(Error::Invalid(line.to_string())), }, }; @@ -219,14 +222,15 @@ mod tests { let track_number = &track.number; let track_title = &track.title; let track_artist = &track.artist.join("; "); - let track_format = match track.format { - TrackFormat::Flac => TRACK_FORMAT_FLAC, - TrackFormat::Mp3 => TRACK_FORMAT_MP3, + let (track_format, track_bitrate) = match track.quality { + Quality::Flac => (TRACK_FORMAT_FLAC, 1411), + Quality::Mp3(bitrate) => (TRACK_FORMAT_MP3, bitrate), }; strings.push(format!( "{album_artist}{0}{album_year}{0}{album_title}{0}\ - {track_number}{0}{track_title}{0}{track_artist}{0}{track_format}", + {track_number}{0}{track_title}{0}\ + {track_artist}{0}{track_format}{0}{track_bitrate}kbps", LIST_FORMAT_SEPARATOR, )); } @@ -453,11 +457,8 @@ mod tests { .split(LIST_FORMAT_SEPARATOR) .map(|s| s.to_owned()) .collect::>(); - invalid_string.last_mut().unwrap().clear(); - invalid_string - .last_mut() - .unwrap() - .push_str("invalid format"); + invalid_string[6].clear(); + invalid_string[6].push_str("invalid format"); let invalid_string = invalid_string.join(LIST_FORMAT_SEPARATOR); output[2] = invalid_string.clone(); let result = Ok(output); diff --git a/src/testlib.rs b/src/testlib.rs index cd45baa..9f628b0 100644 --- a/src/testlib.rs +++ b/src/testlib.rs @@ -16,7 +16,7 @@ macro_rules! collection { number: 1, title: "track a.a.1".to_string(), artist: vec!["artist a.a.1".to_string()], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 2, @@ -25,13 +25,13 @@ macro_rules! collection { "artist a.a.2.1".to_string(), "artist a.a.2.2".to_string(), ], - format: TrackFormat::Mp3, + quality: Quality::Mp3(320), }, Track { number: 3, title: "track a.a.3".to_string(), artist: vec!["artist a.a.3".to_string()], - format: TrackFormat::Flac, + quality: Quality::Flac, }, ], }, @@ -45,13 +45,13 @@ macro_rules! collection { number: 1, title: "track a.b.1".to_string(), artist: vec!["artist a.b.1".to_string()], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 2, title: "track a.b.2".to_string(), artist: vec!["artist a.b.2".to_string()], - format: TrackFormat::Flac, + quality: Quality::Flac, }, ], }, @@ -72,7 +72,7 @@ macro_rules! collection { number: 1, title: "track b.a.1".to_string(), artist: vec!["artist b.a.1".to_string()], - format: TrackFormat::Mp3, + quality: Quality::Mp3(190), }, Track { number: 2, @@ -81,7 +81,7 @@ macro_rules! collection { "artist b.a.2.1".to_string(), "artist b.a.2.2".to_string(), ], - format: TrackFormat::Mp3, + quality: Quality::Mp3(120), }, ], }, @@ -95,7 +95,7 @@ macro_rules! collection { number: 1, title: "track b.b.1".to_string(), artist: vec!["artist b.b.1".to_string()], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 2, @@ -104,7 +104,7 @@ macro_rules! collection { "artist b.b.2.1".to_string(), "artist b.b.2.2".to_string(), ], - format: TrackFormat::Mp3, + quality: Quality::Mp3(320), }, ], }, @@ -125,7 +125,7 @@ macro_rules! collection { number: 1, title: "track c.a.1".to_string(), artist: vec!["artist c.a.1".to_string()], - format: TrackFormat::Mp3, + quality: Quality::Mp3(320), }, Track { number: 2, @@ -134,7 +134,7 @@ macro_rules! collection { "artist c.a.2.1".to_string(), "artist c.a.2.2".to_string(), ], - format: TrackFormat::Mp3, + quality: Quality::Mp3(120), }, ], }, @@ -148,7 +148,7 @@ macro_rules! collection { number: 1, title: "track c.b.1".to_string(), artist: vec!["artist c.b.1".to_string()], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 2, @@ -157,7 +157,7 @@ macro_rules! collection { "artist c.b.2.1".to_string(), "artist c.b.2.2".to_string(), ], - format: TrackFormat::Flac, + quality: Quality::Flac, }, ], }, diff --git a/src/tui/ui.rs b/src/tui/ui.rs index 1fdc1cf..07211dd 100644 --- a/src/tui/ui.rs +++ b/src/tui/ui.rs @@ -1,4 +1,4 @@ -use musichoard::{Album, Artist, Collection, Track, TrackFormat}; +use musichoard::{Album, Artist, Collection, Quality, Track}; use ratatui::{ backend::Backend, layout::{Alignment, Rect}, @@ -422,11 +422,11 @@ impl<'a, 'b> TrackState<'a, 'b> { .map(|t| t.artist.join("; ")) .unwrap_or_else(|| "".to_string()), track - .map(|t| match t.format { - TrackFormat::Flac => "FLAC", - TrackFormat::Mp3 => "MP3", + .map(|t| match t.quality { + Quality::Flac => "FLAC".to_string(), + Quality::Mp3(bitrate) => format!("MP3 {bitrate}"), }) - .unwrap_or(""), + .unwrap_or_else(|| "".to_string()), )); TrackState { diff --git a/tests/files/database/database.json b/tests/files/database/database.json index e32a8bc..25f2810 100644 --- a/tests/files/database/database.json +++ b/tests/files/database/database.json @@ -1 +1 @@ -[{"id":{"name":"Аркона"},"albums":[{"id":{"year":2011,"title":"Slovo"},"tracks":[{"number":1,"title":"Az’","artist":["Аркона"],"format":"Flac"},{"number":2,"title":"Arkaim","artist":["Аркона"],"format":"Flac"},{"number":3,"title":"Bol’no mne","artist":["Аркона"],"format":"Flac"},{"number":4,"title":"Leshiy","artist":["Аркона"],"format":"Flac"},{"number":5,"title":"Zakliatie","artist":["Аркона"],"format":"Flac"},{"number":6,"title":"Predok","artist":["Аркона"],"format":"Flac"},{"number":7,"title":"Nikogda","artist":["Аркона"],"format":"Flac"},{"number":8,"title":"Tam za tumanami","artist":["Аркона"],"format":"Flac"},{"number":9,"title":"Potomok","artist":["Аркона"],"format":"Flac"},{"number":10,"title":"Slovo","artist":["Аркона"],"format":"Flac"},{"number":11,"title":"Odna","artist":["Аркона"],"format":"Flac"},{"number":12,"title":"Vo moiom sadochke…","artist":["Аркона"],"format":"Flac"},{"number":13,"title":"Stenka na stenku","artist":["Аркона"],"format":"Flac"},{"number":14,"title":"Zimushka","artist":["Аркона"],"format":"Flac"}]}]},{"id":{"name":"Eluveitie"},"albums":[{"id":{"year":2008,"title":"Slania"},"tracks":[{"number":1,"title":"Samon","artist":["Eluveitie"],"format":"Flac"},{"number":2,"title":"Primordial Breath","artist":["Eluveitie"],"format":"Flac"},{"number":3,"title":"Inis Mona","artist":["Eluveitie"],"format":"Flac"},{"number":4,"title":"Gray Sublime Archon","artist":["Eluveitie"],"format":"Flac"},{"number":5,"title":"Anagantios","artist":["Eluveitie"],"format":"Flac"},{"number":6,"title":"Bloodstained Ground","artist":["Eluveitie"],"format":"Flac"},{"number":7,"title":"The Somber Lay","artist":["Eluveitie"],"format":"Flac"},{"number":8,"title":"Slanias Song","artist":["Eluveitie"],"format":"Flac"},{"number":9,"title":"Giamonios","artist":["Eluveitie"],"format":"Flac"},{"number":10,"title":"Tarvos","artist":["Eluveitie"],"format":"Flac"},{"number":11,"title":"Calling the Rain","artist":["Eluveitie"],"format":"Flac"},{"number":12,"title":"Elembivos","artist":["Eluveitie"],"format":"Flac"}]},{"id":{"year":2004,"title":"Vên [re‐recorded]"},"tracks":[{"number":1,"title":"Verja Urit an Bitus","artist":["Eluveitie"],"format":"Flac"},{"number":2,"title":"Uis Elveti","artist":["Eluveitie"],"format":"Flac"},{"number":3,"title":"Ôrô","artist":["Eluveitie"],"format":"Flac"},{"number":4,"title":"Lament","artist":["Eluveitie"],"format":"Flac"},{"number":5,"title":"Druid","artist":["Eluveitie"],"format":"Flac"},{"number":6,"title":"Jêzaïg","artist":["Eluveitie"],"format":"Flac"}]}]},{"id":{"name":"Frontside"},"albums":[{"id":{"year":2001,"title":"…nasze jest królestwo, potęga i chwała na wieki…"},"tracks":[{"number":1,"title":"Intro = Chaos","artist":["Frontside"],"format":"Flac"},{"number":2,"title":"Modlitwa","artist":["Frontside"],"format":"Flac"},{"number":3,"title":"Długa droga z piekła","artist":["Frontside"],"format":"Flac"},{"number":4,"title":"Synowie ognia","artist":["Frontside"],"format":"Flac"},{"number":5,"title":"1902","artist":["Frontside"],"format":"Flac"},{"number":6,"title":"Krew za krew","artist":["Frontside"],"format":"Flac"},{"number":7,"title":"Kulminacja","artist":["Frontside"],"format":"Flac"},{"number":8,"title":"Judasz","artist":["Frontside"],"format":"Flac"},{"number":9,"title":"Więzy","artist":["Frontside"],"format":"Flac"},{"number":10,"title":"Zagubione dusze","artist":["Frontside"],"format":"Flac"},{"number":11,"title":"Linia życia","artist":["Frontside"],"format":"Flac"}]}]},{"id":{"name":"Metallica"},"albums":[{"id":{"year":1984,"title":"Ride the Lightning"},"tracks":[{"number":1,"title":"Fight Fire with Fire","artist":["Metallica"],"format":"Flac"},{"number":2,"title":"Ride the Lightning","artist":["Metallica"],"format":"Flac"},{"number":3,"title":"For Whom the Bell Tolls","artist":["Metallica"],"format":"Flac"},{"number":4,"title":"Fade to Black","artist":["Metallica"],"format":"Flac"},{"number":5,"title":"Trapped under Ice","artist":["Metallica"],"format":"Flac"},{"number":6,"title":"Escape","artist":["Metallica"],"format":"Flac"},{"number":7,"title":"Creeping Death","artist":["Metallica"],"format":"Flac"},{"number":8,"title":"The Call of Ktulu","artist":["Metallica"],"format":"Flac"}]},{"id":{"year":1999,"title":"S&M"},"tracks":[{"number":1,"title":"The Ecstasy of Gold","artist":["Metallica"],"format":"Flac"},{"number":2,"title":"The Call of Ktulu","artist":["Metallica"],"format":"Flac"},{"number":3,"title":"Master of Puppets","artist":["Metallica"],"format":"Flac"},{"number":4,"title":"Of Wolf and Man","artist":["Metallica"],"format":"Flac"},{"number":5,"title":"The Thing That Should Not Be","artist":["Metallica"],"format":"Flac"},{"number":6,"title":"Fuel","artist":["Metallica"],"format":"Flac"},{"number":7,"title":"The Memory Remains","artist":["Metallica"],"format":"Flac"},{"number":8,"title":"No Leaf Clover","artist":["Metallica"],"format":"Flac"},{"number":9,"title":"Hero of the Day","artist":["Metallica"],"format":"Flac"},{"number":10,"title":"Devil’s Dance","artist":["Metallica"],"format":"Flac"},{"number":11,"title":"Bleeding Me","artist":["Metallica"],"format":"Flac"},{"number":12,"title":"Nothing Else Matters","artist":["Metallica"],"format":"Flac"},{"number":13,"title":"Until It Sleeps","artist":["Metallica"],"format":"Flac"},{"number":14,"title":"For Whom the Bell Tolls","artist":["Metallica"],"format":"Flac"},{"number":15,"title":"−Human","artist":["Metallica"],"format":"Flac"},{"number":16,"title":"Wherever I May Roam","artist":["Metallica"],"format":"Flac"},{"number":17,"title":"Outlaw Torn","artist":["Metallica"],"format":"Flac"},{"number":18,"title":"Sad but True","artist":["Metallica"],"format":"Flac"},{"number":19,"title":"One","artist":["Metallica"],"format":"Flac"},{"number":20,"title":"Enter Sandman","artist":["Metallica"],"format":"Flac"},{"number":21,"title":"Battery","artist":["Metallica"],"format":"Flac"}]}]}] \ No newline at end of file +[{"id":{"name":"Аркона"},"albums":[{"id":{"year":2011,"title":"Slovo"},"tracks":[{"number":1,"title":"Az’","artist":["Аркона"],"quality":"Flac"},{"number":2,"title":"Arkaim","artist":["Аркона"],"quality":"Flac"},{"number":3,"title":"Bol’no mne","artist":["Аркона"],"quality":"Flac"},{"number":4,"title":"Leshiy","artist":["Аркона"],"quality":"Flac"},{"number":5,"title":"Zakliatie","artist":["Аркона"],"quality":"Flac"},{"number":6,"title":"Predok","artist":["Аркона"],"quality":"Flac"},{"number":7,"title":"Nikogda","artist":["Аркона"],"quality":"Flac"},{"number":8,"title":"Tam za tumanami","artist":["Аркона"],"quality":"Flac"},{"number":9,"title":"Potomok","artist":["Аркона"],"quality":"Flac"},{"number":10,"title":"Slovo","artist":["Аркона"],"quality":"Flac"},{"number":11,"title":"Odna","artist":["Аркона"],"quality":"Flac"},{"number":12,"title":"Vo moiom sadochke…","artist":["Аркона"],"quality":"Flac"},{"number":13,"title":"Stenka na stenku","artist":["Аркона"],"quality":"Flac"},{"number":14,"title":"Zimushka","artist":["Аркона"],"quality":"Flac"}]}]},{"id":{"name":"Eluveitie"},"albums":[{"id":{"year":2008,"title":"Slania"},"tracks":[{"number":1,"title":"Samon","artist":["Eluveitie"],"quality":"Flac"},{"number":2,"title":"Primordial Breath","artist":["Eluveitie"],"quality":"Flac"},{"number":3,"title":"Inis Mona","artist":["Eluveitie"],"quality":"Flac"},{"number":4,"title":"Gray Sublime Archon","artist":["Eluveitie"],"quality":"Flac"},{"number":5,"title":"Anagantios","artist":["Eluveitie"],"quality":"Flac"},{"number":6,"title":"Bloodstained Ground","artist":["Eluveitie"],"quality":"Flac"},{"number":7,"title":"The Somber Lay","artist":["Eluveitie"],"quality":"Flac"},{"number":8,"title":"Slanias Song","artist":["Eluveitie"],"quality":"Flac"},{"number":9,"title":"Giamonios","artist":["Eluveitie"],"quality":"Flac"},{"number":10,"title":"Tarvos","artist":["Eluveitie"],"quality":"Flac"},{"number":11,"title":"Calling the Rain","artist":["Eluveitie"],"quality":"Flac"},{"number":12,"title":"Elembivos","artist":["Eluveitie"],"quality":"Flac"}]},{"id":{"year":2004,"title":"Vên [re‐recorded]"},"tracks":[{"number":1,"title":"Verja Urit an Bitus","artist":["Eluveitie"],"quality":"Flac"},{"number":2,"title":"Uis Elveti","artist":["Eluveitie"],"quality":"Flac"},{"number":3,"title":"Ôrô","artist":["Eluveitie"],"quality":"Flac"},{"number":4,"title":"Lament","artist":["Eluveitie"],"quality":"Flac"},{"number":5,"title":"Druid","artist":["Eluveitie"],"quality":"Flac"},{"number":6,"title":"Jêzaïg","artist":["Eluveitie"],"quality":"Flac"}]}]},{"id":{"name":"Frontside"},"albums":[{"id":{"year":2001,"title":"…nasze jest królestwo, potęga i chwała na wieki…"},"tracks":[{"number":1,"title":"Intro = Chaos","artist":["Frontside"],"quality":"Flac"},{"number":2,"title":"Modlitwa","artist":["Frontside"],"quality":"Flac"},{"number":3,"title":"Długa droga z piekła","artist":["Frontside"],"quality":"Flac"},{"number":4,"title":"Synowie ognia","artist":["Frontside"],"quality":"Flac"},{"number":5,"title":"1902","artist":["Frontside"],"quality":"Flac"},{"number":6,"title":"Krew za krew","artist":["Frontside"],"quality":"Flac"},{"number":7,"title":"Kulminacja","artist":["Frontside"],"quality":"Flac"},{"number":8,"title":"Judasz","artist":["Frontside"],"quality":"Flac"},{"number":9,"title":"Więzy","artist":["Frontside"],"quality":"Flac"},{"number":10,"title":"Zagubione dusze","artist":["Frontside"],"quality":"Flac"},{"number":11,"title":"Linia życia","artist":["Frontside"],"quality":"Flac"}]}]},{"id":{"name":"Heaven’s Basement"},"albums":[{"id":{"year":2011,"title":"Unbreakable"},"tracks":[{"number":1,"title":"Unbreakable","artist":["Heaven’s Basement"],"quality":{"Mp3":208}},{"number":2,"title":"Guilt Trips and Sins","artist":["Heaven’s Basement"],"quality":{"Mp3":205}},{"number":3,"title":"The Long Goodbye","artist":["Heaven’s Basement"],"quality":{"Mp3":227}},{"number":4,"title":"Close Encounters","artist":["Heaven’s Basement"],"quality":{"Mp3":213}},{"number":5,"title":"Paranoia","artist":["Heaven’s Basement"],"quality":{"Mp3":218}},{"number":6,"title":"Let Me Out of Here","artist":["Heaven’s Basement"],"quality":{"Mp3":207}},{"number":7,"title":"Leeches","artist":["Heaven’s Basement"],"quality":{"Mp3":225}}]}]},{"id":{"name":"Metallica"},"albums":[{"id":{"year":1984,"title":"Ride the Lightning"},"tracks":[{"number":1,"title":"Fight Fire with Fire","artist":["Metallica"],"quality":"Flac"},{"number":2,"title":"Ride the Lightning","artist":["Metallica"],"quality":"Flac"},{"number":3,"title":"For Whom the Bell Tolls","artist":["Metallica"],"quality":"Flac"},{"number":4,"title":"Fade to Black","artist":["Metallica"],"quality":"Flac"},{"number":5,"title":"Trapped under Ice","artist":["Metallica"],"quality":"Flac"},{"number":6,"title":"Escape","artist":["Metallica"],"quality":"Flac"},{"number":7,"title":"Creeping Death","artist":["Metallica"],"quality":"Flac"},{"number":8,"title":"The Call of Ktulu","artist":["Metallica"],"quality":"Flac"}]},{"id":{"year":1999,"title":"S&M"},"tracks":[{"number":1,"title":"The Ecstasy of Gold","artist":["Metallica"],"quality":"Flac"},{"number":2,"title":"The Call of Ktulu","artist":["Metallica"],"quality":"Flac"},{"number":3,"title":"Master of Puppets","artist":["Metallica"],"quality":"Flac"},{"number":4,"title":"Of Wolf and Man","artist":["Metallica"],"quality":"Flac"},{"number":5,"title":"The Thing That Should Not Be","artist":["Metallica"],"quality":"Flac"},{"number":6,"title":"Fuel","artist":["Metallica"],"quality":"Flac"},{"number":7,"title":"The Memory Remains","artist":["Metallica"],"quality":"Flac"},{"number":8,"title":"No Leaf Clover","artist":["Metallica"],"quality":"Flac"},{"number":9,"title":"Hero of the Day","artist":["Metallica"],"quality":"Flac"},{"number":10,"title":"Devil’s Dance","artist":["Metallica"],"quality":"Flac"},{"number":11,"title":"Bleeding Me","artist":["Metallica"],"quality":"Flac"},{"number":12,"title":"Nothing Else Matters","artist":["Metallica"],"quality":"Flac"},{"number":13,"title":"Until It Sleeps","artist":["Metallica"],"quality":"Flac"},{"number":14,"title":"For Whom the Bell Tolls","artist":["Metallica"],"quality":"Flac"},{"number":15,"title":"−Human","artist":["Metallica"],"quality":"Flac"},{"number":16,"title":"Wherever I May Roam","artist":["Metallica"],"quality":"Flac"},{"number":17,"title":"Outlaw Torn","artist":["Metallica"],"quality":"Flac"},{"number":18,"title":"Sad but True","artist":["Metallica"],"quality":"Flac"},{"number":19,"title":"One","artist":["Metallica"],"quality":"Flac"},{"number":20,"title":"Enter Sandman","artist":["Metallica"],"quality":"Flac"},{"number":21,"title":"Battery","artist":["Metallica"],"quality":"Flac"}]}]}] \ No newline at end of file diff --git a/tests/lib.rs b/tests/lib.rs index e7a9f61..a180036 100644 --- a/tests/lib.rs +++ b/tests/lib.rs @@ -1,7 +1,7 @@ mod database; mod library; -use musichoard::{Album, AlbumId, Artist, ArtistId, Track, TrackFormat}; +use musichoard::{Album, AlbumId, Artist, ArtistId, Quality, Track}; use once_cell::sync::Lazy; static COLLECTION: Lazy> = Lazy::new(|| { @@ -20,85 +20,85 @@ static COLLECTION: Lazy> = Lazy::new(|| { number: 01, title: String::from("Az’"), artist: vec![String::from("Аркона")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 02, title: String::from("Arkaim"), artist: vec![String::from("Аркона")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 03, title: String::from("Bol’no mne"), artist: vec![String::from("Аркона")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 04, title: String::from("Leshiy"), artist: vec![String::from("Аркона")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 05, title: String::from("Zakliatie"), artist: vec![String::from("Аркона")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 06, title: String::from("Predok"), artist: vec![String::from("Аркона")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 07, title: String::from("Nikogda"), artist: vec![String::from("Аркона")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 08, title: String::from("Tam za tumanami"), artist: vec![String::from("Аркона")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 09, title: String::from("Potomok"), artist: vec![String::from("Аркона")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 10, title: String::from("Slovo"), artist: vec![String::from("Аркона")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 11, title: String::from("Odna"), artist: vec![String::from("Аркона")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 12, title: String::from("Vo moiom sadochke…"), artist: vec![String::from("Аркона")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 13, title: String::from("Stenka na stenku"), artist: vec![String::from("Аркона")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 14, title: String::from("Zimushka"), artist: vec![String::from("Аркона")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, ], }], @@ -118,73 +118,73 @@ static COLLECTION: Lazy> = Lazy::new(|| { number: 01, title: String::from("Samon"), artist: vec![String::from("Eluveitie")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 02, title: String::from("Primordial Breath"), artist: vec![String::from("Eluveitie")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 03, title: String::from("Inis Mona"), artist: vec![String::from("Eluveitie")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 04, title: String::from("Gray Sublime Archon"), artist: vec![String::from("Eluveitie")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 05, title: String::from("Anagantios"), artist: vec![String::from("Eluveitie")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 06, title: String::from("Bloodstained Ground"), artist: vec![String::from("Eluveitie")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 07, title: String::from("The Somber Lay"), artist: vec![String::from("Eluveitie")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 08, title: String::from("Slanias Song"), artist: vec![String::from("Eluveitie")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 09, title: String::from("Giamonios"), artist: vec![String::from("Eluveitie")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 10, title: String::from("Tarvos"), artist: vec![String::from("Eluveitie")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 11, title: String::from("Calling the Rain"), artist: vec![String::from("Eluveitie")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 12, title: String::from("Elembivos"), artist: vec![String::from("Eluveitie")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, ], }, @@ -198,37 +198,37 @@ static COLLECTION: Lazy> = Lazy::new(|| { number: 01, title: String::from("Verja Urit an Bitus"), artist: vec![String::from("Eluveitie")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 02, title: String::from("Uis Elveti"), artist: vec![String::from("Eluveitie")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 03, title: String::from("Ôrô"), artist: vec![String::from("Eluveitie")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 04, title: String::from("Lament"), artist: vec![String::from("Eluveitie")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 05, title: String::from("Druid"), artist: vec![String::from("Eluveitie")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 06, title: String::from("Jêzaïg"), artist: vec![String::from("Eluveitie")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, ], }, @@ -248,67 +248,122 @@ static COLLECTION: Lazy> = Lazy::new(|| { number: 01, title: String::from("Intro = Chaos"), artist: vec![String::from("Frontside")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 02, title: String::from("Modlitwa"), artist: vec![String::from("Frontside")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 03, title: String::from("Długa droga z piekła"), artist: vec![String::from("Frontside")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 04, title: String::from("Synowie ognia"), artist: vec![String::from("Frontside")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 05, title: String::from("1902"), artist: vec![String::from("Frontside")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 06, title: String::from("Krew za krew"), artist: vec![String::from("Frontside")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 07, title: String::from("Kulminacja"), artist: vec![String::from("Frontside")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 08, title: String::from("Judasz"), artist: vec![String::from("Frontside")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 09, title: String::from("Więzy"), artist: vec![String::from("Frontside")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 10, title: String::from("Zagubione dusze"), artist: vec![String::from("Frontside")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 11, title: String::from("Linia życia"), artist: vec![String::from("Frontside")], - format: TrackFormat::Flac, + quality: Quality::Flac, + }, + ], + }], + }, + Artist { + id: ArtistId { + name: String::from("Heaven’s Basement"), + }, + albums: vec![Album { + id: AlbumId { + year: 2011, + title: String::from("Unbreakable"), + }, + tracks: vec![ + Track { + number: 01, + title: String::from("Unbreakable"), + artist: vec![String::from("Heaven’s Basement")], + quality: Quality::Mp3(208), + }, + Track { + number: 02, + title: String::from("Guilt Trips and Sins"), + artist: vec![String::from("Heaven’s Basement")], + quality: Quality::Mp3(205), + }, + Track { + number: 03, + title: String::from("The Long Goodbye"), + artist: vec![String::from("Heaven’s Basement")], + quality: Quality::Mp3(227), + }, + Track { + number: 04, + title: String::from("Close Encounters"), + artist: vec![String::from("Heaven’s Basement")], + quality: Quality::Mp3(213), + }, + Track { + number: 05, + title: String::from("Paranoia"), + artist: vec![String::from("Heaven’s Basement")], + quality: Quality::Mp3(218), + }, + Track { + number: 06, + title: String::from("Let Me Out of Here"), + artist: vec![String::from("Heaven’s Basement")], + quality: Quality::Mp3(207), + }, + Track { + number: 07, + title: String::from("Leeches"), + artist: vec![String::from("Heaven’s Basement")], + quality: Quality::Mp3(225), }, ], }], @@ -328,49 +383,49 @@ static COLLECTION: Lazy> = Lazy::new(|| { number: 01, title: String::from("Fight Fire with Fire"), artist: vec![String::from("Metallica")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 02, title: String::from("Ride the Lightning"), artist: vec![String::from("Metallica")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 03, title: String::from("For Whom the Bell Tolls"), artist: vec![String::from("Metallica")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 04, title: String::from("Fade to Black"), artist: vec![String::from("Metallica")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 05, title: String::from("Trapped under Ice"), artist: vec![String::from("Metallica")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 06, title: String::from("Escape"), artist: vec![String::from("Metallica")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 07, title: String::from("Creeping Death"), artist: vec![String::from("Metallica")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 08, title: String::from("The Call of Ktulu"), artist: vec![String::from("Metallica")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, ], }, @@ -384,127 +439,127 @@ static COLLECTION: Lazy> = Lazy::new(|| { number: 01, title: String::from("The Ecstasy of Gold"), artist: vec![String::from("Metallica")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 02, title: String::from("The Call of Ktulu"), artist: vec![String::from("Metallica")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 03, title: String::from("Master of Puppets"), artist: vec![String::from("Metallica")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 04, title: String::from("Of Wolf and Man"), artist: vec![String::from("Metallica")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 05, title: String::from("The Thing That Should Not Be"), artist: vec![String::from("Metallica")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 06, title: String::from("Fuel"), artist: vec![String::from("Metallica")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 07, title: String::from("The Memory Remains"), artist: vec![String::from("Metallica")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 08, title: String::from("No Leaf Clover"), artist: vec![String::from("Metallica")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 09, title: String::from("Hero of the Day"), artist: vec![String::from("Metallica")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 10, title: String::from("Devil’s Dance"), artist: vec![String::from("Metallica")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 11, title: String::from("Bleeding Me"), artist: vec![String::from("Metallica")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 12, title: String::from("Nothing Else Matters"), artist: vec![String::from("Metallica")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 13, title: String::from("Until It Sleeps"), artist: vec![String::from("Metallica")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 14, title: String::from("For Whom the Bell Tolls"), artist: vec![String::from("Metallica")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 15, title: String::from("−Human"), artist: vec![String::from("Metallica")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 16, title: String::from("Wherever I May Roam"), artist: vec![String::from("Metallica")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 17, title: String::from("Outlaw Torn"), artist: vec![String::from("Metallica")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 18, title: String::from("Sad but True"), artist: vec![String::from("Metallica")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 19, title: String::from("One"), artist: vec![String::from("Metallica")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 20, title: String::from("Enter Sandman"), artist: vec![String::from("Metallica")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, Track { number: 21, title: String::from("Battery"), artist: vec![String::from("Metallica")], - format: TrackFormat::Flac, + quality: Quality::Flac, }, ], }, -- 2.45.2