Extract row to film / series conversion into functions

This commit is contained in:
Reinout Meliesie 2024-12-23 23:25:25 +01:00
parent c1481517bc
commit e29c555412
Signed by: zedfrigg
GPG key ID: 3AFCC06481308BC6

View file

@ -2,7 +2,7 @@ use {
async_sqlite :: { async_sqlite :: {
* , * ,
Error :: * , Error :: * ,
rusqlite :: { OpenFlags , Error :: * , ffi :: ErrorCode :: * } , rusqlite :: { OpenFlags , Row , Error :: * , ffi :: ErrorCode :: * } ,
} , } ,
fallible_iterator :: * , fallible_iterator :: * ,
std :: path :: * , std :: path :: * ,
@ -23,49 +23,51 @@ pub async fn get_collection_from_file () -> Result <Collection> {
let films = sqlite_connection let films = sqlite_connection
. prepare ("select * from films order by release_date desc") ? . prepare ("select * from films order by release_date desc") ?
. query (()) ? . query (()) ?
. map ( |row| { . map (row_to_film)
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 = row . get :: < _ , Option <String> > (6) ?
. map ( PathBuf :: from ) ;
Ok ( Film {
uuid ,
name ,
original_name ,
release_date ,
runtime_minutes ,
poster_file_path ,
video_file_path ,
} )
} )
. collect () ? ; . collect () ? ;
let series = sqlite_connection let series = sqlite_connection
. prepare ("select * from series") ? . prepare ("select * from series") ?
. query (()) ? . query (()) ?
. map ( |row| { . map (row_to_series)
let uuid = row . get (0) ? ;
let name = row . get (1) ? ;
let original_name = row . get (2) ? ;
let poster_file_path = row. get :: < _ , Option <String> > (3) ?
. map ( PathBuf :: from ) ;
Ok ( Series { uuid , name , original_name , poster_file_path } )
} )
. collect () ? ; . collect () ? ;
Ok ( Collection { films , series } ) Ok ( Collection { films , series } )
} ) . await ? ; } ) . await ? ;
Ok (collection) Ok (collection)
} }
fn row_to_film ( row : & Row ) -> rusqlite :: Result <Film> {
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 = row . get :: < _ , Option <String> > (6) ?
. map ( PathBuf :: from ) ;
Ok ( Film {
uuid ,
name ,
original_name ,
release_date ,
runtime_minutes ,
poster_file_path ,
video_file_path ,
} )
}
fn row_to_series ( row : & Row ) -> rusqlite :: Result <Series> {
let uuid = row . get (0) ? ;
let name = row . get (1) ? ;
let original_name = row . get (2) ? ;
let poster_file_path = row. get :: < _ , Option <String> > (3) ?
. map ( PathBuf :: from ) ;
Ok ( Series { uuid , name , original_name , poster_file_path } )
}
impl From <Error> for ZoodexError { impl From <Error> for ZoodexError {
fn from ( error : Error ) -> Self { fn from ( error : Error ) -> Self {
match error { match error {