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

@@ -140,18 +140,18 @@
"Block": "屏蔽", "Block": "屏蔽",
"Add new favorite to": "添加新收藏到", "Add new favorite to": "添加新收藏到",
"Move favorite after reading": "阅读后移动收藏", "Move favorite after reading": "阅读后移动收藏",
"Delete folder?" : "删除文件夹?", "Delete folder?": "删除文件夹?",
"Delete folder '@f' ?" : "删除文件夹 '@f' ?", "Delete folder '@f' ?": "删除文件夹 '@f' ?",
"Import from file": "从文件导入", "Import from file": "从文件导入",
"Failed to import": "导入失败", "Failed to import": "导入失败",
"Cache Limit": "缓存限制", "Cache Limit": "缓存限制",
"Set Cache Limit": "设置缓存限制", "Set Cache Limit": "设置缓存限制",
"Size in MB": "大小MB", "Size in MB": "大小MB",
"Select a directory which contains the comic directories." : "选择一个包含漫画文件夹的目录", "Select a directory which contains the comic directories.": "选择一个包含漫画文件夹的目录",
"Help": "帮助", "Help": "帮助",
"Export as cbz": "导出为cbz", "Export as cbz": "导出为cbz",
"Select an archive file (cbz, zip, 7z, cb7)" : "选择一个归档文件 (cbz, zip, 7z, cb7)", "Select an archive file (cbz, zip, 7z, cb7)": "选择一个归档文件 (cbz, zip, 7z, cb7)",
"An archive file" : "一个归档文件", "An archive file": "一个归档文件",
"Fullscreen": "全屏", "Fullscreen": "全屏",
"Exit": "退出", "Exit": "退出",
"View more": "查看更多", "View more": "查看更多",
@@ -198,9 +198,9 @@
"Long press on the favorite button to quickly add to this folder": "长按收藏按钮快速添加到这个文件夹", "Long press on the favorite button to quickly add to this folder": "长按收藏按钮快速添加到这个文件夹",
"Added": "已添加", "Added": "已添加",
"Turn page by volume keys": "使用音量键翻页", "Turn page by volume keys": "使用音量键翻页",
"Display time & battery info in reader":"在阅读器中显示时间和电量信息", "Display time & battery info in reader": "在阅读器中显示时间和电量信息",
"EhViewer downloads":"EhViewer下载", "EhViewer downloads": "EhViewer下载",
"Select an EhViewer database and a download folder.":"选择EhViewer的下载数据导出的db文件与存放下载内容的目录", "Select an EhViewer database and a download folder.": "选择EhViewer的下载数据导出的db文件与存放下载内容的目录",
"(EhViewer)Default": "(EhViewer)默认", "(EhViewer)Default": "(EhViewer)默认",
"If you import an EhViewer's database, program will automatically create folders according to the download label in that database.": "若通过EhViewer数据库导入漫画程序将会按其中的下载标签自动创建收藏文件夹。", "If you import an EhViewer's database, program will automatically create folders according to the download label in that database.": "若通过EhViewer数据库导入漫画程序将会按其中的下载标签自动创建收藏文件夹。",
"Multi-Select": "进入多选模式", "Multi-Select": "进入多选模式",
@@ -241,7 +241,7 @@
"Delete all unavailable local favorite items": "删除所有无效的本地收藏", "Delete all unavailable local favorite items": "删除所有无效的本地收藏",
"Deleted @a favorite items.": "已删除 @a 条无效收藏", "Deleted @a favorite items.": "已删除 @a 条无效收藏",
"New version available": "有新版本可用", "New version available": "有新版本可用",
"A new version is available. Do you want to update now?" : "有新版本可用。您要现在更新吗?", "A new version is available. Do you want to update now?": "有新版本可用。您要现在更新吗?",
"No new version available": "没有新版本可用", "No new version available": "没有新版本可用",
"Export as pdf": "导出为pdf", "Export as pdf": "导出为pdf",
"Export as epub": "导出为epub", "Export as epub": "导出为epub",
@@ -288,15 +288,15 @@
"Copy the title successfully": "复制标题成功", "Copy the title successfully": "复制标题成功",
"The comic is invalid, please long press to delete, you can double click the title to copy": "该漫画已失效, 请长按删除, 可以双击标题进行复制", "The comic is invalid, please long press to delete, you can double click the title to copy": "该漫画已失效, 请长按删除, 可以双击标题进行复制",
"No search results found": "未找到搜索结果", "No search results found": "未找到搜索结果",
"Added @c comics to download queue." : "已添加 @c 本漫画到下载队列", "Added @c comics to download queue.": "已添加 @c 本漫画到下载队列",
"Download started": "下载已开始", "Download started": "下载已开始",
"Click favorite": "点击收藏", "Click favorite": "点击收藏",
"End": "末尾", "End": "末尾",
"None": "无", "None": "无",
"View Detail": "查看详情", "View Detail": "查看详情",
"Select a directory which contains multiple archive files." : "选择一个包含多个归档文件的目录", "Select a directory which contains multiple archive files.": "选择一个包含多个归档文件的目录",
"Multiple archive files" : "多个归档文件", "Multiple archive files": "多个归档文件",
"No valid comics found" : "未找到有效的漫画", "No valid comics found": "未找到有效的漫画",
"Enable DNS Overrides": "启用DNS覆写", "Enable DNS Overrides": "启用DNS覆写",
"DNS Overrides": "DNS覆写", "DNS Overrides": "DNS覆写",
"Custom Image Processing": "自定义图片处理", "Custom Image Processing": "自定义图片处理",
@@ -342,12 +342,12 @@
"Replies": "回复", "Replies": "回复",
"Follow Updates": "追更", "Follow Updates": "追更",
"Not Configured": "未配置", "Not Configured": "未配置",
"Choose a folder to follow updates." : "选择一个文件夹以追更", "Choose a folder to follow updates.": "选择一个文件夹以追更",
"Choose Folder": "选择文件夹", "Choose Folder": "选择文件夹",
"No folders available": "没有可用的文件夹", "No folders available": "没有可用的文件夹",
"Updating comics...": "更新漫画中...", "Updating comics...": "更新漫画中...",
"Automatic update checking enabled." : "已启用自动更新检查", "Automatic update checking enabled.": "已启用自动更新检查",
"The app will check for updates at most once a day." : "APP将每天最多检查一次更新", "The app will check for updates at most once a day.": "APP将每天最多检查一次更新",
"Change Folder": "更改文件夹", "Change Folder": "更改文件夹",
"Check Now": "立即检查", "Check Now": "立即检查",
"Updates": "更新", "Updates": "更新",
@@ -360,7 +360,7 @@
"Disabled": "已禁用", "Disabled": "已禁用",
"Auto Sync Data": "自动同步数据", "Auto Sync Data": "自动同步数据",
"Mark all as read": "全部标记为已读", "Mark all as read": "全部标记为已读",
"Do you want to mark all as read?" : "您要全部标记为已读吗?", "Do you want to mark all as read?": "您要全部标记为已读吗?",
"Swipe down for previous chapter": "向下滑动查看上一章", "Swipe down for previous chapter": "向下滑动查看上一章",
"Swipe up for next chapter": "向上滑动查看下一章", "Swipe up for next chapter": "向上滑动查看下一章",
"Initial Page": "初始页面", "Initial Page": "初始页面",
@@ -378,7 +378,9 @@
"Page": "页面", "Page": "页面",
"Jump": "跳转", "Jump": "跳转",
"Copy Image": "复制图片", "Copy Image": "复制图片",
"A valid WebDav directory URL": "有效的WebDav目录URL" "A valid WebDav directory URL": "有效的WebDav目录URL",
"Shut Down": "关闭",
"Uploading data...": "正在上传数据..."
}, },
"zh_TW": { "zh_TW": {
"Home": "首頁", "Home": "首頁",
@@ -520,18 +522,18 @@
"Block": "封鎖", "Block": "封鎖",
"Add new favorite to": "添加新收藏到", "Add new favorite to": "添加新收藏到",
"Move favorite after reading": "閱讀後移動收藏", "Move favorite after reading": "閱讀後移動收藏",
"Delete folder?" : "刪除資料夾?", "Delete folder?": "刪除資料夾?",
"Delete folder '@f' ?" : "刪除資料夾 '@f' ", "Delete folder '@f' ?": "刪除資料夾 '@f' ",
"Import from file": "從文件匯入", "Import from file": "從文件匯入",
"Failed to import": "匯入失敗", "Failed to import": "匯入失敗",
"Cache Limit": "快取限制", "Cache Limit": "快取限制",
"Set Cache Limit": "設定快取限制", "Set Cache Limit": "設定快取限制",
"Size in MB": "大小MB", "Size in MB": "大小MB",
"Select a directory which contains the comic directories." : "選擇一個包含漫畫資料夾的目錄", "Select a directory which contains the comic directories.": "選擇一個包含漫畫資料夾的目錄",
"Help": "幫助", "Help": "幫助",
"Export as cbz": "匯出為cbz", "Export as cbz": "匯出為cbz",
"Select an archive file (cbz, zip, 7z, cb7)" : "選擇一個歸檔文件 (cbz, zip, 7z, cb7)", "Select an archive file (cbz, zip, 7z, cb7)": "選擇一個歸檔文件 (cbz, zip, 7z, cb7)",
"An archive file" : "一個歸檔文件", "An archive file": "一個歸檔文件",
"Fullscreen": "全螢幕", "Fullscreen": "全螢幕",
"Exit": "退出", "Exit": "退出",
"View more": "查看更多", "View more": "查看更多",
@@ -622,13 +624,13 @@
"Delete all unavailable local favorite items": "刪除所有無效的本機收藏", "Delete all unavailable local favorite items": "刪除所有無效的本機收藏",
"Deleted @a favorite items.": "已刪除 @a 條無效收藏", "Deleted @a favorite items.": "已刪除 @a 條無效收藏",
"New version available": "有新版本可用", "New version available": "有新版本可用",
"A new version is available. Do you want to update now?" : "有新版本可用。您要現在更新嗎?", "A new version is available. Do you want to update now?": "有新版本可用。您要現在更新嗎?",
"No new version available": "沒有新版本可用", "No new version available": "沒有新版本可用",
"Export as pdf": "匯出為pdf", "Export as pdf": "匯出為pdf",
"Export as epub": "匯出為epub", "Export as epub": "匯出為epub",
"Aggregated Search": "聚合搜尋", "Aggregated Search": "聚合搜尋",
"No search results found": "未找到搜尋結果", "No search results found": "未找到搜尋結果",
"Added @c comics to download queue." : "已添加 @c 本漫畫到下載佇列", "Added @c comics to download queue.": "已添加 @c 本漫畫到下載佇列",
"Download started": "下載已開始", "Download started": "下載已開始",
"Click favorite": "點擊收藏", "Click favorite": "點擊收藏",
"Local comic collection is not supported at present": "本機收藏暫不支援", "Local comic collection is not supported at present": "本機收藏暫不支援",
@@ -675,9 +677,9 @@
"End": "末尾", "End": "末尾",
"None": "無", "None": "無",
"View Detail": "查看詳情", "View Detail": "查看詳情",
"Select a directory which contains multiple archive files." : "選擇一個包含多個歸檔文件的目錄", "Select a directory which contains multiple archive files.": "選擇一個包含多個歸檔文件的目錄",
"Multiple archive files" : "多個歸檔文件", "Multiple archive files": "多個歸檔文件",
"No valid comics found" : "未找到有效的漫畫", "No valid comics found": "未找到有效的漫畫",
"Enable DNS Overrides": "啟用DNS覆寫", "Enable DNS Overrides": "啟用DNS覆寫",
"DNS Overrides": "DNS覆寫", "DNS Overrides": "DNS覆寫",
"Custom Image Processing": "自訂圖片處理", "Custom Image Processing": "自訂圖片處理",
@@ -723,12 +725,12 @@
"Replies": "回覆", "Replies": "回覆",
"Follow Updates": "追更", "Follow Updates": "追更",
"Not Configured": "未配置", "Not Configured": "未配置",
"Choose a folder to follow updates." : "選擇一個資料夾以追更", "Choose a folder to follow updates.": "選擇一個資料夾以追更",
"Choose Folder": "選擇資料夾", "Choose Folder": "選擇資料夾",
"No folders available": "沒有可用的資料夾", "No folders available": "沒有可用的資料夾",
"Updating comics...": "更新漫畫中...", "Updating comics...": "更新漫畫中...",
"Automatic update checking enabled." : "已啟用自動更新檢查", "Automatic update checking enabled.": "已啟用自動更新檢查",
"The app will check for updates at most once a day." : "APP將每天最多檢查一次更新", "The app will check for updates at most once a day.": "APP將每天最多檢查一次更新",
"Change Folder": "更改資料夾", "Change Folder": "更改資料夾",
"Check Now": "立即檢查", "Check Now": "立即檢查",
"Updates": "更新", "Updates": "更新",
@@ -741,7 +743,7 @@
"Disabled": "已停用", "Disabled": "已停用",
"Auto Sync Data": "自動同步資料", "Auto Sync Data": "自動同步資料",
"Mark all as read": "全部標記為已讀", "Mark all as read": "全部標記為已讀",
"Do you want to mark all as read?" : "您要全部標記為已讀嗎?", "Do you want to mark all as read?": "您要全部標記為已讀嗎?",
"Swipe down for previous chapter": "向下滑動查看上一章", "Swipe down for previous chapter": "向下滑動查看上一章",
"Swipe up for next chapter": "向上滑動查看下一章", "Swipe up for next chapter": "向上滑動查看下一章",
"Initial Page": "初始頁面", "Initial Page": "初始頁面",
@@ -759,6 +761,8 @@
"Page": "頁面", "Page": "頁面",
"Jump": "跳轉", "Jump": "跳轉",
"Copy Image": "複製圖片", "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; return;
} }
} }
windowManager.close().then((_) { exit(0);
// Make sure the app exits when the window is closed.
exit(0);
});
} }
@override @override

View File

@@ -1,4 +1,6 @@
import 'package:flutter/foundation.dart'; 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/app.dart';
import 'package:venera/foundation/appdata.dart'; import 'package:venera/foundation/appdata.dart';
import 'package:venera/foundation/comic_source/comic_source.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:venera/utils/ext.dart';
import 'package:webdav_client/webdav_client.dart' hide File; import 'package:webdav_client/webdav_client.dart' hide File;
import 'package:rhttp/rhttp.dart' as rhttp; import 'package:rhttp/rhttp.dart' as rhttp;
import 'package:venera/utils/translations.dart';
import 'io.dart'; import 'io.dart';
@@ -20,6 +23,10 @@ class DataSync with ChangeNotifier {
} }
LocalFavoritesManager().addListener(onDataChanged); LocalFavoritesManager().addListener(onDataChanged);
ComicSourceManager().addListener(onDataChanged); ComicSourceManager().addListener(onDataChanged);
Future.delayed(const Duration(seconds: 1), () {
var controller = WindowFrame.of(App.rootContext);
controller.addCloseListener(_handleWindowClose);
});
} }
void onDataChanged() { 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; static DataSync? instance;
factory DataSync() => instance ?? (instance = DataSync._()); factory DataSync() => instance ?? (instance = DataSync._());