handle setup errors more gracefully

This commit is contained in:
Joseph Montanaro 2023-09-13 11:06:40 -07:00
parent 1d9132de3b
commit 997e8b419f
3 changed files with 17 additions and 5 deletions

View File

@ -2,7 +2,7 @@
* Switch to "process" provider for AWS credentials (much less hacky)
* Session timeout (plain duration, or activity-based?)
* Fix rehide behavior when new request comes in while old one is still being resolved
* ~Fix rehide behavior when new request comes in while old one is still being resolved~
* Additional hotkey configuration (approve/deny at the very least)
* Logging
* Icon

View File

@ -75,15 +75,27 @@ pub async fn connect_db() -> Result<SqlitePool, SetupError> {
async fn setup(app: &mut App) -> Result<(), Box<dyn Error>> {
APP.set(app.handle()).unwrap();
let is_first_launch = config::get_or_create_db_path()?.exists();
// get_or_create_db_path doesn't create the actual db file, just the directory
let is_first_launch = !config::get_or_create_db_path()?.exists();
let pool = connect_db().await?;
let conf = AppConfig::load(&pool).await?;
let conf = match AppConfig::load(&pool).await {
Ok(c) => c,
Err(SetupError::ConfigParseError(_)) => {
Err("Could not load configuration from database. Reverting to defaults.")
.error_popup("Setup error");
AppConfig::default()
},
err => err?,
};
let session = Session::load(&pool).await?;
let srv = Server::new(conf.listen_addr, conf.listen_port, app.handle()).await?;
config::set_auto_launch(conf.start_on_login)?;
config::register_hotkeys(&conf.hotkeys)?;
config::register_hotkeys(&conf.hotkeys).error_popup("Setup error");
// if session is empty, this is probably the first launch, so don't autohide
if !conf.start_minimized || is_first_launch {
app.get_window("main")

View File

@ -24,7 +24,7 @@ pub trait ErrorPopup {
fn error_popup(self, title: &str);
}
impl<E: Error> ErrorPopup for Result<(), E> {
impl<E: std::fmt::Display> ErrorPopup for Result<(), E> {
fn error_popup(self, title: &str) {
if let Err(e) = self {
let (tx, rx) = mpsc::channel();