Tighten desktop close handling and startup sync
This commit is contained in:
+8
-4
@@ -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() {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user