Implement getting film details from DataManager
This commit is contained in:
parent
462a644952
commit
6021fb5901
1 changed files with 84 additions and 3 deletions
|
@ -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 ) ,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue