mirror of
https://github.com/lollipopkit/flutter_server_box.git
synced 2025-12-17 23:34:24 +01:00
opt.: mem usage
This commit is contained in:
@@ -6,12 +6,7 @@ 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/store/docker.dart';
|
||||
import 'package:toolbox/data/store/private_key.dart';
|
||||
import 'package:toolbox/data/store/server.dart';
|
||||
import 'package:toolbox/data/store/setting.dart';
|
||||
import 'package:toolbox/data/store/snippet.dart';
|
||||
import 'package:toolbox/locator.dart';
|
||||
import 'package:toolbox/data/res/store.dart';
|
||||
|
||||
const backupFormatVersion = 1;
|
||||
|
||||
@@ -62,11 +57,11 @@ class Backup {
|
||||
Backup.loadFromStore()
|
||||
: version = backupFormatVersion,
|
||||
date = DateTime.now().toString().split('.').first,
|
||||
spis = _server.fetch(),
|
||||
snippets = _snippet.fetch(),
|
||||
keys = _privateKey.fetch(),
|
||||
dockerHosts = _dockerHosts.fetchAll(),
|
||||
settings = _setting.toJson();
|
||||
spis = Stores.server.fetch(),
|
||||
snippets = Stores.snippet.fetch(),
|
||||
keys = Stores.key.fetch(),
|
||||
dockerHosts = Stores.docker.fetchAll(),
|
||||
settings = Stores.setting.toJson();
|
||||
|
||||
static Future<void> backup() async {
|
||||
final result = _diyEncrtpt(json.encode(Backup.loadFromStore()));
|
||||
@@ -75,18 +70,18 @@ class Backup {
|
||||
|
||||
Future<void> restore() async {
|
||||
for (final s in snippets) {
|
||||
_snippet.put(s);
|
||||
Stores.snippet.put(s);
|
||||
}
|
||||
for (final s in spis) {
|
||||
_server.put(s);
|
||||
Stores.server.put(s);
|
||||
}
|
||||
for (final s in keys) {
|
||||
_privateKey.put(s);
|
||||
Stores.key.put(s);
|
||||
}
|
||||
for (final k in dockerHosts.keys) {
|
||||
final val = dockerHosts[k];
|
||||
if (val != null && val is String && val.isNotEmpty) {
|
||||
_dockerHosts.put(k, val);
|
||||
Stores.docker.put(k, val);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -95,12 +90,6 @@ class Backup {
|
||||
: this.fromJson(json.decode(_diyDecrypt(raw)));
|
||||
}
|
||||
|
||||
final _server = locator<ServerStore>();
|
||||
final _snippet = locator<SnippetStore>();
|
||||
final _privateKey = locator<PrivateKeyStore>();
|
||||
final _dockerHosts = locator<DockerStore>();
|
||||
final _setting = locator<SettingStore>();
|
||||
|
||||
String _diyEncrtpt(String raw) => json.encode(
|
||||
raw.codeUnits.map((e) => e * 2 + 1).toList(growable: false),
|
||||
);
|
||||
|
||||
@@ -109,8 +109,8 @@ Cpus parseBsdCpu(String raw) {
|
||||
.allMatches(raw)
|
||||
.map((e) => double.parse(e.group(1) ?? '0') * 100)
|
||||
.toList();
|
||||
if (percents.length != 3) return initCpuStatus;
|
||||
return initCpuStatus
|
||||
if (percents.length != 3) return InitStatus.cpus;
|
||||
return InitStatus.cpus
|
||||
..now = [
|
||||
OneTimeCpuStatus('cpu', percents[0].toInt(), 0, 0,
|
||||
percents[2].toInt() + percents[1].toInt(), 0, 0, 0)
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
import '../../../locator.dart';
|
||||
import '../../store/setting.dart';
|
||||
import 'package:toolbox/data/res/store.dart';
|
||||
|
||||
class TryLimiter {
|
||||
final Map<String, int> _triedTimes = {};
|
||||
|
||||
bool canTry(String id) {
|
||||
final maxCount = locator<SettingStore>().maxRetryCount.fetch();
|
||||
final maxCount = Stores.setting.maxRetryCount.fetch();
|
||||
if (maxCount <= 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -38,15 +38,9 @@ class DebugProvider extends ChangeNotifier {
|
||||
}
|
||||
|
||||
void addMultiline(Object data, [Color color = Colors.blue]) {
|
||||
final widget = Text(
|
||||
'$data',
|
||||
style: TextStyle(
|
||||
color: color,
|
||||
),
|
||||
);
|
||||
_addWidget(SingleChildScrollView(
|
||||
scrollDirection: Axis.horizontal,
|
||||
child: widget,
|
||||
child: Text('$data', style: TextStyle(color: color)),
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
@@ -9,8 +9,7 @@ import 'package:toolbox/data/model/docker/image.dart';
|
||||
import 'package:toolbox/data/model/docker/ps.dart';
|
||||
import 'package:toolbox/data/model/app/error.dart';
|
||||
import 'package:toolbox/data/res/logger.dart';
|
||||
import 'package:toolbox/data/store/docker.dart';
|
||||
import 'package:toolbox/locator.dart';
|
||||
import 'package:toolbox/data/res/store.dart';
|
||||
|
||||
final _dockerNotFound = RegExp(r'command not found|Unknown command');
|
||||
final _versionReg = RegExp(r'(Version:)\s+([0-9]+\.[0-9]+\.[0-9]+)');
|
||||
@@ -19,8 +18,6 @@ final _editionReg = RegExp(r'Docker Engine - [a-zA-Z]+');
|
||||
final _dockerPrefixReg = RegExp(r'(sudo )?docker ');
|
||||
|
||||
class DockerProvider extends ChangeNotifier {
|
||||
final _dockerStore = locator<DockerStore>();
|
||||
|
||||
SSHClient? client;
|
||||
String? userName;
|
||||
List<DockerPsItem>? items;
|
||||
@@ -177,7 +174,7 @@ class DockerProvider extends ChangeNotifier {
|
||||
|
||||
// judge whether to use DOCKER_HOST
|
||||
String _wrap(String cmd) {
|
||||
final dockerHost = _dockerStore.fetch(hostId!);
|
||||
final dockerHost = Stores.docker.fetch(hostId!);
|
||||
if (dockerHost == null || dockerHost.isEmpty) {
|
||||
return cmd.withLangExport;
|
||||
}
|
||||
|
||||
@@ -1,26 +1,24 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:toolbox/data/model/server/private_key_info.dart';
|
||||
import 'package:toolbox/data/store/private_key.dart';
|
||||
import 'package:toolbox/locator.dart';
|
||||
import 'package:toolbox/data/res/store.dart';
|
||||
|
||||
class PrivateKeyProvider extends ChangeNotifier {
|
||||
List<PrivateKeyInfo> get pkis => _pkis;
|
||||
final _store = locator<PrivateKeyStore>();
|
||||
late List<PrivateKeyInfo> _pkis;
|
||||
|
||||
void loadData() {
|
||||
_pkis = _store.fetch();
|
||||
_pkis = Stores.key.fetch();
|
||||
}
|
||||
|
||||
void add(PrivateKeyInfo info) {
|
||||
_pkis.add(info);
|
||||
_store.put(info);
|
||||
Stores.key.put(info);
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void delete(PrivateKeyInfo info) {
|
||||
_pkis.removeWhere((e) => e.id == info.id);
|
||||
_store.delete(info);
|
||||
Stores.key.delete(info);
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
@@ -31,7 +29,7 @@ class PrivateKeyProvider extends ChangeNotifier {
|
||||
} else {
|
||||
_pkis[idx] = newInfo;
|
||||
}
|
||||
_store.put(newInfo);
|
||||
Stores.key.put(newInfo);
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,19 +4,17 @@ import 'package:flutter/foundation.dart';
|
||||
import 'package:toolbox/data/model/app/shell_func.dart';
|
||||
import 'package:toolbox/data/model/server/system.dart';
|
||||
import 'package:toolbox/data/res/logger.dart';
|
||||
import 'package:toolbox/data/res/store.dart';
|
||||
|
||||
import '../../core/extension/order.dart';
|
||||
import '../../core/extension/uint8list.dart';
|
||||
import '../../core/utils/server.dart';
|
||||
import '../../locator.dart';
|
||||
import '../model/server/server.dart';
|
||||
import '../model/server/server_private_info.dart';
|
||||
import '../model/server/server_status_update_req.dart';
|
||||
import '../model/server/snippet.dart';
|
||||
import '../model/server/try_limiter.dart';
|
||||
import '../res/status.dart';
|
||||
import '../store/server.dart';
|
||||
import '../store/setting.dart';
|
||||
|
||||
typedef ServersMap = Map<String, Server>;
|
||||
|
||||
@@ -32,20 +30,17 @@ class ServerProvider extends ChangeNotifier {
|
||||
|
||||
Timer? _timer;
|
||||
|
||||
final _serverStore = locator<ServerStore>();
|
||||
final _settingStore = locator<SettingStore>();
|
||||
|
||||
Future<void> loadLocalData() async {
|
||||
// Issue #147
|
||||
// Clear all servers because of restarting app will cause duplicate servers
|
||||
_servers.clear();
|
||||
_serverOrder.clear();
|
||||
|
||||
final spis = _serverStore.fetch();
|
||||
final spis = Stores.server.fetch();
|
||||
for (final spi in spis) {
|
||||
_servers[spi.id] = genServer(spi);
|
||||
}
|
||||
final serverOrder_ = _settingStore.serverOrder.fetch();
|
||||
final serverOrder_ = Stores.setting.serverOrder.fetch();
|
||||
if (serverOrder_.isNotEmpty) {
|
||||
spis.reorder(
|
||||
order: serverOrder_,
|
||||
@@ -57,7 +52,7 @@ class ServerProvider extends ChangeNotifier {
|
||||
}
|
||||
// Must use [equals] to compare [Order] here.
|
||||
if (!_serverOrder.equals(serverOrder_)) {
|
||||
_settingStore.serverOrder.put(_serverOrder);
|
||||
Stores.setting.serverOrder.put(_serverOrder);
|
||||
}
|
||||
_updateTags();
|
||||
notifyListeners();
|
||||
@@ -85,13 +80,13 @@ class ServerProvider extends ChangeNotifier {
|
||||
s.spi.tags![i] = new_;
|
||||
}
|
||||
}
|
||||
_serverStore.update(s.spi, s.spi);
|
||||
Stores.server.update(s.spi, s.spi);
|
||||
}
|
||||
_updateTags();
|
||||
}
|
||||
|
||||
Server genServer(ServerPrivateInfo spi) {
|
||||
return Server(spi, initStatus, null, ServerState.disconnected);
|
||||
return Server(spi, InitStatus.status, null, ServerState.disconnected);
|
||||
}
|
||||
|
||||
/// if [spi] is specificed then only refresh this server
|
||||
@@ -115,7 +110,7 @@ class ServerProvider extends ChangeNotifier {
|
||||
}
|
||||
|
||||
Future<void> startAutoRefresh() async {
|
||||
final duration = _settingStore.serverStatusUpdateInterval.fetch();
|
||||
final duration = Stores.setting.serverStatusUpdateInterval.fetch();
|
||||
stopAutoRefresh();
|
||||
if (duration == 0) return;
|
||||
_timer = Timer.periodic(Duration(seconds: duration), (_) async {
|
||||
@@ -158,9 +153,9 @@ class ServerProvider extends ChangeNotifier {
|
||||
void addServer(ServerPrivateInfo spi) {
|
||||
_servers[spi.id] = genServer(spi);
|
||||
notifyListeners();
|
||||
_serverStore.put(spi);
|
||||
Stores.server.put(spi);
|
||||
_serverOrder.add(spi.id);
|
||||
_settingStore.serverOrder.put(_serverOrder);
|
||||
Stores.setting.serverOrder.put(_serverOrder);
|
||||
_updateTags();
|
||||
refreshData(spi: spi);
|
||||
}
|
||||
@@ -168,19 +163,19 @@ class ServerProvider extends ChangeNotifier {
|
||||
void delServer(String id) {
|
||||
_servers.remove(id);
|
||||
_serverOrder.remove(id);
|
||||
_settingStore.serverOrder.put(_serverOrder);
|
||||
Stores.setting.serverOrder.put(_serverOrder);
|
||||
_updateTags();
|
||||
notifyListeners();
|
||||
_serverStore.delete(id);
|
||||
Stores.server.delete(id);
|
||||
}
|
||||
|
||||
void deleteAll() {
|
||||
_servers.clear();
|
||||
_serverOrder.clear();
|
||||
_settingStore.serverOrder.put(_serverOrder);
|
||||
Stores.setting.serverOrder.put(_serverOrder);
|
||||
_updateTags();
|
||||
notifyListeners();
|
||||
_serverStore.deleteAll();
|
||||
Stores.server.deleteAll();
|
||||
}
|
||||
|
||||
Future<void> updateServer(
|
||||
@@ -188,7 +183,7 @@ class ServerProvider extends ChangeNotifier {
|
||||
ServerPrivateInfo newSpi,
|
||||
) async {
|
||||
if (old != newSpi) {
|
||||
_serverStore.update(old, newSpi);
|
||||
Stores.server.update(old, newSpi);
|
||||
_servers[old.id]?.spi = newSpi;
|
||||
|
||||
if (newSpi.id != old.id) {
|
||||
@@ -196,14 +191,14 @@ class ServerProvider extends ChangeNotifier {
|
||||
_servers[newSpi.id]?.spi = newSpi;
|
||||
_servers.remove(old.id);
|
||||
_serverOrder.update(old.id, newSpi.id);
|
||||
_settingStore.serverOrder.put(_serverOrder);
|
||||
Stores.setting.serverOrder.put(_serverOrder);
|
||||
}
|
||||
|
||||
// Only reconnect if neccessary
|
||||
if (newSpi.shouldReconnect(old)) {
|
||||
_servers[newSpi.id]?.client = await genClient(
|
||||
newSpi,
|
||||
timeout: _settingStore.timeoutD,
|
||||
timeout: Stores.setting.timeoutD,
|
||||
);
|
||||
refreshData(spi: newSpi);
|
||||
}
|
||||
@@ -239,7 +234,7 @@ class ServerProvider extends ChangeNotifier {
|
||||
try {
|
||||
s.client = await genClient(
|
||||
spi,
|
||||
timeout: _settingStore.timeoutD,
|
||||
timeout: Stores.setting.timeoutD,
|
||||
);
|
||||
} catch (e) {
|
||||
_limiter.inc(sid);
|
||||
|
||||
@@ -2,11 +2,9 @@ import 'dart:convert';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:toolbox/data/model/server/snippet.dart';
|
||||
import 'package:toolbox/data/store/snippet.dart';
|
||||
import 'package:toolbox/locator.dart';
|
||||
import 'package:toolbox/data/res/store.dart';
|
||||
|
||||
import '../../core/extension/order.dart';
|
||||
import '../store/setting.dart';
|
||||
|
||||
class SnippetProvider extends ChangeNotifier {
|
||||
late Order<Snippet> _snippets;
|
||||
@@ -15,20 +13,17 @@ class SnippetProvider extends ChangeNotifier {
|
||||
final _tags = <String>[];
|
||||
List<String> get tags => _tags;
|
||||
|
||||
final _store = locator<SnippetStore>();
|
||||
final _setting = locator<SettingStore>();
|
||||
|
||||
void loadData() {
|
||||
_snippets = _store.fetch();
|
||||
final order = _setting.snippetOrder.fetch();
|
||||
_snippets = Stores.snippet.fetch();
|
||||
final order = Stores.setting.snippetOrder.fetch();
|
||||
if (order.isNotEmpty) {
|
||||
final surplus = _snippets.reorder(
|
||||
order: order,
|
||||
finder: (n, name) => n.name == name,
|
||||
);
|
||||
order.removeWhere((e) => surplus.any((ele) => ele == e));
|
||||
if (order != _setting.snippetOrder.fetch()) {
|
||||
_setting.snippetOrder.put(order);
|
||||
if (order != Stores.setting.snippetOrder.fetch()) {
|
||||
Stores.setting.snippetOrder.put(order);
|
||||
}
|
||||
}
|
||||
_addInternal();
|
||||
@@ -36,12 +31,12 @@ class SnippetProvider extends ChangeNotifier {
|
||||
}
|
||||
|
||||
void _addInternal() {
|
||||
if (!_setting.fTISBM.fetch()) {
|
||||
if (!Stores.setting.fTISBM.fetch()) {
|
||||
return;
|
||||
}
|
||||
_snippets.add(installSBM);
|
||||
_store.put(installSBM);
|
||||
_setting.fTISBM.put(false);
|
||||
Stores.snippet.put(installSBM);
|
||||
Stores.setting.fTISBM.put(false);
|
||||
}
|
||||
|
||||
void _updateTags() {
|
||||
@@ -58,21 +53,21 @@ class SnippetProvider extends ChangeNotifier {
|
||||
|
||||
void add(Snippet snippet) {
|
||||
_snippets.add(snippet);
|
||||
_store.put(snippet);
|
||||
Stores.snippet.put(snippet);
|
||||
_updateTags();
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void del(Snippet snippet) {
|
||||
_snippets.remove(snippet);
|
||||
_store.delete(snippet);
|
||||
Stores.snippet.delete(snippet);
|
||||
_updateTags();
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void update(Snippet old, Snippet newOne) {
|
||||
_store.delete(old);
|
||||
_store.put(newOne);
|
||||
Stores.snippet.delete(old);
|
||||
Stores.snippet.put(newOne);
|
||||
_snippets.remove(old);
|
||||
_snippets.add(newOne);
|
||||
_updateTags();
|
||||
@@ -84,7 +79,7 @@ class SnippetProvider extends ChangeNotifier {
|
||||
if (s.tags?.contains(old) ?? false) {
|
||||
s.tags?.remove(old);
|
||||
s.tags?.add(newOne);
|
||||
_store.put(s);
|
||||
Stores.snippet.put(s);
|
||||
}
|
||||
}
|
||||
_updateTags();
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:toolbox/data/res/store.dart';
|
||||
import 'package:xterm/core.dart';
|
||||
|
||||
import '../../locator.dart';
|
||||
import '../store/setting.dart';
|
||||
|
||||
class VirtualKeyboard extends TerminalInputHandler with ChangeNotifier {
|
||||
VirtualKeyboard();
|
||||
|
||||
@@ -25,8 +23,6 @@ class VirtualKeyboard extends TerminalInputHandler with ChangeNotifier {
|
||||
}
|
||||
}
|
||||
|
||||
final _setting = locator<SettingStore>();
|
||||
|
||||
void reset(TerminalKeyboardEvent e) {
|
||||
if (e.ctrl) {
|
||||
ctrl = false;
|
||||
@@ -43,7 +39,7 @@ class VirtualKeyboard extends TerminalInputHandler with ChangeNotifier {
|
||||
ctrl: event.ctrl || ctrl,
|
||||
alt: event.alt || alt,
|
||||
);
|
||||
if (_setting.sshVirtualKeyAutoOff.fetch()) {
|
||||
if (Stores.setting.sshVirtualKeyAutoOff.fetch()) {
|
||||
reset(e);
|
||||
}
|
||||
return defaultInputHandler.call(e);
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
|
||||
class BuildData {
|
||||
static const String name = "ServerBox";
|
||||
static const int build = 547;
|
||||
static const int build = 550;
|
||||
static const String engine = "3.13.2";
|
||||
static const String buildAt = "2023-09-12 14:04:07.018274";
|
||||
static const int modifications = 4;
|
||||
static const int script = 14;
|
||||
static const String buildAt = "2023-09-13 15:19:48";
|
||||
static const int modifications = 45;
|
||||
static const int script = 15;
|
||||
}
|
||||
|
||||
@@ -5,6 +5,8 @@ import '../model/app/dynamic_color.dart';
|
||||
late Color primaryColor;
|
||||
|
||||
class DynamicColors {
|
||||
const DynamicColors._();
|
||||
|
||||
static const content = DynamicColor(Colors.black87, Colors.white70);
|
||||
static const bg = DynamicColor(Colors.white, Colors.black);
|
||||
static const progress = DynamicColor(Colors.black12, Colors.white10);
|
||||
|
||||
@@ -3,6 +3,8 @@ import 'dart:ui';
|
||||
import 'package:toolbox/data/model/ssh/virtual_key.dart';
|
||||
|
||||
class Defaults {
|
||||
const Defaults._();
|
||||
|
||||
// default server details page cards order
|
||||
static const detailCardOrder = [
|
||||
'uptime',
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
import 'package:toolbox/data/model/app/github_id.dart';
|
||||
|
||||
class GithubIds {
|
||||
const GithubIds._();
|
||||
|
||||
// Thanks
|
||||
// If you want to change the url, please open an issue.
|
||||
// If you want to change the url, please open an issue.
|
||||
static const contributors = <GhId>{
|
||||
'its-tom',
|
||||
'RainSunMe',
|
||||
|
||||
@@ -33,6 +33,8 @@ import 'package:highlight/languages/xml.dart';
|
||||
import 'package:highlight/languages/yaml.dart';
|
||||
|
||||
class Highlights {
|
||||
const Highlights._();
|
||||
|
||||
/// - KEY: fileNameSuffix
|
||||
/// - VAL: highlight
|
||||
static final all = {
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
import 'package:logging/logging.dart';
|
||||
|
||||
class Loggers {
|
||||
const Loggers._();
|
||||
|
||||
static final app = Logger('App');
|
||||
static final parse = Logger('Parse');
|
||||
}
|
||||
|
||||
@@ -3,6 +3,8 @@ import 'dart:convert';
|
||||
import 'package:flutter/services.dart';
|
||||
|
||||
class Miscs {
|
||||
const Miscs._();
|
||||
|
||||
/// RegExp for number
|
||||
static final numReg = RegExp(r'\s{1,}');
|
||||
|
||||
|
||||
@@ -4,6 +4,8 @@ import 'package:path_provider/path_provider.dart';
|
||||
import 'package:toolbox/core/utils/platform.dart';
|
||||
|
||||
class Paths {
|
||||
const Paths._();
|
||||
|
||||
static String? _docDir;
|
||||
static String? _sftpDir;
|
||||
static String? _fontDir;
|
||||
|
||||
@@ -8,59 +8,61 @@ import '../model/server/server_status.dart';
|
||||
import '../model/server/conn.dart';
|
||||
import '../model/server/system.dart';
|
||||
|
||||
Memory get _initMemory => const Memory(
|
||||
total: 1,
|
||||
free: 1,
|
||||
cache: 0,
|
||||
avail: 1,
|
||||
);
|
||||
OneTimeCpuStatus get _initOneTimeCpuStatus => OneTimeCpuStatus(
|
||||
'cpu',
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
);
|
||||
Cpus get initCpuStatus => Cpus(
|
||||
[_initOneTimeCpuStatus],
|
||||
[_initOneTimeCpuStatus],
|
||||
);
|
||||
NetSpeedPart get _initNetSpeedPart => NetSpeedPart(
|
||||
'',
|
||||
BigInt.zero,
|
||||
BigInt.zero,
|
||||
0,
|
||||
);
|
||||
NetSpeed get initNetSpeed => NetSpeed(
|
||||
[_initNetSpeedPart],
|
||||
[_initNetSpeedPart],
|
||||
);
|
||||
Swap get _initSwap => const Swap(
|
||||
total: 0,
|
||||
free: 0,
|
||||
cached: 0,
|
||||
);
|
||||
ServerStatus get initStatus => ServerStatus(
|
||||
cpu: initCpuStatus,
|
||||
mem: _initMemory,
|
||||
sysVer: 'Loading...',
|
||||
uptime: '',
|
||||
disk: [
|
||||
const Disk(
|
||||
path: '/',
|
||||
loc: '/',
|
||||
usedPercent: 0,
|
||||
used: '0',
|
||||
size: '0',
|
||||
avail: '0',
|
||||
)
|
||||
],
|
||||
tcp: const Conn(maxConn: 0, active: 0, passive: 0, fail: 0),
|
||||
netSpeed: initNetSpeed,
|
||||
swap: _initSwap,
|
||||
system: SystemType.linux,
|
||||
temps: Temperatures(),
|
||||
);
|
||||
class InitStatus {
|
||||
const InitStatus._();
|
||||
|
||||
static OneTimeCpuStatus get _initOneTimeCpuStatus => OneTimeCpuStatus(
|
||||
'cpu',
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
);
|
||||
static Cpus get cpus => Cpus(
|
||||
[_initOneTimeCpuStatus],
|
||||
[_initOneTimeCpuStatus],
|
||||
);
|
||||
static NetSpeedPart get _initNetSpeedPart => NetSpeedPart(
|
||||
'',
|
||||
BigInt.zero,
|
||||
BigInt.zero,
|
||||
0,
|
||||
);
|
||||
static NetSpeed get netSpeed => NetSpeed(
|
||||
[_initNetSpeedPart],
|
||||
[_initNetSpeedPart],
|
||||
);
|
||||
static ServerStatus get status => ServerStatus(
|
||||
cpu: cpus,
|
||||
mem: const Memory(
|
||||
total: 1,
|
||||
free: 1,
|
||||
cache: 0,
|
||||
avail: 1,
|
||||
),
|
||||
sysVer: 'Loading...',
|
||||
uptime: '',
|
||||
disk: [
|
||||
const Disk(
|
||||
path: '/',
|
||||
loc: '/',
|
||||
usedPercent: 0,
|
||||
used: '0',
|
||||
size: '0',
|
||||
avail: '0',
|
||||
)
|
||||
],
|
||||
tcp: const Conn(maxConn: 0, active: 0, passive: 0, fail: 0),
|
||||
netSpeed: netSpeed,
|
||||
swap: const Swap(
|
||||
total: 0,
|
||||
free: 0,
|
||||
cached: 0,
|
||||
),
|
||||
system: SystemType.linux,
|
||||
temps: Temperatures(),
|
||||
);
|
||||
}
|
||||
|
||||
18
lib/data/res/store.dart
Normal file
18
lib/data/res/store.dart
Normal file
@@ -0,0 +1,18 @@
|
||||
import 'package:toolbox/data/store/docker.dart';
|
||||
import 'package:toolbox/data/store/history.dart';
|
||||
import 'package:toolbox/data/store/private_key.dart';
|
||||
import 'package:toolbox/data/store/server.dart';
|
||||
import 'package:toolbox/data/store/setting.dart';
|
||||
import 'package:toolbox/data/store/snippet.dart';
|
||||
import 'package:toolbox/locator.dart';
|
||||
|
||||
class Stores {
|
||||
const Stores._();
|
||||
|
||||
static final setting = locator<SettingStore>();
|
||||
static final server = locator<ServerStore>();
|
||||
static final docker = locator<DockerStore>();
|
||||
static final history = locator<HistoryStore>();
|
||||
static final key = locator<PrivateKeyStore>();
|
||||
static final snippet = locator<SnippetStore>();
|
||||
}
|
||||
@@ -1,54 +1,57 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:xterm/ui.dart';
|
||||
|
||||
const termDarkTheme = TerminalTheme(
|
||||
cursor: Color.fromARGB(137, 174, 175, 173),
|
||||
selection: Color.fromARGB(147, 174, 175, 173),
|
||||
foreground: Color(0XFFCCCCCC),
|
||||
background: Colors.black,
|
||||
searchHitBackground: Color(0XFFFFFF2B),
|
||||
searchHitBackgroundCurrent: Color(0XFF31FF26),
|
||||
searchHitForeground: Color(0XFF000000),
|
||||
red: Color.fromARGB(255, 194, 54, 33),
|
||||
green: Color.fromARGB(255, 37, 188, 36),
|
||||
yellow: Color.fromARGB(255, 173, 173, 39),
|
||||
blue: Color.fromARGB(255, 73, 46, 225),
|
||||
magenta: Color.fromARGB(255, 211, 56, 211),
|
||||
cyan: Color.fromARGB(255, 51, 187, 200),
|
||||
white: Color.fromARGB(255, 203, 204, 205),
|
||||
brightBlack: Color.fromARGB(255, 129, 131, 131),
|
||||
brightRed: Color.fromARGB(255, 252, 57, 31),
|
||||
brightGreen: Color.fromARGB(255, 49, 231, 34),
|
||||
brightYellow: Color.fromARGB(255, 234, 236, 35),
|
||||
brightBlue: Color.fromARGB(255, 88, 51, 255),
|
||||
brightMagenta: Color.fromARGB(255, 249, 53, 248),
|
||||
brightCyan: Color.fromARGB(255, 20, 240, 240),
|
||||
brightWhite: Color.fromARGB(255, 233, 235, 235),
|
||||
black: Colors.black,
|
||||
);
|
||||
class TerminalThemes {
|
||||
const TerminalThemes._();
|
||||
|
||||
const termLightTheme = TerminalTheme(
|
||||
cursor: Color.fromARGB(153, 174, 175, 173),
|
||||
selection: Color.fromARGB(102, 174, 175, 173),
|
||||
foreground: Color(0XFF000000),
|
||||
background: Color(0XFFFFFFFF),
|
||||
searchHitBackground: Color(0XFFFFFF2B),
|
||||
searchHitBackgroundCurrent: Color(0XFF31FF26),
|
||||
searchHitForeground: Color(0XFF000000),
|
||||
red: Color.fromARGB(255, 194, 54, 33),
|
||||
green: Color.fromARGB(255, 37, 188, 36),
|
||||
yellow: Color.fromARGB(255, 173, 173, 39),
|
||||
blue: Color.fromARGB(255, 73, 46, 225),
|
||||
magenta: Color.fromARGB(255, 211, 56, 211),
|
||||
cyan: Color.fromARGB(255, 51, 187, 200),
|
||||
white: Color.fromARGB(255, 203, 204, 205),
|
||||
brightBlack: Color.fromARGB(255, 129, 131, 131),
|
||||
brightRed: Color.fromARGB(255, 252, 57, 31),
|
||||
brightGreen: Color.fromARGB(255, 49, 231, 34),
|
||||
brightYellow: Color.fromARGB(255, 234, 236, 35),
|
||||
brightBlue: Color.fromARGB(255, 88, 51, 255),
|
||||
brightMagenta: Color.fromARGB(255, 249, 53, 248),
|
||||
brightCyan: Color.fromARGB(255, 20, 240, 240),
|
||||
brightWhite: Color.fromARGB(255, 233, 235, 235),
|
||||
black: Colors.black,
|
||||
);
|
||||
static const dark = TerminalTheme(
|
||||
cursor: Color.fromARGB(137, 174, 175, 173),
|
||||
selection: Color.fromARGB(147, 174, 175, 173),
|
||||
foreground: Color(0XFFCCCCCC),
|
||||
background: Colors.black,
|
||||
searchHitBackground: Color(0XFFFFFF2B),
|
||||
searchHitBackgroundCurrent: Color(0XFF31FF26),
|
||||
searchHitForeground: Color(0XFF000000),
|
||||
red: Color.fromARGB(255, 194, 54, 33),
|
||||
green: Color.fromARGB(255, 37, 188, 36),
|
||||
yellow: Color.fromARGB(255, 173, 173, 39),
|
||||
blue: Color.fromARGB(255, 73, 46, 225),
|
||||
magenta: Color.fromARGB(255, 211, 56, 211),
|
||||
cyan: Color.fromARGB(255, 51, 187, 200),
|
||||
white: Color.fromARGB(255, 203, 204, 205),
|
||||
brightBlack: Color.fromARGB(255, 129, 131, 131),
|
||||
brightRed: Color.fromARGB(255, 252, 57, 31),
|
||||
brightGreen: Color.fromARGB(255, 49, 231, 34),
|
||||
brightYellow: Color.fromARGB(255, 234, 236, 35),
|
||||
brightBlue: Color.fromARGB(255, 88, 51, 255),
|
||||
brightMagenta: Color.fromARGB(255, 249, 53, 248),
|
||||
brightCyan: Color.fromARGB(255, 20, 240, 240),
|
||||
brightWhite: Color.fromARGB(255, 233, 235, 235),
|
||||
black: Colors.black,
|
||||
);
|
||||
static const light = TerminalTheme(
|
||||
cursor: Color.fromARGB(153, 174, 175, 173),
|
||||
selection: Color.fromARGB(102, 174, 175, 173),
|
||||
foreground: Color(0XFF000000),
|
||||
background: Color(0XFFFFFFFF),
|
||||
searchHitBackground: Color(0XFFFFFF2B),
|
||||
searchHitBackgroundCurrent: Color(0XFF31FF26),
|
||||
searchHitForeground: Color(0XFF000000),
|
||||
red: Color.fromARGB(255, 194, 54, 33),
|
||||
green: Color.fromARGB(255, 37, 188, 36),
|
||||
yellow: Color.fromARGB(255, 173, 173, 39),
|
||||
blue: Color.fromARGB(255, 73, 46, 225),
|
||||
magenta: Color.fromARGB(255, 211, 56, 211),
|
||||
cyan: Color.fromARGB(255, 51, 187, 200),
|
||||
white: Color.fromARGB(255, 203, 204, 205),
|
||||
brightBlack: Color.fromARGB(255, 129, 131, 131),
|
||||
brightRed: Color.fromARGB(255, 252, 57, 31),
|
||||
brightGreen: Color.fromARGB(255, 49, 231, 34),
|
||||
brightYellow: Color.fromARGB(255, 234, 236, 35),
|
||||
brightBlue: Color.fromARGB(255, 88, 51, 255),
|
||||
brightMagenta: Color.fromARGB(255, 249, 53, 248),
|
||||
brightCyan: Color.fromARGB(255, 20, 240, 240),
|
||||
brightWhite: Color.fromARGB(255, 233, 235, 235),
|
||||
black: Colors.black,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class UIs {
|
||||
const UIs._();
|
||||
|
||||
/// Font style
|
||||
|
||||
static const textSize9Grey = TextStyle(color: Colors.grey, fontSize: 9);
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
class Urls {
|
||||
const Urls._();
|
||||
|
||||
static const resBase = 'https://res.lolli.tech/serverbox';
|
||||
static const myGithub = 'https://github.com/lollipopkit';
|
||||
static const appHelp = '$myGithub/flutter_server_box#-help';
|
||||
|
||||
Reference in New Issue
Block a user