fix: webdav settings (#683)

This commit is contained in:
lollipopkit🏳️‍⚧️
2025-01-29 13:13:12 +08:00
committed by GitHub
parent 16948c3e0f
commit dbbb10364b
4 changed files with 28 additions and 90 deletions

View File

@@ -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<void> init() async {
await Future.wait(_allBackup.map((store) => store.init()));
await NoBackupStore.instance.init();
}
static DateTime? get lastModTime {

View File

@@ -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();
}
}

View File

@@ -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<void> main() async {
_runInZone(() async {
@@ -128,7 +127,6 @@ Future<void> _doVersionRelated() async {
if (lastVer < newVer) {
ServerDetailCards.autoAddNewCards(newVer);
ServerFuncBtn.autoAddNewFuncs(newVer);
NoBackupStore.instance.migrate(lastVer);
Stores.setting.lastVer.put(newVer);
}
}

View File

@@ -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<BackupPage>
with AutomaticKeepAliveClientMixin {
final _noBak = NoBackupStore.instance;
final icloudLoading = false.vn;
final webdavLoading = false.vn;
@@ -108,7 +106,7 @@ final class _BackupPageState extends State<BackupPage>
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<BackupPage>
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<BackupPage>
}
Future<void> _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<bool>(
@@ -377,7 +384,7 @@ final class _BackupPageState extends State<BackupPage>
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<BackupPage>
);
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');
}