From fdaacaa6f38038ea83c851ddbdcc9caf4e39e1c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kav=C3=ADk?= Date: Thu, 28 Nov 2024 18:09:49 +0100 Subject: [PATCH] Konata fix for Unix --- Cargo.lock | 1 + src-tauri/Cargo.toml | 1 + src-tauri/src/lib.rs | 56 +++++++++++++++++++++++++++++--------------- 3 files changed, 39 insertions(+), 19 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index daf336e..bd89954 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1701,6 +1701,7 @@ dependencies = [ "tauri-build", "tauri-plugin-dialog", "tauri-plugin-window-state", + "tokio", "wasmtime", "wasmtime-wasi", "wellen", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 421c6c9..9eddf64 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -26,6 +26,7 @@ tauri-plugin-dialog = "=2.0.0-beta.9" once_cell = "1.19.0" futures = "0.3.30" reqwest = "0.12.9" +tokio = "*" # wasmtime = "22.0.0" # wasmtime-wasi = "22.0.0" diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 5582dcf..363a88e 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -5,6 +5,7 @@ use std::sync::{Arc, RwLock as StdRwLock}; use std::time::Duration; use tauri::{async_runtime::RwLock, AppHandle}; use tauri_plugin_dialog::DialogExt; +use tokio::time::sleep; use wasmtime::AsContextMut; use wellen::simple::Waveform; @@ -188,39 +189,56 @@ async fn open_konata_file(app: tauri::AppHandle) { }; let file_path = file_response.path.into_os_string().into_string().unwrap(); - spawn_konata_app(); - let port = 30000; let base_url = format!("http://localhost:{port}"); let client = reqwest::Client::builder() - .timeout(Duration::from_secs(30)) + .connect_timeout(Duration::from_secs(1)) .build() .unwrap(); - if client - .get(format!("{base_url}/status")) - .send() - .await - .is_ok() - { + + let mut konata_server_ready = false; + + let is_konata_server_ready = || async { client - .post(format!("{base_url}/open-konata-file")) - .json(&serde_json::json!({ - "file_path": file_path - })) + .get(format!("{base_url}/status")) .send() .await - .unwrap() - .error_for_status() - .unwrap(); + .is_ok() + }; + + if is_konata_server_ready().await { + konata_server_ready = true; } else { - println!("Failed to get Konata server status"); + spawn_konata_app(); } + + let mut attempts = 1; + while !konata_server_ready { + attempts += 1; + if attempts > 5 { + eprintln!("Failed to get Konata server status (5 attempts)"); + return; + } + konata_server_ready = is_konata_server_ready().await; + sleep(Duration::from_secs(1)).await; + } + + client + .post(format!("{base_url}/open-konata-file")) + .json(&serde_json::json!({ + "file_path": file_path + })) + .send() + .await + .unwrap() + .error_for_status() + .unwrap(); } #[cfg(target_family = "windows")] fn spawn_konata_app() { Command::new("cscript") - .current_dir("../../konata") + .current_dir("../../Konata") .arg("konata.vbs") .spawn() .unwrap(); @@ -229,7 +247,7 @@ fn spawn_konata_app() { #[cfg(target_family = "unix")] fn spawn_konata_app() { Command::new("sh") - .current_dir("../../konata") + .current_dir("../../Konata") .arg("konata.sh") .spawn() .unwrap();