From c86948991935cf574a9361d4c7d7c3bcf0052f48 Mon Sep 17 00:00:00 2001 From: Wojciech Kozlowski Date: Sun, 12 Jan 2025 10:51:45 +0100 Subject: [PATCH] Remove musichoard-edit (#266) Part 2 of #248 Reviewed-on: https://git.thenineworlds.net/wojtek/musichoard/pulls/266 --- .gitea/workflows/gitea-ci.yaml | 1 - Cargo.toml | 4 - README.md | 1 - src/bin/musichoard-edit.rs | 257 --------------------------------- 4 files changed, 263 deletions(-) delete mode 100644 src/bin/musichoard-edit.rs diff --git a/.gitea/workflows/gitea-ci.yaml b/.gitea/workflows/gitea-ci.yaml index fceaad3..597d4e3 100644 --- a/.gitea/workflows/gitea-ci.yaml +++ b/.gitea/workflows/gitea-ci.yaml @@ -37,7 +37,6 @@ jobs: --ignore "examples/*" --ignore "tests/*" --ignore "src/main.rs" - --ignore "src/bin/musichoard-edit.rs" --excl-line "^#\[derive|unimplemented\!\(|unreachable\!\(" --excl-start "GRCOV_EXCL_START|mod tests \{" --excl-stop "GRCOV_EXCL_STOP" diff --git a/Cargo.toml b/Cargo.toml index a1df039..86338aa 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -45,10 +45,6 @@ tui = ["crossterm", "ratatui", "tui-input"] name = "musichoard" required-features = ["bin", "database-json", "library-beets", "library-beets-ssh", "musicbrainz", "tui"] -[[bin]] -name = "musichoard-edit" -required-features = ["bin", "database-json"] - [[example]] name = "musicbrainz-api---browse" path = "examples/musicbrainz_api/browse.rs" diff --git a/README.md b/README.md index fc478b0..15d5d1a 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,6 @@ grcov codecov/debug/profraw \ --ignore "examples/*" \ --ignore "tests/*" \ --ignore "src/main.rs" \ - --ignore "src/bin/musichoard-edit.rs" \ --excl-line "^#\[derive|unimplemented\!\(|unreachable\!\(" \ --excl-start "GRCOV_EXCL_START|mod tests \{" \ --excl-stop "GRCOV_EXCL_STOP" \ diff --git a/src/bin/musichoard-edit.rs b/src/bin/musichoard-edit.rs deleted file mode 100644 index d6a1533..0000000 --- a/src/bin/musichoard-edit.rs +++ /dev/null @@ -1,257 +0,0 @@ -use std::path::PathBuf; - -use structopt::{clap::AppSettings, StructOpt}; - -use musichoard::{ - collection::{album::AlbumId, artist::ArtistId}, - external::database::json::{backend::JsonDatabaseFileBackend, JsonDatabase}, - IMusicHoardDatabase, MusicHoard, MusicHoardBuilder, NoLibrary, -}; - -type MH = MusicHoard, NoLibrary>; - -#[derive(StructOpt, Debug)] -#[structopt(about = "musichoard-edit: edit the MusicHoard database", - global_settings=&[AppSettings::DeriveDisplayOrder])] -struct Opt { - #[structopt( - long = "database", - help = "Database file path", - default_value = "database.json" - )] - database_file_path: PathBuf, - - #[structopt(subcommand)] - command: Command, -} - -#[derive(StructOpt, Debug)] -enum Command { - #[structopt(about = "Modify artist information")] - Artist(ArtistOpt), -} - -#[derive(StructOpt, Debug)] -struct ArtistOpt { - // For some reason, not specyfing the artist name with the `long` name makes StructOpt failed - // for inexplicable reason. For example, it won't recognise `Abadde` or `Abadden` as a name and - // will insteady try to process it as a command. - #[structopt(long, help = "The name of the artist")] - name: String, - - #[structopt(subcommand)] - command: ArtistCommand, -} - -#[derive(StructOpt, Debug)] -enum ArtistCommand { - #[structopt(about = "Add a new artist to the collection")] - Add, - #[structopt(about = "Remove an artist from the collection")] - Remove, - #[structopt(about = "Edit the artist's sort name")] - Sort(SortCommand), - #[structopt(about = "Edit a property of an artist")] - Property(PropertyCommand), - #[structopt(about = "Modify the artist's album information")] - Album(AlbumOpt), -} - -#[derive(StructOpt, Debug)] -enum SortCommand { - #[structopt(about = "Set the provided name as the artist's sort name")] - Set(SortValue), - #[structopt(about = "Clear the artist's sort name")] - Clear, -} - -#[derive(StructOpt, Debug)] -struct SortValue { - #[structopt(help = "The sort name")] - sort: String, -} - -#[derive(StructOpt, Debug)] -enum PropertyCommand { - #[structopt(about = "Add values to the property without overwriting existing values")] - Add(PropertyValue), - #[structopt(about = "Remove values from the property")] - Remove(PropertyValue), - #[structopt(about = "Set the property's values overwriting any existing values")] - Set(PropertyValue), - #[structopt(about = "Clear all values of a property")] - Clear(PropertyName), -} - -#[derive(StructOpt, Debug)] -struct PropertyValue { - #[structopt(help = "The name of the property")] - property: String, - #[structopt(help = "The list of values")] - values: Vec, -} - -#[derive(StructOpt, Debug)] -struct PropertyName { - #[structopt(help = "The name of the property")] - property: String, -} - -#[derive(StructOpt, Debug)] -struct AlbumOpt { - // Using `long` for consistency with `ArtistOpt`. - #[structopt(long, help = "The title of the album")] - title: String, - - #[structopt(subcommand)] - command: AlbumCommand, -} - -#[derive(StructOpt, Debug)] -enum AlbumCommand { - #[structopt(about = "Edit the album's sequence value")] - Seq(AlbumSeqCommand), -} - -#[derive(StructOpt, Debug)] -enum AlbumSeqCommand { - #[structopt(about = "Set the sequence value overwriting any existing value")] - Set(AlbumSeqValue), - #[structopt(about = "Clear the sequence value")] - Clear, -} - -#[derive(StructOpt, Debug)] -struct AlbumSeqValue { - #[structopt(help = "The new sequence value")] - value: u8, -} - -impl Command { - fn handle(self, music_hoard: &mut MH) { - match self { - Command::Artist(artist_opt) => artist_opt.handle(music_hoard), - } - } -} - -impl ArtistOpt { - fn handle(self, music_hoard: &mut MH) { - self.command.handle(music_hoard, &self.name) - } -} - -impl ArtistCommand { - fn handle(self, music_hoard: &mut MH, artist_name: &str) { - match self { - ArtistCommand::Add => { - music_hoard - .add_artist(ArtistId::new(artist_name)) - .expect("failed to add artist"); - } - ArtistCommand::Remove => { - music_hoard - .remove_artist(ArtistId::new(artist_name)) - .expect("failed to remove artist"); - } - ArtistCommand::Sort(sort_command) => { - sort_command.handle(music_hoard, artist_name); - } - ArtistCommand::Property(property_command) => { - property_command.handle(music_hoard, artist_name); - } - ArtistCommand::Album(album_opt) => { - album_opt.handle(music_hoard, artist_name); - } - } - } -} - -impl SortCommand { - fn handle(self, music_hoard: &mut MH, artist_name: &str) { - match self { - SortCommand::Set(artist_sort_value) => music_hoard - .set_artist_sort(ArtistId::new(artist_name), artist_sort_value.sort) - .expect("faild to set artist sort name"), - SortCommand::Clear => music_hoard - .clear_artist_sort(ArtistId::new(artist_name)) - .expect("failed to clear artist sort name"), - } - } -} - -impl PropertyCommand { - fn handle(self, music_hoard: &mut MH, artist_name: &str) { - match self { - PropertyCommand::Add(property_value) => music_hoard - .add_to_artist_property( - ArtistId::new(artist_name), - property_value.property, - property_value.values, - ) - .expect("failed to add values to property"), - PropertyCommand::Remove(property_value) => music_hoard - .remove_from_artist_property( - ArtistId::new(artist_name), - property_value.property, - property_value.values, - ) - .expect("failed to remove values from property"), - PropertyCommand::Set(property_value) => music_hoard - .set_artist_property( - ArtistId::new(artist_name), - property_value.property, - property_value.values, - ) - .expect("failed to set property"), - PropertyCommand::Clear(property_name) => music_hoard - .clear_artist_property(ArtistId::new(artist_name), property_name.property) - .expect("failed to clear property"), - } - } -} - -impl AlbumOpt { - fn handle(self, music_hoard: &mut MH, artist_name: &str) { - self.command.handle(music_hoard, artist_name, &self.title) - } -} - -impl AlbumCommand { - fn handle(self, music_hoard: &mut MH, artist_name: &str, album_name: &str) { - match self { - AlbumCommand::Seq(seq_command) => { - seq_command.handle(music_hoard, artist_name, album_name); - } - } - } -} - -impl AlbumSeqCommand { - fn handle(self, music_hoard: &mut MH, artist_name: &str, album_name: &str) { - match self { - AlbumSeqCommand::Set(seq_value) => music_hoard - .set_album_seq( - ArtistId::new(artist_name), - AlbumId::new(album_name), - seq_value.value, - ) - .expect("failed to set sequence value"), - AlbumSeqCommand::Clear => music_hoard - .clear_album_seq(ArtistId::new(artist_name), AlbumId::new(album_name)) - .expect("failed to clear sequence value"), - } - } -} - -fn main() { - let opt = Opt::from_args(); - - let db = JsonDatabase::new(JsonDatabaseFileBackend::new(&opt.database_file_path)); - - let mut music_hoard = MusicHoardBuilder::default().set_database(db).build(); - music_hoard - .reload_database() - .expect("failed to load MusicHoard database"); - opt.command.handle(&mut music_hoard); -}