Skip to main content

selene_core/library/track/
frontend_impls.rs

1use std::path::Path;
2
3use lunar_lib::database::{DatabaseEntry, DatabaseError, DbHandle};
4
5use crate::{database::LibraryDb, library::track::Track};
6
7impl Track {
8    pub fn db_find_by_title(name: impl AsRef<str>) -> Result<Vec<Self>, DatabaseError> {
9        let name = name.as_ref();
10
11        let db = DbHandle::<LibraryDb>::open()?;
12        let mut tracks = Self::db_get_all(&db)?;
13        tracks.retain(|t| t.metadata.title.as_deref() == Some(name));
14
15        Ok(tracks)
16    }
17
18    pub fn db_find_by_path(path: impl AsRef<Path>) -> Result<Option<Self>, DatabaseError> {
19        let path = path.as_ref();
20
21        let db = DbHandle::<LibraryDb>::open()?;
22        let tracks = Self::db_get_all(&db)?;
23        let track = tracks.into_iter().find(|t| t.container.path() == path);
24
25        Ok(track)
26    }
27}