Compare commits
1 Commits
v1.7.0
...
41d00a3623
| Author | SHA1 | Date | |
|---|---|---|---|
| 41d00a3623 |
@@ -4,6 +4,10 @@ Diese Liste beschreibt in einfachen Worten, was sich von Version zu Version an T
|
|||||||
|
|
||||||
## Unveröffentlicht
|
## Unveröffentlicht
|
||||||
|
|
||||||
|
### Behoben
|
||||||
|
|
||||||
|
- Desktop-App: „Auf Version … aktualisieren“ im Menü des Tessera-Symbols scheiterte mit „Signaturprüfung fehlgeschlagen“ und öffnete stattdessen die Download-Seite, wenn der Server seit der letzten Update-Prüfung der App eine neuere Version bekommen hatte. Die App fragt jetzt beim Klick zuerst frisch nach und installiert genau die Version, die der Server in diesem Moment anbietet.
|
||||||
|
|
||||||
## 1.7.0 – 2026-09-29
|
## 1.7.0 – 2026-09-29
|
||||||
|
|
||||||
### Neu
|
### Neu
|
||||||
|
|||||||
@@ -461,7 +461,15 @@ fn clear_check_notice(app: &AppHandle) {
|
|||||||
/// / kein Update / fehlgeschlagen mit Grund); nur der http-Fall bleibt
|
/// / kein Update / fehlgeschlagen mit Grund); nur der http-Fall bleibt
|
||||||
/// gesperrt. Ein fehlgeschlagener Check war bisher vom Zustand "kein Update"
|
/// gesperrt. Ein fehlgeschlagener Check war bisher vom Zustand "kein Update"
|
||||||
/// nicht unterscheidbar (quick-260922-frg).
|
/// nicht unterscheidbar (quick-260922-frg).
|
||||||
fn spawn_version_check(app: AppHandle, server_url: String) {
|
///
|
||||||
|
/// `install_after`: der Klick auf "Auf Version … aktualisieren" installiert
|
||||||
|
/// NICHT den abgelegten Stand, sondern prueft zuerst frisch und installiert
|
||||||
|
/// genau, was diese Pruefung liefert. Grund (Nutzer, 29.09.2026: "Signatur-
|
||||||
|
/// verifikation failed", danach Browser): die Download-Adresse
|
||||||
|
/// `/desktop/download/<os>` liefert immer den AKTUELLEN Installer; ein
|
||||||
|
/// Stunden alter Stand trug noch die Signatur der Vorversion, nach dem
|
||||||
|
/// Server-Update passten Datei und Signatur nicht mehr zusammen.
|
||||||
|
fn spawn_version_check(app: AppHandle, server_url: String, install_after: bool) {
|
||||||
let update_item = app.state::<TrayItems>().update.clone();
|
let update_item = app.state::<TrayItems>().update.clone();
|
||||||
let _ = update_item.set_text(UPDATE_ITEM_CHECKING);
|
let _ = update_item.set_text(UPDATE_ITEM_CHECKING);
|
||||||
let _ = update_item.set_enabled(false);
|
let _ = update_item.set_enabled(false);
|
||||||
@@ -489,6 +497,11 @@ fn spawn_version_check(app: AppHandle, server_url: String) {
|
|||||||
// das Plugin wendet `Update.timeout` als Gesamt-Timeout des
|
// das Plugin wendet `Update.timeout` als Gesamt-Timeout des
|
||||||
// Downloads an (updater.rs Z. 698-700).
|
// Downloads an (updater.rs Z. 698-700).
|
||||||
update.timeout = Some(Duration::from_secs(600));
|
update.timeout = Some(Duration::from_secs(600));
|
||||||
|
clear_check_notice(&app);
|
||||||
|
if install_after {
|
||||||
|
spawn_update_install(app.clone(), update, menu_text);
|
||||||
|
return;
|
||||||
|
}
|
||||||
let _ = app
|
let _ = app
|
||||||
.notification()
|
.notification()
|
||||||
.builder()
|
.builder()
|
||||||
@@ -500,7 +513,6 @@ fn spawn_version_check(app: AppHandle, server_url: String) {
|
|||||||
if let Ok(mut pending) = app.state::<PendingUpdate>().0.lock() {
|
if let Ok(mut pending) = app.state::<PendingUpdate>().0.lock() {
|
||||||
*pending = Some((update, menu_text));
|
*pending = Some((update, menu_text));
|
||||||
}
|
}
|
||||||
clear_check_notice(&app);
|
|
||||||
}
|
}
|
||||||
Ok(None) => {
|
Ok(None) => {
|
||||||
let _ = update_item.set_text(UPDATE_ITEM_NONE);
|
let _ = update_item.set_text(UPDATE_ITEM_NONE);
|
||||||
@@ -655,7 +667,7 @@ fn save_server_url(app: AppHandle, url: String) -> Result<(), String> {
|
|||||||
store.save().map_err(|e| e.to_string())?;
|
store.save().map_err(|e| e.to_string())?;
|
||||||
|
|
||||||
apply_server(&app, Some(&normalized));
|
apply_server(&app, Some(&normalized));
|
||||||
spawn_version_check(app.clone(), normalized.clone());
|
spawn_version_check(app.clone(), normalized.clone(), false);
|
||||||
|
|
||||||
if let Some(window) = app.get_webview_window("main") {
|
if let Some(window) = app.get_webview_window("main") {
|
||||||
let _ = window.navigate(with_desktop_marker(&parsed));
|
let _ = window.navigate(with_desktop_marker(&parsed));
|
||||||
@@ -868,27 +880,24 @@ pub fn run() {
|
|||||||
}
|
}
|
||||||
"update" => {
|
"update" => {
|
||||||
// `take()` verhindert Doppelklick-Downloads, der
|
// `take()` verhindert Doppelklick-Downloads, der
|
||||||
// gesperrte Eintrag ebenso. Ohne abgelegten Stand
|
// gesperrte Eintrag ebenso. Liegt ein Update vor,
|
||||||
// ("Kein Update verfügbar" / "Update-Prüfung
|
// wird es NICHT aus dem Speicher installiert, sondern
|
||||||
// fehlgeschlagen") prueft der Klick erneut -- der
|
// frisch geprueft und das Ergebnis installiert
|
||||||
// Browser-Weg (`open_download_page`) ist nur noch
|
// (`install_after`, siehe spawn_version_check). Ohne
|
||||||
// Rueckfall einer fehlgeschlagenen Installation.
|
// abgelegten Stand ("Kein Update verfügbar" /
|
||||||
|
// "Update-Prüfung fehlgeschlagen") prueft der Klick
|
||||||
|
// nur erneut. Der Browser-Weg (`open_download_page`)
|
||||||
|
// bleibt Rueckfall einer fehlgeschlagenen Installation.
|
||||||
// Ohne gespeicherte Adresse gibt es nichts zu pruefen.
|
// Ohne gespeicherte Adresse gibt es nichts zu pruefen.
|
||||||
let pending = app
|
let had_pending = app
|
||||||
.state::<PendingUpdate>()
|
.state::<PendingUpdate>()
|
||||||
.0
|
.0
|
||||||
.lock()
|
.lock()
|
||||||
.ok()
|
.ok()
|
||||||
.and_then(|mut guard| guard.take());
|
.and_then(|mut guard| guard.take())
|
||||||
match pending {
|
.is_some();
|
||||||
Some((update, menu_text)) => {
|
if let Some(url) = stored_server_url(app) {
|
||||||
spawn_update_install(app.clone(), update, menu_text)
|
spawn_version_check(app.clone(), url, had_pending);
|
||||||
}
|
|
||||||
None => {
|
|
||||||
if let Some(url) = stored_server_url(app) {
|
|
||||||
spawn_version_check(app.clone(), url);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
"autostart" => {
|
"autostart" => {
|
||||||
@@ -928,7 +937,7 @@ pub fn run() {
|
|||||||
apply_server(app.handle(), server_url.as_deref());
|
apply_server(app.handle(), server_url.as_deref());
|
||||||
|
|
||||||
if let Some(url) = server_url {
|
if let Some(url) = server_url {
|
||||||
spawn_version_check(app.handle().clone(), url);
|
spawn_version_check(app.handle().clone(), url, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wiederholte Pruefung alle UPDATE_CHECK_INTERVAL. Bewusst ein
|
// Wiederholte Pruefung alle UPDATE_CHECK_INTERVAL. Bewusst ein
|
||||||
@@ -955,7 +964,7 @@ pub fn run() {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if let Some(url) = stored_server_url(&handle) {
|
if let Some(url) = stored_server_url(&handle) {
|
||||||
spawn_version_check(handle.clone(), url);
|
spawn_version_check(handle.clone(), url, false);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user