use gio::resources_lookup_data; use gtk::{prelude::*, STYLE_PROVIDER_PRIORITY_USER}; use std::env; const APP_ID_DEV: &str = "com.luminescent-dreams.fitnesstrax.dev"; const APP_ID_PROD: &str = "com.luminescent-dreams.fitnesstrax"; const RESOURCE_BASE_PATH: &str = "/com/luminescent-dreams/fitnesstrax/"; struct AppState {} struct AppWindow { window: adw::ApplicationWindow, } fn main() { // I still don't fully understand gio resources. resources_register_include! is convenient // because I don't have to deal with filesystem locations at runtime. However, I think other // GTK applications do that rather than compiling the resources directly into the app. So, I'm // unclear as to how I want to handle this. gio::resources_register_include!("com.luminescent-dreams.fitnesstrax.gresource") .expect("to register resources"); let app_id = if std::env::var_os("ENV") == Some("dev".into()) { APP_ID_DEV } else { APP_ID_PROD }; let settings = gio::Settings::new(app_id); println!("database path: {}", settings.string("series-path")); let app = adw::Application::builder() .application_id(app_id) .resource_base_path(RESOURCE_BASE_PATH) .build(); /* let runtime = tokio::runtime::Builder::new_multi_thread() .enable_all() .build() .unwrap(); */ let app = adw::Application::builder() .application_id(app_id) .resource_base_path(RESOURCE_BASE_PATH) .build(); app.connect_activate(move |app| { let stylesheet = String::from_utf8( resources_lookup_data( &format!("{}style.css", RESOURCE_BASE_PATH), gio::ResourceLookupFlags::NONE, ) .expect("stylesheet must be available in the resources") .to_vec(), ) .expect("to parse stylesheet"); let provider = gtk::CssProvider::new(); provider.load_from_data(&stylesheet); let window = adw::ApplicationWindow::new(app); let context = window.style_context(); context.add_provider(&provider, STYLE_PROVIDER_PRIORITY_USER); window.present(); }); let args: Vec = env::args().collect(); ApplicationExtManual::run_with_args(&app, &args); }