Tighten desktop close handling and startup sync
build / Build Linux wallet (push) Successful in 2m18s
build / Build Windows wallet (push) Successful in 19m56s

This commit is contained in:
Codex Bot
2026-04-19 23:09:19 +02:00
parent 0773f7bba9
commit a4c42f63af
3 changed files with 24 additions and 14 deletions
+8 -4
View File
@@ -165,6 +165,7 @@ class _PeyaAppState extends ConsumerState<PeyaApp> {
AppConfig config, {
required int attempts,
}) async {
var sawConnected = false;
for (var attempt = 0; attempt < attempts; attempt++) {
try {
await ref
@@ -176,15 +177,18 @@ class _PeyaAppState extends ConsumerState<PeyaApp> {
return true;
}
} catch (_) {}
final connected = await ref.read(walletRepositoryProvider).isConnected();
if (connected) {
return true;
sawConnected = await ref.read(walletRepositoryProvider).isConnected();
if (sawConnected) {
final currentState = ref.read(walletControllerProvider);
if (currentState.syncStatus.lastSync != null) {
return true;
}
}
if (attempt + 1 < attempts) {
await Future.delayed(const Duration(milliseconds: 500));
}
}
return false;
return sawConnected;
}
void _scheduleBurstSync() {
+8 -8
View File
@@ -1,6 +1,5 @@
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:window_manager/window_manager.dart';
import '../domain/models.dart';
@@ -20,7 +19,7 @@ class WindowLifecycleService with WindowListener {
bool _isClosing = false;
Future<void> init() async {
if (!Platform.isLinux || _initialized || kDebugMode) {
if (_initialized || !(Platform.isLinux || Platform.isWindows)) {
return;
}
await windowManager.ensureInitialized();
@@ -34,11 +33,6 @@ class WindowLifecycleService with WindowListener {
if (_isClosing) {
return;
}
final config = readConfig();
if (config.minimizeToTray && trayService.isAvailable) {
await trayService.hideWindow();
return;
}
_isClosing = true;
if (onBeforeClose != null) {
final shouldContinue = await onBeforeClose!();
@@ -47,8 +41,14 @@ class WindowLifecycleService with WindowListener {
return;
}
}
final config = readConfig();
if (config.minimizeToTray && trayService.isAvailable) {
await trayService.hideWindow();
_isClosing = false;
return;
}
await windowManager.setPreventClose(false);
await windowManager.close();
await windowManager.destroy();
}
Future<void> dispose() async {
+8 -2
View File
@@ -445,6 +445,7 @@ class _LocalNodeControlsState extends ConsumerState<_LocalNodeControls> {
final nodeConfig = config.nodeConfig;
final walletState = ref.read(walletControllerProvider);
if (walletState.walletInfo != null && nodeConfig.mode == NodeMode.local) {
var sawConnected = false;
for (var attempt = 0; attempt < 10; attempt++) {
try {
await ref.read(walletControllerProvider.notifier).connectNode(nodeConfig);
@@ -454,8 +455,9 @@ class _LocalNodeControlsState extends ConsumerState<_LocalNodeControls> {
break;
}
} catch (_) {}
final connected = await ref.read(walletRepositoryProvider).isConnected();
if (connected) {
sawConnected = await ref.read(walletRepositoryProvider).isConnected();
if (sawConnected &&
ref.read(walletControllerProvider).syncStatus.lastSync != null) {
break;
}
if (attempt == 9) {
@@ -469,6 +471,10 @@ class _LocalNodeControlsState extends ConsumerState<_LocalNodeControls> {
interval: const Duration(seconds: 2),
),
);
if (!sawConnected &&
!(await ref.read(walletRepositoryProvider).isConnected())) {
return false;
}
}
return ok;
},