aboutsummaryrefslogtreecommitdiff
path: root/src-tauri/src/development/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src-tauri/src/development/mod.rs')
-rw-r--r--src-tauri/src/development/mod.rs84
1 files changed, 84 insertions, 0 deletions
diff --git a/src-tauri/src/development/mod.rs b/src-tauri/src/development/mod.rs
new file mode 100644
index 00000000..be02966d
--- /dev/null
+++ b/src-tauri/src/development/mod.rs
@@ -0,0 +1,84 @@
+use crate::constants::NS_LAUNCHER_COMMITS_API_URL;
+use crate::github::{
+ pull_requests::{check_github_api, download_zip_into_memory, get_launcher_download_link},
+ CommitInfo,
+};
+
+#[tauri::command]
+pub async fn install_git_main(game_install_path: &str) -> Result<String, String> {
+ // Get list of commits
+ let commits: Vec<CommitInfo> = serde_json::from_value(
+ check_github_api(NS_LAUNCHER_COMMITS_API_URL)
+ .await
+ .expect("Failed request"),
+ )
+ .unwrap();
+
+ // Get latest commit...
+ let latest_commit_sha = commits[0].sha.clone();
+ // ...and according artifact download URL
+ let download_url = get_launcher_download_link(latest_commit_sha.clone()).await?;
+
+ let archive = match download_zip_into_memory(download_url).await {
+ Ok(archive) => archive,
+ Err(err) => return Err(err.to_string()),
+ };
+
+ let extract_directory = format!(
+ "{}/___flightcore-temp-download-dir/launcher-pr-{}",
+ game_install_path, latest_commit_sha
+ );
+ match std::fs::create_dir_all(extract_directory.clone()) {
+ Ok(_) => (),
+ Err(err) => {
+ return Err(format!(
+ "Failed creating temporary download directory: {}",
+ err
+ ))
+ }
+ };
+
+ let target_dir = std::path::PathBuf::from(extract_directory.clone()); // Doesn't need to exist
+ match zip_extract::extract(std::io::Cursor::new(archive), &target_dir, true) {
+ Ok(()) => (),
+ Err(err) => {
+ return Err(format!("Failed unzip: {}", err));
+ }
+ };
+
+ // Copy only necessary files from temp dir
+ // Copy:
+ // - NorthstarLauncher.exe
+ // - Northstar.dll
+ let files_to_copy = vec!["NorthstarLauncher.exe", "Northstar.dll"];
+ for file_name in files_to_copy {
+ let source_file_path = format!("{}/{}", extract_directory, file_name);
+ let destination_file_path = format!("{}/{}", game_install_path, file_name);
+ match std::fs::copy(source_file_path, destination_file_path) {
+ Ok(_result) => (),
+ Err(err) => {
+ return Err(format!(
+ "Failed to copy necessary file {} from temp dir: {}",
+ file_name, err
+ ))
+ }
+ };
+ }
+
+ // delete extract directory
+ match std::fs::remove_dir_all(&extract_directory) {
+ Ok(()) => (),
+ Err(err) => {
+ return Err(format!(
+ "Failed to delete temporary download directory: {}",
+ err
+ ))
+ }
+ }
+
+ log::info!(
+ "All done with installing launcher from {}",
+ latest_commit_sha
+ );
+ Ok(latest_commit_sha)
+}