diff --git a/src-tauri/src/error.rs b/src-tauri/src/error.rs index 4c94b05..e10299a 100644 --- a/src-tauri/src/error.rs +++ b/src-tauri/src/error.rs @@ -39,6 +39,9 @@ pub enum PIVXErrors { #[error("Invalid response from RPC")] InvalidResponse, + + #[error("Failed to fetch sapling params")] + FetchParamsFailed, } pub type Result = std::result::Result; diff --git a/src-tauri/src/explorer/mod.rs b/src-tauri/src/explorer/mod.rs index cb9e192..ffbf7c4 100644 --- a/src-tauri/src/explorer/mod.rs +++ b/src-tauri/src/explorer/mod.rs @@ -56,8 +56,11 @@ async fn get_explorer() -> &'static DefaultExplorer { let pivx_rpc = PIVXRpc::new(&format!("http://127.0.0.1:{}", RPC_PORT)) .await .unwrap(); + // FIXME: refactor this to accept HOME let address_index = AddressIndex::new( - SqlLite::new(PathBuf::from("~/test.sqlite")).await.unwrap(), + SqlLite::new(PathBuf::from("/home/duddino/test.sqlite")) + .await + .unwrap(), pivx_rpc.clone(), ); std::mem::forget(pivx); diff --git a/src-tauri/src/pivx/mod.rs b/src-tauri/src/pivx/mod.rs index 1f7e676..cf691d0 100644 --- a/src-tauri/src/pivx/mod.rs +++ b/src-tauri/src/pivx/mod.rs @@ -5,20 +5,41 @@ use crate::error::PIVXErrors; use flate2::read::GzDecoder; use std::fs::File; use std::path::{Path, PathBuf}; +use std::process::Command; use tar::Archive; use crate::binary::BinaryDefinition; pub struct PIVXDefinition; -impl BinaryDefinition for PIVXDefinition { - fn decompress_archive(&self, dir: &Path) -> Result<(), PIVXErrors> { +impl PIVXDefinition { + fn inner_decompress_archive(&self, dir: &Path) -> Result<(), PIVXErrors> { let mut tarball = Archive::new(GzDecoder::new(File::open(dir.join("pivxd.tar.gz"))?)); tarball.unpack(dir)?; - Ok(()) } + fn inner_install_params(&self, dir: &Path) -> Result<(), PIVXErrors> { + let pivx_dir = dir.join("pivx-5.6.1"); + let script_path = pivx_dir.join("install-params.sh"); + let mut handle = Command::new(script_path) + .current_dir(pivx_dir) + .spawn() + .map_err(|_| PIVXErrors::FetchParamsFailed)?; + let status = handle.wait().map_err(|_| PIVXErrors::FetchParamsFailed)?; + match status.success() { + true => Ok(()), + false => Err(PIVXErrors::FetchParamsFailed), + } + } +} + +impl BinaryDefinition for PIVXDefinition { + fn decompress_archive(&self, dir: &Path) -> Result<(), PIVXErrors> { + self.inner_decompress_archive(dir)?; + self.inner_install_params(dir) + } + fn get_url(&self) -> &str { #[cfg(target_os = "linux")] return "https://github.com/PIVX-Project/PIVX/releases/download/v5.6.1/pivx-5.6.1-x86_64-linux-gnu.tar.gz"; diff --git a/src-tauri/src/pivx/test.rs b/src-tauri/src/pivx/test.rs index e5a0046..b08918f 100644 --- a/src-tauri/src/pivx/test.rs +++ b/src-tauri/src/pivx/test.rs @@ -24,7 +24,7 @@ mod pivx_fetch { ]; file.write_all(&data)?; let pivx_def = PIVXDefinition; - pivx_def.decompress_archive(&data_dir)?; + pivx_def.inner_decompress_archive(&data_dir)?; let mut dirs: Vec<_> = std::fs::read_dir(data_dir)? .filter_map(|d| {