mirror of
https://github.com/lollipopkit/flutter_server_box.git
synced 2025-12-17 07:14:28 +01:00
opt.: backup
This commit is contained in:
@@ -260,9 +260,9 @@ class BackupPage extends StatelessWidget {
|
||||
),
|
||||
],
|
||||
);
|
||||
} catch (e, trace) {
|
||||
Loggers.app.warning('Import backup failed', e, trace);
|
||||
context.showSnackBar(e.toString());
|
||||
} catch (e, s) {
|
||||
Loggers.app.warning('Import backup failed', e, s);
|
||||
context.showErrDialog(e: e, s: s, operation: l10n.restore);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -270,89 +270,52 @@ class BackupPage extends StatelessWidget {
|
||||
webdavLoading.value = true;
|
||||
try {
|
||||
final files = await Webdav.list();
|
||||
if (files.isEmpty) {
|
||||
context.showSnackBar(l10n.dirEmpty);
|
||||
webdavLoading.value = false;
|
||||
return;
|
||||
}
|
||||
if (files.isEmpty) return context.showSnackBar(l10n.dirEmpty);
|
||||
|
||||
final fileName = await context.showRoundDialog<String>(
|
||||
final fileName = await context.showPickSingleDialog(
|
||||
title: l10n.restore,
|
||||
child: SizedBox(
|
||||
width: 300,
|
||||
height: 300,
|
||||
child: ListView.builder(
|
||||
itemCount: files.length,
|
||||
itemBuilder: (_, index) {
|
||||
final file = files[index];
|
||||
return ListTile(
|
||||
title: Text(file),
|
||||
onTap: () => context.pop(file),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () => context.pop(),
|
||||
child: Text(l10n.cancel),
|
||||
),
|
||||
],
|
||||
items: files,
|
||||
);
|
||||
if (fileName == null) {
|
||||
webdavLoading.value = false;
|
||||
return;
|
||||
}
|
||||
if (fileName == null) return;
|
||||
|
||||
final result = await Webdav.download(relativePath: fileName);
|
||||
if (result != null) {
|
||||
Loggers.app.warning('Download webdav backup failed: $result');
|
||||
webdavLoading.value = false;
|
||||
return;
|
||||
throw result;
|
||||
}
|
||||
final dlFile = await File('${Paths.doc}/$fileName').readAsString();
|
||||
final dlBak = await Computer.shared.start(Backup.fromJsonString, dlFile);
|
||||
await dlBak.restore(force: true);
|
||||
webdavLoading.value = false;
|
||||
} catch (e) {
|
||||
context.showSnackBar(e.toString());
|
||||
rethrow;
|
||||
} catch (e, s) {
|
||||
context.showErrDialog(e: e, s: s, operation: l10n.restore);
|
||||
Loggers.app.warning('Download webdav backup failed', e, s);
|
||||
} finally {
|
||||
webdavLoading.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _onTapWebdavUp(BuildContext context) async {
|
||||
webdavLoading.value = true;
|
||||
final date = DateTime.now().ymdhms(ymdSep: "-", hmsSep: "-", sep: "-");
|
||||
final bakName = '$date-${Miscs.bakFileName}';
|
||||
try {
|
||||
webdavLoading.value = true;
|
||||
final date = DateTime.now().ymdhms(ymdSep: "-", hmsSep: "-", sep: "-");
|
||||
final bakName = '$date-${Miscs.bakFileName}';
|
||||
await Backup.backup(bakName);
|
||||
final uploadResult = await Webdav.upload(relativePath: bakName);
|
||||
if (uploadResult != null) {
|
||||
Loggers.app.warning('Upload webdav backup failed: $uploadResult');
|
||||
context.showSnackBar(uploadResult.toString());
|
||||
} else {
|
||||
Loggers.app.info('Upload webdav backup success');
|
||||
throw uploadResult;
|
||||
}
|
||||
} catch (e) {
|
||||
context.showSnackBar(e.toString());
|
||||
rethrow;
|
||||
Loggers.app.info('Upload webdav backup success');
|
||||
} catch (e, s) {
|
||||
context.showErrDialog(e: e, s: s, operation: l10n.upload);
|
||||
Loggers.app.warning('Upload webdav backup failed', e, s);
|
||||
} finally {
|
||||
webdavLoading.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _onTapWebdavSetting(BuildContext context) async {
|
||||
final urlCtrl = TextEditingController(
|
||||
text: Stores.setting.webdavUrl.fetch(),
|
||||
);
|
||||
final userCtrl = TextEditingController(
|
||||
text: Stores.setting.webdavUser.fetch(),
|
||||
);
|
||||
final pwdCtrl = TextEditingController(
|
||||
text: Stores.setting.webdavPwd.fetch(),
|
||||
);
|
||||
final url = TextEditingController(text: Stores.setting.webdavUrl.fetch());
|
||||
final user = TextEditingController(text: Stores.setting.webdavUser.fetch());
|
||||
final pwd = TextEditingController(text: Stores.setting.webdavPwd.fetch());
|
||||
final result = await context.showRoundDialog<bool>(
|
||||
title: 'WebDAV',
|
||||
child: Column(
|
||||
@@ -361,15 +324,15 @@ class BackupPage extends StatelessWidget {
|
||||
Input(
|
||||
label: 'URL',
|
||||
hint: 'https://example.com/webdav/',
|
||||
controller: urlCtrl,
|
||||
controller: url,
|
||||
),
|
||||
Input(
|
||||
label: l10n.user,
|
||||
controller: userCtrl,
|
||||
controller: user,
|
||||
),
|
||||
Input(
|
||||
label: l10n.pwd,
|
||||
controller: pwdCtrl,
|
||||
controller: pwd,
|
||||
),
|
||||
],
|
||||
),
|
||||
@@ -383,15 +346,13 @@ class BackupPage extends StatelessWidget {
|
||||
],
|
||||
);
|
||||
if (result == true) {
|
||||
final result =
|
||||
await Webdav.test(urlCtrl.text, userCtrl.text, pwdCtrl.text);
|
||||
if (result == null) {
|
||||
context.showSnackBar(l10n.success);
|
||||
} else {
|
||||
final result = await Webdav.test(url.text, user.text, pwd.text);
|
||||
if (result != null) {
|
||||
context.showSnackBar(result);
|
||||
return;
|
||||
}
|
||||
Webdav.changeClient(urlCtrl.text, userCtrl.text, pwdCtrl.text);
|
||||
context.showSnackBar(l10n.success);
|
||||
Webdav.changeClient(url.text, user.text, pwd.text);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -431,9 +392,9 @@ class BackupPage extends StatelessWidget {
|
||||
),
|
||||
],
|
||||
);
|
||||
} catch (e, trace) {
|
||||
Loggers.app.warning('Import backup failed', e, trace);
|
||||
context.showSnackBar(e.toString());
|
||||
} catch (e, s) {
|
||||
Loggers.app.warning('Import backup failed', e, s);
|
||||
context.showErrDialog(e: e, s: s, operation: l10n.restore);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -468,11 +429,9 @@ class BackupPage extends StatelessWidget {
|
||||
);
|
||||
context.showSnackBar(l10n.success);
|
||||
}
|
||||
} catch (e) {
|
||||
context.showRoundDialog(
|
||||
title: l10n.error,
|
||||
child: Text(e.toString()),
|
||||
);
|
||||
} catch (e, s) {
|
||||
context.showErrDialog(e: e, s: s, operation: l10n.import);
|
||||
Loggers.app.warning('Import servers failed', e, s);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user