mirror of
https://github.com/rustdesk/rustdesk.git
synced 2024-12-29 16:27:55 +08:00
4ee0fd9676
Signed-off-by: fufesou <shuanglongchen@yeah.net>
111 lines
2.6 KiB
Dart
111 lines
2.6 KiB
Dart
import 'package:flutter/material.dart';
|
|
import './common.dart';
|
|
import './manager.dart';
|
|
|
|
final Map<String, LocationModel> _locationModels = {};
|
|
final Map<String, OptionModel> _optionModels = {};
|
|
|
|
class OptionModel with ChangeNotifier {
|
|
String? v;
|
|
|
|
String? get value => v;
|
|
set value(String? v) {
|
|
this.v = v;
|
|
notifyListeners();
|
|
}
|
|
|
|
static String key(String location, PluginId id, String peer, String k) =>
|
|
'$location|$id|$peer|$k';
|
|
}
|
|
|
|
class PluginModel with ChangeNotifier {
|
|
final List<UiType> uiList = [];
|
|
final Map<String, String> opts = {};
|
|
|
|
void add(List<UiType> uiList) {
|
|
bool found = false;
|
|
for (var ui in uiList) {
|
|
for (int i = 0; i < this.uiList.length; i++) {
|
|
if (this.uiList[i].key == ui.key) {
|
|
this.uiList[i] = ui;
|
|
found = true;
|
|
}
|
|
}
|
|
if (!found) {
|
|
this.uiList.add(ui);
|
|
}
|
|
}
|
|
notifyListeners();
|
|
}
|
|
|
|
String? getOpt(String key) => opts.remove(key);
|
|
|
|
bool get isEmpty => uiList.isEmpty;
|
|
}
|
|
|
|
class LocationModel with ChangeNotifier {
|
|
final Map<PluginId, PluginModel> pluginModels = {};
|
|
|
|
void add(PluginId id, List<UiType> uiList) {
|
|
if (pluginModels[id] != null) {
|
|
pluginModels[id]!.add(uiList);
|
|
} else {
|
|
var model = PluginModel();
|
|
model.add(uiList);
|
|
pluginModels[id] = model;
|
|
notifyListeners();
|
|
}
|
|
}
|
|
|
|
void clear() {
|
|
pluginModels.clear();
|
|
notifyListeners();
|
|
}
|
|
|
|
void remove(PluginId id) {
|
|
pluginModels.remove(id);
|
|
notifyListeners();
|
|
}
|
|
|
|
bool get isEmpty => pluginModels.isEmpty;
|
|
}
|
|
|
|
void addLocationUi(String location, PluginId id, List<UiType> uiList) {
|
|
if (_locationModels[location] == null) {
|
|
_locationModels[location] = LocationModel();
|
|
}
|
|
_locationModels[location]?.add(id, uiList);
|
|
}
|
|
|
|
LocationModel? getLocationModel(String location) => _locationModels[location];
|
|
|
|
PluginModel? getPluginModel(String location, PluginId id) =>
|
|
_locationModels[location]?.pluginModels[id];
|
|
|
|
void clearPlugin(PluginId pluginId) {
|
|
for (var element in _locationModels.values) {
|
|
element.remove(pluginId);
|
|
}
|
|
}
|
|
|
|
void clearLocations() {
|
|
for (var element in _locationModels.values) {
|
|
element.clear();
|
|
}
|
|
}
|
|
|
|
OptionModel getOptionModel(
|
|
String location, PluginId pluginId, String peer, String key) {
|
|
final k = OptionModel.key(location, pluginId, peer, key);
|
|
if (_optionModels[k] == null) {
|
|
_optionModels[k] = OptionModel();
|
|
}
|
|
return _optionModels[k]!;
|
|
}
|
|
|
|
void updateOption(
|
|
String location, PluginId id, String peer, String key, String value) {
|
|
final k = OptionModel.key(location, id, peer, key);
|
|
_optionModels[k]?.value = value;
|
|
}
|