From 66a83fbbbbf3088acd19ab245015f215f029be2e Mon Sep 17 00:00:00 2001 From: chaos Date: Fri, 20 Oct 2023 18:32:58 +0100 Subject: [PATCH] finally add folder support via folder.meta is_album field --- src/commands/process.rs | 14 +++++++++++++- src/types.rs | 21 +++++++++++++++++++++ src/utils/formats/handlers/id3.rs | 5 ++++- src/utils/music_scanner.rs | 12 ++++++++++-- 4 files changed, 48 insertions(+), 4 deletions(-) diff --git a/src/commands/process.rs b/src/commands/process.rs index 579bd43..988c248 100644 --- a/src/commands/process.rs +++ b/src/commands/process.rs @@ -50,7 +50,19 @@ fn rename_file(process_args: &ProcessCommandArgs, file: &mut File) { let artist = artist.replace('/', &replace_char); // Step 4: Join Filename - let filename = format!("{} - {}", artist, title); + let filename = match file.folder_meta.is_album { + true => { + format!( + "{}. {} - {}", + file.info.tags.track_number.unwrap(), + title, + artist + ) + } + false => { + format!("{} - {}", artist, title) + } + }; if filename == file.filename { return; diff --git a/src/types.rs b/src/types.rs index ce27a03..d2199ec 100644 --- a/src/types.rs +++ b/src/types.rs @@ -1,5 +1,7 @@ use std::path::PathBuf; +use serde::Deserialize; + use crate::utils::format_detection::FileFormat; #[derive(Debug, Clone)] @@ -69,6 +71,8 @@ pub struct File { pub extra_files: Vec, pub info: AudioFileInfo, + + pub folder_meta: FolderMeta, } impl File { @@ -105,6 +109,7 @@ impl File { path_to, extra_files: Vec::new(), info: AudioFileInfo::default(), + folder_meta: FolderMeta::default(), } } @@ -118,3 +123,19 @@ impl File { PathBuf::from(&self.path_from_source).join(self.join_filename()) } } + +#[derive(Debug, Clone, Deserialize, Default)] +pub struct FolderMeta { + pub is_album: bool, +} + +impl FolderMeta { + pub fn load(path: &PathBuf) -> Result> { + let file = std::fs::File::open(path)?; + let reader = std::io::BufReader::new(file); + + let u: FolderMeta = + serde_yaml::from_reader(reader).expect("error while reading folder meta"); + Ok(u) + } +} diff --git a/src/utils/formats/handlers/id3.rs b/src/utils/formats/handlers/id3.rs index 3f0ce25..a5aebd9 100644 --- a/src/utils/formats/handlers/id3.rs +++ b/src/utils/formats/handlers/id3.rs @@ -30,7 +30,10 @@ impl FormatHandler for ID3AudioFormat { Ok(Tags { title: String::from(title.unwrap()), artist: String::from(artist.unwrap()), - track_number: self.id3_tags.track().map(|track_number| track_number as u64), + track_number: self + .id3_tags + .track() + .map(|track_number| track_number as u64), }) } diff --git a/src/utils/music_scanner.rs b/src/utils/music_scanner.rs index 72ecce2..5ab741a 100644 --- a/src/utils/music_scanner.rs +++ b/src/utils/music_scanner.rs @@ -1,6 +1,6 @@ -use std::fs; +use std::{fs, path::PathBuf}; -use crate::types::File; +use crate::types::{File, FolderMeta}; use walkdir::WalkDir; use super::is_supported_file; @@ -39,6 +39,7 @@ pub fn scan_for_music(src_dir: &String) -> Result, Box Result, Box