mirror of
https://github.com/Dummi26/musicdb.git
synced 2025-03-10 14:13:53 +01:00
musicdb-filldb: sort songs by disc#, track#, path
This commit is contained in:
parent
ee18df56cd
commit
7b7b9f9a92
@ -1,4 +1,5 @@
|
|||||||
use std::{
|
use std::{
|
||||||
|
cmp::Ordering,
|
||||||
collections::HashMap,
|
collections::HashMap,
|
||||||
fs,
|
fs,
|
||||||
io::Write,
|
io::Write,
|
||||||
@ -11,7 +12,7 @@ use musicdb_lib::data::{
|
|||||||
album::Album,
|
album::Album,
|
||||||
artist::Artist,
|
artist::Artist,
|
||||||
database::{Cover, Database},
|
database::{Cover, Database},
|
||||||
song::Song,
|
song::{CachedData, Song},
|
||||||
CoverId, DatabaseLocation, GeneralData,
|
CoverId, DatabaseLocation, GeneralData,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -104,6 +105,22 @@ fn main() {
|
|||||||
let mut artists = HashMap::new();
|
let mut artists = HashMap::new();
|
||||||
let len = songs.len();
|
let len = songs.len();
|
||||||
let mut prev_perc = 999;
|
let mut prev_perc = 999;
|
||||||
|
songs.sort_by(|(path1, _, tags1), (path2, _, tags2)| {
|
||||||
|
// Sort by Disc->Track->Path
|
||||||
|
if let (Some(d1), Some(d2)) = (tags1.disc(), tags2.disc()) {
|
||||||
|
d1.cmp(&d2)
|
||||||
|
} else {
|
||||||
|
Ordering::Equal
|
||||||
|
}
|
||||||
|
.then_with(|| {
|
||||||
|
if let (Some(t1), Some(t2)) = (tags1.track(), tags2.track()) {
|
||||||
|
t1.cmp(&t2)
|
||||||
|
} else {
|
||||||
|
Ordering::Equal
|
||||||
|
}
|
||||||
|
.then_with(|| path1.cmp(&path2))
|
||||||
|
})
|
||||||
|
});
|
||||||
for (i, (song_path, song_file_metadata, song_tags)) in songs.into_iter().enumerate() {
|
for (i, (song_path, song_file_metadata, song_tags)) in songs.into_iter().enumerate() {
|
||||||
let perc = i * 100 / len;
|
let perc = i * 100 / len;
|
||||||
if perc != prev_perc {
|
if perc != prev_perc {
|
||||||
@ -112,6 +129,18 @@ fn main() {
|
|||||||
prev_perc = perc;
|
prev_perc = perc;
|
||||||
}
|
}
|
||||||
let mut general = GeneralData::default();
|
let mut general = GeneralData::default();
|
||||||
|
match (song_tags.track(), song_tags.total_tracks()) {
|
||||||
|
(None, None) => {}
|
||||||
|
(Some(n), Some(t)) => general.tags.push(format!("TrackNr={n}/{t}")),
|
||||||
|
(Some(n), None) => general.tags.push(format!("TrackNr={n}")),
|
||||||
|
(None, Some(t)) => general.tags.push(format!("TrackNr=?/{t}")),
|
||||||
|
}
|
||||||
|
match (song_tags.disc(), song_tags.total_discs()) {
|
||||||
|
(None, None) => {}
|
||||||
|
(Some(n), Some(t)) => general.tags.push(format!("DiscNr={n}/{t}")),
|
||||||
|
(Some(n), None) => general.tags.push(format!("DiscNr={n}")),
|
||||||
|
(None, Some(t)) => general.tags.push(format!("DiscNr=?/{t}")),
|
||||||
|
}
|
||||||
if let Some(year) = song_tags.year() {
|
if let Some(year) = song_tags.year() {
|
||||||
general.tags.push(format!("Year={year}"));
|
general.tags.push(format!("Year={year}"));
|
||||||
}
|
}
|
||||||
@ -220,7 +249,7 @@ fn main() {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
general,
|
general,
|
||||||
cached_data: Arc::new(Mutex::new(None)),
|
cached_data: CachedData(Arc::new(Mutex::new((None, None)))),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
eprintln!("searching for covers...");
|
eprintln!("searching for covers...");
|
||||||
|
Loading…
Reference in New Issue
Block a user