selene-core 0.2.0

selene-core is the backend for Selene, a local-first music player
Documentation
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}")
    }
}