summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar cel 🌸 <cel@bunny.garden>2025-06-11 23:40:38 +0100
committerLibravatar cel 🌸 <cel@bunny.garden>2025-06-11 23:40:38 +0100
commitcdd9c8256204b07fb2600a350cc63ea485a2a766 (patch)
tree34a54d840043d7e870eb81a8e1464480186abc18
parentadeac2e7cd93ea449de0ce30247adbd13cd7120d (diff)
downloadmacaw-web-cdd9c8256204b07fb2600a350cc63ea485a2a766.tar.gz
macaw-web-cdd9c8256204b07fb2600a350cc63ea485a2a766.tar.bz2
macaw-web-cdd9c8256204b07fb2600a350cc63ea485a2a766.zip
fix: handle DatabaseOpenError in login page
-rw-r--r--Cargo.lock1
-rw-r--r--src/views/login_page.rs18
2 files changed, 13 insertions, 6 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 2c5b5c7..17e8e4a 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -780,6 +780,7 @@ dependencies = [
"hex",
"image",
"jid",
+ "js-sys",
"lampada",
"reactive_stores",
"rusqlite",
diff --git a/src/views/login_page.rs b/src/views/login_page.rs
index 9a5fc4c..3506aee 100644
--- a/src/views/login_page.rs
+++ b/src/views/login_page.rs
@@ -1,10 +1,7 @@
use std::{str::FromStr, sync::Arc};
use filamento::{
- UpdateMessage,
- db::Db,
- error::{CommandError, ConnectionError},
- files::{FilesMem, FilesOPFS, opfs::OPFSError},
+ db::Db, error::{CommandError, ConnectionError, DatabaseOpenError}, files::{opfs::OPFSError, FilesMem, FilesOPFS}, UpdateMessage
};
use jid::JID;
use leptos::prelude::*;
@@ -26,6 +23,8 @@ pub enum LoginError {
InvalidJID(#[from] jid::ParseError),
#[error("Connection Error: {0}")]
ConnectionError(#[from] CommandError<ConnectionError>),
+ #[error("Failed to open database: {0}")]
+ DatabaseOpen(#[from] DatabaseOpenError),
#[error("OPFS: {0}")]
OPFS(#[from] OPFSError),
}
@@ -84,10 +83,17 @@ pub fn LoginPage(
debug!("creating db in opfs");
Db::create_connect_and_migrate(jid.as_bare().to_string())
.await
- .unwrap()
} else {
debug!("creating db in memory");
- Db::create_connect_and_migrate_memory().await.unwrap()
+ Db::create_connect_and_migrate_memory().await
+ };
+ let db = match db {
+ Ok(db) => db,
+ Err(e) => {
+ set_error.set(Some(e.into()));
+ set_login_pending.set(false);
+ return;
+ }
};
let files = if remember_me {
let opfs = FilesOPFS::new(jid.as_bare().to_string()).await;