mirror of
https://github.com/venera-app/venera.git
synced 2025-09-27 15:57:25 +00:00
Prevent window from closing while uploading data
This commit is contained in:
@@ -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._());
|
||||
|
Reference in New Issue
Block a user