2023-04-20 22:53:43 +08:00
import ' package:flutter/material.dart ' ;
import ' ./common.dart ' ;
2023-05-09 19:47:26 +08:00
import ' ./manager.dart ' ;
2023-04-20 22:53:43 +08:00
2023-04-22 22:21:02 +08:00
final Map < String , LocationModel > _locationModels = { } ;
final Map < String , OptionModel > _optionModels = { } ;
2023-04-21 21:40:34 +08:00
2023-04-21 23:25:00 +08:00
class OptionModel with ChangeNotifier {
String ? v ;
2023-04-21 21:40:34 +08:00
2023-04-21 23:25:00 +08:00
String ? get value = > v ;
set value ( String ? v ) {
this . v = v ;
2023-04-21 21:40:34 +08:00
notifyListeners ( ) ;
}
2023-04-21 23:25:00 +08:00
static String key ( String location , PluginId id , String peer , String k ) = >
' $ location | $ id | $ peer | $ k ' ;
2023-04-21 21:40:34 +08:00
}
2023-04-20 22:53:43 +08:00
class PluginModel with ChangeNotifier {
final List < UiType > uiList = [ ] ;
2023-04-21 21:40:34 +08:00
final Map < String , String > opts = { } ;
2023-04-20 22:53:43 +08:00
2023-05-10 18:58:45 +08:00
void add ( List < UiType > uiList ) {
2023-04-29 12:34:27 +08:00
bool found = false ;
2023-05-10 18:58:45 +08:00
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 ) ;
2023-04-29 12:34:27 +08:00
}
}
2023-04-20 22:53:43 +08:00
notifyListeners ( ) ;
}
2023-04-21 21:40:34 +08:00
String ? getOpt ( String key ) = > opts . remove ( key ) ;
2023-04-20 22:53:43 +08:00
bool get isEmpty = > uiList . isEmpty ;
}
class LocationModel with ChangeNotifier {
final Map < PluginId , PluginModel > pluginModels = { } ;
2023-05-10 18:58:45 +08:00
void add ( PluginId id , List < UiType > uiList ) {
2023-04-20 22:53:43 +08:00
if ( pluginModels [ id ] ! = null ) {
2023-05-10 18:58:45 +08:00
pluginModels [ id ] ! . add ( uiList ) ;
2023-04-20 22:53:43 +08:00
} else {
var model = PluginModel ( ) ;
2023-05-10 18:58:45 +08:00
model . add ( uiList ) ;
2023-04-20 22:53:43 +08:00
pluginModels [ id ] = model ;
notifyListeners ( ) ;
}
}
2023-04-22 22:21:02 +08:00
void clear ( ) {
pluginModels . clear ( ) ;
notifyListeners ( ) ;
}
2023-04-25 15:35:48 +08:00
void remove ( PluginId id ) {
pluginModels . remove ( id ) ;
notifyListeners ( ) ;
}
2023-04-20 22:53:43 +08:00
bool get isEmpty = > pluginModels . isEmpty ;
}
2023-05-10 18:58:45 +08:00
void addLocationUi ( String location , PluginId id , List < UiType > uiList ) {
2023-04-22 22:21:02 +08:00
if ( _locationModels [ location ] = = null ) {
_locationModels [ location ] = LocationModel ( ) ;
}
2023-05-10 18:58:45 +08:00
_locationModels [ location ] ? . add ( id , uiList ) ;
2023-04-22 22:21:02 +08:00
}
2023-04-24 18:45:22 +08:00
LocationModel ? getLocationModel ( String location ) = > _locationModels [ location ] ;
PluginModel ? getPluginModel ( String location , PluginId id ) = >
_locationModels [ location ] ? . pluginModels [ id ] ;
2023-04-22 22:21:02 +08:00
void clearPlugin ( PluginId pluginId ) {
for ( var element in _locationModels . values ) {
2023-04-25 15:35:48 +08:00
element . remove ( pluginId ) ;
2023-04-22 22:21:02 +08:00
}
}
void clearLocations ( ) {
for ( var element in _locationModels . values ) {
element . clear ( ) ;
2023-04-20 22:53:43 +08:00
}
}
2023-04-21 21:40:34 +08:00
2023-04-24 18:45:22 +08:00
OptionModel getOptionModel (
2023-04-21 23:25:00 +08:00
String location , PluginId pluginId , String peer , String key ) {
final k = OptionModel . key ( location , pluginId , peer , key ) ;
2023-04-22 22:21:02 +08:00
if ( _optionModels [ k ] = = null ) {
_optionModels [ k ] = OptionModel ( ) ;
2023-04-21 21:40:34 +08:00
}
2023-04-22 22:21:02 +08:00
return _optionModels [ k ] ! ;
2023-04-21 21:40:34 +08:00
}
void updateOption (
String location , PluginId id , String peer , String key , String value ) {
2023-04-21 23:25:00 +08:00
final k = OptionModel . key ( location , id , peer , key ) ;
2023-04-22 22:21:02 +08:00
_optionModels [ k ] ? . value = value ;
2023-04-21 21:40:34 +08:00
}