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 ? ;
|
} ) . await ? ;
|
||||||
Ok (collection_overview)
|
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 struct CollectionOverview {
|
||||||
pub films : Vec <FilmOverview> ,
|
pub films : Vec <FilmOverview> ,
|
||||||
pub series : Vec <SeriesOverview> ,
|
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 {
|
impl From <Error> for ZoodexError {
|
||||||
fn from ( error : Error ) -> Self {
|
fn from ( error : Error ) -> Self {
|
||||||
match error {
|
match error {
|
||||||
Rusqlite (error) => ZoodexError :: from (error) ,
|
Rusqlite (error) => ZoodexError :: from (error) ,
|
||||||
_ => panic ! () ,
|
_ => panic ! ( "{}" , error ) ,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -150,10 +231,10 @@ impl From < rusqlite :: Error > for ZoodexError {
|
||||||
SqliteFailure ( error , _ ) => {
|
SqliteFailure ( error , _ ) => {
|
||||||
match error . code {
|
match error . code {
|
||||||
CannotOpen => CollectionFileReadError ,
|
CannotOpen => CollectionFileReadError ,
|
||||||
_ => panic ! () ,
|
_ => panic ! ( "{}" , error ) ,
|
||||||
}
|
}
|
||||||
} ,
|
} ,
|
||||||
_ => panic ! () ,
|
_ => panic ! ( "{}" , error ) ,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue