Uploader no longer deletes your mods, extension rename now works, absolute path now works

This commit is contained in:
2024-04-10 00:41:37 -03:00
parent 53898e90be
commit af316b349a
3 changed files with 55 additions and 8 deletions

20
Cargo.lock generated
View File

@ -2096,6 +2096,15 @@ dependencies = [
"bytemuck",
]
[[package]]
name = "same-file"
version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
dependencies = [
"winapi-util",
]
[[package]]
name = "scoped-tls"
version = "1.0.1"
@ -2495,6 +2504,16 @@ version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
[[package]]
name = "walkdir"
version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
dependencies = [
"same-file",
"winapi-util",
]
[[package]]
name = "wasi"
version = "0.11.0+wasi-snapshot-preview1"
@ -3185,6 +3204,7 @@ dependencies = [
"native-dialog",
"open",
"steamworks",
"walkdir",
"winres",
]

View File

@ -16,6 +16,7 @@ native-dialog = "0.6.3"
image = "0.24.7"
open = "5.1.2"
fs_extra = "1.3.0"
walkdir = "2.5.0"
[build-dependencies]
winres = "0.1.12"

View File

@ -6,6 +6,8 @@ use std::thread::Thread;
use std::time::Duration;
use steamworks::{Client, PublishedFileId, QueryResult, QueryResults, SingleClient, SteamError};
use std::fs;
use std::path::Path;
use walkdir::WalkDir;
#[derive(Debug, Clone)]
pub struct SingleClientExecutor {
@ -200,34 +202,58 @@ impl WorkshopClient {
item_info: ItemInfo,
) -> Result<(PublishedFileId, bool), SteamError> {
let temp_dir = std::env::temp_dir(); // Get the temporary directory
let mut temp_folder = temp_dir.join("wani_workshop_folder"); // Create a specific folder within temporary directory
let temp_folder = temp_dir.join("wani_workshop_folder"); // Create a specific folder within temporary directory
let mut full_folder = temp_folder.join("mods");
// Create the folders if they doesn't exist
if !temp_folder.exists() {
let _ = fs::create_dir(&temp_folder);
}
if !full_folder.exists() {
if !full_folder.exists() && !item_info.use_abs_path{
let _ = fs::create_dir(&full_folder);
}
if item_info.use_abs_path {
full_folder = item_info.target_folder.clone();
temp_folder = item_info.target_folder.clone();
full_folder = temp_folder.clone();
}
println!("{}",item_info.convert_rpy);
// // Copy the contents of the target folder to the temporary folder
if !item_info.use_abs_path{
let _ = fs_extra::dir::copy(&item_info.target_folder, &full_folder, &fs_extra::dir::CopyOptions::new());
} else {
let entries = match fs::read_dir(&item_info.target_folder) {
Ok(entries) => entries,
Err(_err) => return Err(SteamError::FileNotFound),
};
for entry in entries {
let entry = match entry {
Ok(entry) => entry,
Err(_err) => return Err(SteamError::FileNotFound),
};
let entry_path = entry.path();
let relative_path = match entry_path.strip_prefix(Path::new(&item_info.target_folder)){
Ok(relative_path) => relative_path,
Err(_err) => return Err(SteamError::FileNotFound),
};
let destination_path = temp_folder.join(relative_path);
if entry_path.is_file(){
let _ = fs::copy(entry_path, destination_path);
} else if entry_path.is_dir() {
let _ = fs_extra::dir::copy(&entry_path, &temp_folder, &fs_extra::dir::CopyOptions::new());
}
}
}
if item_info.convert_rpy {
let entries = match fs::read_dir(&full_folder) {
Ok(entries) => entries,
Err(_err) => return Err(SteamError::FileNotFound),
};
let entries = WalkDir::new(&full_folder);
for entry in entries {
let entry = match entry {
Ok(entry) => entry,