use std::{ops::Deref, path::PathBuf};
use crate::{
config::common::LoudnormConfig, database::EntryId, ffmpeg::loudnorm::LoudnormAnalysis,
library::track::track_meta::TrackMeta, media_container::MediaContainer,
};
use blake3::Hash;
use serde::{Deserialize, Serialize};
pub(crate) mod internal;
pub mod core_impls;
pub mod frontend_impls;
pub mod trait_impls;
pub mod lyric_data;
pub mod track_meta;
pub const UNKNOWN_TITLE: &str = "UNKNOWN TITLE";
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Track {
id: TrackId,
pub(crate) src_container: MediaContainer,
pub(crate) lib_container: Option<MediaContainer>,
pub relative_library_path: PathBuf,
pub metadata: TrackMeta,
pub(crate) loudnorm_analysis: Option<LoudnormAnalysis>,
pub(crate) applied_loudnorm: Option<LoudnormConfig>,
version: u32,
}
#[derive(Debug, Deserialize, Serialize, Clone, Copy, PartialEq, Eq, Hash)]
pub struct TrackId {
id: Hash,
}
impl EntryId for TrackId {
type Entry = Track;
}
impl Deref for TrackId {
type Target = Hash;
fn deref(&self) -> &Self::Target {
&self.id
}
}
impl TrackId {
pub(crate) fn new(id: Hash) -> Self {
Self { id }
}
}