Use primary type in the album sort key #243

Merged
wojtek merged 2 commits from 231---differentiate-release-groups-with-same-title-but-different-type-clash into main 2025-01-02 23:24:02 +01:00
3 changed files with 22 additions and 11 deletions

View File

@ -101,14 +101,14 @@ impl From<(u32, u8, u8)> for AlbumDate {
pub struct AlbumSeq(pub u8); pub struct AlbumSeq(pub u8);
/// Based on [MusicBrainz types](https://musicbrainz.org/doc/Release_Group/Type). /// Based on [MusicBrainz types](https://musicbrainz.org/doc/Release_Group/Type).
#[derive(Clone, Copy, Debug, PartialEq, Eq)] #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord)]
pub enum AlbumPrimaryType { pub enum AlbumPrimaryType {
/// Album
Album,
/// Single /// Single
Single, Single,
/// EP /// EP
Ep, Ep,
/// Album
Album,
/// Broadcast /// Broadcast
Broadcast, Broadcast,
/// Other /// Other
@ -217,8 +217,13 @@ impl AlbumMeta {
self self
} }
pub fn get_sort_key(&self) -> (&AlbumDate, &AlbumSeq, &AlbumId) { pub fn get_sort_key(&self) -> (&AlbumDate, &AlbumSeq, &str, &Option<AlbumPrimaryType>) {
(&self.date, &self.seq, &self.id) (
&self.date,
&self.seq,
&self.id.title,
&self.info.primary_type,
)
} }
pub fn set_mb_ref(&mut self, mb_ref: AlbumMbRef) { pub fn set_mb_ref(&mut self, mb_ref: AlbumMbRef) {

View File

@ -871,7 +871,8 @@ mod tests {
let album = &music_hoard.collection[0].albums[0]; let album = &music_hoard.collection[0].albums[0];
assert_eq!(album.meta.id.mb_ref, AlbumMbRef::CannotHaveMbid); assert_eq!(album.meta.id.mb_ref, AlbumMbRef::CannotHaveMbid);
// To clear the mb_ref we need the album_id to have the mb_ref to identify the correct album. // To clear the mb_ref we need the album_id to have the mb_ref to identify the correct
// album.
album_id.set_mb_ref(AlbumMbRef::CannotHaveMbid); album_id.set_mb_ref(AlbumMbRef::CannotHaveMbid);
assert!(music_hoard assert!(music_hoard
.clear_album_mb_ref(&artist_id, &album_id) .clear_album_mb_ref(&artist_id, &album_id)

View File

@ -1,7 +1,7 @@
use std::cmp; use std::cmp;
use musichoard::collection::{ use musichoard::collection::{
album::{Album, AlbumDate, AlbumId, AlbumSeq}, album::{Album, AlbumDate, AlbumPrimaryType, AlbumSeq},
track::Track, track::Track,
}; };
@ -165,7 +165,7 @@ impl AlbumSelection {
} }
pub struct KeySelectAlbum { pub struct KeySelectAlbum {
key: (AlbumDate, AlbumSeq, AlbumId), key: (AlbumDate, AlbumSeq, String, Option<AlbumPrimaryType>),
track: Option<KeySelectTrack>, track: Option<KeySelectTrack>,
} }
@ -175,14 +175,19 @@ impl KeySelectAlbum {
let album = &albums[index]; let album = &albums[index];
let key = album.meta.get_sort_key(); let key = album.meta.get_sort_key();
KeySelectAlbum { KeySelectAlbum {
key: (key.0.to_owned(), key.1.to_owned(), key.2.to_owned()), key: (
key.0.to_owned(),
key.1.to_owned(),
key.2.to_owned(),
key.3.to_owned(),
),
track: KeySelectTrack::get(&album.tracks, &selection.track), track: KeySelectTrack::get(&album.tracks, &selection.track),
} }
}) })
} }
pub fn get_sort_key(&self) -> (&AlbumDate, &AlbumSeq, &AlbumId) { pub fn get_sort_key(&self) -> (&AlbumDate, &AlbumSeq, &str, &Option<AlbumPrimaryType>) {
(&self.key.0, &self.key.1, &self.key.2) (&self.key.0, &self.key.1, &self.key.2, &self.key.3)
} }
} }