Make a dialog appear when rust app panics (#310)

This commit is contained in:
Uriel
2022-11-26 18:15:23 -03:00
committed by GitHub
parent 5247891ff0
commit f7d34480de
4 changed files with 115 additions and 14 deletions

77
Cargo.lock generated
View File

@@ -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"

View File

@@ -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"

View File

@@ -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
View File

@@ -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",