mirror of
https://github.com/lollipopkit/flutter_server_box.git
synced 2025-12-17 07:14:28 +01:00
opt.: Loggers
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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 已連接...';
|
||||
|
||||
@@ -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}');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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<bool> 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<void> 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<AppProvider>().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<void> 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<void> _doUpdate(AppUpdate update, BuildContext context, S s) async {
|
||||
Future<void> _doUpdate(AppUpdate update, BuildContext context, S? s) async {
|
||||
final url = update.url.current;
|
||||
if (url == null) return;
|
||||
|
||||
@@ -96,11 +89,11 @@ Future<void> _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'),
|
||||
)
|
||||
],
|
||||
);
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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<DockerStore>();
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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<ServerStore>();
|
||||
final _settingStore = locator<SettingStore>();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
6
lib/data/res/logger.dart
Normal file
6
lib/data/res/logger.dart
Normal file
@@ -0,0 +1,6 @@
|
||||
import 'package:logging/logging.dart';
|
||||
|
||||
class Loggers {
|
||||
static final app = Logger('App');
|
||||
static final parse = Logger('Parse');
|
||||
}
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -181,8 +181,7 @@
|
||||
"serverTabUnkown": "未知状态",
|
||||
"setting": "设置",
|
||||
"sftpDlPrepare": "准备连接至服务器...",
|
||||
"sftpRmrfDir": "SFTP 使用 `rm -rf`",
|
||||
"sftpRmrfDirSummary": "使用 `rm -rf` 来删除文件夹",
|
||||
"sftpRmrfDirSummary": "在 SFTP 中使用 `rm -rf` 来删除文件夹",
|
||||
"sftpSSHConnected": "SFTP 已连接...",
|
||||
"showDistLogo": "显示发行版 Logo",
|
||||
"snippet": "代码片段",
|
||||
|
||||
@@ -181,8 +181,7 @@
|
||||
"serverTabUnkown": "未知狀態",
|
||||
"setting": "設置",
|
||||
"sftpDlPrepare": "準備連接至服務器...",
|
||||
"sftpRmrfDir": "SFTP 使用 `rm -rf`",
|
||||
"sftpRmrfDirSummary": "使用 `rm -rf` 來刪除文件夾",
|
||||
"sftpRmrfDirSummary": "在 SFTP 中使用 `rm -rf` 來刪除文件夾",
|
||||
"sftpSSHConnected": "SFTP 已連接...",
|
||||
"showDistLogo": "顯示發行版 Logo",
|
||||
"snippet": "程式片段",
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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<HomePage>
|
||||
Future<void> _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<HomePage>
|
||||
try {
|
||||
final newSettings = json.decode(result) as Map<String, dynamic>;
|
||||
_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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1068,7 +1068,7 @@ class _SettingPageState extends State<SettingPage> {
|
||||
|
||||
Widget _buildSftpRmrfDir() {
|
||||
return ListTile(
|
||||
title: Text(_s.sftpRmrfDir),
|
||||
title: const Text('rm -rf'),
|
||||
subtitle: Text(_s.sftpRmrfDirSummary, style: grey),
|
||||
trailing: StoreSwitch(prop: _setting.sftpRmrfDir),
|
||||
);
|
||||
|
||||
@@ -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<SftpPage> with AfterLayoutMixin {
|
||||
|
||||
SSHClient? _client;
|
||||
|
||||
final _logger = Logger('SFTP');
|
||||
|
||||
@override
|
||||
void didChangeDependencies() {
|
||||
super.didChangeDependencies();
|
||||
@@ -664,7 +662,7 @@ class _SftpPageState extends State<SftpPage> 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),
|
||||
|
||||
Reference in New Issue
Block a user