From 3efc4794d0a3c64a71b346b69380e9ceb1da6bdb Mon Sep 17 00:00:00 2001 From: buste <32890006+bustesoul@users.noreply.github.com> Date: Fri, 21 Feb 2025 16:46:22 +0800 Subject: [PATCH] Fix webdav prevent immediate upload when webdavAutoSync toggle (#221) --- assets/translation.json | 2 ++ lib/init.dart | 12 ++++++++++ lib/pages/settings/app.dart | 45 ++++++++++++++++++++++--------------- lib/utils/data_sync.dart | 2 +- 4 files changed, 42 insertions(+), 19 deletions(-) diff --git a/assets/translation.json b/assets/translation.json index 7f27d3d..8d4f849 100644 --- a/assets/translation.json +++ b/assets/translation.json @@ -190,6 +190,7 @@ "Operation": "操作", "Upload": "上传", "Saved": "已保存", + "Saved Failed": "保存失败", "Sync Data": "同步数据", "Syncing Data": "正在同步数据", "Data Sync": "数据同步", @@ -553,6 +554,7 @@ "Operation": "操作", "Upload": "上傳", "Saved": "已保存", + "Saved Failed": "保存失敗", "Sync Data": "同步數據", "Syncing Data": "正在同步數據", "Data Sync": "數據同步", diff --git a/lib/init.dart b/lib/init.dart index 6f8bcda..8435771 100644 --- a/lib/init.dart +++ b/lib/init.dart @@ -56,6 +56,18 @@ void _checkOldConfigs() { .map((e) => e.key) .toList(); } + + if (appdata.implicitData['webdavAutoSync'] == null) { + var webdavConfig = appdata.settings['webdav']; + if (webdavConfig is List && + webdavConfig.length == 3 && + webdavConfig.whereType().length == 3) { + appdata.implicitData['webdavAutoSync'] = true; + } else { + appdata.implicitData['webdavAutoSync'] = false; + } + appdata.writeImplicitData(); + } } Future _checkAppUpdates() async { diff --git a/lib/pages/settings/app.dart b/lib/pages/settings/app.dart index 9dbd3ee..4bb032f 100644 --- a/lib/pages/settings/app.dart +++ b/lib/pages/settings/app.dart @@ -350,7 +350,15 @@ class _WebdavSettingState extends State<_WebdavSetting> { user = configs[1]; pass = configs[2]; isEnabled = true; - autoSync = appdata.settings['webdavAutoSync'] ?? false; + autoSync = appdata.implicitData['webdavAutoSync'] ?? false; + } + + void onAutoSyncChanged(bool value) { + setState(() { + autoSync = value; + appdata.implicitData['webdavAutoSync'] = value; + appdata.writeImplicitData(); + }); } @override @@ -364,13 +372,7 @@ class _WebdavSettingState extends State<_WebdavSetting> { SwitchListTile( title: Text("WebDAV Auto Sync".tl), value: autoSync, - onChanged: (value) { - setState(() { - autoSync = value; - appdata.settings['webdavAutoSync'] = value; - appdata.saveData(); - }); - }, + onChanged: onAutoSyncChanged, ), const SizedBox(height: 12), TextField( @@ -448,11 +450,14 @@ class _WebdavSettingState extends State<_WebdavSetting> { isLoading: isTesting, onPressed: () async { var oldConfig = appdata.settings['webdav']; - var oldAutoSync = appdata.settings['webdavAutoSync']; - - if (url.trim().isEmpty && user.trim().isEmpty && pass.trim().isEmpty) { + var oldAutoSync = appdata.implicitData['webdavAutoSync']; + + if (url.trim().isEmpty && + user.trim().isEmpty && + pass.trim().isEmpty) { appdata.settings['webdav'] = []; - appdata.settings['webdavAutoSync'] = false; + appdata.implicitData['webdavAutoSync'] = false; + appdata.writeImplicitData(); appdata.saveData(); context.showMessage(message: "Saved".tl); App.rootPop(); @@ -460,7 +465,8 @@ class _WebdavSettingState extends State<_WebdavSetting> { } appdata.settings['webdav'] = [url, user, pass]; - appdata.settings['webdavAutoSync'] = autoSync; + appdata.implicitData['webdavAutoSync'] = autoSync; + appdata.writeImplicitData(); if (!autoSync) { appdata.saveData(); @@ -480,13 +486,16 @@ class _WebdavSettingState extends State<_WebdavSetting> { isTesting = false; }); appdata.settings['webdav'] = oldConfig; - appdata.settings['webdavAutoSync'] = oldAutoSync; + appdata.implicitData['webdavAutoSync'] = oldAutoSync; + appdata.writeImplicitData(); + appdata.saveData(); context.showMessage(message: testResult.errorMessage!); - return; + context.showMessage(message: "Saved Failed".tl); + } else { + appdata.saveData(); + context.showMessage(message: "Saved".tl); + App.rootPop(); } - appdata.saveData(); - context.showMessage(message: "Saved".tl); - App.rootPop(); }, child: Text("Continue".tl), ), diff --git a/lib/utils/data_sync.dart b/lib/utils/data_sync.dart index 9b6839a..e73cd9f 100644 --- a/lib/utils/data_sync.dart +++ b/lib/utils/data_sync.dart @@ -44,7 +44,7 @@ class DataSync with ChangeNotifier { bool get isEnabled { var config = appdata.settings['webdav']; - var autoSync = appdata.settings['webdavAutoSync'] ?? false; + var autoSync = appdata.implicitData['webdavAutoSync'] ?? false; return autoSync && config is List && config.isNotEmpty; }