diff --git a/src-tauri/src/app.rs b/src-tauri/src/app.rs index 417c338..fd97686 100644 --- a/src-tauri/src/app.rs +++ b/src-tauri/src/app.rs @@ -1,8 +1,3 @@ -#![cfg_attr( - all(not(debug_assertions), target_os = "windows"), - windows_subsystem = "windows" -)] - use std::error::Error; use once_cell::sync::OnceCell; @@ -32,33 +27,6 @@ use crate::{ pub static APP: OnceCell = OnceCell::new(); -async fn setup(app: &mut App) -> Result<(), Box> { - APP.set(app.handle()).unwrap(); - - let conn_opts = SqliteConnectOptions::new() - .filename(config::get_or_create_db_path()?) - .create_if_missing(true); - let pool_opts = SqlitePoolOptions::new(); - let pool: SqlitePool = pool_opts.connect_with(conn_opts).await?; - sqlx::migrate!().run(&pool).await?; - - let conf = AppConfig::load(&pool).await?; - 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)?; - if !conf.start_minimized { - app.get_window("main") - .ok_or(HandlerError::NoMainWindow)? - .show()?; - } - - let state = AppState::new(conf, session, srv, pool); - app.manage(state); - Ok(()) -} - - pub fn run() -> tauri::Result<()> { tauri::Builder::default() .plugin(tauri_plugin_single_instance::init(|app, _argv, _cwd| { @@ -89,4 +57,37 @@ pub fn run() -> tauri::Result<()> { }); Ok(()) -} \ No newline at end of file +} + + +pub async fn connect_db() -> Result { + let conn_opts = SqliteConnectOptions::new() + .filename(config::get_or_create_db_path()?) + .create_if_missing(true); + let pool_opts = SqlitePoolOptions::new(); + let pool: SqlitePool = pool_opts.connect_with(conn_opts).await?; + Ok(pool) +} + + +async fn setup(app: &mut App) -> Result<(), Box> { + APP.set(app.handle()).unwrap(); + + let pool = connect_db().await?; + sqlx::migrate!().run(&pool).await?; + + let conf = AppConfig::load(&pool).await?; + 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)?; + if !conf.start_minimized { + app.get_window("main") + .ok_or(HandlerError::NoMainWindow)? + .show()?; + } + + let state = AppState::new(conf, session, srv, pool); + app.manage(state); + Ok(()) +} diff --git a/src-tauri/src/cli.rs b/src-tauri/src/cli.rs index 80b94a1..44c65b5 100644 --- a/src-tauri/src/cli.rs +++ b/src-tauri/src/cli.rs @@ -1,4 +1,3 @@ -use std::io::{Read, Write}; use std::process::Command as ChildCommand; #[cfg(unix)] use std::os::unix::process::CommandExt; @@ -9,9 +8,14 @@ use clap::{ ArgMatches, ArgAction }; -use std::net::TcpStream; +use tokio::{ + net::TcpStream, + io::{AsyncReadExt, AsyncWriteExt}, +}; +use crate::app; +use crate::config::AppConfig; use crate::credentials::{BaseCredentials, SessionCredentials}; use crate::errors::*; @@ -98,16 +102,19 @@ pub fn exec(args: &ArgMatches) -> Result<(), CliError> { } -fn get_credentials(base: bool) -> Result { +#[tokio::main] +async fn get_credentials(base: bool) -> Result { + let pool = app::connect_db().await?; + let config = AppConfig::load(&pool).await?; let path = if base {"/creddy/base-credentials"} else {"/"}; - let mut stream = TcpStream::connect("127.0.0.1:12345")?; + let mut stream = TcpStream::connect((config.listen_addr, config.listen_port)).await?; let req = format!("GET {path} HTTP/1.0\r\n\r\n"); - stream.write_all(req.as_bytes())?; + stream.write_all(req.as_bytes()).await?; // some day we'll have a proper HTTP parser let mut buf = vec![0; 8192]; - stream.read_to_end(&mut buf)?; + stream.read_to_end(&mut buf).await?; let status = buf.split(|&c| &[c] == b" ") .skip(1) diff --git a/src-tauri/src/errors.rs b/src-tauri/src/errors.rs index 1c370d5..7d014f0 100644 --- a/src-tauri/src/errors.rs +++ b/src-tauri/src/errors.rs @@ -198,6 +198,8 @@ pub enum RequestError { InvalidJson, #[error("Error reading/writing stream: {0}")] StreamIOError(#[from] std::io::Error), + #[error("Error loading configuration data: {0}")] + Setup(#[from] SetupError), } diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index fa14562..4065849 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -1,3 +1,9 @@ +#![cfg_attr( + all(not(debug_assertions), target_os = "windows"), + windows_subsystem = "windows" +)] + + mod app; mod cli; mod config;