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:fl_lib/fl_lib.dart';
|
||||||
import 'package:server_box/data/store/container.dart';
|
import 'package:server_box/data/store/container.dart';
|
||||||
import 'package:server_box/data/store/history.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/private_key.dart';
|
||||||
import 'package:server_box/data/store/server.dart';
|
import 'package:server_box/data/store/server.dart';
|
||||||
import 'package:server_box/data/store/setting.dart';
|
import 'package:server_box/data/store/setting.dart';
|
||||||
@@ -27,7 +26,6 @@ abstract final class Stores {
|
|||||||
|
|
||||||
static Future<void> init() async {
|
static Future<void> init() async {
|
||||||
await Future.wait(_allBackup.map((store) => store.init()));
|
await Future.wait(_allBackup.map((store) => store.init()));
|
||||||
await NoBackupStore.instance.init();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static DateTime? get lastModTime {
|
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/provider/snippet.dart';
|
||||||
import 'package:server_box/data/res/build_data.dart';
|
import 'package:server_box/data/res/build_data.dart';
|
||||||
import 'package:server_box/data/res/store.dart';
|
import 'package:server_box/data/res/store.dart';
|
||||||
import 'package:server_box/data/store/no_backup.dart';
|
|
||||||
|
|
||||||
Future<void> main() async {
|
Future<void> main() async {
|
||||||
_runInZone(() async {
|
_runInZone(() async {
|
||||||
@@ -128,7 +127,6 @@ Future<void> _doVersionRelated() async {
|
|||||||
if (lastVer < newVer) {
|
if (lastVer < newVer) {
|
||||||
ServerDetailCards.autoAddNewCards(newVer);
|
ServerDetailCards.autoAddNewCards(newVer);
|
||||||
ServerFuncBtn.autoAddNewFuncs(newVer);
|
ServerFuncBtn.autoAddNewFuncs(newVer);
|
||||||
NoBackupStore.instance.migrate(lastVer);
|
|
||||||
Stores.setting.lastVer.put(newVer);
|
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/misc.dart';
|
||||||
import 'package:server_box/data/res/store.dart';
|
import 'package:server_box/data/res/store.dart';
|
||||||
import 'package:icons_plus/icons_plus.dart';
|
import 'package:icons_plus/icons_plus.dart';
|
||||||
import 'package:server_box/data/store/no_backup.dart';
|
|
||||||
import 'package:webdav_client/webdav_client.dart';
|
import 'package:webdav_client/webdav_client.dart';
|
||||||
|
|
||||||
class BackupPage extends StatefulWidget {
|
class BackupPage extends StatefulWidget {
|
||||||
@@ -25,7 +24,6 @@ class BackupPage extends StatefulWidget {
|
|||||||
|
|
||||||
final class _BackupPageState extends State<BackupPage>
|
final class _BackupPageState extends State<BackupPage>
|
||||||
with AutomaticKeepAliveClientMixin {
|
with AutomaticKeepAliveClientMixin {
|
||||||
final _noBak = NoBackupStore.instance;
|
|
||||||
final icloudLoading = false.vn;
|
final icloudLoading = false.vn;
|
||||||
final webdavLoading = false.vn;
|
final webdavLoading = false.vn;
|
||||||
|
|
||||||
@@ -108,7 +106,7 @@ final class _BackupPageState extends State<BackupPage>
|
|||||||
trailing: StoreSwitch(
|
trailing: StoreSwitch(
|
||||||
prop: PrefProps.icloudSync,
|
prop: PrefProps.icloudSync,
|
||||||
validator: (p0) {
|
validator: (p0) {
|
||||||
if (p0 && _noBak.webdavSync.fetch()) {
|
if (p0 && PrefProps.webdavSync.get()) {
|
||||||
context.showSnackBar(l10n.autoBackupConflict);
|
context.showSnackBar(l10n.autoBackupConflict);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -141,12 +139,21 @@ final class _BackupPageState extends State<BackupPage>
|
|||||||
ListTile(
|
ListTile(
|
||||||
title: Text(libL10n.auto),
|
title: Text(libL10n.auto),
|
||||||
trailing: StoreSwitch(
|
trailing: StoreSwitch(
|
||||||
prop: _noBak.webdavSync,
|
prop: PrefProps.webdavSync,
|
||||||
validator: (p0) {
|
validator: (p0) {
|
||||||
if (p0) {
|
if (p0) {
|
||||||
if (_noBak.webdavUrl.fetch().isEmpty ||
|
final url = PrefProps.webdavUrl.get();
|
||||||
_noBak.webdavUser.fetch().isEmpty ||
|
final user = PrefProps.webdavUser.get();
|
||||||
_noBak.webdavPwd.fetch().isEmpty) {
|
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);
|
context.showSnackBar(l10n.webdavSettingEmpty);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -365,9 +372,9 @@ final class _BackupPageState extends State<BackupPage>
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _onTapWebdavSetting(BuildContext context) async {
|
Future<void> _onTapWebdavSetting(BuildContext context) async {
|
||||||
final url = TextEditingController(text: _noBak.webdavUrl.fetch());
|
final url = TextEditingController(text: PrefProps.webdavUrl.get());
|
||||||
final user = TextEditingController(text: _noBak.webdavUser.fetch());
|
final user = TextEditingController(text: PrefProps.webdavUser.get());
|
||||||
final pwd = TextEditingController(text: _noBak.webdavPwd.fetch());
|
final pwd = TextEditingController(text: PrefProps.webdavPwd.get());
|
||||||
final nodeUser = FocusNode();
|
final nodeUser = FocusNode();
|
||||||
final nodePwd = FocusNode();
|
final nodePwd = FocusNode();
|
||||||
final result = await context.showRoundDialog<bool>(
|
final result = await context.showRoundDialog<bool>(
|
||||||
@@ -377,7 +384,7 @@ final class _BackupPageState extends State<BackupPage>
|
|||||||
children: [
|
children: [
|
||||||
Input(
|
Input(
|
||||||
label: 'URL',
|
label: 'URL',
|
||||||
hint: 'https://example.com/webdav/',
|
hint: 'https://example.com/sub/',
|
||||||
controller: url,
|
controller: url,
|
||||||
suggestion: false,
|
suggestion: false,
|
||||||
onSubmitted: (p0) => FocusScope.of(context).requestFocus(nodeUser),
|
onSubmitted: (p0) => FocusScope.of(context).requestFocus(nodeUser),
|
||||||
@@ -402,10 +409,17 @@ final class _BackupPageState extends State<BackupPage>
|
|||||||
);
|
);
|
||||||
if (result == true) {
|
if (result == true) {
|
||||||
try {
|
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);
|
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) {
|
} catch (e, s) {
|
||||||
context.showErrDialog(e, s, 'Webdav');
|
context.showErrDialog(e, s, 'Webdav');
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user