opt.: mem usage

This commit is contained in:
lollipopkit
2023-09-13 15:22:48 +08:00
parent 278d5984b2
commit eb158e63a2
44 changed files with 333 additions and 360 deletions

View File

@@ -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)),
));
}

View File

@@ -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;
}

View File

@@ -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();
}
}

View File

@@ -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);

View File

@@ -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();

View File

@@ -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);