Implement getting film details from DataManager

This commit is contained in:
Reinout Meliesie 2025-02-18 15:09:05 +01:00
parent 462a644952
commit 6021fb5901
Signed by: zedfrigg
GPG key ID: 3AFCC06481308BC6

View file

@ -51,8 +51,40 @@ impl DataManager {
} ) . await ? ;
Ok (collection_overview)
}
pub async fn get_film_details ( & self , uuid : String ) -> Result <FilmDetails> {
let film_details = self . sqlite_client . conn ( |sqlite_connection| {
let film_details = sqlite_connection
. prepare ( "
select
films . uuid ,
films . name ,
films . original_name ,
films . release_date ,
films . runtime_minutes ,
films . poster_file_path ,
sources . video_file_path ,
sources . video_track ,
sources . audio_file_path ,
sources . audio_track ,
sources . subtitle_file_path ,
sources . subtitle_track
from films left join sources
on films . source = sources . uuid
where films . uuid = (?1)
" ) ?
. query ( [ uuid ] ) ?
. map (row_to_film_details)
. next () ?
. unwrap () ;
Ok (film_details)
} ) . await ? ;
Ok (film_details)
}
}
pub struct CollectionOverview {
pub films : Vec <FilmOverview> ,
pub series : Vec <SeriesOverview> ,
@ -135,11 +167,60 @@ fn row_to_series_overview ( row : & Row ) -> rusqlite :: Result <SeriesOverview>
} )
}
pub struct FilmDetails {
pub uuid : String ,
pub name : String ,
pub original_name : Option <String> ,
pub release_date : String ,
pub runtime_minutes : u32 ,
pub poster_file_path : Option <PathBuf> ,
pub video_file_path : PathBuf ,
pub video_track : Option <u32> ,
pub audio_file_path : PathBuf ,
pub audio_track : Option <u32> ,
pub subtitle_file_path : Option <PathBuf> ,
pub subtitle_track : Option <u32> ,
}
fn row_to_film_details ( row : & Row ) -> rusqlite :: Result <FilmDetails> {
let uuid = row . get (0) ? ;
let name = row . get (1) ? ;
let original_name = row . get (2) ? ;
let release_date = row . get (3) ? ;
let runtime_minutes = row . get (4) ? ;
let poster_file_path = row . get :: < _ , Option <String> > (5) ? . map ( PathBuf :: from ) ;
let video_file_path = PathBuf :: from ( row . get :: < _ , String > (6) ? ) ;
let video_track = row . get (7) ? ;
let audio_file_path = PathBuf :: from ( row . get :: < _ , String > (8) ? ) ;
let audio_track = row . get (9) ? ;
let subtitle_file_path = row . get :: < _ , Option <String> > (10) ? . map ( PathBuf :: from ) ;
let subtitle_track = row . get (11) ? ;
Ok ( FilmDetails {
uuid ,
name ,
original_name ,
release_date ,
runtime_minutes ,
poster_file_path ,
video_file_path ,
video_track ,
audio_file_path ,
audio_track ,
subtitle_file_path ,
subtitle_track ,
} )
}
impl From <Error> for ZoodexError {
fn from ( error : Error ) -> Self {
match error {
Rusqlite (error) => ZoodexError :: from (error) ,
_ => panic ! () ,
_ => panic ! ( "{}" , error ) ,
}
}
}
@ -150,10 +231,10 @@ impl From < rusqlite :: Error > for ZoodexError {
SqliteFailure ( error , _ ) => {
match error . code {
CannotOpen => CollectionFileReadError ,
_ => panic ! () ,
_ => panic ! ( "{}" , error ) ,
}
} ,
_ => panic ! () ,
_ => panic ! ( "{}" , error ) ,
}
}
}