selene_core/library/
track.rs1use std::{ops::Deref, path::PathBuf};
2
3use crate::{
4 config::common::LoudnormConfig, database::EntryId, ffmpeg::loudnorm::LoudnormAnalysis,
5 library::track::track_meta::TrackMeta, media_container::MediaContainer,
6};
7use blake3::Hash;
8use serde::{Deserialize, Serialize};
9
10pub(crate) mod internal;
11
12pub mod core_impls;
13pub mod frontend_impls;
14pub mod trait_impls;
15
16pub mod lyric_data;
17pub mod track_meta;
18
19pub const UNKNOWN_TITLE: &str = "UNKNOWN TITLE";
20
21#[derive(Serialize, Deserialize, Debug, Clone)]
23pub struct Track {
24 id: TrackId,
25 pub(crate) src_container: MediaContainer,
26 pub(crate) lib_container: Option<MediaContainer>,
27 pub relative_library_path: PathBuf,
28
29 pub metadata: TrackMeta,
30
31 pub(crate) loudnorm_analysis: Option<LoudnormAnalysis>,
32 pub(crate) applied_loudnorm: Option<LoudnormConfig>,
33
34 version: u32,
35}
36
37#[derive(Debug, Deserialize, Serialize, Clone, Copy, PartialEq, Eq, Hash)]
38pub struct TrackId {
39 id: Hash,
40}
41
42impl EntryId for TrackId {
43 type Entry = Track;
44}
45
46impl Deref for TrackId {
47 type Target = Hash;
48
49 fn deref(&self) -> &Self::Target {
50 &self.id
51 }
52}
53
54impl TrackId {
55 pub(crate) fn new(id: Hash) -> Self {
56 Self { id }
57 }
58}