2024-11-30 14:38:08 +01:00
|
|
|
use {
|
|
|
|
fallible_iterator :: * ,
|
|
|
|
rusqlite :: { Connection , Error , Error :: * , ffi :: ErrorCode :: * } ,
|
|
|
|
std :: path :: * ,
|
|
|
|
} ;
|
2024-11-20 16:32:37 +01:00
|
|
|
|
2024-11-29 21:06:14 +01:00
|
|
|
use crate :: { collection :: * , error :: { * , ZoodexError :: * } } ;
|
2024-11-20 16:32:37 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pub fn read_collection_file () -> Result <Collection> {
|
|
|
|
let sqlite_connection = Connection :: open ("zoodex.sqlite") ? ;
|
|
|
|
|
|
|
|
let mut films_query = sqlite_connection
|
|
|
|
. prepare ("select * from films order by release_date desc") ? ;
|
|
|
|
let films = films_query . query (()) ? . map ( |row| {
|
|
|
|
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) ? ;
|
2024-11-30 14:38:08 +01:00
|
|
|
let poster_file_path = row . get :: < _ , Option <String> > (5) ?
|
|
|
|
. map ( PathBuf :: from ) ;
|
|
|
|
let video_file_path = row . get :: < _ , Option <String> > (6) ?
|
|
|
|
. map ( PathBuf :: from ) ;
|
2024-11-20 16:32:37 +01:00
|
|
|
|
|
|
|
Ok ( Film {
|
|
|
|
uuid ,
|
|
|
|
name ,
|
|
|
|
original_name ,
|
|
|
|
release_date ,
|
|
|
|
runtime_minutes ,
|
2024-11-30 14:38:08 +01:00
|
|
|
poster_file_path ,
|
|
|
|
video_file_path ,
|
2024-11-20 16:32:37 +01:00
|
|
|
} )
|
|
|
|
} ) ;
|
|
|
|
|
|
|
|
let mut series_query = sqlite_connection . prepare ("select * from series") ? ;
|
|
|
|
let series = series_query . query (()) ? . map ( |row| {
|
|
|
|
let uuid = row . get (0) ? ;
|
|
|
|
let name = row . get (1) ? ;
|
|
|
|
let original_name = row . get (2) ? ;
|
2024-11-30 14:38:08 +01:00
|
|
|
let poster_file_path = row . get :: < _ , Option <String> > (3) ?
|
|
|
|
. map ( PathBuf :: from ) ;
|
2024-11-20 16:32:37 +01:00
|
|
|
|
2024-11-30 14:38:08 +01:00
|
|
|
Ok ( Series { uuid , name , original_name , poster_file_path } )
|
2024-11-20 16:32:37 +01:00
|
|
|
} ) ;
|
|
|
|
|
|
|
|
Ok ( Collection {
|
|
|
|
films : films . collect () ? ,
|
|
|
|
series : series . collect () ? ,
|
|
|
|
} )
|
|
|
|
}
|
2024-11-29 21:06:14 +01:00
|
|
|
|
2024-11-30 14:38:08 +01:00
|
|
|
impl From <Error> for ZoodexError {
|
|
|
|
fn from ( error : Error ) -> Self {
|
2024-11-29 21:06:14 +01:00
|
|
|
match error {
|
2024-11-30 14:38:08 +01:00
|
|
|
SqliteFailure ( error , _ ) => {
|
|
|
|
match error . code {
|
|
|
|
Unknown => CollectionFileError ,
|
|
|
|
_ => panic ! () ,
|
|
|
|
}
|
|
|
|
} ,
|
2024-11-29 21:06:14 +01:00
|
|
|
_ => panic ! () ,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|