zoodex/src/ui/mod.rs

86 lines
2.4 KiB
Rust
Raw Normal View History

mod collatable_container ;
mod component ;
2024-11-20 16:32:37 +01:00
mod utility ;
use futures :: * ;
use futures :: future :: * ;
2025-02-05 14:57:07 +01:00
use gtk4 :: Orientation :: * ;
use gtk4 :: prelude :: * ;
use libadwaita :: * ;
use libadwaita :: prelude :: * ;
use libadwaita :: ViewSwitcherPolicy :: * ;
2024-11-20 16:32:37 +01:00
2025-02-05 14:57:07 +01:00
use crate :: data_manager :: * ;
use crate :: ui :: collatable_container :: * ;
use crate :: ui :: component :: * ;
use crate :: ui :: utility :: * ;
use crate :: utility :: * ;
2024-11-20 16:32:37 +01:00
pub struct UI {
films_component : CollatableMediaContainer <FilmsAdapter> ,
series_component : CollatableMediaContainer <SeriesAdapter> ,
2024-11-20 16:32:37 +01:00
}
impl UI {
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| {
glib :: spawn_future_local ( async {
let film_details = get_film_details ( film . uuid ) . await ;
dialog ! (
& g_box ! (
@ option_children ;
@ orientation : Vertical ;
@ css_classes : & [ "media-modal" ] ;
Some ( label ! (
@ css_classes : & [ "title-1" ] ;
film_details . name . as_str () ,
) ) . as_ref () ,
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) ) ,
) ;
let switched = view_stack ! (
( "Films" , "camera-video-symbolic" , films_component . get_widget () ) ,
( "Series" , "video-display-symbolic" , series_component . get_widget () ) ,
) ;
let header_bar = header_bar ! (
& view_switcher ! ( @ policy : Wide ; & switched ) ,
) ;
window . set_content ( Some (
& toolbar_view ! ( @ top_bar : & header_bar ; & switched ) ,
) ) ;
2024-11-20 16:32:37 +01:00
UI { films_component , series_component }
2024-11-20 16:32:37 +01:00
}
2025-02-05 13:51:22 +01:00
pub async fn render_collection_overview ( & self , collection : CollectionOverview ) {
join ! (
self . films_component . set_media ( collection . films ) ,
self . series_component . set_media ( collection . series ) ,
) ;
2024-11-20 16:32:37 +01:00
}
}