mirror of
https://github.com/rustdesk/rustdesk.git
synced 2025-01-08 23:38:05 +08:00
0491950e01
Signed-off-by: fufesou <shuanglongchen@yeah.net>
56 lines
1.3 KiB
Rust
56 lines
1.3 KiB
Rust
use crate::ResultType;
|
|
use osascript;
|
|
use serde_derive::{Deserialize, Serialize};
|
|
|
|
#[derive(Serialize)]
|
|
struct AlertParams {
|
|
title: String,
|
|
message: String,
|
|
alert_type: String,
|
|
buttons: Vec<String>,
|
|
}
|
|
|
|
#[derive(Deserialize)]
|
|
struct AlertResult {
|
|
#[serde(rename = "buttonReturned")]
|
|
button: String,
|
|
}
|
|
|
|
/// Firstly run the specified app, then alert a dialog. Return the clicked button value.
|
|
///
|
|
/// # Arguments
|
|
///
|
|
/// * `app` - The app to execute the script.
|
|
/// * `alert_type` - Alert type. . informational, warning, critical
|
|
/// * `title` - The alert title.
|
|
/// * `message` - The alert message.
|
|
/// * `buttons` - The buttons to show.
|
|
pub fn alert(
|
|
app: String,
|
|
alert_type: String,
|
|
title: String,
|
|
message: String,
|
|
buttons: Vec<String>,
|
|
) -> ResultType<String> {
|
|
let script = osascript::JavaScript::new(&format!(
|
|
"
|
|
var App = Application('{}');
|
|
App.includeStandardAdditions = true;
|
|
return App.displayAlert($params.title, {{
|
|
message: $params.message,
|
|
'as': $params.alert_type,
|
|
buttons: $params.buttons,
|
|
}});
|
|
",
|
|
app
|
|
));
|
|
|
|
let result: AlertResult = script.execute_with_params(AlertParams {
|
|
title,
|
|
message,
|
|
alert_type,
|
|
buttons,
|
|
})?;
|
|
Ok(result.button)
|
|
}
|