Browse Source

move profile filesystem dependencies init on the main level

master
yggverse 2 months ago
parent
commit
e8680cb052
  1. 30
      src/app.rs
  2. 9
      src/app/database.rs
  3. 26
      src/main.rs

30
src/app.rs

@ -7,12 +7,13 @@ use browser::Browser;
use database::Database; use database::Database;
use gtk::{ use gtk::{
glib::{user_config_dir, ExitCode}, glib::ExitCode,
prelude::{ActionExt, ApplicationExt, ApplicationExtManual, GtkApplicationExt, GtkWindowExt}, prelude::{ActionExt, ApplicationExt, ApplicationExtManual, GtkApplicationExt, GtkWindowExt},
Application, Application,
}; };
use sqlite::Connection;
use std::{fs::create_dir_all, sync::Arc}; use std::sync::Arc;
const APPLICATION_ID: &str = "io.github.yggverse.Yoda"; const APPLICATION_ID: &str = "io.github.yggverse.Yoda";
@ -26,28 +27,9 @@ pub struct App {
impl App { impl App {
// Construct // Construct
pub fn new() -> Self { pub fn new(profile_database_connection: Arc<Connection>) -> Self {
// Init profile directory path // Init app database model
let mut profile_path = user_config_dir(); let database = Arc::new(Database::init(profile_database_connection));
profile_path.push(APPLICATION_ID);
if let Err(e) = create_dir_all(&profile_path) {
panic!("Failed to create profile directory: {e}")
}
// Init profile database path
let mut database_path = profile_path.clone();
database_path.push("database.sqlite3");
let connection = match sqlite::open(database_path) {
Ok(connection) => Arc::new(connection),
Err(e) => panic!("Failed to connect profile database: {e}"),
};
// Init database model
let database = Arc::new(Database::init(connection));
// Init actions // Init actions
let action_debug = Action::new("win", true); let action_debug = Action::new("win", true);

9
src/app/database.rs

@ -1,3 +1,4 @@
use sqlite::Connection;
use std::sync::Arc; use std::sync::Arc;
pub struct Database { pub struct Database {
@ -6,18 +7,18 @@ pub struct Database {
impl Database { impl Database {
// Construct new application DB // Construct new application DB
pub fn init(connection: Arc<sqlite::Connection>) -> Database { pub fn init(connection: Arc<Connection>) -> Database {
// Init app table // Init app table
if let Err(e) = connection.execute( if let Err(error) = connection.execute(
r" r"
CREATE TABLE IF NOT EXISTS `app` CREATE TABLE IF NOT EXISTS `app`
( (
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
`time` INTEGER NOT NULL DEFAULT CURRENT_TIMESTAMP, `time` INTEGER NOT NULL DEFAULT CURRENT_TIMESTAMP
) )
", ",
) { ) {
panic!("{e}"); panic!("{error}");
} }
// Return struct // Return struct

26
src/main.rs

@ -1,8 +1,30 @@
mod app; mod app;
use app::App; use app::App;
use gtk::glib::ExitCode; use gtk::glib::{user_config_dir, ExitCode};
use std::{fs::create_dir_all, sync::Arc};
fn main() -> ExitCode { fn main() -> ExitCode {
App::new().run() // Init profile path
let mut profile_path = user_config_dir();
profile_path.push(env!("CARGO_PKG_NAME"));
if let Err(error) = create_dir_all(&profile_path) {
panic!("Failed to create profile directory: {error}")
}
// Init profile database path
let mut profile_database_path = profile_path.clone();
profile_database_path.push("database.sqlite3");
// Init database connection
let profile_database_connection = match sqlite::open(profile_database_path) {
Ok(profile_database_connection) => Arc::new(profile_database_connection),
Err(error) => panic!("Failed to connect profile database: {error}"),
};
// Start application
App::new(profile_database_connection).run()
} }

Loading…
Cancel
Save