Show files as {track_number} - {track_title}
This commit is contained in:
@@ -127,13 +127,22 @@ pub fn restore_virtual_paths(
|
||||
/// `origins::local::snapshot::read_into_map`:
|
||||
/// - artist dir = `album_artist` if set, else `artists.join("-")`
|
||||
/// - if `track_title` is non-empty, the filename becomes
|
||||
/// `{track_title}.{ext}` where ext is preserved from `current_name`
|
||||
/// `{track_number:02} - {track_title}.{ext}` (zero-padded track number
|
||||
/// when > 0, otherwise just `{track_title}.{ext}`), ext preserved from
|
||||
/// `current_name`
|
||||
/// - otherwise the filename is unchanged
|
||||
/// Returns `(new_name, new_local_path)`.
|
||||
pub fn compute_new_layout(current_name: &str, mm: &MusicMetadata) -> (String, PathBuf) {
|
||||
let artist_dir = artist_dir(mm);
|
||||
let filename = match &mm.track_title {
|
||||
title if !title.is_empty() => rename_with_extension(current_name, title),
|
||||
title if !title.is_empty() => {
|
||||
let stem = if mm.track_number > 0 {
|
||||
format!("{:02} - {}", mm.track_number, title)
|
||||
} else {
|
||||
title.clone()
|
||||
};
|
||||
rename_with_extension(current_name, &stem)
|
||||
}
|
||||
_ => current_name.to_string(),
|
||||
};
|
||||
|
||||
@@ -263,10 +272,10 @@ mod tests {
|
||||
"Shine On You Crazy Diamond",
|
||||
);
|
||||
let (name, path) = compute_new_layout("01-track.flac", &mm);
|
||||
assert_eq!(name, "Shine On You Crazy Diamond.flac");
|
||||
assert_eq!(name, "01 - Shine On You Crazy Diamond.flac");
|
||||
assert_eq!(
|
||||
path,
|
||||
PathBuf::from("Pink Floyd/Wish You Were Here/Shine On You Crazy Diamond.flac")
|
||||
PathBuf::from("Pink Floyd/Wish You Were Here/01 - Shine On You Crazy Diamond.flac")
|
||||
);
|
||||
}
|
||||
|
||||
@@ -274,14 +283,14 @@ mod tests {
|
||||
fn compute_new_layout_preserves_extension_through_rename() {
|
||||
let mm = mm("A", "B", "New Title");
|
||||
let (name, _) = compute_new_layout("old.mp3", &mm);
|
||||
assert_eq!(name, "New Title.mp3");
|
||||
assert_eq!(name, "01 - New Title.mp3");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn compute_new_layout_handles_multi_dot_extensions() {
|
||||
let mm = mm("A", "B", "New");
|
||||
let (name, _) = compute_new_layout("old.tar.gz", &mm);
|
||||
assert_eq!(name, "New.gz", "only the final extension is preserved");
|
||||
assert_eq!(name, "01 - New.gz", "only the final extension is preserved");
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -298,7 +307,7 @@ mod tests {
|
||||
let mut metadata = mm("Secondary", "Album", "Title");
|
||||
metadata.album_artist = Some("Primary Artist".to_string());
|
||||
let (_, path) = compute_new_layout("track.flac", &metadata);
|
||||
assert_eq!(path, PathBuf::from("Primary Artist/Album/Title.flac"));
|
||||
assert_eq!(path, PathBuf::from("Primary Artist/Album/01 - Title.flac"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -306,7 +315,7 @@ mod tests {
|
||||
let mut metadata = mm("Foo", "Album", "Title");
|
||||
metadata.artist = vec!["Foo".to_string(), "Bar".to_string()];
|
||||
let (_, path) = compute_new_layout("track.flac", &metadata);
|
||||
assert_eq!(path, PathBuf::from("Foo-Bar/Album/Title.flac"));
|
||||
assert_eq!(path, PathBuf::from("Foo-Bar/Album/01 - Title.flac"));
|
||||
}
|
||||
|
||||
// ---- find_orphaned_dirs ----
|
||||
|
||||
@@ -232,7 +232,7 @@ async fn update_removes_orphaned_virtual_dirs_when_last_file_moves_out() {
|
||||
let item = guard.get(&INodeNo(100)).expect("file still present");
|
||||
assert_eq!(
|
||||
item.local_path,
|
||||
std::path::PathBuf::from("New Artist/New Album/New Title.flac")
|
||||
std::path::PathBuf::from("New Artist/New Album/01 - New Title.flac")
|
||||
);
|
||||
}
|
||||
|
||||
@@ -471,10 +471,10 @@ async fn update_changes_tags_and_response_reflects_new_values() {
|
||||
assert_eq!(mm.track_number, 7);
|
||||
|
||||
// Layout was recomputed from the new metadata.
|
||||
assert_eq!(item.name, "Updated Title.flac");
|
||||
assert_eq!(item.name, "07 - Updated Title.flac");
|
||||
assert_eq!(
|
||||
item.local_path,
|
||||
std::path::PathBuf::from("Updated Artist/Updated Album/Updated Title.flac")
|
||||
std::path::PathBuf::from("Updated Artist/Updated Album/07 - Updated Title.flac")
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user