Set up the welcome screen and open the database #125

Merged
savanni merged 7 commits from fitnesstrax/welcome into main 2023-12-19 22:02:41 +00:00
1 changed files with 24 additions and 36 deletions
Showing only changes of commit 87994012fa - Show all commits

View File

@ -25,7 +25,7 @@ use gtk::{subclass::prelude::*, STYLE_PROVIDER_PRIORITY_USER};
use std::{
cell::RefCell,
env,
path::PathBuf,
path::{Path, PathBuf},
rc::Rc,
sync::{Arc, RwLock},
};
@ -47,14 +47,32 @@ enum Events {
/// The real, headless application. This is where all of the logic will reside.
#[derive(Clone)]
struct App {
settings: gio::Settings,
database: Arc<RwLock<Option<Series<TraxRecord>>>>,
}
impl App {
pub fn new() -> Self {
Self {
pub fn new(settings: gio::Settings) -> Self {
let s = Self {
settings,
database: Arc::new(RwLock::new(None)),
};
if !s.settings.string("series-path").is_empty() {
let path = PathBuf::from(s.settings.string("series-path"));
let db = Series::open(path).unwrap();
*s.database.write().unwrap() = Some(db);
}
s
}
pub fn open_db(&self, path: &Path) {
let db = Series::open(path).unwrap();
*self.database.write().unwrap() = Some(db);
self.settings
.set_string("series-path", path.to_str().unwrap())
.unwrap();
}
}
@ -277,38 +295,8 @@ impl AppWindow {
//
// If the file does not exist, create a new one. Again, show the user an error if
// some kind of error occurs.
if path.exists() {
let db = Series::open(&path);
match db {
Ok(db) => {
*app.database.write().unwrap() = Some(db);
app.open_db(&path);
s.change_view(HistoricalView::new().upcast());
}
Err(EmseriesReadError::UUIDParseError(_)) => {
println!("Invalid UUID detected in the file")
}
Err(EmseriesReadError::JSONParseError(_)) => {
println!("The file cannot be parsed and may not be a database")
}
Err(EmseriesReadError::IOError(err)) => {
println!("The file cannot be read: {}", err)
}
}
} else {
let db = Series::open(&path);
match db {
Ok(db) => {
*app.database.write().unwrap() = Some(db);
s.change_view(HistoricalView::new().upcast());
}
Err(EmseriesReadError::IOError(err)) => {
println!("The file cannot be read: {}", err)
}
_ => unreachable!(
"other error types should not be possible when creating a new DB"
),
}
}
})
})
.upcast()
@ -352,7 +340,7 @@ fn main() {
println!("database path: {}", settings.string("series-path"));
let app = App::new();
let app = App::new(settings);
/*
let runtime = tokio::runtime::Builder::new_multi_thread()