This commit is contained in:
lollipopkit
2023-05-26 17:01:52 +08:00
parent c1c009863d
commit 20ef9d4575
28 changed files with 126 additions and 149 deletions

View File

@@ -11,14 +11,14 @@ class Backup {
final List<PrivateKeyInfo> keys;
final Map<String, String> dockerHosts;
Backup(
this.version,
this.date,
this.spis,
this.snippets,
this.keys,
this.dockerHosts,
);
Backup({
required this.version,
required this.date,
required this.spis,
required this.snippets,
required this.keys,
required this.dockerHosts,
});
Backup.fromJson(Map<String, dynamic> json)
: version = json['version'] as int,

View File

@@ -0,0 +1,34 @@
enum ErrFrom {
unknown,
apt,
docker,
sftp,
ssh,
status;
}
abstract class Err<T> {
final ErrFrom from;
final T type;
final String? message;
Err({required this.from, required this.type, this.message});
}
enum DockerErrType {
unknown,
noClient,
notInstalled,
invalidVersion,
cmdNoPrefix
}
class DockerErr extends Err<DockerErrType> {
DockerErr({required DockerErrType type, String? message})
: super(from: ErrFrom.docker, type: type, message: message);
@override
String toString() {
return 'DockerErr<$type>: $message';
}
}

View File

@@ -0,0 +1,105 @@
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
enum ServerTabMenuType {
sftp,
snippet,
pkg,
docker,
edit;
IconData get icon {
switch (this) {
case ServerTabMenuType.sftp:
return Icons.insert_drive_file;
case ServerTabMenuType.snippet:
return Icons.code;
case ServerTabMenuType.pkg:
return Icons.system_security_update;
case ServerTabMenuType.docker:
return Icons.view_agenda;
case ServerTabMenuType.edit:
return Icons.edit;
}
}
String text(S s) {
switch (this) {
case ServerTabMenuType.sftp:
return 'SFTP';
case ServerTabMenuType.snippet:
return s.snippet;
case ServerTabMenuType.pkg:
return s.pkg;
case ServerTabMenuType.docker:
return 'Docker';
case ServerTabMenuType.edit:
return s.edit;
}
}
PopupMenuItem<ServerTabMenuType> build(S s) => _build(this, icon, text(s));
}
enum DockerMenuType {
start,
stop,
restart,
rm,
logs;
static List<DockerMenuType> items(bool running) {
if (running) {
return [stop, restart, rm, logs];
} else {
return [start, rm, logs];
}
}
IconData get icon {
switch (this) {
case DockerMenuType.start:
return Icons.play_arrow;
case DockerMenuType.stop:
return Icons.stop;
case DockerMenuType.restart:
return Icons.restart_alt;
case DockerMenuType.rm:
return Icons.delete;
case DockerMenuType.logs:
return Icons.logo_dev;
}
}
String text(S s) {
switch (this) {
case DockerMenuType.start:
return s.start;
case DockerMenuType.stop:
return s.stop;
case DockerMenuType.restart:
return s.restart;
case DockerMenuType.rm:
return s.delete;
case DockerMenuType.logs:
return s.log;
}
}
PopupMenuItem<DockerMenuType> build(S s) => _build(this, icon, text(s));
}
PopupMenuItem<T> _build<T>(T t, IconData icon, String text) {
return PopupMenuItem<T>(
value: t,
child: Row(
children: [
Icon(icon),
const SizedBox(
width: 10,
),
Text(text),
],
),
);
}

View File

@@ -1,16 +1,10 @@
class PathWithPrefix {
late String _prefixPath;
final String _prefixPath;
String _path = '/';
String? _prePath;
String get path => _prefixPath + _path;
PathWithPrefix(String prefixPath) {
if (prefixPath.endsWith('/')) {
_prefixPath = prefixPath.substring(0, prefixPath.length - 1);
} else {
_prefixPath = prefixPath;
}
}
PathWithPrefix(String prefixPath) : _prefixPath = _trimSuffix(prefixPath);
void update(String newPath) {
_prePath = _path;
@@ -36,3 +30,10 @@ class PathWithPrefix {
return true;
}
}
String _trimSuffix(String prefixPath) {
if (prefixPath.endsWith('/')) {
return prefixPath.substring(0, prefixPath.length - 1);
}
return prefixPath;
}

View File

@@ -2,26 +2,17 @@ import '../../../core/extension/stringx.dart';
import '../../res/misc.dart';
class ConnStatus {
/*
{
"maxConn": 0,
"active": 1,
"passive": 2,
"fail": 3
}
*/
final int maxConn;
final int active;
final int passive;
final int fail;
late int maxConn;
late int active;
late int passive;
late int fail;
ConnStatus(
this.maxConn,
this.active,
this.passive,
this.fail,
);
ConnStatus({
required this.maxConn,
required this.active,
required this.passive,
required this.fail,
});
}
ConnStatus? parseConn(String raw) {
@@ -30,7 +21,12 @@ ConnStatus? parseConn(String raw) {
orElse: () => '');
if (idx != '') {
final vals = idx.split(numReg);
return ConnStatus(vals[5].i, vals[6].i, vals[7].i, vals[8].i);
return ConnStatus(
maxConn: vals[5].i,
active: vals[6].i,
passive: vals[7].i,
fail: vals[8].i,
);
}
return null;
}

View File

@@ -1,21 +1,21 @@
import '../../res/misc.dart';
class DiskInfo {
late String path;
late String loc;
late int usedPercent;
late String used;
late String size;
late String avail;
final String path;
final String loc;
final int usedPercent;
final String used;
final String size;
final String avail;
DiskInfo(
this.path,
this.loc,
this.usedPercent,
this.used,
this.size,
this.avail,
);
DiskInfo({
required this.path,
required this.loc,
required this.usedPercent,
required this.used,
required this.size,
required this.avail,
});
}
List<DiskInfo> parseDisk(String raw) {
@@ -37,12 +37,12 @@ List<DiskInfo> parseDisk(String raw) {
pathCache = '';
}
list.add(DiskInfo(
vals[0],
vals[5],
int.parse(vals[4].replaceFirst('%', '')),
vals[2],
vals[1],
vals[3],
path: vals[0],
loc: vals[5],
usedPercent: int.parse(vals[4].replaceFirst('%', '')),
used: vals[2],
size: vals[1],
avail: vals[3],
));
}
return list;

View File

@@ -1,8 +1,8 @@
class Memory {
int total;
int free;
int cache;
int avail;
final int total;
final int free;
final int cache;
final int avail;
Memory({
required this.total,

View File

@@ -1,5 +1,3 @@
import 'dart:convert';
import 'package:hive_flutter/hive_flutter.dart';
part 'private_key_info.g.dart';
@@ -31,15 +29,3 @@ class PrivateKeyInfo {
return data;
}
}
List<PrivateKeyInfo> getPrivateKeyInfoList(dynamic data) {
List<PrivateKeyInfo> ss = [];
if (data is String) {
data = json.decode(data);
}
for (var t in data) {
ss.add(PrivateKeyInfo.fromJson(t));
}
return ss;
}

View File

@@ -1,5 +1,3 @@
import 'dart:convert';
import 'package:hive_flutter/hive_flutter.dart';
part 'server_private_info.g.dart';
@@ -51,15 +49,3 @@ class ServerPrivateInfo {
return data;
}
}
List<ServerPrivateInfo> getServerInfoList(dynamic data) {
List<ServerPrivateInfo> ss = [];
if (data is String) {
data = json.decode(data);
}
for (var t in data) {
ss.add(ServerPrivateInfo.fromJson(t));
}
return ss;
}

View File

@@ -1,5 +1,3 @@
import 'dart:convert';
import 'package:hive_flutter/hive_flutter.dart';
part 'snippet.g.dart';
@@ -23,15 +21,3 @@ class Snippet {
return data;
}
}
List<Snippet> getSnippetList(dynamic data) {
List<Snippet> ss = [];
if (data is String) {
data = json.decode(data);
}
for (var t in data) {
ss.add(Snippet.fromJson(t));
}
return ss;
}

View File

@@ -9,7 +9,7 @@ class VirtualKey {
final VirtualKeyFunc? func;
VirtualKey(this.text,
{this.key, this.toggleable = false, this.icon, this.func});
{this.key, this.toggleable = false, this.icon, this.func,});
}
enum VirtualKeyFunc { toggleIME, backspace, copy, paste, snippet }