feat: custom net dev (#543)

This commit is contained in:
lollipopkit🏳️‍⚧️
2024-08-17 21:57:39 +08:00
committed by GitHub
parent b5329e2692
commit d7ae8b75b8
13 changed files with 115 additions and 91 deletions

View File

@@ -690,7 +690,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = 1060; CURRENT_PROJECT_VERSION = 1068;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
@@ -700,7 +700,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.1060; MARKETING_VERSION = 1.0.1068;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
@@ -826,7 +826,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = 1060; CURRENT_PROJECT_VERSION = 1068;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
@@ -836,7 +836,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.1060; MARKETING_VERSION = 1.0.1068;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
@@ -854,7 +854,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = 1060; CURRENT_PROJECT_VERSION = 1068;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
@@ -864,7 +864,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.1060; MARKETING_VERSION = 1.0.1068;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
@@ -885,7 +885,7 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1060; CURRENT_PROJECT_VERSION = 1068;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
GCC_C_LANGUAGE_STANDARD = gnu11; GCC_C_LANGUAGE_STANDARD = gnu11;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
@@ -898,7 +898,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
MARKETING_VERSION = 1.0.1060; MARKETING_VERSION = 1.0.1068;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget;
@@ -924,7 +924,7 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1060; CURRENT_PROJECT_VERSION = 1068;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
GCC_C_LANGUAGE_STANDARD = gnu11; GCC_C_LANGUAGE_STANDARD = gnu11;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
@@ -937,7 +937,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
MARKETING_VERSION = 1.0.1060; MARKETING_VERSION = 1.0.1068;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
@@ -960,7 +960,7 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1060; CURRENT_PROJECT_VERSION = 1068;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
GCC_C_LANGUAGE_STANDARD = gnu11; GCC_C_LANGUAGE_STANDARD = gnu11;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
@@ -973,7 +973,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
MARKETING_VERSION = 1.0.1060; MARKETING_VERSION = 1.0.1068;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
@@ -996,7 +996,7 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1060; CURRENT_PROJECT_VERSION = 1068;
DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
@@ -1008,7 +1008,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.1060; MARKETING_VERSION = 1.0.1068;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd;
@@ -1037,7 +1037,7 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1060; CURRENT_PROJECT_VERSION = 1068;
DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
@@ -1049,7 +1049,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.1060; MARKETING_VERSION = 1.0.1068;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd;
PRODUCT_NAME = ServerBox; PRODUCT_NAME = ServerBox;
@@ -1075,7 +1075,7 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1060; CURRENT_PROJECT_VERSION = 1068;
DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
@@ -1087,7 +1087,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.1060; MARKETING_VERSION = 1.0.1068;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd;
PRODUCT_NAME = ServerBox; PRODUCT_NAME = ServerBox;

View File

@@ -132,10 +132,7 @@ class AppRoutes {
} }
static AppRoutes sftp( static AppRoutes sftp(
{Key? key, {Key? key, required Spi spi, String? initPath, bool isSelect = false}) {
required Spi spi,
String? initPath,
bool isSelect = false}) {
return AppRoutes( return AppRoutes(
SftpPage( SftpPage(
key: key, key: key,

View File

@@ -2,7 +2,6 @@ import 'package:fl_lib/fl_lib.dart';
import 'package:hive_flutter/hive_flutter.dart'; import 'package:hive_flutter/hive_flutter.dart';
import 'package:server_box/core/extension/context/locale.dart'; import 'package:server_box/core/extension/context/locale.dart';
import 'package:server_box/data/model/server/server.dart'; import 'package:server_box/data/model/server/server.dart';
import 'package:server_box/data/res/store.dart';
part 'net_view.g.dart'; part 'net_view.g.dart';
@@ -27,36 +26,43 @@ enum NetViewType {
NetViewType.speed => l10n.speed, NetViewType.speed => l10n.speed,
}; };
(String, String) build(ServerStatus ss) { /// If no device is specified, return the cached value (only real devices,
final ignoreLocal = Stores.setting.ignoreLocalNet.fetch(); /// such as ethX, wlanX...).
switch (this) { (String, String) build(ServerStatus ss, {String? dev}) {
case NetViewType.conn: final notSepcifyDev = dev == null || dev.isEmpty;
return ( try {
'${l10n.conn}:\n${ss.tcp.maxConn}', switch (this) {
'${libL10n.fail}:\n${ss.tcp.fail}', case NetViewType.conn:
);
case NetViewType.speed:
if (ignoreLocal) {
return ( return (
'↓:\n${ss.netSpeed.cachedRealVals.speedIn}', '${l10n.conn}:\n${ss.tcp.maxConn}',
'↑:\n${ss.netSpeed.cachedRealVals.speedOut}', '${libL10n.fail}:\n${ss.tcp.fail}',
); );
} case NetViewType.speed:
return ( if (notSepcifyDev) {
'↓:\n${ss.netSpeed.speedIn()}', return (
':\n${ss.netSpeed.speedOut()}', ':\n${ss.netSpeed.cachedVals.speedIn}',
); '↑:\n${ss.netSpeed.cachedVals.speedOut}',
case NetViewType.traffic: );
if (ignoreLocal) { }
return ( return (
'↓:\n${ss.netSpeed.cachedRealVals.sizeIn}', '↓:\n${ss.netSpeed.speedIn(device: dev)}',
'↑:\n${ss.netSpeed.cachedRealVals.sizeOut}', '↑:\n${ss.netSpeed.speedOut(device: dev)}',
); );
} case NetViewType.traffic:
return ( if (notSepcifyDev) {
'↓:\n${ss.netSpeed.sizeIn()}', return (
':\n${ss.netSpeed.sizeOut()}', ':\n${ss.netSpeed.cachedVals.sizeIn}',
); '↑:\n${ss.netSpeed.cachedVals.sizeOut}',
);
}
return (
'↓:\n${ss.netSpeed.sizeIn(device: dev)}',
'↑:\n${ss.netSpeed.sizeOut(device: dev)}',
);
}
} catch (e, s) {
Loggers.app.warning('NetViewType.build', e, s);
return ('N/A', 'N/A');
} }
} }

View File

@@ -21,6 +21,14 @@ final class ServerCustom {
@HiveField(5) @HiveField(5)
final String? logoUrl; final String? logoUrl;
/// The device name of the network interface displayed in the home server card.
@HiveField(6)
final String? netDev;
/// The directory where the script is stored.
@HiveField(7)
final String? scriptDir;
const ServerCustom({ const ServerCustom({
//this.temperature, //this.temperature,
this.pveAddr, this.pveAddr,
@@ -28,6 +36,8 @@ final class ServerCustom {
this.cmds, this.cmds,
this.preferTempDev, this.preferTempDev,
this.logoUrl, this.logoUrl,
this.netDev,
this.scriptDir,
}); });
factory ServerCustom.fromJson(Map<String, dynamic> json) => factory ServerCustom.fromJson(Map<String, dynamic> json) =>
@@ -35,12 +45,6 @@ final class ServerCustom {
Map<String, dynamic> toJson() => _$ServerCustomToJson(this); Map<String, dynamic> toJson() => _$ServerCustomToJson(this);
@override
String toString() {
return toJson().toString();
}
@override @override
bool operator ==(Object other) { bool operator ==(Object other) {
return other is ServerCustom && return other is ServerCustom &&
@@ -49,7 +53,9 @@ final class ServerCustom {
other.pveIgnoreCert == pveIgnoreCert && other.pveIgnoreCert == pveIgnoreCert &&
other.cmds == cmds && other.cmds == cmds &&
other.preferTempDev == preferTempDev && other.preferTempDev == preferTempDev &&
other.logoUrl == logoUrl; other.logoUrl == logoUrl &&
other.netDev == netDev &&
other.scriptDir == scriptDir;
} }
@override @override
@@ -59,5 +65,7 @@ final class ServerCustom {
pveIgnoreCert.hashCode ^ pveIgnoreCert.hashCode ^
cmds.hashCode ^ cmds.hashCode ^
preferTempDev.hashCode ^ preferTempDev.hashCode ^
logoUrl.hashCode; logoUrl.hashCode ^
netDev.hashCode ^
scriptDir.hashCode;
} }

View File

@@ -22,13 +22,15 @@ class ServerCustomAdapter extends TypeAdapter<ServerCustom> {
cmds: (fields[3] as Map?)?.cast<String, String>(), cmds: (fields[3] as Map?)?.cast<String, String>(),
preferTempDev: fields[4] as String?, preferTempDev: fields[4] as String?,
logoUrl: fields[5] as String?, logoUrl: fields[5] as String?,
netDev: fields[6] as String?,
scriptDir: fields[7] as String?,
); );
} }
@override @override
void write(BinaryWriter writer, ServerCustom obj) { void write(BinaryWriter writer, ServerCustom obj) {
writer writer
..writeByte(5) ..writeByte(7)
..writeByte(1) ..writeByte(1)
..write(obj.pveAddr) ..write(obj.pveAddr)
..writeByte(2) ..writeByte(2)
@@ -38,7 +40,11 @@ class ServerCustomAdapter extends TypeAdapter<ServerCustom> {
..writeByte(4) ..writeByte(4)
..write(obj.preferTempDev) ..write(obj.preferTempDev)
..writeByte(5) ..writeByte(5)
..write(obj.logoUrl); ..write(obj.logoUrl)
..writeByte(6)
..write(obj.netDev)
..writeByte(7)
..write(obj.scriptDir);
} }
@override @override
@@ -64,6 +70,8 @@ ServerCustom _$ServerCustomFromJson(Map<String, dynamic> json) => ServerCustom(
), ),
preferTempDev: json['preferTempDev'] as String?, preferTempDev: json['preferTempDev'] as String?,
logoUrl: json['logoUrl'] as String?, logoUrl: json['logoUrl'] as String?,
netDev: json['netDev'] as String?,
scriptDir: json['scriptDir'] as String?,
); );
Map<String, dynamic> _$ServerCustomToJson(ServerCustom instance) => Map<String, dynamic> _$ServerCustomToJson(ServerCustom instance) =>
@@ -73,4 +81,6 @@ Map<String, dynamic> _$ServerCustomToJson(ServerCustom instance) =>
'cmds': instance.cmds, 'cmds': instance.cmds,
'preferTempDev': instance.preferTempDev, 'preferTempDev': instance.preferTempDev,
'logoUrl': instance.logoUrl, 'logoUrl': instance.logoUrl,
'netDev': instance.netDev,
'scriptDir': instance.scriptDir,
}; };

View File

@@ -14,6 +14,13 @@ class NetSpeedPart extends TimeSeqIface<NetSpeedPart> {
bool same(NetSpeedPart other) => device == other.device; bool same(NetSpeedPart other) => device == other.device;
} }
typedef CachedNetVals = ({
String sizeIn,
String sizeOut,
String speedIn,
String speedOut,
});
class NetSpeed extends TimeSeq<List<NetSpeedPart>> { class NetSpeed extends TimeSeq<List<NetSpeedPart>> {
NetSpeed(super.init1, super.init2); NetSpeed(super.init1, super.init2);
@@ -24,14 +31,14 @@ class NetSpeed extends TimeSeq<List<NetSpeedPart>> {
realIfaces.clear(); realIfaces.clear();
realIfaces.addAll(devices realIfaces.addAll(devices
.where((e) => realIfacePrefixs.any((prefix) => e.startsWith(prefix))) .where((e) => realIfacePrefixs.any((prefix) => e.startsWith(prefix))));
.toList());
final sizeIn = this.sizeIn(); final sizeIn = this.sizeIn();
final sizeOut = this.sizeOut(); final sizeOut = this.sizeOut();
final speedIn = this.speedIn(); final speedIn = this.speedIn();
final speedOut = this.speedOut(); final speedOut = this.speedOut();
cachedRealVals = (
cachedVals = (
sizeIn: sizeIn, sizeIn: sizeIn,
sizeOut: sizeOut, sizeOut: sizeOut,
speedIn: speedIn, speedIn: speedIn,
@@ -49,12 +56,7 @@ class NetSpeed extends TimeSeq<List<NetSpeedPart>> {
/// Cached non-virtual network device prefix /// Cached non-virtual network device prefix
final realIfaces = <String>[]; final realIfaces = <String>[];
({ CachedNetVals cachedVals =
String sizeIn,
String sizeOut,
String speedIn,
String speedOut,
}) cachedRealVals =
(sizeIn: '0kb', sizeOut: '0kb', speedIn: '0kb/s', speedOut: '0kb/s'); (sizeIn: '0kb', sizeOut: '0kb', speedIn: '0kb/s', speedOut: '0kb/s');
/// Time diff between [pre] and [now] /// Time diff between [pre] and [now]
@@ -67,7 +69,8 @@ class NetSpeed extends TimeSeq<List<NetSpeedPart>> {
BigInt sizeOutBytes(int i) => now[i].bytesOut; BigInt sizeOutBytes(int i) => now[i].bytesOut;
String speedIn({String? device}) { String speedIn({String? device}) {
if (pre[0].device == '' || now[0].device == '') return '0kb/s'; if (pre.isEmpty || now.isEmpty) return 'N/A';
if (pre.length != now.length) return 'N/A';
if (device == null) { if (device == null) {
var speed = 0.0; var speed = 0.0;
for (final device in devices) { for (final device in devices) {
@@ -84,7 +87,8 @@ class NetSpeed extends TimeSeq<List<NetSpeedPart>> {
} }
String sizeIn({String? device}) { String sizeIn({String? device}) {
if (pre[0].device == '' || now[0].device == '') return '0kb'; if (pre.isEmpty || now.isEmpty) return 'N/A';
if (pre.length != now.length) return 'N/A';
if (device == null) { if (device == null) {
var size = BigInt.from(0); var size = BigInt.from(0);
for (final device in devices) { for (final device in devices) {
@@ -101,7 +105,8 @@ class NetSpeed extends TimeSeq<List<NetSpeedPart>> {
} }
String speedOut({String? device}) { String speedOut({String? device}) {
if (pre[0].device == '' || now[0].device == '') return '0kb/s'; if (pre.isEmpty || now.isEmpty) return 'N/A';
if (pre.length != now.length) return 'N/A';
if (device == null) { if (device == null) {
var speed = 0.0; var speed = 0.0;
for (final device in devices) { for (final device in devices) {
@@ -118,7 +123,8 @@ class NetSpeed extends TimeSeq<List<NetSpeedPart>> {
} }
String sizeOut({String? device}) { String sizeOut({String? device}) {
if (pre[0].device == '' || now[0].device == '') return '0kb'; if (pre.isEmpty || now.isEmpty) return 'N/A';
if (pre.length != now.length) return 'N/A';
if (device == null) { if (device == null) {
var size = BigInt.from(0); var size = BigInt.from(0);
for (final device in devices) { for (final device in devices) {

View File

@@ -75,8 +75,7 @@ class Spi {
this.envs, this.envs,
}) : id = '$user@$ip:$port'; }) : id = '$user@$ip:$port';
factory Spi.fromJson(Map<String, dynamic> json) => factory Spi.fromJson(Map<String, dynamic> json) => _$SpiFromJson(json);
_$SpiFromJson(json);
Map<String, dynamic> toJson() => _$SpiToJson(this); Map<String, dynamic> toJson() => _$SpiToJson(this);

View File

@@ -34,7 +34,8 @@ class Snippet implements TagPickable {
this.autoRunOn, this.autoRunOn,
}); });
factory Snippet.fromJson(Map<String, dynamic> json) => _$SnippetFromJson(json); factory Snippet.fromJson(Map<String, dynamic> json) =>
_$SnippetFromJson(json);
Map<String, dynamic> toJson() => _$SnippetToJson(this); Map<String, dynamic> toJson() => _$SnippetToJson(this);

View File

@@ -3,6 +3,6 @@
class BuildData { class BuildData {
static const String name = "ServerBox"; static const String name = "ServerBox";
static const int build = 1060; static const int build = 1068;
static const int script = 57; static const int script = 57;
} }

View File

@@ -180,7 +180,7 @@ class SettingStore extends PersistentStore {
/// Ignore local network device (eg: br-xxx, ovs-system...) /// Ignore local network device (eg: br-xxx, ovs-system...)
/// when building traffic view on server tab /// when building traffic view on server tab
late final ignoreLocalNet = property('ignoreLocalNet', true); //late final ignoreLocalNet = property('ignoreLocalNet', true);
/// Remerber pwd in memory /// Remerber pwd in memory
/// Used for [DialogX.showPwdDialog] /// Used for [DialogX.showPwdDialog]

View File

@@ -587,18 +587,15 @@ ${ss.err?.message ?? 'null'}
Widget _buildNet(ServerStatus ss, String id) { Widget _buildNet(ServerStatus ss, String id) {
final cardNoti = _getCardNoti(id); final cardNoti = _getCardNoti(id);
final type = cardNoti.value.net ?? Stores.setting.netViewType.fetch(); final type = cardNoti.value.net ?? Stores.setting.netViewType.fetch();
final (a, b) = type.build(ss); final device = ServerProvider.pick(id: id)?.value.spi.custom?.netDev ?? 'tailscale0';
final (a, b) = type.build(ss, dev: device);
return AnimatedSwitcher( return AnimatedSwitcher(
duration: const Duration(milliseconds: 377), duration: const Duration(milliseconds: 377),
transitionBuilder: (Widget child, Animation<double> animation) { transitionBuilder: (c, anim) => FadeTransition(opacity: anim, child: c),
return FadeTransition(opacity: animation, child: child);
},
child: _buildIOData( child: _buildIOData(
a, a,
b, b,
onTap: () { onTap: () => cardNoti.value = cardNoti.value.copyWith(net: type.next),
cardNoti.value = cardNoti.value.copyWith(net: type.next);
},
key: ValueKey(type), key: ValueKey(type),
), ),
); );

View File

@@ -471,7 +471,7 @@
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES; COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 1060; CURRENT_PROJECT_VERSION = 1068;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "Server Box"; INFOPLIST_KEY_CFBundleDisplayName = "Server Box";
@@ -481,7 +481,7 @@
"@executable_path/../Frameworks", "@executable_path/../Frameworks",
); );
MACOSX_DEPLOYMENT_TARGET = 10.15; MACOSX_DEPLOYMENT_TARGET = 10.15;
MARKETING_VERSION = 1.0.1060; MARKETING_VERSION = 1.0.1068;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
PRODUCT_NAME = "Server Box"; PRODUCT_NAME = "Server Box";
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";
@@ -608,7 +608,7 @@
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES; COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 1060; CURRENT_PROJECT_VERSION = 1068;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "Server Box"; INFOPLIST_KEY_CFBundleDisplayName = "Server Box";
@@ -618,7 +618,7 @@
"@executable_path/../Frameworks", "@executable_path/../Frameworks",
); );
MACOSX_DEPLOYMENT_TARGET = 10.15; MACOSX_DEPLOYMENT_TARGET = 10.15;
MARKETING_VERSION = 1.0.1060; MARKETING_VERSION = 1.0.1068;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
PRODUCT_NAME = "Server Box"; PRODUCT_NAME = "Server Box";
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";
@@ -638,7 +638,7 @@
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "3rd Party Mac Developer Application"; "CODE_SIGN_IDENTITY[sdk=macosx*]" = "3rd Party Mac Developer Application";
CODE_SIGN_STYLE = Manual; CODE_SIGN_STYLE = Manual;
COMBINE_HIDPI_IMAGES = YES; COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 1060; CURRENT_PROJECT_VERSION = 1068;
DEVELOPMENT_TEAM = ""; DEVELOPMENT_TEAM = "";
"DEVELOPMENT_TEAM[sdk=macosx*]" = BA88US33G6; "DEVELOPMENT_TEAM[sdk=macosx*]" = BA88US33G6;
INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_FILE = Runner/Info.plist;
@@ -649,7 +649,7 @@
"@executable_path/../Frameworks", "@executable_path/../Frameworks",
); );
MACOSX_DEPLOYMENT_TARGET = 10.15; MACOSX_DEPLOYMENT_TARGET = 10.15;
MARKETING_VERSION = 1.0.1060; MARKETING_VERSION = 1.0.1068;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
PRODUCT_NAME = "Server Box"; PRODUCT_NAME = "Server Box";
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";

View File

@@ -1,7 +1,7 @@
name: server_box name: server_box
description: server status & toolbox app. description: server status & toolbox app.
publish_to: 'none' publish_to: 'none'
version: 1.0.1060+1060 version: 1.0.1068+1068
environment: environment:
sdk: ">=3.0.0" sdk: ">=3.0.0"