mirror of
https://github.com/lollipopkit/flutter_server_box.git
synced 2025-12-17 07:14:28 +01:00
fix: webdav settings (#683)
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user