Film modal now obtains data from DataManager
This commit is contained in:
parent
8639e08ac5
commit
20326fde8f
3 changed files with 51 additions and 36 deletions
22
src/main.rs
22
src/main.rs
|
@ -15,6 +15,7 @@ use crate :: data_manager :: * ;
|
|||
use crate :: error :: * ;
|
||||
use crate :: error :: ZoodexError :: * ;
|
||||
use crate :: ui :: * ;
|
||||
use crate :: utility :: * ;
|
||||
|
||||
|
||||
|
||||
|
@ -38,13 +39,26 @@ fn add_style_provider ( _ : & Application ) {
|
|||
}
|
||||
|
||||
fn show_window ( application : & Application ) {
|
||||
let ui = UI :: new (application) ;
|
||||
ui . show_window () ;
|
||||
let window = leak (
|
||||
ApplicationWindow :: builder ()
|
||||
. application (application)
|
||||
. title ("Zoödex")
|
||||
. build ()
|
||||
) ;
|
||||
|
||||
spawn_future_local ( async move {
|
||||
async_result_context ! (
|
||||
async {
|
||||
let data_manager = DataManager :: new () . await ? ;
|
||||
let data_manager = leak ( DataManager :: new () . await ? ) ;
|
||||
|
||||
let ui = UI :: new (
|
||||
window ,
|
||||
|film_uuid| Box :: pin ( async {
|
||||
data_manager . get_film_details (film_uuid) . await . unwrap ()
|
||||
} ) ,
|
||||
) ;
|
||||
window . set_visible (true) ;
|
||||
|
||||
let collection = data_manager . get_collection_overview () . await ? ;
|
||||
ui . render_collection_overview (collection) . await ;
|
||||
Ok (())
|
||||
|
@ -53,7 +67,7 @@ fn show_window ( application : & Application ) {
|
|||
match error {
|
||||
CollectionFileReadError => eprintln ! ("Could not read collection file") ,
|
||||
} ;
|
||||
ui . close_window () ;
|
||||
window . close () ;
|
||||
} ,
|
||||
) ;
|
||||
} ) ;
|
||||
|
|
|
@ -3,6 +3,7 @@ mod component ;
|
|||
mod utility ;
|
||||
|
||||
use futures :: * ;
|
||||
use futures :: future :: * ;
|
||||
use gtk4 :: Orientation :: * ;
|
||||
use gtk4 :: prelude :: * ;
|
||||
use libadwaita :: * ;
|
||||
|
@ -18,41 +19,45 @@ use crate :: utility :: * ;
|
|||
|
||||
|
||||
pub struct UI {
|
||||
window : & 'static ApplicationWindow ,
|
||||
films_component : CollatableMediaContainer <FilmsAdapter> ,
|
||||
series_component : CollatableMediaContainer <SeriesAdapter> ,
|
||||
}
|
||||
|
||||
impl UI {
|
||||
pub fn new ( application : & Application ) -> UI {
|
||||
let window = leak ( application_window ! (
|
||||
@ application : application ;
|
||||
@ title : "Zoödex" ;
|
||||
) ) ;
|
||||
pub fn new (
|
||||
window : & 'static ApplicationWindow ,
|
||||
get_film_details : impl Fn (String) -> BoxFuture < 'static , FilmDetails > + 'static ,
|
||||
) -> UI {
|
||||
let get_film_details = leak (get_film_details) ;
|
||||
|
||||
let films_component = CollatableMediaContainer :: <FilmsAdapter> :: new (
|
||||
|film| dialog ! (
|
||||
& g_box ! (
|
||||
@ option_children ;
|
||||
@ orientation : Vertical ;
|
||||
@ css_classes : & [ "media-modal" ] ;
|
||||
let films_component = CollatableMediaContainer :: <FilmsAdapter> :: new ( |film| {
|
||||
glib :: spawn_future_local ( async {
|
||||
let film_details = get_film_details ( film . uuid ) . await ;
|
||||
|
||||
Some ( label ! (
|
||||
@ css_classes : & [ "title-1" ] ;
|
||||
film . name . as_str () ,
|
||||
) ) . as_ref () ,
|
||||
dialog ! (
|
||||
& g_box ! (
|
||||
@ option_children ;
|
||||
@ orientation : Vertical ;
|
||||
@ css_classes : & [ "media-modal" ] ;
|
||||
|
||||
film . original_name . map (
|
||||
|original_name| label ! ( original_name . as_str () ) ,
|
||||
) . as_ref () ,
|
||||
Some ( label ! (
|
||||
@ css_classes : & [ "title-1" ] ;
|
||||
film_details . name . as_str () ,
|
||||
) ) . as_ref () ,
|
||||
|
||||
Some ( label ! (
|
||||
@ css_classes : & [ "top-padding" ] ;
|
||||
& format ! ( "Release date: {}" , film . release_date ) ,
|
||||
) ) . as_ref () ,
|
||||
) ,
|
||||
) . present ( Some (window) ) ,
|
||||
) ;
|
||||
film_details . original_name . map (
|
||||
|original_name| label ! ( original_name . as_str () ) ,
|
||||
) . as_ref () ,
|
||||
|
||||
Some ( label ! (
|
||||
@ css_classes : & [ "top-padding" ] ;
|
||||
& format ! ( "Release date: {}" , film_details . release_date ) ,
|
||||
) ) . as_ref () ,
|
||||
) ,
|
||||
) . present ( Some (window) )
|
||||
|
||||
} ) ;
|
||||
} ) ;
|
||||
let series_component = CollatableMediaContainer :: <SeriesAdapter> :: new (
|
||||
|series| dialog ! () . present ( Some (window) ) ,
|
||||
) ;
|
||||
|
@ -68,13 +73,9 @@ impl UI {
|
|||
& toolbar_view ! ( @ top_bar : & header_bar ; & switched ) ,
|
||||
) ) ;
|
||||
|
||||
UI { window , films_component , series_component }
|
||||
UI { films_component , series_component }
|
||||
}
|
||||
|
||||
pub fn show_window ( & self ) { self . window . set_visible (true) }
|
||||
|
||||
pub fn close_window ( & self ) { self . window . close () }
|
||||
|
||||
pub async fn render_collection_overview ( & self , collection : CollectionOverview ) {
|
||||
join ! (
|
||||
self . films_component . set_media ( collection . films ) ,
|
||||
|
|
|
@ -253,7 +253,7 @@ macro_rules ! pango_attributes { (
|
|||
|
||||
|
||||
|
||||
pub (crate) use {
|
||||
# [ allow (unused_imports) ] pub (crate) use {
|
||||
application_window ,
|
||||
bin ,
|
||||
button ,
|
||||
|
|
Loading…
Add table
Reference in a new issue