opt.: migrate fl_lib

This commit is contained in:
lollipopkit
2024-05-14 22:29:37 +08:00
parent 248430e5b0
commit 04dfede535
136 changed files with 686 additions and 3896 deletions

View File

@@ -1,13 +1,11 @@
import 'dart:convert';
import 'dart:io';
import 'package:fl_lib/fl_lib.dart';
import 'package:logging/logging.dart';
import 'package:toolbox/core/persistant_store.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/res/provider.dart';
import 'package:toolbox/data/res/rebuild.dart';
import 'package:toolbox/data/res/store.dart';
@@ -76,7 +74,7 @@ class Backup {
static Future<String> backup([String? name]) async {
final result = _diyEncrypt(json.encode(Backup.loadFromStore().toJson()));
final path = '${await Paths.doc}/${name ?? Paths.bakName}';
final path = '${Paths.doc}/${name ?? 'srvbox_bak.json'}';
await File(path).writeAsString(result);
return path;
}

View File

@@ -1,14 +0,0 @@
import 'package:flutter/widgets.dart';
import 'package:toolbox/core/extension/context/common.dart';
class DynamicColor {
/// 白天模式显示的颜色
final Color light;
/// 暗黑模式显示的颜色
final Color dark;
const DynamicColor(this.light, this.dark);
Color resolve(BuildContext context) => context.isDark ? dark : light;
}

View File

@@ -1,15 +1,18 @@
import 'package:flutter/material.dart';
abstract class PopMenu {
static PopupMenuItem<T> build<T>(T t, IconData icon, String text) {
static PopupMenuItem<T> build<T>(
T t,
IconData icon,
String text, {
double? iconSize,
}) {
return PopupMenuItem<T>(
value: t,
child: Row(
children: [
Icon(icon),
const SizedBox(
width: 10,
),
Icon(icon, size: iconSize),
const SizedBox(width: 10),
Text(text),
],
),

View File

@@ -1,6 +1,5 @@
import 'package:flutter/material.dart';
import 'package:toolbox/core/extension/context/locale.dart';
import 'package:toolbox/data/model/app/menu/base.dart';
enum ContainerMenu {
start,
@@ -64,10 +63,4 @@ enum ContainerMenu {
// return s.stats;
}
}
PopupMenuItem<ContainerMenu> get widget => PopMenu.build(
this,
icon,
toStr,
);
}

View File

@@ -34,14 +34,14 @@ enum ServerFuncBtn {
snippet,
].map((e) => e.index).toList();
Icon icon([double? sizeDiff]) => switch (this) {
sftp => Icon(Icons.insert_drive_file, size: 15 + (sizeDiff ?? 0)),
snippet => Icon(Icons.code, size: 15 + (sizeDiff ?? 0)),
pkg => Icon(Icons.system_security_update, size: 15 + (sizeDiff ?? 0)),
container => Icon(FontAwesome.docker_brand, size: 14 + (sizeDiff ?? 0)),
process => Icon(Icons.list_alt_outlined, size: 15 + (sizeDiff ?? 0)),
terminal => Icon(Icons.terminal, size: 15 + (sizeDiff ?? 0)),
iperf => Icon(Icons.speed, size: 15 + (sizeDiff ?? 0)),
IconData get icon => switch (this) {
sftp => Icons.insert_drive_file,
snippet => Icons.code,
pkg => Icons.system_security_update,
container => FontAwesome.docker_brand,
process => Icons.list_alt_outlined,
terminal => Icons.terminal,
iperf => Icons.speed,
};
String get toStr => switch (this) {

View File

@@ -1,4 +1,4 @@
import 'package:toolbox/core/utils/platform/path.dart';
import 'package:fl_lib/fl_lib.dart';
/// It's used on platform's file system.
/// So use [Platform.pathSeparator] to join path.
@@ -23,7 +23,7 @@ class LocalPath {
_path = '/';
return;
}
_path = joinPath(_path, newPath);
_path = _path.joinPath(newPath);
}
bool get canBack => path != '$_prefixPath/';

View File

@@ -1,7 +1,7 @@
import 'package:fl_lib/fl_lib.dart';
import 'package:flutter/material.dart';
import 'package:icons_plus/icons_plus.dart';
import 'package:toolbox/core/extension/context/locale.dart';
import 'package:toolbox/core/extension/listx.dart';
import 'package:toolbox/data/model/app/version_related.dart';
import 'package:toolbox/data/res/store.dart';

View File

@@ -1,140 +0,0 @@
/*
{
"changelog": {
"mac": "xxx",
"ios": "xxx",
"android": ""
},
"build": {
"min": {
"mac": 1,
"ios": 1,
"android": 1
},
"last": {
"mac": 1,
"ios": 1,
"android": 1
}
},
"url": {
"mac": "https://apps.apple.com/app/id1586449703",
"ios": "https://apps.apple.com/app/id1586449703",
"android": "https://cdn3.cust.app/uploads/ServerBox_262_Arm64.apk"
}
}
*/
import 'dart:convert';
import 'package:toolbox/core/utils/platform/base.dart';
class AppUpdate {
const AppUpdate({
required this.changelog,
required this.build,
required this.url,
});
final AppUpdatePlatformSpecific<String> changelog;
final Build build;
final AppUpdatePlatformSpecific<String> url;
factory AppUpdate.fromRawJson(String str) =>
AppUpdate.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory AppUpdate.fromJson(Map<String, dynamic> json) => AppUpdate(
changelog: AppUpdatePlatformSpecific.fromJson(json["changelog"]),
build: Build.fromJson(json["build"]),
url: AppUpdatePlatformSpecific.fromJson(json["url"]),
);
Map<String, dynamic> toJson() => {
"changelog": changelog.toJson(),
"build": build.toJson(),
"url": url.toJson(),
};
}
class Build {
Build({
required this.min,
required this.last,
});
final AppUpdatePlatformSpecific<int> min;
final AppUpdatePlatformSpecific<int> last;
factory Build.fromRawJson(String str) => Build.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory Build.fromJson(Map<String, dynamic> json) => Build(
min: AppUpdatePlatformSpecific.fromJson(json["min"]),
last: AppUpdatePlatformSpecific.fromJson(json["last"]),
);
Map<String, dynamic> toJson() => {
"min": min.toJson(),
"last": last.toJson(),
};
}
class AppUpdatePlatformSpecific<T> {
AppUpdatePlatformSpecific({
required this.mac,
required this.ios,
required this.android,
required this.windows,
required this.linux,
});
final T mac;
final T ios;
final T android;
final T windows;
final T linux;
factory AppUpdatePlatformSpecific.fromRawJson(String str) =>
AppUpdatePlatformSpecific.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory AppUpdatePlatformSpecific.fromJson(Map<String, dynamic> json) =>
AppUpdatePlatformSpecific(
mac: json["mac"],
ios: json["ios"],
android: json["android"],
windows: json["windows"],
linux: json["linux"],
);
Map<String, dynamic> toJson() => {
"mac": mac,
"ios": ios,
"android": android,
"windows": windows,
"linux": linux,
};
T? get current {
switch (OS.type) {
case OS.macos:
return mac;
case OS.ios:
return ios;
case OS.android:
return android;
case OS.windows:
return windows;
case OS.linux:
return linux;
/// Not implemented yet.
case OS.web || OS.fuchsia || OS.unknown:
return null;
}
}
}

View File

@@ -1,6 +1,6 @@
import 'dart:convert';
import 'package:toolbox/core/extension/numx.dart';
import 'package:fl_lib/fl_lib.dart';
import 'package:toolbox/data/model/container/type.dart';
abstract final class ContainerImg {

View File

@@ -1,7 +1,7 @@
import 'dart:convert';
import 'package:fl_lib/fl_lib.dart';
import 'package:toolbox/core/extension/context/locale.dart';
import 'package:toolbox/core/extension/numx.dart';
import 'package:toolbox/data/model/container/type.dart';
abstract final class ContainerPs {

View File

@@ -1,4 +1,5 @@
import 'package:toolbox/data/res/logger.dart';
import 'package:fl_lib/fl_lib.dart';
/// raw dat from server:
/// ```text
@@ -92,7 +93,7 @@ abstract final class Batteries {
if (onlyLiPoly && !bat.isLiPoly) continue;
batteries.add(bat);
} catch (e, s) {
Loggers.parse.warning(e, s);
Loggers.app.warning(e, s);
}
oneBatLines.clear();
} else {

View File

@@ -1,5 +1,4 @@
import 'package:toolbox/core/extension/listx.dart';
import 'package:toolbox/core/extension/numx.dart';
import 'package:fl_lib/fl_lib.dart';
import 'package:toolbox/data/model/server/time_seq.dart';
import '../../res/misc.dart';

View File

@@ -1,4 +1,4 @@
import 'package:toolbox/core/extension/listx.dart';
import 'package:fl_lib/fl_lib.dart';
class Memory {
final int total;

View File

@@ -1,4 +1,4 @@
import 'package:toolbox/core/extension/numx.dart';
import 'package:fl_lib/fl_lib.dart';
import 'time_seq.dart';

View File

@@ -1,4 +1,4 @@
import 'package:toolbox/data/res/logger.dart';
import 'package:fl_lib/fl_lib.dart';
import '../../../data/res/misc.dart';
@@ -142,7 +142,7 @@ class PsResult {
procs.add(Proc.parse(line, map));
} catch (e, trace) {
errs.add('$line: $e');
Loggers.parse.warning('Process failed', e, trace);
Loggers.app.warning('Process failed', e, trace);
}
}

View File

@@ -1,7 +1,5 @@
import 'package:fl_lib/fl_lib.dart';
import 'package:toolbox/core/extension/context/locale.dart';
import 'package:toolbox/core/extension/duration.dart';
import 'package:toolbox/core/extension/numx.dart';
import 'package:toolbox/core/extension/order.dart';
enum PveResType {
lxc,
@@ -132,7 +130,12 @@ final class PveLxc extends PveResIface implements PveCtrlIface {
@override
String get summary {
if (available) {
return uptime.secondsToDuration().toStr;
return uptime.secondsToDuration().toAgoStr(
day: l10n.day,
hour: l10n.hour,
minute: l10n.minute,
second: l10n.second,
);
}
return l10n.stopped;
}
@@ -210,7 +213,12 @@ final class PveQemu extends PveResIface implements PveCtrlIface {
@override
String get summary {
if (available) {
return uptime.secondsToDuration().toStr;
return uptime.secondsToDuration().toAgoStr(
day: l10n.day,
hour: l10n.hour,
minute: l10n.minute,
second: l10n.second,
);
}
return l10n.stopped;
}
@@ -260,7 +268,12 @@ final class PveNode extends PveResIface {
String get topRight {
if (isRunning) {
return uptime.secondsToDuration().toStr;
return uptime.secondsToDuration().toAgoStr(
day: l10n.day,
hour: l10n.hour,
minute: l10n.minute,
second: l10n.second,
);
}
return l10n.stopped;
}

View File

@@ -1,5 +1,5 @@
import 'package:fl_lib/fl_lib.dart';
import 'package:toolbox/core/extension/context/locale.dart';
import 'package:toolbox/data/res/logger.dart';
final class SensorAdaptor {
final String raw;

View File

@@ -1,6 +1,6 @@
import 'package:dartssh2/dartssh2.dart';
import 'package:fl_lib/fl_lib.dart';
import 'package:toolbox/core/extension/context/locale.dart';
import 'package:toolbox/core/extension/listx.dart';
import 'package:toolbox/data/model/app/error.dart';
import 'package:toolbox/data/model/app/shell_func.dart';
import 'package:toolbox/data/model/server/battery.dart';

View File

@@ -1,9 +1,9 @@
import 'package:fl_lib/fl_lib.dart';
import 'package:toolbox/data/model/server/battery.dart';
import 'package:toolbox/data/model/server/nvdia.dart';
import 'package:toolbox/data/model/server/sensors.dart';
import 'package:toolbox/data/model/server/server.dart';
import 'package:toolbox/data/model/server/system.dart';
import 'package:toolbox/data/res/logger.dart';
import '../app/shell_func.dart';
import 'cpu.dart';
@@ -45,7 +45,7 @@ Future<ServerStatus> _getLinuxStatus(ServerStatusUpdateReq req) async {
final net = NetSpeed.parse(StatusCmdType.net.find(segments), time);
req.ss.netSpeed.update(net);
} catch (e, s) {
Loggers.parse.warning(e, s);
Loggers.app.warning(e, s);
}
try {
@@ -56,7 +56,7 @@ Future<ServerStatus> _getLinuxStatus(ServerStatusUpdateReq req) async {
req.ss.more[StatusCmdType.sys] = sys;
}
} catch (e, s) {
Loggers.parse.warning(e, s);
Loggers.app.warning(e, s);
}
try {
@@ -65,14 +65,14 @@ Future<ServerStatus> _getLinuxStatus(ServerStatusUpdateReq req) async {
req.ss.more[StatusCmdType.host] = host;
}
} catch (e, s) {
Loggers.parse.warning(e, s);
Loggers.app.warning(e, s);
}
try {
final cpus = SingleCpuCore.parse(StatusCmdType.cpu.find(segments));
req.ss.cpu.update(cpus);
} catch (e, s) {
Loggers.parse.warning(e, s);
Loggers.app.warning(e, s);
}
try {
@@ -81,7 +81,7 @@ Future<ServerStatus> _getLinuxStatus(ServerStatusUpdateReq req) async {
StatusCmdType.tempVal.find(segments),
);
} catch (e, s) {
Loggers.parse.warning(e, s);
Loggers.app.warning(e, s);
}
try {
@@ -90,20 +90,20 @@ Future<ServerStatus> _getLinuxStatus(ServerStatusUpdateReq req) async {
req.ss.tcp = tcp;
}
} catch (e, s) {
Loggers.parse.warning(e, s);
Loggers.app.warning(e, s);
}
try {
req.ss.disk = Disk.parse(StatusCmdType.disk.find(segments));
req.ss.diskUsage = DiskUsage.parse(req.ss.disk);
} catch (e, s) {
Loggers.parse.warning(e, s);
Loggers.app.warning(e, s);
}
try {
req.ss.mem = Memory.parse(StatusCmdType.mem.find(segments));
} catch (e, s) {
Loggers.parse.warning(e, s);
Loggers.app.warning(e, s);
}
try {
@@ -112,26 +112,26 @@ Future<ServerStatus> _getLinuxStatus(ServerStatusUpdateReq req) async {
req.ss.more[StatusCmdType.uptime] = uptime;
}
} catch (e, s) {
Loggers.parse.warning(e, s);
Loggers.app.warning(e, s);
}
try {
req.ss.swap = Swap.parse(StatusCmdType.mem.find(segments));
} catch (e, s) {
Loggers.parse.warning(e, s);
Loggers.app.warning(e, s);
}
try {
final diskio = DiskIO.parse(StatusCmdType.diskio.find(segments), time);
req.ss.diskIO.update(diskio);
} catch (e, s) {
Loggers.parse.warning(e, s);
Loggers.app.warning(e, s);
}
try {
req.ss.nvidia = NvidiaSmi.fromXml(StatusCmdType.nvidia.find(segments));
} catch (e, s) {
Loggers.parse.warning(e, s);
Loggers.app.warning(e, s);
}
try {
@@ -144,7 +144,7 @@ Future<ServerStatus> _getLinuxStatus(ServerStatusUpdateReq req) async {
req.ss.batteries.addAll(batteries);
}
} catch (e, s) {
Loggers.parse.warning(e, s);
Loggers.app.warning(e, s);
}
try {
@@ -154,7 +154,7 @@ Future<ServerStatus> _getLinuxStatus(ServerStatusUpdateReq req) async {
req.ss.sensors.addAll(sensors);
}
} catch (e, s) {
Loggers.parse.warning(e, s);
Loggers.app.warning(e, s);
}
try {
@@ -164,7 +164,7 @@ Future<ServerStatus> _getLinuxStatus(ServerStatusUpdateReq req) async {
req.ss.customCmds[key] = value;
}
} catch (e, s) {
Loggers.parse.warning(e, s);
Loggers.app.warning(e, s);
}
return req.ss;
@@ -179,25 +179,25 @@ Future<ServerStatus> _getBsdStatus(ServerStatusUpdateReq req) async {
final net = NetSpeed.parseBsd(BSDStatusCmdType.net.find(segments), time);
req.ss.netSpeed.update(net);
} catch (e, s) {
Loggers.parse.warning(e, s);
Loggers.app.warning(e, s);
}
try {
req.ss.more[StatusCmdType.sys] = BSDStatusCmdType.sys.find(segments);
} catch (e, s) {
Loggers.parse.warning(e, s);
Loggers.app.warning(e, s);
}
try {
req.ss.cpu = parseBsdCpu(BSDStatusCmdType.cpu.find(segments));
} catch (e, s) {
Loggers.parse.warning(e, s);
Loggers.app.warning(e, s);
}
// try {
// req.ss.mem = parseBsdMem(BSDStatusCmdType.mem.find(segments));
// } catch (e, s) {
// Loggers.parse.warning(e, s);
// Loggers.app.warning(e, s);
// }
try {
@@ -206,13 +206,13 @@ Future<ServerStatus> _getBsdStatus(ServerStatusUpdateReq req) async {
req.ss.more[StatusCmdType.uptime] = uptime;
}
} catch (e, s) {
Loggers.parse.warning(e, s);
Loggers.app.warning(e, s);
}
try {
req.ss.disk = Disk.parse(BSDStatusCmdType.disk.find(segments));
} catch (e, s) {
Loggers.parse.warning(e, s);
Loggers.app.warning(e, s);
}
return req.ss;
}

View File

@@ -1,4 +1,4 @@
import 'package:toolbox/core/utils/misc.dart';
import 'package:fl_lib/fl_lib.dart';
class AbsolutePath {
String _path;
@@ -24,7 +24,7 @@ class AbsolutePath {
_path = newPath;
return;
}
_path = pathJoin(_path, newPath);
_path = _path.joinPath(newPath, seperator: '/');
}
bool undo() {

View File

@@ -1,6 +1,6 @@
import 'dart:async';
import 'package:toolbox/data/res/logger.dart';
import 'package:fl_lib/fl_lib.dart';
import 'package:toolbox/data/res/store.dart';
import '../../../core/utils/server.dart';