From 40ce37d23075240a5778118b8dfe455a0e0c616d Mon Sep 17 00:00:00 2001 From: lollipopkit Date: Wed, 5 Jun 2024 18:48:44 +0800 Subject: [PATCH] opt.: sftp del dir --- lib/view/page/home/home.dart | 2 +- lib/view/page/home/wear.dart | 2 +- lib/view/page/storage/sftp.dart | 34 +++++++++++++++++++++++++++------ 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/lib/view/page/home/home.dart b/lib/view/page/home/home.dart index 0be63ee7..ab4a7d7f 100644 --- a/lib/view/page/home/home.dart +++ b/lib/view/page/home/home.dart @@ -341,7 +341,7 @@ ${GithubIds.participants.map((e) => '[$e](${e.url})').join(' ')} if (Stores.setting.autoCheckAppUpdate.fetch()) { AppUpdateIface.doUpdate( build: BuildData.build, - url: '${Urls.cdnBase}/update.json', + url: Urls.updateCfg, context: context, ); } diff --git a/lib/view/page/home/wear.dart b/lib/view/page/home/wear.dart index d4070ee4..0ce66569 100644 --- a/lib/view/page/home/wear.dart +++ b/lib/view/page/home/wear.dart @@ -94,7 +94,7 @@ final class _WearHomeState extends State with AfterLayoutMixin { if (Stores.setting.autoCheckAppUpdate.fetch()) { AppUpdateIface.doUpdate( build: BuildData.build, - url: '${Urls.cdnBase}/update.json', + url: Urls.updateCfg, context: context, ); } diff --git a/lib/view/page/storage/sftp.dart b/lib/view/page/storage/sftp.dart index 974d0a49..cbe441eb 100644 --- a/lib/view/page/storage/sftp.dart +++ b/lib/view/page/storage/sftp.dart @@ -472,19 +472,41 @@ class _SftpPageState extends State with AfterLayoutMixin { void _delete(SftpName file) { context.pop(); final isDir = file.attr.isDirectory; - final useRmr = Stores.setting.sftpRmrDir.fetch(); + var useRmr = Stores.setting.sftpRmrDir.fetch(); final text = () { if (isDir && !useRmr) { - return l10n.askContinue( - '${l10n.dirEmpty}\n${l10n.delete} ' - '${file.filename}', - ); + return l10n.askContinue('${l10n.delete} ${file.filename}'); } return l10n.askContinue('${l10n.delete} ${file.filename}'); }(); + + // Most users don't know that SFTP can't delete a directory which is not + // empty, so we provide a checkbox to let user choose to use `rm -r` or not context.showRoundDialog( - child: Text(text), title: l10n.attention, + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + ListTile( + title: Text(text), + ), + if (!useRmr) + StatefulBuilder( + builder: (_, setState) { + return CheckboxListTile( + title: Text(l10n.sftpRmrDirSummary), + value: useRmr, + onChanged: (val) { + setState(() { + useRmr = val ?? false; + }); + }, + ); + }, + ), + ], + ), actions: [ TextButton( onPressed: () => context.pop(),