chore: README

This commit is contained in:
lollipopkit
2023-12-12 14:18:09 +08:00
parent 47280b1339
commit 2200ff98d7
11 changed files with 48 additions and 46 deletions

View File

@@ -74,7 +74,7 @@ Platform | Support | Sign
- Due to Chinese government policy and the [BEIAN](https://github.com/lollipopkit/flutter_server_box/discussions/180) issue. iOS app is now free. Please download it from other regions of AppStore. - Due to Chinese government policy and the [BEIAN](https://github.com/lollipopkit/flutter_server_box/discussions/180) issue. iOS app is now free. Please download it from other regions of AppStore.
- Security: - Security:
- To prevent injection attacks and etc., please don't download from untrusted sources. - To prevent injection attacks and etc., please don't download from untrusted sources.
- Since `Linux / Windows` is signed with flutter default certificate, it is recommended to **build it yourself**. - Since `Linux / Windows` is signed with flutter default certificate, it is recommended to [build it yourself](https://github.com/lollipopkit/flutter_server_box/wiki#compile-yourself).
## 🆘 Help ## 🆘 Help

View File

@@ -73,7 +73,7 @@
- 由于中国政策原因,且**目前**无法完成[备案](https://github.com/lollipopkit/flutter_server_box/discussions/180)。iOS 端现已转为免费,请移步 AppStore 其他区下载。 - 由于中国政策原因,且**目前**无法完成[备案](https://github.com/lollipopkit/flutter_server_box/discussions/180)。iOS 端现已转为免费,请移步 AppStore 其他区下载。
- 关于安全: - 关于安全:
- 为了防止注入攻击等因素,请勿从不可信来源下载。 - 为了防止注入攻击等因素,请勿从不可信来源下载。
- 由于 `Linux / Windows` 使用了默认签名,因此建议**自行构建** - 由于 `Linux / Windows` 使用了默认签名,因此建议[自行构建](https://github.com/lollipopkit/flutter_server_box/wiki/%E4%B8%BB%E9%A1%B5#%E8%87%AA%E7%BC%96%E8%AF%91)
## 🆘 帮助 ## 🆘 帮助

View File

@@ -586,7 +586,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 = 667; CURRENT_PROJECT_VERSION = 672;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
@@ -596,7 +596,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.667; MARKETING_VERSION = 1.0.672;
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";
@@ -720,7 +720,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 = 667; CURRENT_PROJECT_VERSION = 672;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
@@ -730,7 +730,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.667; MARKETING_VERSION = 1.0.672;
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";
@@ -748,7 +748,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 = 667; CURRENT_PROJECT_VERSION = 672;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
@@ -758,7 +758,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.667; MARKETING_VERSION = 1.0.672;
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";
@@ -779,7 +779,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 = 667; CURRENT_PROJECT_VERSION = 672;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
GCC_C_LANGUAGE_STANDARD = gnu11; GCC_C_LANGUAGE_STANDARD = gnu11;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
@@ -792,7 +792,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
MARKETING_VERSION = 1.0.667; MARKETING_VERSION = 1.0.672;
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;
@@ -818,7 +818,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 = 667; CURRENT_PROJECT_VERSION = 672;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
GCC_C_LANGUAGE_STANDARD = gnu11; GCC_C_LANGUAGE_STANDARD = gnu11;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
@@ -831,7 +831,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
MARKETING_VERSION = 1.0.667; MARKETING_VERSION = 1.0.672;
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)";
@@ -854,7 +854,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 = 667; CURRENT_PROJECT_VERSION = 672;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
GCC_C_LANGUAGE_STANDARD = gnu11; GCC_C_LANGUAGE_STANDARD = gnu11;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
@@ -867,7 +867,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
MARKETING_VERSION = 1.0.667; MARKETING_VERSION = 1.0.672;
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)";
@@ -890,7 +890,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 = 667; CURRENT_PROJECT_VERSION = 672;
DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
@@ -902,7 +902,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.667; MARKETING_VERSION = 1.0.672;
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;
@@ -931,7 +931,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 = 667; CURRENT_PROJECT_VERSION = 672;
DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
@@ -943,7 +943,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.667; MARKETING_VERSION = 1.0.672;
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;
@@ -969,7 +969,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 = 667; CURRENT_PROJECT_VERSION = 672;
DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
@@ -981,7 +981,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.667; MARKETING_VERSION = 1.0.672;
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

@@ -21,11 +21,11 @@ import 'package:xml/xml.dart';
/// ] /// ]
/// ///
class NvdiaSmi { class NvidiaSmi {
static List<NvdiaSmiItem> fromXml(String raw) { static List<NvidiaSmiItem> fromXml(String raw) {
final xmlData = XmlDocument.parse(raw); final xmlData = XmlDocument.parse(raw);
final gpus = xmlData.findAllElements('gpu'); final gpus = xmlData.findAllElements('gpu');
final result = List<NvdiaSmiItem?>.generate(gpus.length, (index) { final result = List<NvidiaSmiItem?>.generate(gpus.length, (index) {
final gpu = gpus.elementAt(index); final gpu = gpus.elementAt(index);
final name = gpu.findElements('product_name').firstOrNull?.innerText; final name = gpu.findElements('product_name').firstOrNull?.innerText;
final temp = gpu final temp = gpu
@@ -47,7 +47,7 @@ class NvdiaSmi {
.firstOrNull .firstOrNull
?.findElements('process_info'); ?.findElements('process_info');
final memoryProcesses = final memoryProcesses =
List<NvdiaSmiMemProcess?>.generate(processes?.length ?? 0, (index) { List<NvidiaSmiMemProcess?>.generate(processes?.length ?? 0, (index) {
final process = processes?.elementAt(index); final process = processes?.elementAt(index);
final pid = process?.findElements('pid').firstOrNull?.innerText; final pid = process?.findElements('pid').firstOrNull?.innerText;
final name = final name =
@@ -55,7 +55,7 @@ class NvdiaSmi {
final memory = final memory =
process?.findElements('used_memory').firstOrNull?.innerText; process?.findElements('used_memory').firstOrNull?.innerText;
if (pid != null && name != null && memory != null) { if (pid != null && name != null && memory != null) {
return NvdiaSmiMemProcess( return NvidiaSmiMemProcess(
int.parse(pid), int.parse(pid),
name, name,
int.parse( int.parse(
@@ -78,13 +78,13 @@ class NvdiaSmi {
powerDraw != null && powerDraw != null &&
powerLimit != null && powerLimit != null &&
memory != null) { memory != null) {
return NvdiaSmiItem( return NvidiaSmiItem(
name: name, name: name,
uuid: gpu.findElements('uuid').firstOrNull?.innerText ?? '', uuid: gpu.findElements('uuid').firstOrNull?.innerText ?? '',
temp: int.parse(temp.split(' ').firstOrNull ?? '0'), temp: int.parse(temp.split(' ').firstOrNull ?? '0'),
percent: int.parse(percent?.split(' ').firstOrNull ?? '0'), percent: int.parse(percent?.split(' ').firstOrNull ?? '0'),
power: '$powerDraw / $powerLimit', power: '$powerDraw / $powerLimit',
memory: NvdiaSmiMem( memory: NvidiaSmiMem(
int.parse(memoryTotal?.split(' ').firstOrNull ?? '0'), int.parse(memoryTotal?.split(' ').firstOrNull ?? '0'),
int.parse(memoryUsed?.split(' ').firstOrNull ?? '0'), int.parse(memoryUsed?.split(' ').firstOrNull ?? '0'),
'MiB', 'MiB',
@@ -100,16 +100,16 @@ class NvdiaSmi {
} }
} }
class NvdiaSmiItem { class NvidiaSmiItem {
final String uuid; final String uuid;
final String name; final String name;
final int temp; final int temp;
final String power; final String power;
final NvdiaSmiMem memory; final NvidiaSmiMem memory;
final int percent; final int percent;
final int fanSpeed; final int fanSpeed;
const NvdiaSmiItem({ const NvidiaSmiItem({
required this.uuid, required this.uuid,
required this.name, required this.name,
required this.temp, required this.temp,
@@ -125,13 +125,13 @@ class NvdiaSmiItem {
} }
} }
class NvdiaSmiMem { class NvidiaSmiMem {
final int total; final int total;
final int used; final int used;
final String unit; final String unit;
final List<NvdiaSmiMemProcess> processes; final List<NvidiaSmiMemProcess> processes;
const NvdiaSmiMem(this.total, this.used, this.unit, this.processes); const NvidiaSmiMem(this.total, this.used, this.unit, this.processes);
@override @override
String toString() { String toString() {
@@ -139,12 +139,12 @@ class NvdiaSmiMem {
} }
} }
class NvdiaSmiMemProcess { class NvidiaSmiMemProcess {
final int pid; final int pid;
final String name; final String name;
final int memory; final int memory;
const NvdiaSmiMemProcess(this.pid, this.name, this.memory); const NvidiaSmiMemProcess(this.pid, this.name, this.memory);
@override @override
String toString() { String toString() {

View File

@@ -56,7 +56,7 @@ class ServerStatus {
SystemType system; SystemType system;
String? err; String? err;
DiskIO diskIO; DiskIO diskIO;
List<NvdiaSmiItem>? nvdia; List<NvidiaSmiItem>? nvdia;
/// Whether is connectting, parsing and etc. /// Whether is connectting, parsing and etc.
bool _isBusy = false; bool _isBusy = false;

View File

@@ -113,7 +113,7 @@ Future<ServerStatus> _getLinuxStatus(ServerStatusUpdateReq req) async {
} }
try { try {
final nvdia = NvdiaSmi.fromXml(StatusCmdType.nvdia.find(segments)); final nvdia = NvidiaSmi.fromXml(StatusCmdType.nvdia.find(segments));
req.ss.nvdia = nvdia; req.ss.nvdia = nvdia;
} catch (e, s) { } catch (e, s) {
Loggers.parse.warning(e, s); Loggers.parse.warning(e, s);

View File

@@ -2,9 +2,9 @@
class BuildData { class BuildData {
static const String name = "ServerBox"; static const String name = "ServerBox";
static const int build = 667; static const int build = 672;
static const String engine = "3.16.2"; static const String engine = "3.16.2";
static const String buildAt = "2023-12-09 14:56:57"; static const String buildAt = "2023-12-11 11:40:12";
static const int modifications = 11; static const int modifications = 3;
static const int script = 31; static const int script = 31;
} }

View File

@@ -318,7 +318,7 @@ class _ServerDetailPageState extends State<ServerDetailPage>
); );
} }
Widget _buildGpuItem(NvdiaSmiItem item) { Widget _buildGpuItem(NvidiaSmiItem item) {
final mem = item.memory; final mem = item.memory;
final processes = mem.processes; final processes = mem.processes;
final children = <Widget>[]; final children = <Widget>[];
@@ -378,7 +378,7 @@ class _ServerDetailPageState extends State<ServerDetailPage>
); );
} }
Widget _buildGpuProcessItem(NvdiaSmiMemProcess process) { Widget _buildGpuProcessItem(NvidiaSmiMemProcess process) {
return ListTile( return ListTile(
title: Text( title: Text(
process.name, process.name,

View File

@@ -74,7 +74,9 @@ class _InputState extends State<Input> {
prefix: widget.prefix, prefix: widget.prefix,
suffixIcon: widget.obscureText suffixIcon: widget.obscureText
? IconButton( ? IconButton(
icon: Icon(_obscureText ? Icons.visibility : Icons.visibility_off), icon: Icon(
_obscureText ? Icons.visibility : Icons.visibility_off,
),
onPressed: () { onPressed: () {
setState(() { setState(() {
_obscureText = !_obscureText; _obscureText = !_obscureText;

View File

@@ -842,7 +842,7 @@ const _raw = '''
void main() { void main() {
test('nvdia-smi', () { test('nvdia-smi', () {
if (kDebugMode) { if (kDebugMode) {
print(NvdiaSmi.fromXml(_raw).firstOrNull?.memory.processes); print(NvidiaSmi.fromXml(_raw).firstOrNull?.memory.processes);
} }
}); });
} }