Switch to async-sqlite library, rename CollectionFileError
This commit is contained in:
parent
d267475f0d
commit
c1481517bc
5 changed files with 91 additions and 73 deletions
|
@ -3,7 +3,7 @@ use std :: { * , any :: * , future :: * } ;
|
|||
|
||||
|
||||
# [ derive (Debug) ] pub enum ZoodexError {
|
||||
CollectionFileError ,
|
||||
CollectionFileReadError ,
|
||||
}
|
||||
|
||||
pub type Result <Success> = result :: Result < Success , ZoodexError > ;
|
||||
|
|
|
@ -31,7 +31,7 @@ fn on_activate ( app : & Application ) {
|
|||
} ,
|
||||
|error| {
|
||||
match error {
|
||||
CollectionFileError => eprintln ! ("Could not open collection file") ,
|
||||
CollectionFileReadError => eprintln ! ("Could not read collection file") ,
|
||||
} ;
|
||||
ui . close_window () ;
|
||||
} ,
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
use {
|
||||
async_rusqlite :: {
|
||||
async_sqlite :: {
|
||||
* ,
|
||||
rusqlite :: { Error , OpenFlags , Error :: * , ffi :: ErrorCode :: * } ,
|
||||
Error :: * ,
|
||||
rusqlite :: { OpenFlags , Error :: * , ffi :: ErrorCode :: * } ,
|
||||
} ,
|
||||
fallible_iterator :: * ,
|
||||
std :: path :: * ,
|
||||
|
@ -12,57 +13,74 @@ use crate :: { collection :: * , error :: { * , ZoodexError :: * } } ;
|
|||
|
||||
|
||||
pub async fn get_collection_from_file () -> Result <Collection> {
|
||||
let sqlite_connection = Connection :: builder () . open_with_flags (
|
||||
"zoodex.sqlite" ,
|
||||
OpenFlags :: SQLITE_OPEN_READ_ONLY | OpenFlags :: SQLITE_OPEN_NO_MUTEX ,
|
||||
) . await ? ;
|
||||
let sqlite_client = ClientBuilder :: new ()
|
||||
. path ("zoodex.sqlite")
|
||||
. flags ( OpenFlags :: SQLITE_OPEN_READ_ONLY | OpenFlags :: SQLITE_OPEN_NO_MUTEX )
|
||||
. open ()
|
||||
. await ? ;
|
||||
|
||||
sqlite_connection . call ( |sqlite_connection| {
|
||||
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) ? ;
|
||||
let poster_file_path = row . get :: < _ , Option <String> > (5) ?
|
||||
. map ( PathBuf :: from ) ;
|
||||
let video_file_path = row . get :: < _ , Option <String> > (6) ?
|
||||
. map ( PathBuf :: from ) ;
|
||||
let collection = sqlite_client . conn ( |sqlite_connection| {
|
||||
let films = sqlite_connection
|
||||
. prepare ("select * from films order by release_date desc") ?
|
||||
. 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) ? ;
|
||||
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 ,
|
||||
Ok ( Film {
|
||||
uuid ,
|
||||
name ,
|
||||
original_name ,
|
||||
release_date ,
|
||||
runtime_minutes ,
|
||||
poster_file_path ,
|
||||
video_file_path ,
|
||||
} )
|
||||
} )
|
||||
} ) . collect () ? ;
|
||||
. collect () ? ;
|
||||
|
||||
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) ? ;
|
||||
let poster_file_path = row . get :: < _ , Option <String> > (3) ?
|
||||
. map ( PathBuf :: from ) ;
|
||||
let series = sqlite_connection
|
||||
. prepare ("select * from series") ?
|
||||
. query (()) ?
|
||||
. map ( |row| {
|
||||
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 () ? ;
|
||||
Ok ( Series { uuid , name , original_name , poster_file_path } )
|
||||
} )
|
||||
. collect () ? ;
|
||||
|
||||
Ok ( Collection { films , series } )
|
||||
} ) . await
|
||||
} ) . await ? ;
|
||||
|
||||
Ok (collection)
|
||||
}
|
||||
|
||||
impl From <Error> for ZoodexError {
|
||||
fn from ( error : Error ) -> Self {
|
||||
match error {
|
||||
Rusqlite (error) => ZoodexError :: from (error) ,
|
||||
_ => panic ! () ,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From < rusqlite :: Error > for ZoodexError {
|
||||
fn from ( error : rusqlite :: Error ) -> Self {
|
||||
match error {
|
||||
SqliteFailure ( error , _ ) => {
|
||||
match error . code {
|
||||
Unknown => CollectionFileError ,
|
||||
CannotOpen => CollectionFileReadError ,
|
||||
_ => panic ! () ,
|
||||
}
|
||||
} ,
|
||||
|
@ -70,7 +88,3 @@ impl From <Error> for ZoodexError {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From <AlreadyClosed> for ZoodexError {
|
||||
fn from ( _ : AlreadyClosed ) -> Self { CollectionFileError }
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue