From dbbb10364bea12b289938b15fce3c4ec4efc820f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?lollipopkit=F0=9F=8F=B3=EF=B8=8F=E2=80=8D=E2=9A=A7?= =?UTF-8?q?=EF=B8=8F?= <10864310+lollipopkit@users.noreply.github.com> Date: Wed, 29 Jan 2025 13:13:12 +0800 Subject: [PATCH] fix: webdav settings (#683) --- lib/data/res/store.dart | 2 - lib/data/store/no_backup.dart | 72 ----------------------------------- lib/main.dart | 2 - lib/view/page/backup.dart | 42 +++++++++++++------- 4 files changed, 28 insertions(+), 90 deletions(-) delete mode 100644 lib/data/store/no_backup.dart diff --git a/lib/data/res/store.dart b/lib/data/res/store.dart index 50571ec6..1e7c4b0c 100644 --- a/lib/data/res/store.dart +++ b/lib/data/res/store.dart @@ -1,7 +1,6 @@ import 'package:fl_lib/fl_lib.dart'; import 'package:server_box/data/store/container.dart'; import 'package:server_box/data/store/history.dart'; -import 'package:server_box/data/store/no_backup.dart'; import 'package:server_box/data/store/private_key.dart'; import 'package:server_box/data/store/server.dart'; import 'package:server_box/data/store/setting.dart'; @@ -27,7 +26,6 @@ abstract final class Stores { static Future init() async { await Future.wait(_allBackup.map((store) => store.init())); - await NoBackupStore.instance.init(); } static DateTime? get lastModTime { diff --git a/lib/data/store/no_backup.dart b/lib/data/store/no_backup.dart deleted file mode 100644 index 480a61b2..00000000 --- a/lib/data/store/no_backup.dart +++ /dev/null @@ -1,72 +0,0 @@ -// ignore_for_file: non_constant_identifier_names - -import 'package:fl_lib/fl_lib.dart'; -import 'package:server_box/data/res/store.dart'; - -final class NoBackupStore extends HiveStore { - NoBackupStore._() : super('no_backup'); - - static final instance = NoBackupStore._(); - - /// Only valid on iOS and macOS - late final _icloudSync = propertyDefault('icloudSync', false); - - /// Webdav sync - late final webdavSync = propertyDefault('webdavSync', false); - late final webdavUrl = propertyDefault('webdavUrl', ''); - late final webdavUser = propertyDefault('webdavUser', ''); - late final webdavPwd = propertyDefault('webdavPwd', ''); - - void migrate(int lastVer) { - if (lastVer > 1104) return; - - // Settings store -> NoBackup store - final settings = Stores.setting; - final icloudSync_ = settings.box.get('icloudSync'); - if (icloudSync_ is bool) { - _icloudSync.set(icloudSync_); - settings.box.delete('icloudSync'); - } - final webdavSync_ = settings.box.get('webdavSync'); - if (webdavSync_ is bool) { - webdavSync.set(webdavSync_); - settings.box.delete('webdavSync'); - } - final webdavUrl_ = settings.box.get('webdavUrl'); - if (webdavUrl_ is String) { - webdavUrl.set(webdavUrl_); - settings.box.delete('webdavUrl'); - } - final webdavUser_ = settings.box.get('webdavUser'); - if (webdavUser_ is String) { - webdavUser.set(webdavUser_); - settings.box.delete('webdavUser'); - } - final webdavPwd_ = settings.box.get('webdavPwd'); - if (webdavPwd_ is String) { - webdavPwd.set(webdavPwd_); - settings.box.delete('webdavPwd'); - } - - // NoBackup store -> Pref store - final icloudSync__ = _icloudSync.get(); - PrefProps.icloudSync.set(icloudSync__); - _icloudSync.remove(); - - final webdavSync__ = webdavSync.get(); - PrefProps.webdavSync.set(webdavSync__); - webdavSync.remove(); - - final webdavUrl__ = webdavUrl.get(); - PrefProps.webdavUrl.set(webdavUrl__); - webdavUrl.remove(); - - final webdavUser__ = webdavUser.get(); - PrefProps.webdavUser.set(webdavUser__); - webdavUser.remove(); - - final webdavPwd__ = webdavPwd.get(); - PrefProps.webdavPwd.set(webdavPwd__); - webdavPwd.remove(); - } -} diff --git a/lib/main.dart b/lib/main.dart index ba143500..5cd2e146 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -25,7 +25,6 @@ import 'package:server_box/data/provider/sftp.dart'; import 'package:server_box/data/provider/snippet.dart'; import 'package:server_box/data/res/build_data.dart'; import 'package:server_box/data/res/store.dart'; -import 'package:server_box/data/store/no_backup.dart'; Future main() async { _runInZone(() async { @@ -128,7 +127,6 @@ Future _doVersionRelated() async { if (lastVer < newVer) { ServerDetailCards.autoAddNewCards(newVer); ServerFuncBtn.autoAddNewFuncs(newVer); - NoBackupStore.instance.migrate(lastVer); Stores.setting.lastVer.put(newVer); } } diff --git a/lib/view/page/backup.dart b/lib/view/page/backup.dart index 18602db9..6e49eeaa 100644 --- a/lib/view/page/backup.dart +++ b/lib/view/page/backup.dart @@ -13,7 +13,6 @@ import 'package:server_box/data/provider/snippet.dart'; import 'package:server_box/data/res/misc.dart'; import 'package:server_box/data/res/store.dart'; import 'package:icons_plus/icons_plus.dart'; -import 'package:server_box/data/store/no_backup.dart'; import 'package:webdav_client/webdav_client.dart'; class BackupPage extends StatefulWidget { @@ -25,7 +24,6 @@ class BackupPage extends StatefulWidget { final class _BackupPageState extends State with AutomaticKeepAliveClientMixin { - final _noBak = NoBackupStore.instance; final icloudLoading = false.vn; final webdavLoading = false.vn; @@ -108,7 +106,7 @@ final class _BackupPageState extends State trailing: StoreSwitch( prop: PrefProps.icloudSync, validator: (p0) { - if (p0 && _noBak.webdavSync.fetch()) { + if (p0 && PrefProps.webdavSync.get()) { context.showSnackBar(l10n.autoBackupConflict); return false; } @@ -141,12 +139,21 @@ final class _BackupPageState extends State ListTile( title: Text(libL10n.auto), trailing: StoreSwitch( - prop: _noBak.webdavSync, + prop: PrefProps.webdavSync, validator: (p0) { if (p0) { - if (_noBak.webdavUrl.fetch().isEmpty || - _noBak.webdavUser.fetch().isEmpty || - _noBak.webdavPwd.fetch().isEmpty) { + final url = PrefProps.webdavUrl.get(); + final user = PrefProps.webdavUser.get(); + final pwd = PrefProps.webdavPwd.get(); + + final anyNull = url == null || user == null || pwd == null; + if (anyNull) { + context.showSnackBar(l10n.webdavSettingEmpty); + return false; + } + + final anyEmpty = url.isEmpty || user.isEmpty || pwd.isEmpty; + if (anyEmpty) { context.showSnackBar(l10n.webdavSettingEmpty); return false; } @@ -365,9 +372,9 @@ final class _BackupPageState extends State } Future _onTapWebdavSetting(BuildContext context) async { - final url = TextEditingController(text: _noBak.webdavUrl.fetch()); - final user = TextEditingController(text: _noBak.webdavUser.fetch()); - final pwd = TextEditingController(text: _noBak.webdavPwd.fetch()); + final url = TextEditingController(text: PrefProps.webdavUrl.get()); + final user = TextEditingController(text: PrefProps.webdavUser.get()); + final pwd = TextEditingController(text: PrefProps.webdavPwd.get()); final nodeUser = FocusNode(); final nodePwd = FocusNode(); final result = await context.showRoundDialog( @@ -377,7 +384,7 @@ final class _BackupPageState extends State children: [ Input( label: 'URL', - hint: 'https://example.com/webdav/', + hint: 'https://example.com/sub/', controller: url, suggestion: false, onSubmitted: (p0) => FocusScope.of(context).requestFocus(nodeUser), @@ -402,10 +409,17 @@ final class _BackupPageState extends State ); if (result == true) { try { - await Webdav.test(url.text, user.text, pwd.text); + final url_ = url.text; + final user_ = user.text; + final pwd_ = pwd.text; + + await Webdav.test(url_, user_, pwd_); context.showSnackBar(libL10n.success); - Webdav.shared.client = - WebdavClient(url: url.text, user: user.text, pwd: pwd.text); + + Webdav.shared.client = WebdavClient(url: url_, user: user_, pwd: pwd_); + PrefProps.webdavUrl.set(url_); + PrefProps.webdavUser.set(user_); + PrefProps.webdavPwd.set(pwd_); } catch (e, s) { context.showErrDialog(e, s, 'Webdav'); }