Prevent window from closing while uploading data

This commit is contained in:
2025-03-31 15:46:41 +08:00
parent cd9b07bb3e
commit 7631fab86b
3 changed files with 67 additions and 37 deletions

View File

@@ -378,7 +378,9 @@
"Page": "页面",
"Jump": "跳转",
"Copy Image": "复制图片",
"A valid WebDav directory URL": "有效的WebDav目录URL"
"A valid WebDav directory URL": "有效的WebDav目录URL",
"Shut Down": "关闭",
"Uploading data...": "正在上传数据..."
},
"zh_TW": {
"Home": "首頁",
@@ -759,6 +761,8 @@
"Page": "頁面",
"Jump": "跳轉",
"Copy Image": "複製圖片",
"A valid WebDav directory URL": "有效的WebDav目錄URL"
"A valid WebDav directory URL": "有效的WebDav目錄URL",
"Shut Down": "關閉",
"Uploading data...": "正在上傳數據..."
}
}

View File

@@ -82,10 +82,7 @@ class _WindowFrameState extends State<WindowFrame> {
return;
}
}
windowManager.close().then((_) {
// Make sure the app exits when the window is closed.
exit(0);
});
}
@override

View File

@@ -1,4 +1,6 @@
import 'package:flutter/foundation.dart';
import 'package:venera/components/components.dart';
import 'package:venera/components/window_frame.dart';
import 'package:venera/foundation/app.dart';
import 'package:venera/foundation/appdata.dart';
import 'package:venera/foundation/comic_source/comic_source.dart';
@@ -10,6 +12,7 @@ import 'package:venera/utils/data.dart';
import 'package:venera/utils/ext.dart';
import 'package:webdav_client/webdav_client.dart' hide File;
import 'package:rhttp/rhttp.dart' as rhttp;
import 'package:venera/utils/translations.dart';
import 'io.dart';
@@ -20,6 +23,10 @@ class DataSync with ChangeNotifier {
}
LocalFavoritesManager().addListener(onDataChanged);
ComicSourceManager().addListener(onDataChanged);
Future.delayed(const Duration(seconds: 1), () {
var controller = WindowFrame.of(App.rootContext);
controller.addCloseListener(_handleWindowClose);
});
}
void onDataChanged() {
@@ -28,6 +35,28 @@ class DataSync with ChangeNotifier {
}
}
bool _handleWindowClose() {
if (_isUploading) {
_showWindowCloseDialog();
return false;
}
return true;
}
void _showWindowCloseDialog() async {
showLoadingDialog(
App.rootContext,
cancelButtonText: "Shut Down".tl,
onCancel: () => exit(0),
barrierDismissible: false,
message: "Uploading data...".tl,
);
while (_isUploading) {
await Future.delayed(const Duration(milliseconds: 50));
}
exit(0);
}
static DataSync? instance;
factory DataSync() => instance ?? (instance = DataSync._());