From d45f102be751788eebbaacb896eb14a94ac69e36 Mon Sep 17 00:00:00 2001 From: Ethan Girouard Date: Sun, 28 Jul 2024 22:37:17 -0400 Subject: [PATCH] Remove TryInto for Song These pre-defined conversion traits are meant to be fast, and implementing this conversion that accesses the database goes against this design. --- src/songdata.rs | 39 +-------------------------------------- 1 file changed, 1 insertion(+), 38 deletions(-) diff --git a/src/songdata.rs b/src/songdata.rs index 23ce415..0c1b670 100644 --- a/src/songdata.rs +++ b/src/songdata.rs @@ -28,43 +28,6 @@ pub struct SongData { pub image_path: String, } -#[cfg(feature = "ssr")] -impl TryInto for Song { - type Error = Box; - - /// Convert a Song object into a SongData object - /// - /// This conversion is expensive, as it requires database queries to get the artist and album objects. - /// The SongData/Song conversions are also not truly reversible, - /// due to the way the image_path, album, and artist data is handled. - fn try_into(self) -> Result { - use crate::database; - let mut db_con = database::get_db_conn(); - - let album = self.get_album(&mut db_con)?; - - // Use the song's image path if it exists, otherwise use the album's image path, or fallback to the placeholder - let image_path = self.image_path.clone().unwrap_or_else(|| { - album - .as_ref() - .and_then(|album| album.image_path.clone()) - .unwrap_or_else(|| "/assets/images/placeholder.jpg".to_string()) - }); - - Ok(SongData { - id: self.id.ok_or("Song id must be present (Some) to convert to SongData")?, - title: self.title.clone(), - artists: self.get_artists(&mut db_con)?, - album: album, - track: self.track, - duration: self.duration, - release_date: self.release_date, - // TODO https://gitlab.mregirouard.com/libretunes/libretunes/-/issues/35 - song_path: self.storage_path, - image_path: image_path, - }) - } -} impl TryInto for SongData { type Error = Box; @@ -72,7 +35,7 @@ impl TryInto for SongData { /// Convert a SongData object into a Song object /// /// The SongData/Song conversions are also not truly reversible, - /// due to the way the image_path, album, and and artist data is handled. + /// due to the way the image_path data is handled. fn try_into(self) -> Result { Ok(Song { id: Some(self.id),