mirror of
https://github.com/Grasscutters/Cultivation.git
synced 2025-12-13 15:44:35 +01:00
non-blocking commands for reshade
This commit is contained in:
@@ -1,13 +1,13 @@
|
|||||||
use duct::cmd;
|
use duct::cmd;
|
||||||
|
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
pub fn run_program(path: String) {
|
pub fn run_program(path: String, args: Option<String>) {
|
||||||
// Without unwrap_or, this can crash when UAC prompt is denied
|
// Without unwrap_or, this can crash when UAC prompt is denied
|
||||||
open::that(&path).unwrap_or(());
|
open::that(format!("{} {}", &path, &args.unwrap_or("".into()))).unwrap_or(());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
pub fn run_program_relative(path: String) {
|
pub fn run_program_relative(path: String, args: Option<String>) {
|
||||||
// Save the current working directory
|
// Save the current working directory
|
||||||
let cwd = std::env::current_dir().unwrap();
|
let cwd = std::env::current_dir().unwrap();
|
||||||
|
|
||||||
@@ -18,8 +18,10 @@ pub fn run_program_relative(path: String) {
|
|||||||
// Set new working directory
|
// Set new working directory
|
||||||
std::env::set_current_dir(&path_buf).unwrap();
|
std::env::set_current_dir(&path_buf).unwrap();
|
||||||
|
|
||||||
|
println!("Opening {} {}", &path, args.clone().unwrap_or("".into()));
|
||||||
|
|
||||||
// Without unwrap_or, this can crash when UAC prompt is denied
|
// Without unwrap_or, this can crash when UAC prompt is denied
|
||||||
open::that(&path).unwrap_or(());
|
open::that(format!("{} {}", &path, args.unwrap_or("".into()))).unwrap_or(());
|
||||||
|
|
||||||
// Restore the original working directory
|
// Restore the original working directory
|
||||||
std::env::set_current_dir(&cwd).unwrap();
|
std::env::set_current_dir(&cwd).unwrap();
|
||||||
@@ -27,7 +29,13 @@ pub fn run_program_relative(path: String) {
|
|||||||
|
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
pub fn run_command(program: &str, args: Vec<&str>) {
|
pub fn run_command(program: &str, args: Vec<&str>) {
|
||||||
cmd(program, args).run().expect("Failed to run command");
|
let prog = program.to_string();
|
||||||
|
let args = args.iter().map(|s| s.to_string()).collect::<Vec<String>>();
|
||||||
|
|
||||||
|
// Commands should not block (this is for the reshade injector mostly)
|
||||||
|
std::thread::spawn(move || {
|
||||||
|
cmd(prog, args).run().unwrap();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import './ExtrasMenu.css'
|
|||||||
import BigButton from '../common/BigButton'
|
import BigButton from '../common/BigButton'
|
||||||
import { invoke } from '@tauri-apps/api'
|
import { invoke } from '@tauri-apps/api'
|
||||||
import Tr from '../../../utils/language'
|
import Tr from '../../../utils/language'
|
||||||
|
import { getGameExecutable } from '../../../utils/game'
|
||||||
|
|
||||||
interface IProps {
|
interface IProps {
|
||||||
children: React.ReactNode | React.ReactNode[]
|
children: React.ReactNode | React.ReactNode[]
|
||||||
@@ -108,7 +109,10 @@ export class ExtrasMenu extends React.Component<IProps, IState> {
|
|||||||
|
|
||||||
if (!config.reshade_path) return alert('Reshade not installed or set!')
|
if (!config.reshade_path) return alert('Reshade not installed or set!')
|
||||||
|
|
||||||
await invoke('run_program_relative', { path: config.reshade_path })
|
await invoke('run_command', {
|
||||||
|
program: config.reshade_path,
|
||||||
|
args: [await getGameExecutable()],
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
toggleMigoto() {
|
toggleMigoto() {
|
||||||
|
|||||||
Reference in New Issue
Block a user