use crate::{
database::{DatabaseEntry, DatabaseError},
library::{album::Album, artist::UNKNOWN_ARTIST},
};
impl Album {
pub fn db_find_by_name(name: impl AsRef<str>) -> Result<Vec<Self>, DatabaseError>
where
Self: 'static,
{
let name = name.as_ref();
let mut items = Vec::new();
for item_raw in Self::tree().iter().values() {
let item: Self = ciborium::from_reader(&item_raw?[..])?;
if item.name.as_deref() == Some(name) {
items.push(item);
}
}
Ok(items)
}
#[must_use]
pub fn display(&self) -> String {
let main_artist = self.artists.main_artist();
let artist_name = match main_artist {
Ok(Some(artist)) => artist.name().to_owned(),
Ok(None) => UNKNOWN_ARTIST.to_owned(),
Err(_) => "<failed to load artist".to_owned(),
};
let name = self.safe_name();
format!("{name} by {artist_name}")
}
}