From 641a6306ec793c69c93d3db2df6ed321286d8465 Mon Sep 17 00:00:00 2001 From: Elias Projahn Date: Tue, 4 May 2021 18:43:01 +0200 Subject: [PATCH] Use sanitized directory names --- musicus/Cargo.toml | 1 + musicus/src/import/medium_preview.rs | 41 ++++++++++++++++++---------- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/musicus/Cargo.toml b/musicus/Cargo.toml index 7b3a722..0c2bae8 100644 --- a/musicus/Cargo.toml +++ b/musicus/Cargo.toml @@ -15,6 +15,7 @@ log = "0.4.14" musicus_backend = { version = "0.1.0", path = "../backend" } once_cell = "1.5.2" rand = "0.7.3" +sanitize-filename = "0.3.0" [dependencies.gdk] git = "https://github.com/gtk-rs/gtk4-rs/" diff --git a/musicus/src/import/medium_preview.rs b/musicus/src/import/medium_preview.rs index d945c7d..9c152f8 100644 --- a/musicus/src/import/medium_preview.rs +++ b/musicus/src/import/medium_preview.rs @@ -27,7 +27,10 @@ pub struct MediumPreview { impl Screen<(Arc, Medium), ()> for MediumPreview { /// Create a new medium preview screen. - fn new((session, medium): (Arc, Medium), handle: NavigationHandle<()>) -> Rc { + fn new( + (session, medium): (Arc, Medium), + handle: NavigationHandle<()>, + ) -> Rc { // Create UI let builder = gtk::Builder::from_resource("/de/johrpan/musicus/ui/medium_preview.ui"); @@ -66,12 +69,13 @@ impl Screen<(Arc, Medium), ()> for MediumPreview { }); })); - this.import_button.connect_clicked(clone!(@weak this => move |_| { - spawn!(@clone this, async move { - this.import().await.unwrap(); - this.handle.pop(Some(())); - }); - })); + this.import_button + .connect_clicked(clone!(@weak this => move |_| { + spawn!(@clone this, async move { + this.import().await.unwrap(); + this.handle.pop(Some(())); + }); + })); this.set_medium(medium); @@ -133,9 +137,7 @@ impl MediumPreview { list.append(&header); if let Some(list) = &last_list { - let frame = gtk::FrameBuilder::new() - .margin_bottom(12) - .build(); + let frame = gtk::FrameBuilder::new().margin_bottom(12).build(); frame.set_child(Some(list)); self.medium_box.append(&frame); @@ -168,9 +170,7 @@ impl MediumPreview { } if let Some(list) = &last_list { - let frame = gtk::FrameBuilder::new() - .margin_bottom(12) - .build(); + let frame = gtk::FrameBuilder::new().margin_bottom(12).build(); frame.set_child(Some(list)); self.medium_box.append(&frame); @@ -200,7 +200,17 @@ impl MediumPreview { // Create a new directory in the music library path for the imported medium. let music_library_path = self.handle.backend.get_music_library_path().unwrap(); - let directory = PathBuf::from(&medium.id); + + let directory_name = sanitize_filename::sanitize_with_options( + &medium.name, + sanitize_filename::Options { + windows: true, + truncate: true, + replacement: "", + }, + ); + + let directory = PathBuf::from(&directory_name); std::fs::create_dir(&music_library_path.join(&directory))?; // Copy the tracks to the music library. @@ -232,7 +242,8 @@ impl MediumPreview { tracks, }; - self.handle.backend + self.handle + .backend .db() .update_medium(medium.clone()) .await?;