the-honkers-railway-launcher/src/main.rs

80 lines
2.3 KiB
Rust
Raw Normal View History

2022-06-28 21:59:20 +00:00
use gtk4::{self as gtk, prelude::*};
use libadwaita::{self as adw, prelude::*};
2022-06-28 21:59:20 +00:00
use gtk::{CssProvider, StyleContext, STYLE_PROVIDER_PRIORITY_APPLICATION};
use gtk::gdk::Display;
use gtk::glib::set_application_name;
2022-07-27 15:37:52 +00:00
use std::path::Path;
use std::fs;
pub mod ui;
pub mod lib;
2022-06-28 21:59:20 +00:00
use ui::*;
2022-06-28 21:59:20 +00:00
2022-07-26 08:57:12 +00:00
pub const APP_ID: &str = "com.gitlab.an-anime-team.an-anime-game-launcher-gtk";
pub const APP_VERSION: &str = env!("CARGO_PKG_VERSION");
pub const APP_DEBUG: bool = cfg!(debug_assertions);
2022-07-26 08:57:12 +00:00
#[tokio::main]
async fn main() {
2022-06-28 21:59:20 +00:00
gtk::init().expect("GTK initialization failed");
adw::init();
// Register and include resources
gtk::gio::resources_register_include!(".assets.gresource")
.expect("Failed to register resources");
// Set application's title
// FIXME: doesn't work?
set_application_name("An Anime Game Launcher");
2022-06-28 21:59:20 +00:00
// Create app
let application = gtk::Application::new(
2022-07-26 08:57:12 +00:00
Some(APP_ID),
2022-06-28 21:59:20 +00:00
Default::default()
);
// Init app window and show it
application.connect_activate(|app| {
// Apply CSS styles to the application
let provider = CssProvider::new();
provider.load_from_data(include_bytes!("../assets/styles.css"));
StyleContext::add_provider_for_display(
&Display::default().expect("Could not connect to a display"),
&provider,
STYLE_PROVIDER_PRIORITY_APPLICATION
);
2022-07-27 15:37:52 +00:00
// Create default launcher folder if needed
let launcher_dir = lib::consts::launcher_dir().unwrap();
if !Path::new(&launcher_dir).exists() || Path::new(&format!("{}/.first-run", launcher_dir)).exists() {
fs::create_dir_all(&launcher_dir).expect("Failed to create default launcher dir");
fs::write(format!("{}/.first-run", launcher_dir), "").expect("Failed to create .first-run file");
let first_run = FirstRunApp::new(app).expect("Failed to init FirstRunApp");
first_run.show();
}
// Load main window and show it
2022-07-27 15:37:52 +00:00
else {
let main = MainApp::new(app).expect("Failed to init MainApp");
2022-06-28 21:59:20 +00:00
2022-07-27 15:37:52 +00:00
main.show();
}
2022-06-28 21:59:20 +00:00
});
// Flush config from the memory to the file before closing the app
application.connect_shutdown(|_| {
2022-07-24 20:04:35 +00:00
lib::config::flush().expect("Failed to save config file");
});
2022-06-28 21:59:20 +00:00
// Run app
application.run();
}