chore: switch to async rpc framework, fix buttons
This commit is contained in:
6 files changed
+128
-98
No files matched your search
Generated
+46
-35
@@ -443,7 +443,7 @@ checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"byteorder",
|
"byteorder",
|
||||||
"fnv",
|
"fnv",
|
||||||
"uuid 1.19.0",
|
"uuid",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -768,21 +768,6 @@ dependencies = [
|
|||||||
"windows-sys 0.61.2",
|
"windows-sys 0.61.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "discord-rich-presence"
|
|
||||||
version = "1.1.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "90c55d69cab17c19677ce3a5f8face993a9e6eaf847fecac3547f3a3ff4a2494"
|
|
||||||
dependencies = [
|
|
||||||
"log",
|
|
||||||
"serde",
|
|
||||||
"serde_derive",
|
|
||||||
"serde_json",
|
|
||||||
"serde_repr",
|
|
||||||
"thiserror 2.0.17",
|
|
||||||
"uuid 0.8.2",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dispatch"
|
name = "dispatch"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
@@ -991,12 +976,12 @@ dependencies = [
|
|||||||
"anyhow",
|
"anyhow",
|
||||||
"base64 0.22.1",
|
"base64 0.22.1",
|
||||||
"byteorder",
|
"byteorder",
|
||||||
"discord-rich-presence",
|
|
||||||
"futures-util",
|
"futures-util",
|
||||||
"hardware-id",
|
"hardware-id",
|
||||||
"md5",
|
"md5",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"open",
|
"open",
|
||||||
|
"presenceforge",
|
||||||
"reqwest",
|
"reqwest",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
@@ -1117,12 +1102,28 @@ dependencies = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-channel"
|
name = "futures"
|
||||||
version = "0.3.31"
|
version = "0.3.32"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
|
checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d"
|
||||||
|
dependencies = [
|
||||||
|
"futures-channel",
|
||||||
|
"futures-core",
|
||||||
|
"futures-executor",
|
||||||
|
"futures-io",
|
||||||
|
"futures-sink",
|
||||||
|
"futures-task",
|
||||||
|
"futures-util",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "futures-channel"
|
||||||
|
version = "0.3.32"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures-core",
|
"futures-core",
|
||||||
|
"futures-sink",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1133,9 +1134,9 @@ checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-executor"
|
name = "futures-executor"
|
||||||
version = "0.3.31"
|
version = "0.3.32"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f"
|
checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures-core",
|
"futures-core",
|
||||||
"futures-task",
|
"futures-task",
|
||||||
@@ -1190,6 +1191,7 @@ version = "0.3.32"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6"
|
checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"futures-channel",
|
||||||
"futures-core",
|
"futures-core",
|
||||||
"futures-io",
|
"futures-io",
|
||||||
"futures-macro",
|
"futures-macro",
|
||||||
@@ -2827,6 +2829,24 @@ version = "0.1.1"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
|
checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "presenceforge"
|
||||||
|
version = "0.2.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6ea04a8ede29061df487ead12339bbd0afc88dd021d0e546ed11a064ab8b75d0"
|
||||||
|
dependencies = [
|
||||||
|
"byteorder",
|
||||||
|
"bytes",
|
||||||
|
"futures",
|
||||||
|
"libc",
|
||||||
|
"log",
|
||||||
|
"serde",
|
||||||
|
"serde_json",
|
||||||
|
"thiserror 2.0.17",
|
||||||
|
"tokio",
|
||||||
|
"uuid",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro-crate"
|
name = "proc-macro-crate"
|
||||||
version = "1.3.1"
|
version = "1.3.1"
|
||||||
@@ -3405,7 +3425,7 @@ dependencies = [
|
|||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"url",
|
"url",
|
||||||
"uuid 1.19.0",
|
"uuid",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -4122,7 +4142,7 @@ dependencies = [
|
|||||||
"thiserror 2.0.17",
|
"thiserror 2.0.17",
|
||||||
"time",
|
"time",
|
||||||
"url",
|
"url",
|
||||||
"uuid 1.19.0",
|
"uuid",
|
||||||
"walkdir",
|
"walkdir",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -4340,7 +4360,7 @@ dependencies = [
|
|||||||
"toml 0.9.10+spec-1.1.0",
|
"toml 0.9.10+spec-1.1.0",
|
||||||
"url",
|
"url",
|
||||||
"urlpattern",
|
"urlpattern",
|
||||||
"uuid 1.19.0",
|
"uuid",
|
||||||
"walkdir",
|
"walkdir",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -4844,15 +4864,6 @@ version = "1.0.4"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
|
checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "uuid"
|
|
||||||
version = "0.8.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7"
|
|
||||||
dependencies = [
|
|
||||||
"getrandom 0.2.16",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uuid"
|
name = "uuid"
|
||||||
version = "1.19.0"
|
version = "1.19.0"
|
||||||
@@ -5794,7 +5805,7 @@ dependencies = [
|
|||||||
"serde_repr",
|
"serde_repr",
|
||||||
"tracing",
|
"tracing",
|
||||||
"uds_windows",
|
"uds_windows",
|
||||||
"uuid 1.19.0",
|
"uuid",
|
||||||
"windows-sys 0.61.2",
|
"windows-sys 0.61.2",
|
||||||
"winnow 0.7.14",
|
"winnow 0.7.14",
|
||||||
"zbus_macros",
|
"zbus_macros",
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ reqwest = { version = "0.13.2", features = ["json", "stream", "query"] }
|
|||||||
md5 = "0.8.0"
|
md5 = "0.8.0"
|
||||||
tokio = { version = "1.52.1", features = ["full"] }
|
tokio = { version = "1.52.1", features = ["full"] }
|
||||||
open = "5.3.4"
|
open = "5.3.4"
|
||||||
discord-rich-presence = "1.1.0"
|
presenceforge = { version = "0.2.1", features = ["tokio-runtime"] }
|
||||||
once_cell = "1.21.4"
|
once_cell = "1.21.4"
|
||||||
futures-util = "0.3.32"
|
futures-util = "0.3.32"
|
||||||
byteorder = "1.5.0"
|
byteorder = "1.5.0"
|
||||||
|
|||||||
@@ -878,7 +878,7 @@ pub struct PresenceButton {
|
|||||||
pub async fn presence_update_button(button: PresenceButton) {
|
pub async fn presence_update_button(button: PresenceButton) {
|
||||||
match (button.text.as_deref(), button.url.as_deref()) {
|
match (button.text.as_deref(), button.url.as_deref()) {
|
||||||
(Some(text), Some(url)) => presence::set_button(text, url),
|
(Some(text), Some(url)) => presence::set_button(text, url),
|
||||||
_ => presence::clear_button(),
|
_ =>presence::clear_button()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ use crate::commands::{
|
|||||||
get_osu_skin, get_osu_version, get_platform, get_skins, get_skins_count, has_net8,
|
get_osu_skin, get_osu_version, get_platform, get_skins, get_skins_count, has_net8,
|
||||||
has_osuwinello, has_wmctrl, install_ezpp_launcher_update, is_osu_running, open_url_in_browser,
|
has_osuwinello, has_wmctrl, install_ezpp_launcher_update, is_osu_running, open_url_in_browser,
|
||||||
opened_urls, presence_connect, presence_disconnect, presence_is_connected,
|
opened_urls, presence_connect, presence_disconnect, presence_is_connected,
|
||||||
presence_update_status, presence_update_user, replace_ui_files, run_osu, run_osu_updater,
|
presence_update_status, presence_update_user, presence_update_button, replace_ui_files, run_osu, run_osu_updater,
|
||||||
set_osu_config_values, set_osu_user_config_values, valid_osu_folder,
|
set_osu_config_values, set_osu_user_config_values, valid_osu_folder,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -52,7 +52,11 @@ pub fn run() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
app.state::<OpenedUrls>().0.lock().unwrap().extend(files.clone());
|
app.state::<OpenedUrls>()
|
||||||
|
.0
|
||||||
|
.lock()
|
||||||
|
.unwrap()
|
||||||
|
.extend(files.clone());
|
||||||
|
|
||||||
app.emit("opened", files.clone()).ok();
|
app.emit("opened", files.clone()).ok();
|
||||||
}
|
}
|
||||||
@@ -110,6 +114,7 @@ pub fn run() {
|
|||||||
presence_disconnect,
|
presence_disconnect,
|
||||||
presence_update_status,
|
presence_update_status,
|
||||||
presence_update_user,
|
presence_update_user,
|
||||||
|
presence_update_button,
|
||||||
presence_is_connected,
|
presence_is_connected,
|
||||||
has_osuwinello,
|
has_osuwinello,
|
||||||
has_wmctrl,
|
has_wmctrl,
|
||||||
@@ -125,12 +130,7 @@ pub fn run() {
|
|||||||
.build(tauri::generate_context!())
|
.build(tauri::generate_context!())
|
||||||
.expect("error while building tauri application");
|
.expect("error while building tauri application");
|
||||||
|
|
||||||
app.run(|_app_handle, event| {
|
app.run(|app, event| {
|
||||||
if let tauri::RunEvent::ExitRequested { api, .. } = event {
|
presence::handle_run_event(app, &event);
|
||||||
api.prevent_exit();
|
|
||||||
|
|
||||||
tauri::async_runtime::block_on(presence::disconnect());
|
|
||||||
std::process::exit(0);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
+67
-50
@@ -1,10 +1,8 @@
|
|||||||
use discord_rich_presence::{
|
|
||||||
DiscordIpc, DiscordIpcClient,
|
|
||||||
activity::{Activity, Assets, Button, Timestamps},
|
|
||||||
};
|
|
||||||
use once_cell::sync::Lazy;
|
use once_cell::sync::Lazy;
|
||||||
|
use presenceforge::{ActivityBuilder, AsyncDiscordIpcClient};
|
||||||
use std::sync::Mutex as StdMutex;
|
use std::sync::Mutex as StdMutex;
|
||||||
use std::time::{SystemTime, UNIX_EPOCH};
|
use std::time::{SystemTime, UNIX_EPOCH};
|
||||||
|
use tauri::{AppHandle, RunEvent};
|
||||||
use tokio::sync::{mpsc, oneshot};
|
use tokio::sync::{mpsc, oneshot};
|
||||||
use tokio::time::{Duration, interval};
|
use tokio::time::{Duration, interval};
|
||||||
|
|
||||||
@@ -48,7 +46,7 @@ enum PresenceCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
enum ReconnectResult {
|
enum ReconnectResult {
|
||||||
Connected(DiscordIpcClient),
|
Connected(AsyncDiscordIpcClient),
|
||||||
Failed,
|
Failed,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -56,7 +54,7 @@ struct PresenceActor {
|
|||||||
receiver: mpsc::Receiver<PresenceCommand>,
|
receiver: mpsc::Receiver<PresenceCommand>,
|
||||||
reconnect_rx: mpsc::Receiver<ReconnectResult>,
|
reconnect_rx: mpsc::Receiver<ReconnectResult>,
|
||||||
reconnect_tx: mpsc::Sender<ReconnectResult>,
|
reconnect_tx: mpsc::Sender<ReconnectResult>,
|
||||||
client: Option<DiscordIpcClient>,
|
client: Option<AsyncDiscordIpcClient>,
|
||||||
data: PresenceData,
|
data: PresenceData,
|
||||||
start_timestamp: i64,
|
start_timestamp: i64,
|
||||||
reconnecting: bool,
|
reconnecting: bool,
|
||||||
@@ -129,7 +127,7 @@ impl PresenceActor {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
match try_connect_once() {
|
match try_connect_once().await {
|
||||||
Some(client) => {
|
Some(client) => {
|
||||||
self.client = Some(client);
|
self.client = Some(client);
|
||||||
self.reconnecting = false;
|
self.reconnecting = false;
|
||||||
@@ -146,8 +144,7 @@ impl PresenceActor {
|
|||||||
|
|
||||||
async fn cmd_disconnect(&mut self, resp: oneshot::Sender<()>) {
|
async fn cmd_disconnect(&mut self, resp: oneshot::Sender<()>) {
|
||||||
if let Some(mut client) = self.client.take() {
|
if let Some(mut client) = self.client.take() {
|
||||||
let _ = client.clear_activity();
|
let _ = client.clear_activity().await;
|
||||||
let _ = client.close();
|
|
||||||
println!("Presence: disconnected.");
|
println!("Presence: disconnected.");
|
||||||
}
|
}
|
||||||
let _ = resp.send(());
|
let _ = resp.send(());
|
||||||
@@ -159,37 +156,34 @@ impl PresenceActor {
|
|||||||
None => return,
|
None => return,
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut assets = Assets::new()
|
let mut builder = ActivityBuilder::new()
|
||||||
|
.state(&self.data.state)
|
||||||
|
.details(&self.data.details)
|
||||||
|
.start_timestamp(self.start_timestamp as u64)
|
||||||
.large_image(&self.data.large_image_key)
|
.large_image(&self.data.large_image_key)
|
||||||
.large_text(&self.data.large_image_text);
|
.large_text(&self.data.large_image_text);
|
||||||
|
|
||||||
if let Some(key) = &self.data.small_image_key {
|
if let Some(key) = &self.data.small_image_key {
|
||||||
assets = assets.small_image(key);
|
builder = builder.small_image(key);
|
||||||
}
|
}
|
||||||
if let Some(text) = &self.data.small_image_text {
|
if let Some(text) = &self.data.small_image_text {
|
||||||
assets = assets.small_text(text);
|
builder = builder.small_text(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
let buttons = if let Some(btn) = &self.data.dynamic_button {
|
if let Some(btn) = &self.data.dynamic_button {
|
||||||
vec![
|
builder = builder.button(&btn.label, &btn.url);
|
||||||
Button::new(&btn.label, &btn.url),
|
|
||||||
Button::new("Join EZPPFarm", "https://ez-pp.farm/discord"),
|
|
||||||
]
|
|
||||||
} else {
|
} else {
|
||||||
vec![
|
builder = builder.button(
|
||||||
Button::new("Download the Launcher", "https://git.ez-pp.farm/EZPPFarm/EZPPLauncher/releases/latest"),
|
"Download the Launcher",
|
||||||
Button::new("Join EZPPFarm", "https://ez-pp.farm/discord"),
|
"https://git.ez-pp.farm/EZPPFarm/EZPPLauncher/releases/latest",
|
||||||
]
|
);
|
||||||
};
|
}
|
||||||
|
builder = builder.button("Join EZPPFarm", "https://ez-pp.farm/discord");
|
||||||
|
|
||||||
let activity = Activity::new()
|
let activity = builder.build();
|
||||||
.state(&self.data.state)
|
|
||||||
.details(&self.data.details)
|
|
||||||
.timestamps(Timestamps::new().start(self.start_timestamp))
|
|
||||||
.assets(assets)
|
|
||||||
.buttons(buttons);
|
|
||||||
|
|
||||||
if let Err(e) = client.set_activity(activity) {
|
/* println!("Presence: updating activity: {:?}", activity); */
|
||||||
|
if let Err(e) = client.set_activity(&activity).await {
|
||||||
eprintln!("Presence: set_activity failed ({:?}); will reconnect.", e);
|
eprintln!("Presence: set_activity failed ({:?}); will reconnect.", e);
|
||||||
self.client = None;
|
self.client = None;
|
||||||
self.spawn_reconnect_task();
|
self.spawn_reconnect_task();
|
||||||
@@ -213,7 +207,7 @@ impl PresenceActor {
|
|||||||
);
|
);
|
||||||
tokio::time::sleep(delay).await;
|
tokio::time::sleep(delay).await;
|
||||||
|
|
||||||
if let Some(client) = try_connect_once() {
|
if let Some(client) = try_connect_once().await {
|
||||||
let _ = tx.send(ReconnectResult::Connected(client)).await;
|
let _ = tx.send(ReconnectResult::Connected(client)).await;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -223,15 +217,20 @@ impl PresenceActor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn try_connect_once() -> Option<DiscordIpcClient> {
|
async fn try_connect_once() -> Option<AsyncDiscordIpcClient> {
|
||||||
let mut client = DiscordIpcClient::new("1032772293220384808");
|
match AsyncDiscordIpcClient::new("1032772293220384808").await {
|
||||||
match client.connect() {
|
Ok(mut client) => match client.connect().await {
|
||||||
Ok(()) => {
|
Ok(_) => {
|
||||||
println!("Presence: IPC connected.");
|
println!("Presence: IPC connected.");
|
||||||
Some(client)
|
Some(client)
|
||||||
}
|
}
|
||||||
|
Err(e) => {
|
||||||
|
eprintln!("Presence: IPC connect error: {:?}", e);
|
||||||
|
None
|
||||||
|
}
|
||||||
|
},
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
eprintln!("Presence: IPC connect error: {:?}", e);
|
eprintln!("Presence: failed to create client: {:?}", e);
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -295,6 +294,20 @@ pub fn update_status(state: Option<&str>, details: Option<&str>, large_image_key
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn update_user(username: Option<&str>, id: Option<&str>) {
|
||||||
|
let data = {
|
||||||
|
let mut guard = PRESENCE_DATA.lock().unwrap();
|
||||||
|
guard.small_image_key = id.map(|s| format!("https://a.ez-pp.farm/{}", s));
|
||||||
|
guard.small_image_text = username.map(str::to_string);
|
||||||
|
guard.clone()
|
||||||
|
};
|
||||||
|
|
||||||
|
let tx = PRESENCE_TX.clone();
|
||||||
|
tokio::spawn(async move {
|
||||||
|
let _ = tx.send(PresenceCommand::UpdateData(data)).await;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
pub fn set_button(label: &str, url: &str) {
|
pub fn set_button(label: &str, url: &str) {
|
||||||
let data = {
|
let data = {
|
||||||
let mut guard = PRESENCE_DATA.lock().unwrap();
|
let mut guard = PRESENCE_DATA.lock().unwrap();
|
||||||
@@ -324,16 +337,20 @@ pub fn clear_button() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn update_user(username: Option<&str>, id: Option<&str>) {
|
/// Register a Tauri event handler that cleanly disconnects presence when the
|
||||||
let data = {
|
/// application exits. Call this once in your main.rs `tauri::Builder` run callback:
|
||||||
let mut guard = PRESENCE_DATA.lock().unwrap();
|
///
|
||||||
guard.small_image_key = id.map(|s| format!("https://a.ez-pp.farm/{}", s));
|
/// ```rust
|
||||||
guard.small_image_text = username.map(str::to_string);
|
/// .build(tauri::generate_context!())
|
||||||
guard.clone()
|
/// .expect("error building app")
|
||||||
};
|
/// .run(|app, event| {
|
||||||
|
/// presence::handle_run_event(app, &event);
|
||||||
let tx = PRESENCE_TX.clone();
|
/// });
|
||||||
tokio::spawn(async move {
|
/// ```
|
||||||
let _ = tx.send(PresenceCommand::UpdateData(data)).await;
|
pub fn handle_run_event(_app: &AppHandle, event: &RunEvent) {
|
||||||
});
|
if let RunEvent::ExitRequested { .. } | RunEvent::Exit = event {
|
||||||
|
tauri::async_runtime::block_on(async {
|
||||||
|
disconnect().await;
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -599,18 +599,20 @@
|
|||||||
username += ` (#${currentModeStats.rank})`;
|
username += ` (#${currentModeStats.rank})`;
|
||||||
|
|
||||||
await Promise.all([
|
await Promise.all([
|
||||||
presence.updateButton(customButton),
|
|
||||||
presence.updateUser({
|
presence.updateUser({
|
||||||
username,
|
username,
|
||||||
id: $currentUser.id.toFixed(),
|
id: $currentUser.id.toFixed(),
|
||||||
}),
|
}),
|
||||||
|
presence.updateButton(customButton),
|
||||||
presence.updateStatus({
|
presence.updateStatus({
|
||||||
details,
|
details,
|
||||||
state,
|
state,
|
||||||
largeImageKey,
|
largeImageKey,
|
||||||
}),
|
}),
|
||||||
]);
|
]);
|
||||||
} catch {}
|
} catch (err) {
|
||||||
|
console.log(err);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, 1000 * 2);
|
}, 1000 * 2);
|
||||||
|
|||||||
Reference in new issue
Block a user