Merge pull request #4814 from aiongg/update-result-dialog

Updates: shared check-result dialog from craft-update
This commit is contained in:
Dylan M. Taylor
2026-10-31 01:06:08 -04:00
committed by GitHub
6 changed files with 27 additions and 26 deletions
Generated
+1 -1
View File
@@ -1047,7 +1047,7 @@ dependencies = [
[[package]]
name = "craft-update"
version = "0.1.0"
source = "git+https://github.com/storytold/craft-libs?rev=04aa1703b32d299e54f78fcde4182f2b393a9116#04aa1703b32d299e54f78fcde4182f2b393a9116"
source = "git+https://github.com/storytold/craft-libs?rev=c5a1cbfb5f9049f9270955caffb5bee5997aebf7#c5a1cbfb5f9049f9270955caffb5bee5997aebf7"
dependencies = [
"chrono",
"dunce",
+1 -1
View File
@@ -20,7 +20,7 @@ craft-keymap = { git = "https://github.com/storytold/craft-libs", rev = "92d392c
# desktop. The `egui` feature adds `craft_window::decorate`. (craft-libs#217.)
craft-window = { git = "https://github.com/storytold/craft-libs", rev = "92d392cff132eaf53e13afff77f38b5c11b73aa0", features = ["egui"] }
# craft-update: app-specific pretend versions apply to startup and manual checks.
craft-update = { git = "https://github.com/storytold/craft-libs", version = "=0.1.0", rev = "04aa1703b32d299e54f78fcde4182f2b393a9116", features = ["egui"] }
craft-update = { git = "https://github.com/storytold/craft-libs", version = "=0.1.0", rev = "c5a1cbfb5f9049f9270955caffb5bee5997aebf7", features = ["egui"] }
# internal
vectorcraft-geom = { path = "crates/geom" }
vectorcraft-color = { path = "crates/color" }
-3
View File
@@ -5832,10 +5832,7 @@ swatch White, Black Bijela, crna
swatch Yellow Žuta
swatch Yellow Green Žuto-zelena
Check for Updates… Provjeri ažuriranja…
Checking for updates… Provjera ažuriranja…
Could not check for updates:\n{error} Nije moguće provjeriti ažuriranja:\n{error}
VectorCraft Updates VectorCraft ažuriranja
VectorCraft {version} is currently the newest version available. VectorCraft {version} je trenutno najnovija dostupna verzija.
Preparing the image… Priprema slike…
Tracing the colors… Praćenje boja…
Units & Scale Jedinice i skala
Can't render this file because it contains an unexpected character in line 2 and column 73.
-3
View File
@@ -16,10 +16,7 @@
# names, OpenType, the built-in workspace names and the bracketed perspective grid preset names.
About VectorCraft VectorCraft について
Check for Updates… アップデートを確認…
Checking for updates… アップデートを確認中…
Could not check for updates:\n{error} アップデートを確認できませんでした:\n{error}
VectorCraft Updates VectorCraft のアップデート
VectorCraft {version} is currently the newest version available. VectorCraft {version} は最新バージョンです。
All Scripts すべての文字
Anchors: アンカー:
Any Kind すべての種類
Can't render this file because it contains an unexpected character in line 2 and column 73.
-3
View File
@@ -5875,8 +5875,6 @@ anchor Points: Punkter:
Arrow Scale: Pilskala:
Arrow Style: Pilstil:
Check for Updates… Sök efter uppdateringar…
Checking for updates… Söker efter uppdateringar…
Could not check for updates:\n{error} Det gick inte att söka efter uppdateringar:\n{error}
Dimension Lines Måttlinjer
Dimension Text Måttal
Extension Lines Måttgränslinjer
@@ -5898,7 +5896,6 @@ anchor Points: Punkter:
Tracing the colors… Vektoriserar färgerna…
Units & Scale Enheter & skala
VectorCraft Updates Uppdateringar för VectorCraft
VectorCraft {version} is currently the newest version available. VectorCraft {version} är för närvarande den senaste tillgängliga versionen.
Yonroku-ban Yonroku-ban
@msg image '{key}' has no pixels and was left out bilden '{key}' har inga pixlar och utelämnades
@msg not an RTF file: it doesn't start with {\\rtf inte en RTF-fil: den börjar inte med {\\rtf
Can't render this file because it contains an unexpected character in line 5 and column 25.
+25 -15
View File
@@ -5,7 +5,9 @@ use serde_json::Value;
use crate::VectorcraftApp;
#[cfg(not(target_arch = "wasm32"))]
use craft_update::updater::{Action, Status, Updater};
use craft_update::updater::{Action, Updater};
#[cfg(not(target_arch = "wasm32"))]
use craft_update::{CheckResultDialog, CheckResultResponse};
pub(crate) struct Runtime {
#[cfg(not(target_arch = "wasm32"))]
@@ -18,7 +20,10 @@ pub(crate) struct Runtime {
/// The context of the last frame, to wake the UI when a check is queued from a menu callback.
#[cfg(not(target_arch = "wasm32"))]
repaint: Option<egui::Context>,
/// Whether the result of Help ▸ Check for Updates is in view.
pub(crate) manual_window_open: bool,
/// The web build has no updater; its window only says so.
#[cfg(target_arch = "wasm32")]
pub(crate) status_message: Option<String>,
}
@@ -34,6 +39,7 @@ impl Default for Runtime {
#[cfg(not(target_arch = "wasm32"))]
repaint: None,
manual_window_open: false,
#[cfg(target_arch = "wasm32")]
status_message: None,
}
}
@@ -51,6 +57,7 @@ pub(crate) fn check(app: &mut VectorcraftApp) -> Result<Value, String> {
#[cfg(not(target_arch = "wasm32"))]
{
app.updates_rt.check_requested = true;
app.updates_rt.manual_window_open = true;
if let Some(ctx) = &app.updates_rt.repaint {
ctx.request_repaint();
}
@@ -90,18 +97,25 @@ pub(crate) fn show(app: &mut VectorcraftApp, ctx: &egui::Context) {
Action::Close => ctx.send_viewport_cmd(egui::ViewportCommand::Close),
Action::None => {}
}
// The window answers Help ▸ Check for Updates, so it follows the updater's status.
// An available update goes to the prompt above, which replaces the result dialog.
let rt = &mut app.updates_rt;
(rt.manual_window_open, rt.status_message) = match rt.updater.status() {
Status::Idle => (false, None),
Status::Checking => (true, Some(tl!("Checking for updates…").to_string())),
Status::UpToDate => {
(true, Some(tl!("VectorCraft {version} is currently the newest version available.").replace("{version}", env!("CARGO_PKG_VERSION"))))
if rt.manual_window_open && rt.updater.prompt_open() {
rt.manual_window_open = false;
}
if rt.manual_window_open {
match CheckResultDialog::new(&crate::UPDATE_APP, env!("CARGO_PKG_VERSION")).show(ctx, rt.updater.status()) {
CheckResultResponse::None => {}
CheckResultResponse::Close => rt.manual_window_open = false,
CheckResultResponse::CheckAgain => rt.updater.check_now(ctx),
}
Status::Failed(e) => (true, Some(tl!("Could not check for updates:\n{error}").replace("{error}", e))),
};
}
// Closing the dialog dismisses the outcome it showed.
if !rt.manual_window_open {
rt.updater.dismiss_status();
}
}
#[cfg(target_arch = "wasm32")]
if app.updates_rt.manual_window_open {
let mut open = true;
egui::Window::new(tl!("VectorCraft Updates"))
@@ -123,17 +137,13 @@ pub(crate) fn show(app: &mut VectorcraftApp, ctx: &egui::Context) {
app.updates_rt.manual_window_open = false;
}
}
// Closing the window dismisses the outcome it showed.
#[cfg(not(target_arch = "wasm32"))]
if !app.updates_rt.manual_window_open {
app.updates_rt.updater.dismiss_status();
}
}
#[cfg(test)]
mod tests {
use super::*;
#[cfg(not(target_arch = "wasm32"))]
use craft_update::updater::Status;
use vectorcraft_engine::Session;
#[test]