diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index eba57380..7fed30ef 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -7718,6 +7718,7 @@ dependencies = [ "sha2", "tauri", "tauri-plugin", + "tauri-plugin-dialog", "thiserror 2.0.12", "tokio", "ts-rs", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index b6afbf0b..5d28a919 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -54,7 +54,7 @@ serde = { workspace = true, features = ["derive"] } serde_json = { workspace = true, features = ["raw_value"] } tauri = { workspace = true, features = ["devtools", "protocol-asset"] } tauri-plugin-clipboard-manager = "2.2.2" -tauri-plugin-dialog = "2.2.0" +tauri-plugin-dialog = { workspace = true } tauri-plugin-fs = "2.2.0" tauri-plugin-log = { version = "2.3.1", features = ["colored"] } tauri-plugin-opener = "2.2.6" @@ -87,6 +87,7 @@ serde = "1.0.219" serde_json = "1.0.140" tauri = "2.4.1" tauri-plugin = "2.1.1" +tauri-plugin-dialog = "2.2.0" tauri-plugin-shell = "2.2.1" tokio = "1.44.2" thiserror = "2.0.12" diff --git a/src-tauri/yaak-models/Cargo.toml b/src-tauri/yaak-models/Cargo.toml index ed0ad1d6..aeb897cb 100644 --- a/src-tauri/yaak-models/Cargo.toml +++ b/src-tauri/yaak-models/Cargo.toml @@ -17,7 +17,8 @@ sea-query-rusqlite = { version = "0.7.0", features = ["with-chrono"] } serde = { workspace = true, features = ["derive"] } serde_json = { workspace = true } sha2 = "0.10.9" -tauri = { workspace = true } +tauri = { workspace = true} +tauri-plugin-dialog = { workspace = true } thiserror = "2.0.11" tokio = { workspace = true } ts-rs = { workspace = true, features = ["chrono-impl", "serde-json-impl"] } diff --git a/src-tauri/yaak-models/src/error.rs b/src-tauri/yaak-models/src/error.rs index f21a9f0b..b7cc7050 100644 --- a/src-tauri/yaak-models/src/error.rs +++ b/src-tauri/yaak-models/src/error.rs @@ -20,6 +20,9 @@ pub enum Error { #[error("Model error: {0}")] GenericError(String), + + #[error("DB Migration Failed: {0}")] + MigrationError(String), #[error("No base environment for {0}")] MissingBaseEnvironment(String), diff --git a/src-tauri/yaak-models/src/lib.rs b/src-tauri/yaak-models/src/lib.rs index e1569879..2ad98813 100644 --- a/src-tauri/yaak-models/src/lib.rs +++ b/src-tauri/yaak-models/src/lib.rs @@ -1,22 +1,24 @@ use crate::commands::*; +use crate::migrate::migrate_db; use crate::query_manager::QueryManager; use crate::util::ModelChangeEvent; +use log::error; use r2d2::Pool; use r2d2_sqlite::SqliteConnectionManager; use std::fs::create_dir_all; use std::time::Duration; use tauri::async_runtime::Mutex; use tauri::plugin::TauriPlugin; -use tauri::{generate_handler, Emitter, Manager, Runtime}; +use tauri::{Emitter, Manager, Runtime, generate_handler}; +use tauri_plugin_dialog::{DialogExt, MessageDialogKind}; use tokio::sync::mpsc; -use crate::migrate::must_migrate_db; mod commands; mod connection_or_tx; -mod migrate; pub mod db_context; pub mod error; +mod migrate; pub mod models; pub mod queries; pub mod query_manager; @@ -57,7 +59,15 @@ pub fn init() -> TauriPlugin { .build(manager) .unwrap(); - must_migrate_db(app_handle.app_handle(), &pool).expect("Failed to run migrations"); + if let Err(e) = migrate_db(app_handle.app_handle(), &pool) { + error!("Failed to run database migration {e:?}"); + app_handle + .dialog() + .message(e.to_string()) + .kind(MessageDialogKind::Error) + .blocking_show(); + return Err(Box::from(e.to_string())); + }; app_handle.manage(SqliteConnection::new(pool.clone())); diff --git a/src-tauri/yaak-models/src/migrate.rs b/src-tauri/yaak-models/src/migrate.rs index cba14b65..8155e262 100644 --- a/src-tauri/yaak-models/src/migrate.rs +++ b/src-tauri/yaak-models/src/migrate.rs @@ -1,5 +1,6 @@ +use crate::error::Error::MigrationError; use crate::error::Result; -use log::{error, info}; +use log::info; use r2d2::Pool; use r2d2_sqlite::SqliteConnectionManager; use rusqlite::{OptionalExtension, TransactionBehavior, params}; @@ -10,7 +11,7 @@ use std::result::Result as StdResult; use tauri::path::BaseDirectory; use tauri::{AppHandle, Manager, Runtime}; -pub(crate) fn must_migrate_db( +pub(crate) fn migrate_db( app_handle: &AppHandle, pool: &Pool, ) -> Result<()> { @@ -54,9 +55,13 @@ pub(crate) fn must_migrate_db( match run_migration(entry.path().as_path(), &mut tx) { Ok(_) => tx.commit()?, Err(e) => { - error!("Failed to apply migration {:?} {e:?}", entry.path().file_name()); + let msg = format!( + "{} failed with {}", + entry.path().file_name().unwrap().to_str().unwrap(), + e.to_string() + ); tx.rollback()?; - return Err(e); + return Err(MigrationError(msg)); } }; }