diff --git a/.dart_tool/flutter_gen/gen_l10n/l10n.dart b/.dart_tool/flutter_gen/gen_l10n/l10n.dart index 73f428c3..e3bfddeb 100644 --- a/.dart_tool/flutter_gen/gen_l10n/l10n.dart +++ b/.dart_tool/flutter_gen/gen_l10n/l10n.dart @@ -1184,16 +1184,10 @@ abstract class S { /// **'Preparing to connect...'** String get sftpDlPrepare; - /// No description provided for @sftpRmrfDir. - /// - /// In en, this message translates to: - /// **'SFTP `rm -rf`'** - String get sftpRmrfDir; - /// No description provided for @sftpRmrfDirSummary. /// /// In en, this message translates to: - /// **'Use `rm -rf` to delete a folder.'** + /// **'Use `rm -rf` to delete a folder in SFTP.'** String get sftpRmrfDirSummary; /// No description provided for @sftpSSHConnected. diff --git a/.dart_tool/flutter_gen/gen_l10n/l10n_de.dart b/.dart_tool/flutter_gen/gen_l10n/l10n_de.dart index 02c750d3..9b2076f3 100644 --- a/.dart_tool/flutter_gen/gen_l10n/l10n_de.dart +++ b/.dart_tool/flutter_gen/gen_l10n/l10n_de.dart @@ -574,10 +574,7 @@ class SDe extends S { String get sftpDlPrepare => 'Verbindung vorbereiten...'; @override - String get sftpRmrfDir => 'SFTP `rm -rf`'; - - @override - String get sftpRmrfDirSummary => 'Verwenden Sie `rm -rf`, um einen Ordner zu löschen.'; + String get sftpRmrfDirSummary => 'Verwenden Sie \"rm -rf\", um das Verzeichnis in SFTP zu löschen.'; @override String get sftpSSHConnected => 'SFTP Verbunden'; diff --git a/.dart_tool/flutter_gen/gen_l10n/l10n_en.dart b/.dart_tool/flutter_gen/gen_l10n/l10n_en.dart index 8acffddf..2437f210 100644 --- a/.dart_tool/flutter_gen/gen_l10n/l10n_en.dart +++ b/.dart_tool/flutter_gen/gen_l10n/l10n_en.dart @@ -574,10 +574,7 @@ class SEn extends S { String get sftpDlPrepare => 'Preparing to connect...'; @override - String get sftpRmrfDir => 'SFTP `rm -rf`'; - - @override - String get sftpRmrfDirSummary => 'Use `rm -rf` to delete a folder.'; + String get sftpRmrfDirSummary => 'Use `rm -rf` to delete a folder in SFTP.'; @override String get sftpSSHConnected => 'SFTP Connected'; diff --git a/.dart_tool/flutter_gen/gen_l10n/l10n_id.dart b/.dart_tool/flutter_gen/gen_l10n/l10n_id.dart index aaed40f2..15329c1e 100644 --- a/.dart_tool/flutter_gen/gen_l10n/l10n_id.dart +++ b/.dart_tool/flutter_gen/gen_l10n/l10n_id.dart @@ -574,10 +574,7 @@ class SId extends S { String get sftpDlPrepare => 'Bersiap untuk terhubung ...'; @override - String get sftpRmrfDir => 'SFTP `rm -rf`'; - - @override - String get sftpRmrfDirSummary => 'Gunakan `rm -rf` untuk menghapus folder.'; + String get sftpRmrfDirSummary => 'Gunakan `rm -rf` untuk menghapus dir di SFTP'; @override String get sftpSSHConnected => 'Sftp terhubung'; diff --git a/.dart_tool/flutter_gen/gen_l10n/l10n_zh.dart b/.dart_tool/flutter_gen/gen_l10n/l10n_zh.dart index 9b4bd3ba..1c0fd550 100644 --- a/.dart_tool/flutter_gen/gen_l10n/l10n_zh.dart +++ b/.dart_tool/flutter_gen/gen_l10n/l10n_zh.dart @@ -574,10 +574,7 @@ class SZh extends S { String get sftpDlPrepare => '准备连接至服务器...'; @override - String get sftpRmrfDir => 'SFTP 使用 `rm -rf`'; - - @override - String get sftpRmrfDirSummary => '使用 `rm -rf` 来删除文件夹'; + String get sftpRmrfDirSummary => '在 SFTP 中使用 `rm -rf` 来删除文件夹'; @override String get sftpSSHConnected => 'SFTP 已连接...'; @@ -1312,10 +1309,7 @@ class SZhTw extends SZh { String get sftpDlPrepare => '準備連接至服務器...'; @override - String get sftpRmrfDir => 'SFTP 使用 `rm -rf`'; - - @override - String get sftpRmrfDirSummary => '使用 `rm -rf` 來刪除文件夾'; + String get sftpRmrfDirSummary => '在 SFTP 中使用 `rm -rf` 來刪除文件夾'; @override String get sftpSSHConnected => 'SFTP 已連接...'; diff --git a/lib/core/analysis.dart b/lib/core/analysis.dart index eaccb15a..1fab0020 100644 --- a/lib/core/analysis.dart +++ b/lib/core/analysis.dart @@ -2,8 +2,8 @@ import 'dart:async'; import 'dart:io'; import 'package:countly_flutter/countly_flutter.dart'; -import 'package:logging/logging.dart'; import 'package:toolbox/core/build_mode.dart'; +import 'package:toolbox/data/res/logger.dart'; import 'utils/platform.dart'; @@ -25,8 +25,7 @@ class Analysis { await Countly.initWithConfig(config); await Countly.giveAllConsent(); } else { - Logger('COUNTLY') - .info('Unsupported platform ${Platform.operatingSystem}'); + Loggers.app.info('Countly unsupport: ${Platform.operatingSystem}'); } } diff --git a/lib/core/update.dart b/lib/core/update.dart index ed64fc0a..125a0be9 100644 --- a/lib/core/update.dart +++ b/lib/core/update.dart @@ -3,10 +3,10 @@ import 'dart:io'; import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:logging/logging.dart'; import 'package:r_upgrade/r_upgrade.dart'; import 'package:toolbox/core/extension/context.dart'; import 'package:toolbox/data/model/app/update.dart'; +import 'package:toolbox/data/res/logger.dart'; import 'package:toolbox/data/res/path.dart'; import '../data/provider/app.dart'; @@ -16,14 +16,12 @@ import '../locator.dart'; import 'utils/platform.dart'; import 'utils/ui.dart'; -final _logger = Logger('UPDATE'); - Future isFileAvailable(String url) async { try { final resp = await Dio().head(url); return resp.statusCode == 200; } catch (e) { - _logger.warning('update file not available: $e'); + Loggers.app.warning('HEAD update file failed', e); return false; } } @@ -35,41 +33,36 @@ Future doUpdate(BuildContext context, {bool force = false}) async { final newest = update.build.last.current; if (newest == null) { - _logger.warning('Update not available on $platform'); + Loggers.app.warning('Update not available on $platform'); return; } locator().newestBuild = newest; if (!force && newest <= BuildData.build) { - _logger.info('Update ignored due to current: ${BuildData.build}, ' - 'update: $newest'); + Loggers.app.info('Update ignored: ${BuildData.build} >= $newest'); return; } - _logger.info('Update available: $newest'); + Loggers.app.info('Update available: $newest'); final url = update.url.current!; - if (isAndroid && !await isFileAvailable(url)) { - _logger.warning('Android update file not available'); + if ((isAndroid || isMacOS) && !await isFileAvailable(url)) { + Loggers.app.warning('Update file not available'); return; } final s = S.of(context); - if (s == null) { - context.showSnackBar('Null l10n'); - return; - } final min = update.build.min.current; if (min != null && min > BuildData.build) { context.showRoundDialog( - child: Text(s.updateTipTooLow(newest)), + child: Text(s?.updateTipTooLow(newest) ?? 'Update: $newest'), actions: [ TextButton( onPressed: () => _doUpdate(update, context, s), - child: Text(s.ok), + child: Text(s?.ok ?? 'Ok'), ) ], ); @@ -77,13 +70,13 @@ Future doUpdate(BuildContext context, {bool force = false}) async { } context.showSnackBarWithAction( - '${s.updateTip(newest)} \n${update.changelog.current}', - s.update, + '${s?.updateTip(newest) ?? "Update: $newest"} \n${update.changelog.current}', + s?.update ?? 'Update', () => _doUpdate(update, context, s), ); } -Future _doUpdate(AppUpdate update, BuildContext context, S s) async { +Future _doUpdate(AppUpdate update, BuildContext context, S? s) async { final url = update.url.current; if (url == null) return; @@ -96,11 +89,11 @@ Future _doUpdate(AppUpdate update, BuildContext context, S s) async { await openUrl(url); } else { context.showRoundDialog( - child: Text(s.platformNotSupportUpdate), + child: Text(s?.platformNotSupportUpdate ?? 'Unsupported platform'), actions: [ TextButton( onPressed: () => context.pop(), - child: Text(s.ok), + child: Text(s?.ok ?? 'Ok'), ) ], ); diff --git a/lib/core/utils/icloud.dart b/lib/core/utils/icloud.dart index d8993cfc..1a34040f 100644 --- a/lib/core/utils/icloud.dart +++ b/lib/core/utils/icloud.dart @@ -2,15 +2,13 @@ import 'dart:async'; import 'dart:io'; import 'package:icloud_storage/icloud_storage.dart'; -import 'package:logging/logging.dart'; +import 'package:toolbox/data/res/logger.dart'; import '../../data/model/app/error.dart'; import '../../data/model/app/json.dart'; import '../../data/res/path.dart'; import 'platform.dart'; -final _logger = Logger('iCloud'); - class ICloud { static const _containerId = 'iCloud.tech.lolli.serverbox'; @@ -122,7 +120,6 @@ class ICloud { if (err != null) { errs.add(err); } - //_logger.info('upload missed: $e'); })); final docPath = await docDir; @@ -139,7 +136,6 @@ class ICloud { if (err != null) { errs.add(err); } - //_logger.info('local not found: $relativePath'); return; } final localDate = await localFile.lastModified(); @@ -155,7 +151,6 @@ class ICloud { if (err != null) { errs.add(err); } - //_logger.info('local newer: $relativePath'); uploadFiles.add(relativePath); return; } @@ -165,7 +160,6 @@ class ICloud { if (err != null) { errs.add(err); } - //_logger.info('remote newer: $relativePath'); downloadFiles.add(relativePath); })); @@ -173,10 +167,10 @@ class ICloud { return errs.isEmpty ? null : errs; } catch (e, s) { - _logger.warning('Sync failed: $relativePaths', e, s); + Loggers.app.warning('iCloud sync: $relativePaths failed', e, s); return [ICloudErr(type: ICloudErrType.generic, message: '$e')]; } finally { - _logger.info('Sync upload: $uploadFiles, download: $downloadFiles'); + Loggers.app.info('iCloud sync, up: $uploadFiles, down: $downloadFiles'); } } diff --git a/lib/data/model/app/backup.dart b/lib/data/model/app/backup.dart index 24ce774f..0e736748 100644 --- a/lib/data/model/app/backup.dart +++ b/lib/data/model/app/backup.dart @@ -1,10 +1,10 @@ import 'dart:convert'; import 'dart:io'; -import 'package:logging/logging.dart'; import 'package:toolbox/data/model/server/private_key_info.dart'; import 'package:toolbox/data/model/server/server_private_info.dart'; import 'package:toolbox/data/model/server/snippet.dart'; +import 'package:toolbox/data/res/logger.dart'; import 'package:toolbox/data/res/path.dart'; import 'package:toolbox/data/store/docker.dart'; import 'package:toolbox/data/store/private_key.dart'; @@ -15,8 +15,6 @@ import 'package:toolbox/locator.dart'; const backupFormatVersion = 1; -final _logger = Logger('Backup'); - class Backup { // backup format version final int version; @@ -116,7 +114,7 @@ String _diyDecrypt(String raw) { } return sb.toString(); } catch (e, trace) { - _logger.warning('Decrypt failed', e, trace); + Loggers.app.warning('Backup decrypt failed', e, trace); rethrow; } } diff --git a/lib/data/model/server/proc.dart b/lib/data/model/server/proc.dart index 3d1af57e..b5edc781 100644 --- a/lib/data/model/server/proc.dart +++ b/lib/data/model/server/proc.dart @@ -1,9 +1,7 @@ -import 'package:logging/logging.dart'; +import 'package:toolbox/data/res/logger.dart'; import '../../../data/res/misc.dart'; -final _logger = Logger('Proc'); - class _ProcValIdxMap { final int pid; final int? user; @@ -144,7 +142,7 @@ class PsResult { procs.add(Proc.parse(line, map)); } catch (e, trace) { errs.add('$line: $e'); - _logger.warning('Parse process failed', e, trace); + Loggers.parse.warning('Process failed', e, trace); } } diff --git a/lib/data/provider/docker.dart b/lib/data/provider/docker.dart index 547b98ca..c1fb21ba 100644 --- a/lib/data/provider/docker.dart +++ b/lib/data/provider/docker.dart @@ -2,13 +2,13 @@ import 'dart:async'; import 'package:dartssh2/dartssh2.dart'; import 'package:flutter/material.dart'; -import 'package:logging/logging.dart'; import 'package:toolbox/core/extension/ssh_client.dart'; import 'package:toolbox/core/extension/stringx.dart'; import 'package:toolbox/data/model/app/shell_func.dart'; import 'package:toolbox/data/model/docker/image.dart'; import 'package:toolbox/data/model/docker/ps.dart'; import 'package:toolbox/data/model/app/error.dart'; +import 'package:toolbox/data/res/logger.dart'; import 'package:toolbox/data/store/docker.dart'; import 'package:toolbox/locator.dart'; @@ -20,8 +20,6 @@ final _versionReg = RegExp(r'(Version:)\s+([0-9]+\.[0-9]+\.[0-9]+)'); final _editionReg = RegExp(r'Docker Engine - [a-zA-Z]+'); final _dockerPrefixReg = RegExp(r'(sudo )?docker '); -final _logger = Logger('DOCKER'); - class DockerProvider extends ChangeNotifier { final _dockerStore = locator(); @@ -64,7 +62,6 @@ class DockerProvider extends ChangeNotifier { if (raw.contains(_dockerNotFound)) { error = DockerErr(type: DockerErrType.notInstalled); - _logger.warning('Docker not installed: $raw'); notifyListeners(); return; } @@ -73,7 +70,7 @@ class DockerProvider extends ChangeNotifier { final segments = raw.split(seperator); if (segments.length != DockerCmdType.values.length) { error = DockerErr(type: DockerErrType.segmentsNotMatch); - _logger.warning('Docker segments not match: ${segments.length}'); + Loggers.parse.warning('Docker segments: ${segments.length}'); notifyListeners(); return; } @@ -90,12 +87,12 @@ class DockerProvider extends ChangeNotifier { lines.removeWhere((element) => element.isEmpty); if (lines.isNotEmpty) lines.removeAt(0); items = lines.map((e) => DockerPsItem.fromRawString(e)).toList(); - } catch (e) { + } catch (e, trace) { error = DockerErr( type: DockerErrType.parsePsItem, message: '$psRaw\n-\n$e', ); - _logger.warning('Parse docker ps: $psRaw', e); + Loggers.parse.warning('Docker ps failed', e, trace); } finally { notifyListeners(); } @@ -112,7 +109,7 @@ class DockerProvider extends ChangeNotifier { type: DockerErrType.parseImages, message: '$imageRaw\n-\n$e', ); - _logger.warning('Parse docker images: $imageRaw', e, trace); + Loggers.parse.warning('Docker images failed', e, trace); } finally { notifyListeners(); } diff --git a/lib/data/provider/server.dart b/lib/data/provider/server.dart index c8876d88..4357f116 100644 --- a/lib/data/provider/server.dart +++ b/lib/data/provider/server.dart @@ -1,9 +1,9 @@ import 'dart:async'; import 'package:flutter/foundation.dart'; -import 'package:logging/logging.dart'; import 'package:toolbox/data/model/app/shell_func.dart'; import 'package:toolbox/data/model/server/system.dart'; +import 'package:toolbox/data/res/logger.dart'; import '../../core/extension/order.dart'; import '../../core/extension/uint8list.dart'; @@ -33,8 +33,6 @@ class ServerProvider extends ChangeNotifier { Timer? _timer; - final _logger = Logger('SERVER'); - final _serverStore = locator(); final _settingStore = locator(); @@ -250,13 +248,13 @@ class ServerProvider extends ChangeNotifier { _setServerState(s, ServerState.failed); /// In order to keep privacy, print [spi.name] instead of [spi.id] - _logger.warning('Connect to ${spi.name} failed', e); + Loggers.app.warning('Connect to ${spi.name} failed', e); return; } final time2 = DateTime.now(); final spentTime = time2.difference(time1).inMilliseconds; - _logger.info('Connected to ${spi.name} in $spentTime ms.'); + Loggers.app.info('Connected to ${spi.name} in $spentTime ms.'); _setServerState(s, ServerState.connected); @@ -272,7 +270,7 @@ class ServerProvider extends ChangeNotifier { _limiter.inc(sid); s.status.failedInfo = e.toString(); _setServerState(s, ServerState.failed); - _logger.warning('Write script to ${spi.name} failed', e); + Loggers.app.warning('Write script to ${spi.name} failed', e); return; } } @@ -312,7 +310,7 @@ class ServerProvider extends ChangeNotifier { _limiter.inc(sid); s.status.failedInfo = 'Parse failed: $e\n\n$raw'; _setServerState(s, ServerState.failed); - _logger.warning('Parse failed', e, trace); + Loggers.parse.warning('Server status', e, trace); return; } diff --git a/lib/data/res/logger.dart b/lib/data/res/logger.dart new file mode 100644 index 00000000..8fa1e8dd --- /dev/null +++ b/lib/data/res/logger.dart @@ -0,0 +1,6 @@ +import 'package:logging/logging.dart'; + +class Loggers { + static final app = Logger('App'); + static final parse = Logger('Parse'); +} diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb index a0929e8b..2480187a 100644 --- a/lib/l10n/app_de.arb +++ b/lib/l10n/app_de.arb @@ -181,8 +181,7 @@ "serverTabUnkown": "Unbekannter Status", "setting": "Einstellungen", "sftpDlPrepare": "Verbindung vorbereiten...", - "sftpRmrfDir": "SFTP `rm -rf`", - "sftpRmrfDirSummary": "Verwenden Sie `rm -rf`, um einen Ordner zu löschen.", + "sftpRmrfDirSummary": "Verwenden Sie \"rm -rf\", um das Verzeichnis in SFTP zu löschen.", "sftpSSHConnected": "SFTP Verbunden", "showDistLogo": "Distributionslogo anzeigen", "snippet": "Snippet", diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 6a6c3fb1..631a71ec 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -181,8 +181,7 @@ "serverTabUnkown": "Unknown state", "setting": "Settings", "sftpDlPrepare": "Preparing to connect...", - "sftpRmrfDir": "SFTP `rm -rf`", - "sftpRmrfDirSummary": "Use `rm -rf` to delete a folder.", + "sftpRmrfDirSummary": "Use `rm -rf` to delete a folder in SFTP.", "sftpSSHConnected": "SFTP Connected", "showDistLogo": "Show distribution logo", "snippet": "Snippet", diff --git a/lib/l10n/app_id.arb b/lib/l10n/app_id.arb index d5fe7a1c..6b72da60 100644 --- a/lib/l10n/app_id.arb +++ b/lib/l10n/app_id.arb @@ -181,8 +181,7 @@ "serverTabUnkown": "Negara yang tidak diketahui", "setting": "Pengaturan", "sftpDlPrepare": "Bersiap untuk terhubung ...", - "sftpRmrfDir": "SFTP `rm -rf`", - "sftpRmrfDirSummary": "Gunakan `rm -rf` untuk menghapus folder.", + "sftpRmrfDirSummary": "Gunakan `rm -rf` untuk menghapus dir di SFTP", "sftpSSHConnected": "Sftp terhubung", "showDistLogo": "Tampilkan logo distribusi", "snippet": "Snippet", diff --git a/lib/l10n/app_zh.arb b/lib/l10n/app_zh.arb index 23c9aceb..02c24f74 100644 --- a/lib/l10n/app_zh.arb +++ b/lib/l10n/app_zh.arb @@ -181,8 +181,7 @@ "serverTabUnkown": "未知状态", "setting": "设置", "sftpDlPrepare": "准备连接至服务器...", - "sftpRmrfDir": "SFTP 使用 `rm -rf`", - "sftpRmrfDirSummary": "使用 `rm -rf` 来删除文件夹", + "sftpRmrfDirSummary": "在 SFTP 中使用 `rm -rf` 来删除文件夹", "sftpSSHConnected": "SFTP 已连接...", "showDistLogo": "显示发行版 Logo", "snippet": "代码片段", diff --git a/lib/l10n/app_zh_tw.arb b/lib/l10n/app_zh_tw.arb index cfdc1b08..e98681d0 100644 --- a/lib/l10n/app_zh_tw.arb +++ b/lib/l10n/app_zh_tw.arb @@ -181,8 +181,7 @@ "serverTabUnkown": "未知狀態", "setting": "設置", "sftpDlPrepare": "準備連接至服務器...", - "sftpRmrfDir": "SFTP 使用 `rm -rf`", - "sftpRmrfDirSummary": "使用 `rm -rf` 來刪除文件夾", + "sftpRmrfDirSummary": "在 SFTP 中使用 `rm -rf` 來刪除文件夾", "sftpSSHConnected": "SFTP 已連接...", "showDistLogo": "顯示發行版 Logo", "snippet": "程式片段", diff --git a/lib/view/page/backup.dart b/lib/view/page/backup.dart index 1842c950..56aff879 100644 --- a/lib/view/page/backup.dart +++ b/lib/view/page/backup.dart @@ -4,10 +4,10 @@ import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:logging/logging.dart'; import 'package:toolbox/core/extension/context.dart'; import 'package:toolbox/core/utils/platform.dart'; import 'package:toolbox/data/model/app/backup.dart'; +import 'package:toolbox/data/res/logger.dart'; import 'package:toolbox/data/res/path.dart'; import 'package:toolbox/view/widget/round_rect_card.dart'; @@ -18,8 +18,6 @@ import '../../locator.dart'; import '../widget/custom_appbar.dart'; import '../widget/store_switch.dart'; -final _logger = Logger('Backup'); - class BackupPage extends StatelessWidget { BackupPage({Key? key}) : super(key: key); @@ -166,7 +164,7 @@ class BackupPage extends StatelessWidget { ], ); } catch (e, trace) { - _logger.warning('Import backup failed', e, trace); + Loggers.app.warning('Import backup failed', e, trace); context.showSnackBar(e.toString()); } finally { context.pop(); diff --git a/lib/view/page/home.dart b/lib/view/page/home.dart index 285384ed..86338131 100644 --- a/lib/view/page/home.dart +++ b/lib/view/page/home.dart @@ -5,6 +5,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:get_it/get_it.dart'; import 'package:toolbox/core/extension/context.dart'; +import 'package:toolbox/data/res/logger.dart'; import '../../core/analysis.dart'; import '../../core/route.dart'; @@ -360,6 +361,7 @@ class _HomePageState extends State Future _onLongPressSetting() async { /// Encode [map] to String with indent `\t` final map = _setting.toJson(); + final keys = map.keys; final text = jsonEncoder.convert(map); final result = await AppRoute.editor( text: text, @@ -372,11 +374,17 @@ class _HomePageState extends State try { final newSettings = json.decode(result) as Map; _setting.box.putAll(newSettings); - } catch (e) { + final newKeys = newSettings.keys; + final removedKeys = keys.where((e) => !newKeys.contains(e)); + for (final key in removedKeys) { + _setting.box.delete(key); + } + } catch (e, trace) { context.showRoundDialog( title: Text(_s.error), child: Text('${_s.save}:\n$e'), ); + Loggers.app.warning('Update json settings failed', e, trace); } } } diff --git a/lib/view/page/setting/entry.dart b/lib/view/page/setting/entry.dart index 4b76f2d1..5d8e59c0 100644 --- a/lib/view/page/setting/entry.dart +++ b/lib/view/page/setting/entry.dart @@ -1068,7 +1068,7 @@ class _SettingPageState extends State { Widget _buildSftpRmrfDir() { return ListTile( - title: Text(_s.sftpRmrfDir), + title: const Text('rm -rf'), subtitle: Text(_s.sftpRmrfDirSummary, style: grey), trailing: StoreSwitch(prop: _setting.sftpRmrfDir), ); diff --git a/lib/view/page/storage/sftp.dart b/lib/view/page/storage/sftp.dart index dbb90af5..b4bbfc83 100644 --- a/lib/view/page/storage/sftp.dart +++ b/lib/view/page/storage/sftp.dart @@ -4,9 +4,9 @@ import 'package:after_layout/after_layout.dart'; import 'package:dartssh2/dartssh2.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:logging/logging.dart'; import 'package:toolbox/core/extension/context.dart'; import 'package:toolbox/core/extension/sftpfile.dart'; +import 'package:toolbox/data/res/logger.dart'; import 'package:toolbox/data/res/misc.dart'; import 'package:toolbox/data/store/history.dart'; import 'package:toolbox/view/widget/round_rect_card.dart'; @@ -58,8 +58,6 @@ class _SftpPageState extends State with AfterLayoutMixin { SSHClient? _client; - final _logger = Logger('SFTP'); - @override void didChangeDependencies() { super.didChangeDependencies(); @@ -664,7 +662,7 @@ class _SftpPageState extends State with AfterLayoutMixin { return false; } catch (e, trace) { context.pop(); - _logger.warning('List dir failed', e, trace); + Loggers.app.warning('List dir failed', e, trace); await _backward(); Future.delayed( const Duration(milliseconds: 177),