opt.: backup

This commit is contained in:
lollipopkit
2024-06-04 22:33:59 +08:00
parent 6dc5536c48
commit 413c45a559
4 changed files with 55 additions and 141 deletions

View File

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