From 97852aea41746cf8a70c6209581a7ae8d7716e7e Mon Sep 17 00:00:00 2001 From: LynithDev <61880709+LynithDev@users.noreply.github.com> Date: Mon, 5 Oct 2026 20:42:47 +0200 Subject: [PATCH] fix: mclogs notification showing repeatedly (#942) --- .../mclogs_upload_notification_shows_once.md | 5 ++ .../src/components/upload_mclogs.rs | 62 ++++++++++++------- 2 files changed, 43 insertions(+), 24 deletions(-) create mode 100644 .changeset/mclogs_upload_notification_shows_once.md diff --git a/.changeset/mclogs_upload_notification_shows_once.md b/.changeset/mclogs_upload_notification_shows_once.md new file mode 100644 index 00000000..bc8ba6e2 --- /dev/null +++ b/.changeset/mclogs_upload_notification_shows_once.md @@ -0,0 +1,5 @@ +--- +default: patch +--- + +# The "Uploaded to mclo.gs" notification no longer repeats when switching back to the Logs tab diff --git a/packages/oneclient_app/src/components/upload_mclogs.rs b/packages/oneclient_app/src/components/upload_mclogs.rs index ac5d2ffa..3a4d90e6 100644 --- a/packages/oneclient_app/src/components/upload_mclogs.rs +++ b/packages/oneclient_app/src/components/upload_mclogs.rs @@ -33,35 +33,49 @@ impl Component for UploadToMclogs { pub fn use_mclogs_feedback(upload: UseUploadLog) { let dispatch = use_dispatch(); - let mut handled = use_state(|| None::); - - use_side_effect(move || match &*upload.read().state() { + let mut handled = use_state(|| match &*upload.peek().state() { MutationStateData::Settled { - res: Ok(result), .. - } => { - if handled.peek().as_deref() == Some(result.url.as_str()) { - return; - } + settlement_instant, .. + } => Some(*settlement_instant), + _ => None, + }); - handled.set(Some(result.url.clone())); - let _ = Clipboard::set(result.url.clone()); + use_side_effect(move || { + let reader = upload.read(); + let state = reader.state(); + let MutationStateData::Settled { + res, + settlement_instant, + } = &*state + else { + return; + }; - dispatch - .notify("Uploaded to mclo.gs") - .body(format!("{} (copied to clipboard)", result.url)) - .info() - .icon(IconType::LinkExternal01) - .send(); + if *handled.peek() == Some(*settlement_instant) { + return; } - MutationStateData::Settled { res: Err(err), .. } => { - let msg = err.to_string(); - if handled.peek().as_deref() == Some(msg.as_str()) { - return; - } + handled.set(Some(*settlement_instant)); - handled.set(Some(msg.clone())); - dispatch.notify("Upload failed").body(msg).error().send(); + match res { + Ok(result) => { + if let Err(err) = Clipboard::set(result.url.clone()) { + tracing::warn!("clipboard copy failed: {err:?}"); + } + + dispatch + .notify("Uploaded to mclo.gs") + .body(format!("{} (copied to clipboard)", result.url)) + .info() + .icon(IconType::LinkExternal01) + .send(); + } + Err(err) => { + dispatch + .notify("Upload failed") + .body(err.to_string()) + .error() + .send(); + } } - _ => {} }); }