mirror of
https://github.com/SlimeVR/SlimeVR-Server.git
synced 2026-04-06 02:01:58 +02:00
Make a dialog appear when rust app panics (#310)
This commit is contained in:
77
Cargo.lock
generated
77
Cargo.lock
generated
@@ -582,6 +582,12 @@ version = "1.0.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0bd4b30a6560bbd9b4620f4de34c3f14f60848e58a9b7216801afcb4c7b31c3c"
|
||||
|
||||
[[package]]
|
||||
name = "either"
|
||||
version = "1.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797"
|
||||
|
||||
[[package]]
|
||||
name = "embed_plist"
|
||||
version = "1.2.2"
|
||||
@@ -1396,6 +1402,26 @@ dependencies = [
|
||||
"adler",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "native-dialog"
|
||||
version = "0.6.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0ab637f328b31bd0855c43bd38a4a4455e74324d9e74e0aac6a803422f43abc6"
|
||||
dependencies = [
|
||||
"block",
|
||||
"cocoa",
|
||||
"dirs-next",
|
||||
"objc",
|
||||
"objc-foundation",
|
||||
"objc_id",
|
||||
"once_cell",
|
||||
"raw-window-handle 0.4.3",
|
||||
"thiserror",
|
||||
"wfd",
|
||||
"which",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ndk"
|
||||
version = "0.6.0"
|
||||
@@ -1517,6 +1543,17 @@ dependencies = [
|
||||
"objc_exception",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "objc-foundation"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
|
||||
dependencies = [
|
||||
"block",
|
||||
"objc",
|
||||
"objc_id",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "objc_exception"
|
||||
version = "0.1.2"
|
||||
@@ -1943,6 +1980,15 @@ dependencies = [
|
||||
"rand_core 0.5.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "raw-window-handle"
|
||||
version = "0.4.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b800beb9b6e7d2df1fe337c9e3d04e3af22a124460fb4c30fcc22c9117cefb41"
|
||||
dependencies = [
|
||||
"cty",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "raw-window-handle"
|
||||
version = "0.5.0"
|
||||
@@ -2258,7 +2304,9 @@ version = "0.0.0"
|
||||
dependencies = [
|
||||
"clap-verbosity-flag",
|
||||
"log",
|
||||
"native-dialog",
|
||||
"pretty_env_logger",
|
||||
"rand 0.8.5",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"tauri",
|
||||
@@ -2421,7 +2469,7 @@ dependencies = [
|
||||
"parking_lot",
|
||||
"paste",
|
||||
"png",
|
||||
"raw-window-handle",
|
||||
"raw-window-handle 0.5.0",
|
||||
"scopeguard",
|
||||
"serde",
|
||||
"unicode-segmentation",
|
||||
@@ -2467,7 +2515,7 @@ dependencies = [
|
||||
"os_pipe",
|
||||
"percent-encoding",
|
||||
"rand 0.8.5",
|
||||
"raw-window-handle",
|
||||
"raw-window-handle 0.5.0",
|
||||
"regex",
|
||||
"semver 1.0.14",
|
||||
"serde",
|
||||
@@ -2569,7 +2617,7 @@ dependencies = [
|
||||
"http",
|
||||
"http-range",
|
||||
"rand 0.8.5",
|
||||
"raw-window-handle",
|
||||
"raw-window-handle 0.5.0",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"tauri-utils",
|
||||
@@ -2589,7 +2637,7 @@ dependencies = [
|
||||
"gtk",
|
||||
"percent-encoding",
|
||||
"rand 0.8.5",
|
||||
"raw-window-handle",
|
||||
"raw-window-handle 0.5.0",
|
||||
"tauri-runtime",
|
||||
"tauri-utils",
|
||||
"uuid 1.2.2",
|
||||
@@ -3041,6 +3089,27 @@ dependencies = [
|
||||
"windows-metadata",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wfd"
|
||||
version = "0.1.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e713040b67aae5bf1a0ae3e1ebba8cc29ab2b90da9aa1bff6e09031a8a41d7a8"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "which"
|
||||
version = "4.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1c831fbbee9e129a8cf93e7747a82da9d95ba8e16621cae60ec2cdc849bacb7b"
|
||||
dependencies = [
|
||||
"either",
|
||||
"libc",
|
||||
"once_cell",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "win32job"
|
||||
version = "1.0.2"
|
||||
|
||||
@@ -31,6 +31,8 @@ pretty_env_logger = "0.4"
|
||||
log = "0.4"
|
||||
clap-verbosity-flag = "1"
|
||||
tauri-plugin-window-state = "0.1.0"
|
||||
native-dialog = "0.6.3"
|
||||
rand = "0.8.5"
|
||||
|
||||
[target.'cfg(windows)'.dependencies]
|
||||
win32job = "1"
|
||||
|
||||
@@ -1,16 +1,28 @@
|
||||
#![cfg_attr(
|
||||
all(not(debug_assertions), target_os = "windows"),
|
||||
all(not(debug_assertions), windows),
|
||||
windows_subsystem = "windows"
|
||||
)]
|
||||
use std::env;
|
||||
use std::panic;
|
||||
use std::path::PathBuf;
|
||||
|
||||
use clap::Parser;
|
||||
use clap_verbosity_flag::{InfoLevel, Verbosity};
|
||||
use std::env;
|
||||
use std::path::PathBuf;
|
||||
use native_dialog::{MessageDialog, MessageType};
|
||||
use rand::seq::SliceRandom;
|
||||
use rand::thread_rng;
|
||||
use tauri::api::clap;
|
||||
use tauri::api::process::Command;
|
||||
use tauri::Manager;
|
||||
|
||||
static POSSIBLE_TITLES: &[&str] = &[
|
||||
"Panicking situation",
|
||||
"looking for spatula",
|
||||
"never gonna give you up",
|
||||
"never gonna let you down",
|
||||
"uwu sowwy",
|
||||
];
|
||||
|
||||
#[derive(Parser)]
|
||||
#[clap(version, about)]
|
||||
struct Cli {
|
||||
@@ -48,7 +60,25 @@ fn get_launch_path(cli: Cli) -> Option<PathBuf> {
|
||||
None
|
||||
}
|
||||
|
||||
fn show_error(text: &str) {
|
||||
MessageDialog::new()
|
||||
.set_title(&format!(
|
||||
"SlimeVR GUI crashed - {}",
|
||||
POSSIBLE_TITLES.choose(&mut thread_rng()).unwrap()
|
||||
))
|
||||
.set_text(text)
|
||||
.set_type(MessageType::Error)
|
||||
.show_alert()
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
fn main() {
|
||||
// Make an error dialog box when panicking
|
||||
panic::set_hook(Box::new(|panic_info| {
|
||||
eprintln!("{}", panic_info);
|
||||
show_error(&panic_info.to_string());
|
||||
}));
|
||||
|
||||
let cli = Cli::parse();
|
||||
|
||||
// Set up loggers and global handlers
|
||||
@@ -60,7 +90,7 @@ fn main() {
|
||||
}
|
||||
|
||||
// Ensure child processes die when spawned on windows
|
||||
#[cfg(target_os = "windows")]
|
||||
#[cfg(windows)]
|
||||
{
|
||||
use win32job::{ExtendedLimitInfo, Job};
|
||||
|
||||
|
||||
12
package-lock.json
generated
12
package-lock.json
generated
@@ -5521,9 +5521,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/flatbuffers": {
|
||||
"version": "22.10.26",
|
||||
"resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-22.10.26.tgz",
|
||||
"integrity": "sha512-sdO3emf/BlLfOogW6KwHuXg16APR/E86jNacDXfSInPzt8SSEzxlHcqDekfM/IJ1CGC5bvDksfNufNhS8h1FRA=="
|
||||
"version": "22.11.23",
|
||||
"resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-22.11.23.tgz",
|
||||
"integrity": "sha512-aBOu8GjUWP3FaAC0t17lVFvNWYBEVIF/ia25Mx77BJJtJRbiyYmYQZjZV0bFoBvLBLYQ7ivnFO4ZIvgxhX1VKQ=="
|
||||
},
|
||||
"node_modules/flatted": {
|
||||
"version": "3.2.7",
|
||||
@@ -13727,9 +13727,9 @@
|
||||
}
|
||||
},
|
||||
"flatbuffers": {
|
||||
"version": "22.10.26",
|
||||
"resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-22.10.26.tgz",
|
||||
"integrity": "sha512-sdO3emf/BlLfOogW6KwHuXg16APR/E86jNacDXfSInPzt8SSEzxlHcqDekfM/IJ1CGC5bvDksfNufNhS8h1FRA=="
|
||||
"version": "22.11.23",
|
||||
"resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-22.11.23.tgz",
|
||||
"integrity": "sha512-aBOu8GjUWP3FaAC0t17lVFvNWYBEVIF/ia25Mx77BJJtJRbiyYmYQZjZV0bFoBvLBLYQ7ivnFO4ZIvgxhX1VKQ=="
|
||||
},
|
||||
"flatted": {
|
||||
"version": "3.2.7",
|
||||
|
||||
Reference in New Issue
Block a user