#24 #25 #33 new: sftp file edit

This commit is contained in:
lollipopkit
2023-05-28 18:21:03 +08:00
parent dbabe81e3c
commit 06be4503ca
28 changed files with 329 additions and 173 deletions

View File

@@ -1,13 +1,13 @@
import '../../../core/extension/stringx.dart';
import '../../res/misc.dart';
class ConnStatus {
class Conn {
final int maxConn;
final int active;
final int passive;
final int fail;
ConnStatus({
Conn({
required this.maxConn,
required this.active,
required this.passive,
@@ -15,13 +15,13 @@ class ConnStatus {
});
}
ConnStatus? parseConn(String raw) {
Conn? parseConn(String raw) {
final lines = raw.split('\n');
final idx = lines.lastWhere((element) => element.startsWith('Tcp:'),
orElse: () => '');
if (idx != '') {
final vals = idx.split(numReg);
return ConnStatus(
return Conn(
maxConn: vals[5].i,
active: vals[6].i,
passive: vals[7].i,

View File

@@ -1,7 +1,7 @@
class CpuStatus {
class Cpus {
List<OneTimeCpuStatus> _pre;
List<OneTimeCpuStatus> _now;
CpuStatus(this._pre, this._now);
Cpus(this._pre, this._now);
double usedPercent({int coreIdx = 0}) {
if (_now.length != _pre.length) return 0;

View File

@@ -1,6 +1,6 @@
import '../../res/misc.dart';
class DiskInfo {
class Disk {
final String path;
final String loc;
final int usedPercent;
@@ -8,7 +8,7 @@ class DiskInfo {
final String size;
final String avail;
DiskInfo({
Disk({
required this.path,
required this.loc,
required this.usedPercent,
@@ -18,8 +18,8 @@ class DiskInfo {
});
}
List<DiskInfo> parseDisk(String raw) {
final list = <DiskInfo>[];
List<Disk> parseDisk(String raw) {
final list = <Disk>[];
final items = raw.split('\n');
items.removeAt(0);
var pathCache = '';
@@ -36,7 +36,7 @@ List<DiskInfo> parseDisk(String raw) {
vals[0] = pathCache;
pathCache = '';
}
list.add(DiskInfo(
list.add(Disk(
path: vals[0],
loc: vals[5],
usedPercent: int.parse(vals[4].replaceFirst('%', '')),

View File

@@ -1,19 +1,19 @@
import 'package:toolbox/data/model/server/temp.dart';
import 'cpu_status.dart';
import 'disk_info.dart';
import 'cpu.dart';
import 'disk.dart';
import 'memory.dart';
import 'net_speed.dart';
import 'conn_status.dart';
import 'conn.dart';
class ServerStatus {
CpuStatus cpu;
Cpus cpu;
Memory mem;
Swap swap;
String sysVer;
String uptime;
List<DiskInfo> disk;
ConnStatus tcp;
List<Disk> disk;
Conn tcp;
NetSpeed netSpeed;
Temperatures temps;
String? failedInfo;

View File

@@ -1,10 +1,10 @@
import '../../res/server_cmd.dart';
import 'cpu_status.dart';
import 'disk_info.dart';
import 'cpu.dart';
import 'disk.dart';
import 'memory.dart';
import 'net_speed.dart';
import 'server_status.dart';
import 'conn_status.dart';
import 'conn.dart';
class ServerStatusUpdateReq {
final ServerStatus ss;

View File

@@ -85,7 +85,8 @@ class SftpDownloadWorker {
mainSendPort.send((i + form.length) / size * 100);
}
}
localFile.close();
await localFile.close();
await file.close();
mainSendPort.send(watch.elapsed);
mainSendPort.send(SftpWorkerStatus.finished);
} catch (e) {

View File

@@ -17,4 +17,4 @@ class VirtualKey {
});
}
enum VirtualKeyFunc { toggleIME, backspace, copy, paste, snippet }
enum VirtualKeyFunc { toggleIME, backspace, copy, paste, snippet, file }

View File

@@ -20,6 +20,7 @@ import 'package:highlight/languages/nix.dart';
import 'package:highlight/languages/objectivec.dart';
import 'package:highlight/languages/perl.dart';
import 'package:highlight/languages/php.dart';
import 'package:highlight/languages/plaintext.dart';
import 'package:highlight/languages/powershell.dart';
import 'package:highlight/languages/python.dart';
import 'package:highlight/languages/ruby.dart';
@@ -34,7 +35,7 @@ import 'package:highlight/languages/yaml.dart';
// KEY: fileNameSuffix
// VAL: highlight
final _suffix2HighlightMap = {
final suffix2HighlightMap = {
'dart': dart,
'go': go,
'rust': rust,
@@ -68,12 +69,16 @@ final _suffix2HighlightMap = {
'html': htmlbars,
'tex': tex,
'vim': vim,
'plaintext': plaintext,
};
extension HighlightString on String? {
Mode? get highlight {
return suffix2HighlightMap[highlightCode];
}
String? get highlightCode {
if (this == null) return null;
final suffix = this!.split('.').last;
return _suffix2HighlightMap[suffix];
return this!.split('.').last;
}
}

View File

@@ -6,6 +6,9 @@ final numReg = RegExp(r'\s{1,}');
/// Private Key max allowed size is 20kb
const privateKeyMaxSize = 20 * 1024;
// Editor max allowed size is 1mb
const editorMaxSize = 1024 * 1024;
/// Max debug log lines
const maxDebugLogLines = 100;

View File

@@ -1,11 +1,11 @@
import 'package:toolbox/data/model/server/temp.dart';
import '../model/server/cpu_status.dart';
import '../model/server/disk_info.dart';
import '../model/server/cpu.dart';
import '../model/server/disk.dart';
import '../model/server/memory.dart';
import '../model/server/net_speed.dart';
import '../model/server/server_status.dart';
import '../model/server/conn_status.dart';
import '../model/server/conn.dart';
Memory get _initMemory => Memory(
total: 1,
@@ -23,7 +23,7 @@ OneTimeCpuStatus get _initOneTimeCpuStatus => OneTimeCpuStatus(
0,
0,
);
CpuStatus get initCpuStatus => CpuStatus(
Cpus get initCpuStatus => Cpus(
[_initOneTimeCpuStatus],
[_initOneTimeCpuStatus],
);
@@ -48,7 +48,7 @@ ServerStatus get initStatus => ServerStatus(
sysVer: 'Loading...',
uptime: '',
disk: [
DiskInfo(
Disk(
path: '/',
loc: '/',
usedPercent: 0,
@@ -57,7 +57,7 @@ ServerStatus get initStatus => ServerStatus(
avail: '0',
)
],
tcp: ConnStatus(maxConn: 0, active: 0, passive: 0, fail: 0),
tcp: Conn(maxConn: 0, active: 0, passive: 0, fail: 0),
netSpeed: initNetSpeed,
swap: _initSwap,
temps: Temperatures(),

View File

@@ -10,9 +10,9 @@ final virtualKeys = [
VirtualKey('Up', key: TerminalKey.arrowUp, icon: Icons.arrow_upward),
VirtualKey('End', key: TerminalKey.end),
VirtualKey(
'Del',
key: TerminalKey.delete,
icon: Icons.backspace,
'File',
func: VirtualKeyFunc.file,
icon: Icons.file_open,
),
VirtualKey('Snippet', func: VirtualKeyFunc.snippet, icon: Icons.code),
VirtualKey('Tab', key: TerminalKey.tab),