selene-core 0.9.0-alpha.2

selene-core is the backend for Selene, a local-first music player
Documentation
use std::io;

use crate::{
    library::{
        loudnorm::{LoudnormAnalysis, LoudnormAnalysisError},
        track::{Track, track_meta::TrackMeta},
    },
    media_container::MediaContainer,
};

// Core
impl Track {
    pub fn new(container: MediaContainer, metadata: TrackMeta) -> io::Result<Self> {
        Ok(Self {
            container,
            metadata,
            loudnorm_analysis: None,
        })
    }
}

// Accessors
impl Track {
    #[must_use]
    pub fn container(&self) -> &MediaContainer {
        &self.container
    }

    #[must_use]
    pub fn loudnorm_analysis(&self) -> Option<&LoudnormAnalysis> {
        self.loudnorm_analysis.as_ref()
    }

    #[must_use]
    pub fn is_single(&self) -> bool {
        self.metadata.album.is_none()
    }
}

impl Track {
    pub fn loudnorm(&mut self, accurate_true_peak: bool) -> Result<(), LoudnormAnalysisError> {
        let loudnorm = LoudnormAnalysis::from_container(&self.container, accurate_true_peak)?;
        self.loudnorm_analysis = Some(loudnorm);
        Ok(())
    }
}