Finished prism install and changed modpack structure
This commit is contained in:
parent
ae5d60340d
commit
affd3f0a47
@ -15,6 +15,11 @@ tauri = { version = "1", features = ["shell-open"] }
|
|||||||
serde = { version = "1", features = ["derive"] }
|
serde = { version = "1", features = ["derive"] }
|
||||||
serde_json = "1"
|
serde_json = "1"
|
||||||
suppaftp = { version = "6.0.1", features = ["native-tls"] }
|
suppaftp = { version = "6.0.1", features = ["native-tls"] }
|
||||||
|
tar = "0.4.41"
|
||||||
|
flate2 = "1.0.30"
|
||||||
|
zip-extract = "0.1.3"
|
||||||
|
dirs = "5.0.1"
|
||||||
|
gethostname = "0.4.3"
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
# This feature is used for production builds or when a dev server is not specified, DO NOT REMOVE!!
|
# This feature is used for production builds or when a dev server is not specified, DO NOT REMOVE!!
|
||||||
|
47
FCLauncher/src-tauri/src/2
Normal file
47
FCLauncher/src-tauri/src/2
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
// Prevents additional console window on Windows in release, DO NOT REMOVE!!
|
||||||
|
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
|
||||||
|
|
||||||
|
use std::collections::{HashMap, HashSet};
|
||||||
|
use std::{io::Cursor, path::PathBuf};
|
||||||
|
use std::io::Seek;
|
||||||
|
use serde_json::{Map, Result, Value};
|
||||||
|
|
||||||
|
mod ftp;
|
||||||
|
mod java;
|
||||||
|
mod prism;
|
||||||
|
mod system_dirs;
|
||||||
|
mod util;
|
||||||
|
mod modpack;
|
||||||
|
|
||||||
|
struct ModpackEntry{
|
||||||
|
name: String,
|
||||||
|
id: u8
|
||||||
|
}
|
||||||
|
|
||||||
|
// Learn more about Tauri commands at https://tauri.app/v1/guides/features/command
|
||||||
|
#[tauri::command]
|
||||||
|
fn greet(name: &str) -> String {
|
||||||
|
format!("Hello, {}! You've been greeted from Rust!", name)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tauri::command]
|
||||||
|
fn get_modpacks() -> Vec<ModpackEntry> {
|
||||||
|
let mut buf = Cursor::new(vec![]);
|
||||||
|
ftp::ftp_retr(PathBuf::new().join("modpacks.json"), &mut buf, |_| return);
|
||||||
|
buf.rewind();
|
||||||
|
let v: Value = serde_json::from_reader(buf).unwrap();
|
||||||
|
println!("{}", v[0]["name"]);
|
||||||
|
let mut packs: Vec<ModpackEntry> = Vec::new();
|
||||||
|
for pack in v.as_array().unwrap() {
|
||||||
|
packs.push(ModpackEntry{name: pack["name"].as_str().unwrap().to_string(), id: pack["id"].into()});
|
||||||
|
}
|
||||||
|
return packs;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
prism::install_prism();
|
||||||
|
tauri::Builder::default()
|
||||||
|
.invoke_handler(tauri::generate_handler![greet, get_modpacks])
|
||||||
|
.run(tauri::generate_context!())
|
||||||
|
.expect("error while running tauri application");
|
||||||
|
}
|
@ -1,11 +1,25 @@
|
|||||||
// Prevents additional console window on Windows in release, DO NOT REMOVE!!
|
// Prevents additional console window on Windows in release, DO NOT REMOVE!!
|
||||||
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
|
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
|
||||||
|
|
||||||
|
use std::collections::{HashMap, HashSet};
|
||||||
use std::{io::Cursor, path::PathBuf};
|
use std::{io::Cursor, path::PathBuf};
|
||||||
use std::io::Seek;
|
use std::io::Seek;
|
||||||
use serde_json::{Result, Value};
|
use serde_json::{Map, Result, Value};
|
||||||
|
use serde::Serialize;
|
||||||
|
use serde::Deserialize;
|
||||||
|
|
||||||
mod ftp;
|
mod ftp;
|
||||||
|
mod java;
|
||||||
|
mod prism;
|
||||||
|
mod system_dirs;
|
||||||
|
mod util;
|
||||||
|
mod modpack;
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
struct ModpackEntry{
|
||||||
|
name: String,
|
||||||
|
id: String
|
||||||
|
}
|
||||||
|
|
||||||
// Learn more about Tauri commands at https://tauri.app/v1/guides/features/command
|
// Learn more about Tauri commands at https://tauri.app/v1/guides/features/command
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
@ -14,20 +28,21 @@ fn greet(name: &str) -> String {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
fn get_modpacks() -> Vec<String> {
|
fn get_modpacks() -> Vec<ModpackEntry> {
|
||||||
let mut buf = Cursor::new(vec![]);
|
let mut buf = Cursor::new(vec![]);
|
||||||
ftp::ftp_retr(PathBuf::new().join("modpacks.json"), &mut buf, |_| return);
|
ftp::ftp_retr(PathBuf::new().join("modpacks.json"), &mut buf, |_| return);
|
||||||
buf.rewind();
|
buf.rewind();
|
||||||
let v: Value = serde_json::from_reader(buf).unwrap();
|
let v: Value = serde_json::from_reader(buf).unwrap();
|
||||||
println!("{}", v[0]["name"]);
|
println!("{}", v[0]["name"]);
|
||||||
let mut packs: Vec<String> = Vec::new();
|
let mut packs: Vec<ModpackEntry> = Vec::new();
|
||||||
for pack in v.as_array().unwrap() {
|
for pack in v.as_array().unwrap() {
|
||||||
packs.push(pack["name"].as_str().unwrap().to_string());
|
packs.push(ModpackEntry{name: pack["name"].as_str().unwrap().to_string(), id: pack["id"].as_str().unwrap().to_string()});
|
||||||
}
|
}
|
||||||
return packs;
|
return packs;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
prism::install_prism();
|
||||||
tauri::Builder::default()
|
tauri::Builder::default()
|
||||||
.invoke_handler(tauri::generate_handler![greet, get_modpacks])
|
.invoke_handler(tauri::generate_handler![greet, get_modpacks])
|
||||||
.run(tauri::generate_context!())
|
.run(tauri::generate_context!())
|
||||||
|
2
FCLauncher/src-tauri/src/modpack.rs
Normal file
2
FCLauncher/src-tauri/src/modpack.rs
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
|||||||
use std::{env, io::{Cursor, Seek}, path::PathBuf};
|
use std::{env, fs::File, io::{BufRead, Cursor, Seek, Write}, path::PathBuf, str::FromStr};
|
||||||
use flate2::read::GzDecoder;
|
use flate2::read::GzDecoder;
|
||||||
use tar::Archive;
|
use tar::Archive;
|
||||||
|
use tauri::api::file;
|
||||||
|
|
||||||
use crate::{ftp, java, system_dirs::get_local_data_directory};
|
use crate::{ftp, java, system_dirs::get_local_data_directory};
|
||||||
|
|
||||||
@ -37,8 +38,23 @@ pub fn install_prism() -> Result<(), Box<dyn std::error::Error>>{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let buff = Cursor::new(vec![]);
|
let mut buff = Cursor::new(vec![]);
|
||||||
ftp::ftp_retr(PathBuf, writer, callback)
|
ftp::ftp_retr(PathBuf::new().join("prism").join("prismlauncher.cfg"), &mut buff, |_| return).unwrap();
|
||||||
|
buff.rewind();
|
||||||
|
let mut file = File::create(get_local_data_directory().join("prism").join("prismlauncher.cfg")).unwrap();
|
||||||
|
loop {
|
||||||
|
let mut buf = String::new();
|
||||||
|
let count = buff.read_line(&mut buf).unwrap();
|
||||||
|
if count == 0 {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if buf.starts_with("JavaPath") {
|
||||||
|
buf = format!("JavaPath={}/java/java-21-{}\n", get_local_data_directory().to_str().unwrap().replace("\\", "/"), if env::consts::OS == "windows" { "win" } else { "lin" });
|
||||||
|
}else if buf.starts_with("LastHostname") {
|
||||||
|
buf = format!("LastHostname={}\n", gethostname::gethostname().to_str().unwrap());
|
||||||
|
}
|
||||||
|
file.write_all(buf.as_bytes());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
@ -2,7 +2,19 @@ use std::{env, path::{Path, PathBuf}};
|
|||||||
use dirs::home_dir;
|
use dirs::home_dir;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
pub fn get_local_data_directory() -> PathBuf {
|
pub fn get_local_data_directory() -> PathBuf {
|
||||||
dirs::data_local_dir().unwrap().join("FCLauncher")
|
dirs::data_local_dir().unwrap().join("FCLauncher")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_data_directory() -> PathBuf {
|
||||||
|
dirs::data_dir().unwrap().join("FCLauncher")
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_java_executable() -> String {
|
||||||
|
return format!("java{}", if env::consts::OS == "windows" { ".exe" } else { "" })
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
pub fn get_prism_executable() -> String {
|
||||||
|
return format!("{}", if env::consts::OS == "windows" { "prismlauncher.exe" } else { "PrismLauncher" })
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user