mirror of
https://github.com/lollipopkit/flutter_server_box.git
synced 2025-12-18 07:44:26 +01:00
opt.: mem usage
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user