diff --git a/src/core/collection/album.rs b/src/core/collection/album.rs index d0579b4..0d3fd74 100644 --- a/src/core/collection/album.rs +++ b/src/core/collection/album.rs @@ -101,14 +101,14 @@ impl From<(u32, u8, u8)> for AlbumDate { pub struct AlbumSeq(pub u8); /// 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 { - /// Album - Album, /// Single Single, /// EP Ep, + /// Album + Album, /// Broadcast Broadcast, /// Other @@ -217,8 +217,13 @@ impl AlbumMeta { self } - pub fn get_sort_key(&self) -> (&AlbumDate, &AlbumSeq, &AlbumId) { - (&self.date, &self.seq, &self.id) + pub fn get_sort_key(&self) -> (&AlbumDate, &AlbumSeq, &str, &Option) { + ( + &self.date, + &self.seq, + &self.id.title, + &self.info.primary_type, + ) } pub fn set_mb_ref(&mut self, mb_ref: AlbumMbRef) { diff --git a/src/tui/app/selection/album.rs b/src/tui/app/selection/album.rs index d4e8f8d..204fbc3 100644 --- a/src/tui/app/selection/album.rs +++ b/src/tui/app/selection/album.rs @@ -1,7 +1,7 @@ use std::cmp; use musichoard::collection::{ - album::{Album, AlbumDate, AlbumId, AlbumSeq}, + album::{Album, AlbumDate, AlbumPrimaryType, AlbumSeq}, track::Track, }; @@ -165,7 +165,7 @@ impl AlbumSelection { } pub struct KeySelectAlbum { - key: (AlbumDate, AlbumSeq, AlbumId), + key: (AlbumDate, AlbumSeq, String, Option), track: Option, } @@ -175,14 +175,19 @@ impl KeySelectAlbum { let album = &albums[index]; let key = album.meta.get_sort_key(); 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), } }) } - pub fn get_sort_key(&self) -> (&AlbumDate, &AlbumSeq, &AlbumId) { - (&self.key.0, &self.key.1, &self.key.2) + pub fn get_sort_key(&self) -> (&AlbumDate, &AlbumSeq, &str, &Option) { + (&self.key.0, &self.key.1, &self.key.2, &self.key.3) } }