added set value
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
This commit is contained in:
parent
5a19ada15d
commit
cc4991e211
@ -66,6 +66,8 @@ private:
|
||||
|
||||
void handle_post_mount(auto &&req, auto &&res) const;
|
||||
|
||||
void handle_put_set_value_by_name(auto &&req, auto &&res);
|
||||
|
||||
static auto read_process(provider_type prov, std::string_view name,
|
||||
std::string_view command)
|
||||
-> std::vector<std::string>;
|
||||
|
@ -86,6 +86,10 @@ handlers::handlers(mgmt_app_config *config, httplib::Server *server)
|
||||
server->Post("/api/v1/mount",
|
||||
[this](auto &&req, auto &&res) { handle_post_mount(req, res); });
|
||||
|
||||
server->Put("/api/v1/set_value_by_name", [this](auto &&req, auto &&res) {
|
||||
handle_put_set_value_by_name(req, res);
|
||||
});
|
||||
|
||||
event_system::instance().start();
|
||||
|
||||
static std::atomic<httplib::Server *> this_server{server_};
|
||||
@ -215,6 +219,18 @@ void handlers::handle_post_mount(auto &&req, auto &&res) const {
|
||||
res.status = http_error_codes::ok;
|
||||
}
|
||||
|
||||
void handlers::handle_put_set_value_by_name(auto &&req, auto &&res) {
|
||||
auto type = req.get_param_value("type");
|
||||
auto name = req.get_param_value("name");
|
||||
auto prov = provider_type_from_string(type);
|
||||
|
||||
auto key = req.get_param_value("key");
|
||||
auto value = req.get_param_value("value");
|
||||
|
||||
read_process(prov, name, fmt::format("-set {} \'{}\'", key, value));
|
||||
res.status = http_error_codes::ok;
|
||||
}
|
||||
|
||||
auto handlers::read_process(provider_type prov, std::string_view name,
|
||||
std::string_view command)
|
||||
-> std::vector<std::string> {
|
||||
|
@ -2,8 +2,8 @@ import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:repertory/constants.dart' as constants;
|
||||
import 'package:repertory/helpers.dart';
|
||||
import 'package:repertory/models/mount.dart';
|
||||
import 'package:repertory/models/mount_list.dart';
|
||||
import 'package:repertory/types/mount_config.dart';
|
||||
import 'package:repertory/widgets/mount_list_widget.dart';
|
||||
import 'package:repertory/widgets/mount_settings.dart';
|
||||
|
||||
@ -40,17 +40,17 @@ class MyApp extends StatelessWidget {
|
||||
return null;
|
||||
}
|
||||
|
||||
final mountConfig = settings.arguments as MountConfig;
|
||||
final mount = settings.arguments as Mount;
|
||||
return MaterialPageRoute(
|
||||
builder: (context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
|
||||
title: Text(
|
||||
'${initialCaps(mountConfig.type)} [${formatMountName(mountConfig.type, mountConfig.name)}] Settings',
|
||||
'${initialCaps(mount.type)} [${formatMountName(mount.type, mount.name)}] Settings',
|
||||
),
|
||||
),
|
||||
body: MountSettingsWidget(config: mountConfig),
|
||||
body: MountSettingsWidget(mount: mount),
|
||||
);
|
||||
},
|
||||
);
|
||||
|
@ -64,4 +64,16 @@ class Mount with ChangeNotifier {
|
||||
await _fetch();
|
||||
return _fetchStatus();
|
||||
}
|
||||
|
||||
Future<void> setValue(String key, String value) async {
|
||||
await http.put(
|
||||
Uri.parse(
|
||||
Uri.encodeFull(
|
||||
'${Uri.base.origin}/api/v1/set_value_by_name?name=$name&type=$type&key=$key&value=$value',
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
return refresh();
|
||||
}
|
||||
}
|
||||
|
@ -1,18 +1,21 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:collection/collection.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:repertory/types/mount_config.dart';
|
||||
import 'package:repertory/models/mount.dart';
|
||||
import 'package:settings_ui/settings_ui.dart';
|
||||
|
||||
class MountSettingsWidget extends StatefulWidget {
|
||||
final MountConfig config;
|
||||
const MountSettingsWidget({super.key, required this.config});
|
||||
final Mount mount;
|
||||
const MountSettingsWidget({super.key, required this.mount});
|
||||
|
||||
@override
|
||||
State<MountSettingsWidget> createState() => _MountSettingsWidgetState();
|
||||
}
|
||||
|
||||
class _MountSettingsWidgetState extends State<MountSettingsWidget> {
|
||||
Map<String, dynamic>? _settings;
|
||||
Map<String, dynamic> _settings = {};
|
||||
|
||||
void _addBooleanSetting(list, root, key, value) {
|
||||
list.add(
|
||||
@ -22,12 +25,12 @@ class _MountSettingsWidgetState extends State<MountSettingsWidget> {
|
||||
initialValue: (value as bool),
|
||||
onPressed: (_) {
|
||||
setState(() {
|
||||
root?[key] = !value;
|
||||
root[key] = !value;
|
||||
});
|
||||
},
|
||||
onToggle: (bool nextValue) {
|
||||
setState(() {
|
||||
root?[key] = nextValue;
|
||||
root[key] = nextValue;
|
||||
});
|
||||
},
|
||||
),
|
||||
@ -57,7 +60,7 @@ class _MountSettingsWidgetState extends State<MountSettingsWidget> {
|
||||
child: Text('OK'),
|
||||
onPressed: () {
|
||||
setState(() {
|
||||
root?[key] = int.parse(updatedValue);
|
||||
root[key] = int.parse(updatedValue);
|
||||
});
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
@ -98,7 +101,7 @@ class _MountSettingsWidgetState extends State<MountSettingsWidget> {
|
||||
value: value.toString(),
|
||||
onChanged: (newValue) {
|
||||
setState(() {
|
||||
root?[key] = int.parse(newValue ?? defaultValue.toString());
|
||||
root[key] = int.parse(newValue ?? defaultValue.toString());
|
||||
});
|
||||
},
|
||||
items:
|
||||
@ -119,7 +122,7 @@ class _MountSettingsWidgetState extends State<MountSettingsWidget> {
|
||||
value: value,
|
||||
onChanged: (newValue) {
|
||||
setState(() {
|
||||
root?[key] = newValue;
|
||||
root[key] = newValue;
|
||||
});
|
||||
},
|
||||
items:
|
||||
@ -164,7 +167,7 @@ class _MountSettingsWidgetState extends State<MountSettingsWidget> {
|
||||
child: Text('OK'),
|
||||
onPressed: () {
|
||||
setState(() {
|
||||
root?[key] = updatedValue;
|
||||
root[key] = updatedValue;
|
||||
});
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
@ -196,7 +199,7 @@ class _MountSettingsWidgetState extends State<MountSettingsWidget> {
|
||||
List<SettingsTile> s3ConfigSettings = [];
|
||||
List<SettingsTile> siaConfigSettings = [];
|
||||
|
||||
_settings?.forEach((key, value) {
|
||||
_settings.forEach((key, value) {
|
||||
if (key == "ApiAuth") {
|
||||
_addPasswordSetting(commonSettings, _settings, key, value);
|
||||
} else if (key == "ApiPort") {
|
||||
@ -256,14 +259,14 @@ class _MountSettingsWidgetState extends State<MountSettingsWidget> {
|
||||
if (subKey == "EncryptionToken") {
|
||||
_addPasswordSetting(
|
||||
encryptConfigSettings,
|
||||
_settings?[key],
|
||||
_settings[key],
|
||||
subKey,
|
||||
subValue,
|
||||
);
|
||||
} else if (subKey == "Path") {
|
||||
_addStringSetting(
|
||||
encryptConfigSettings,
|
||||
_settings?[key],
|
||||
_settings[key],
|
||||
subKey,
|
||||
subValue,
|
||||
Icons.folder,
|
||||
@ -275,7 +278,7 @@ class _MountSettingsWidgetState extends State<MountSettingsWidget> {
|
||||
if (subKey == "AgentString") {
|
||||
_addStringSetting(
|
||||
hostConfigSettings,
|
||||
_settings?[key],
|
||||
_settings[key],
|
||||
subKey,
|
||||
subValue,
|
||||
Icons.support_agent,
|
||||
@ -283,21 +286,21 @@ class _MountSettingsWidgetState extends State<MountSettingsWidget> {
|
||||
} else if (subKey == "ApiPassword") {
|
||||
_addPasswordSetting(
|
||||
hostConfigSettings,
|
||||
_settings?[key],
|
||||
_settings[key],
|
||||
subKey,
|
||||
subValue,
|
||||
);
|
||||
} else if (subKey == "ApiPort") {
|
||||
_addIntSetting(
|
||||
hostConfigSettings,
|
||||
_settings?[key],
|
||||
_settings[key],
|
||||
subKey,
|
||||
subValue,
|
||||
);
|
||||
} else if (subKey == "ApiUser") {
|
||||
_addStringSetting(
|
||||
hostConfigSettings,
|
||||
_settings?[key],
|
||||
_settings[key],
|
||||
subKey,
|
||||
subValue,
|
||||
Icons.person,
|
||||
@ -305,7 +308,7 @@ class _MountSettingsWidgetState extends State<MountSettingsWidget> {
|
||||
} else if (subKey == "HostNameOrIp") {
|
||||
_addStringSetting(
|
||||
hostConfigSettings,
|
||||
_settings?[key],
|
||||
_settings[key],
|
||||
subKey,
|
||||
subValue,
|
||||
Icons.computer,
|
||||
@ -313,7 +316,7 @@ class _MountSettingsWidgetState extends State<MountSettingsWidget> {
|
||||
} else if (subKey == "Path") {
|
||||
_addStringSetting(
|
||||
hostConfigSettings,
|
||||
_settings?[key],
|
||||
_settings[key],
|
||||
subKey,
|
||||
subValue,
|
||||
Icons.route,
|
||||
@ -321,7 +324,7 @@ class _MountSettingsWidgetState extends State<MountSettingsWidget> {
|
||||
} else if (subKey == "Protocol") {
|
||||
_addListSetting(
|
||||
hostConfigSettings,
|
||||
_settings?[key],
|
||||
_settings[key],
|
||||
subKey,
|
||||
subValue,
|
||||
["http", "https"],
|
||||
@ -330,7 +333,7 @@ class _MountSettingsWidgetState extends State<MountSettingsWidget> {
|
||||
} else if (subKey == "TimeoutMs") {
|
||||
_addIntSetting(
|
||||
hostConfigSettings,
|
||||
_settings?[key],
|
||||
_settings[key],
|
||||
subKey,
|
||||
subValue,
|
||||
);
|
||||
@ -341,21 +344,21 @@ class _MountSettingsWidgetState extends State<MountSettingsWidget> {
|
||||
if (subKey == "ApiPort") {
|
||||
_addIntSetting(
|
||||
remoteConfigSettings,
|
||||
_settings?[key],
|
||||
_settings[key],
|
||||
subKey,
|
||||
subValue,
|
||||
);
|
||||
} else if (subKey == "EncryptionToken") {
|
||||
_addPasswordSetting(
|
||||
remoteConfigSettings,
|
||||
_settings?[key],
|
||||
_settings[key],
|
||||
subKey,
|
||||
subValue,
|
||||
);
|
||||
} else if (subKey == "HostNameOrIp") {
|
||||
_addStringSetting(
|
||||
remoteConfigSettings,
|
||||
_settings?[key],
|
||||
_settings[key],
|
||||
subKey,
|
||||
subValue,
|
||||
Icons.computer,
|
||||
@ -363,21 +366,21 @@ class _MountSettingsWidgetState extends State<MountSettingsWidget> {
|
||||
} else if (subKey == "MaxConnections") {
|
||||
_addIntSetting(
|
||||
remoteConfigSettings,
|
||||
_settings?[key],
|
||||
_settings[key],
|
||||
subKey,
|
||||
subValue,
|
||||
);
|
||||
} else if (subKey == "ReceiveTimeoutMs") {
|
||||
_addIntSetting(
|
||||
remoteConfigSettings,
|
||||
_settings?[key],
|
||||
_settings[key],
|
||||
subKey,
|
||||
subValue,
|
||||
);
|
||||
} else if (subKey == "SendTimeoutMs") {
|
||||
_addIntSetting(
|
||||
remoteConfigSettings,
|
||||
_settings?[key],
|
||||
_settings[key],
|
||||
subKey,
|
||||
subValue,
|
||||
);
|
||||
@ -387,26 +390,26 @@ class _MountSettingsWidgetState extends State<MountSettingsWidget> {
|
||||
value.forEach((subKey, subValue) {
|
||||
if (subKey == "Enable") {
|
||||
List<SettingsTile> tempSettings = [];
|
||||
_addBooleanSetting(tempSettings, _settings?[key], subKey, subValue);
|
||||
_addBooleanSetting(tempSettings, _settings[key], subKey, subValue);
|
||||
remoteMountSettings.insertAll(0, tempSettings);
|
||||
} else if (subKey == "ApiPort") {
|
||||
_addIntSetting(
|
||||
remoteMountSettings,
|
||||
_settings?[key],
|
||||
_settings[key],
|
||||
subKey,
|
||||
subValue,
|
||||
);
|
||||
} else if (subKey == "ClientPoolSize") {
|
||||
_addIntSetting(
|
||||
remoteMountSettings,
|
||||
_settings?[key],
|
||||
_settings[key],
|
||||
subKey,
|
||||
subValue,
|
||||
);
|
||||
} else if (subKey == "EncryptionToken") {
|
||||
_addPasswordSetting(
|
||||
remoteMountSettings,
|
||||
_settings?[key],
|
||||
_settings[key],
|
||||
subKey,
|
||||
subValue,
|
||||
);
|
||||
@ -417,14 +420,14 @@ class _MountSettingsWidgetState extends State<MountSettingsWidget> {
|
||||
if (subKey == "AccessKey") {
|
||||
_addPasswordSetting(
|
||||
s3ConfigSettings,
|
||||
_settings?[key],
|
||||
_settings[key],
|
||||
subKey,
|
||||
subValue,
|
||||
);
|
||||
} else if (subKey == "Bucket") {
|
||||
_addStringSetting(
|
||||
s3ConfigSettings,
|
||||
_settings?[key],
|
||||
_settings[key],
|
||||
subKey,
|
||||
subValue,
|
||||
Icons.folder,
|
||||
@ -432,14 +435,14 @@ class _MountSettingsWidgetState extends State<MountSettingsWidget> {
|
||||
} else if (subKey == "EncryptionToken") {
|
||||
_addPasswordSetting(
|
||||
s3ConfigSettings,
|
||||
_settings?[key],
|
||||
_settings[key],
|
||||
subKey,
|
||||
subValue,
|
||||
);
|
||||
} else if (subKey == "Region") {
|
||||
_addStringSetting(
|
||||
s3ConfigSettings,
|
||||
_settings?[key],
|
||||
_settings[key],
|
||||
subKey,
|
||||
subValue,
|
||||
Icons.map,
|
||||
@ -447,16 +450,16 @@ class _MountSettingsWidgetState extends State<MountSettingsWidget> {
|
||||
} else if (subKey == "SecretKey") {
|
||||
_addPasswordSetting(
|
||||
s3ConfigSettings,
|
||||
_settings?[key],
|
||||
_settings[key],
|
||||
subKey,
|
||||
subValue,
|
||||
);
|
||||
} else if (subKey == "TimeoutMs") {
|
||||
_addIntSetting(s3ConfigSettings, _settings?[key], subKey, subValue);
|
||||
_addIntSetting(s3ConfigSettings, _settings[key], subKey, subValue);
|
||||
} else if (subKey == "URL") {
|
||||
_addStringSetting(
|
||||
s3ConfigSettings,
|
||||
_settings?[key],
|
||||
_settings[key],
|
||||
subKey,
|
||||
subValue,
|
||||
Icons.http,
|
||||
@ -464,14 +467,14 @@ class _MountSettingsWidgetState extends State<MountSettingsWidget> {
|
||||
} else if (subKey == "UsePathStyle") {
|
||||
_addBooleanSetting(
|
||||
s3ConfigSettings,
|
||||
_settings?[key],
|
||||
_settings[key],
|
||||
subKey,
|
||||
subValue,
|
||||
);
|
||||
} else if (subKey == "UseRegionInURL") {
|
||||
_addBooleanSetting(
|
||||
s3ConfigSettings,
|
||||
_settings?[key],
|
||||
_settings[key],
|
||||
subKey,
|
||||
subValue,
|
||||
);
|
||||
@ -482,7 +485,7 @@ class _MountSettingsWidgetState extends State<MountSettingsWidget> {
|
||||
if (subKey == "Bucket") {
|
||||
_addStringSetting(
|
||||
siaConfigSettings,
|
||||
_settings?[key],
|
||||
_settings[key],
|
||||
subKey,
|
||||
subValue,
|
||||
Icons.folder,
|
||||
@ -524,7 +527,7 @@ class _MountSettingsWidgetState extends State<MountSettingsWidget> {
|
||||
SettingsSection(
|
||||
title: const Text('Remote Mount'),
|
||||
tiles:
|
||||
_settings?["RemoteMount"]["Enable"] as bool
|
||||
_settings["RemoteMount"]["Enable"] as bool
|
||||
? remoteMountSettings
|
||||
: [remoteMountSettings[0]],
|
||||
),
|
||||
@ -533,9 +536,33 @@ class _MountSettingsWidgetState extends State<MountSettingsWidget> {
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
var settings = widget.mount.mountConfig.settings;
|
||||
if (!DeepCollectionEquality().equals(_settings, settings)) {
|
||||
_settings.forEach((key, value) {
|
||||
if (!DeepCollectionEquality().equals(settings[key], value)) {
|
||||
if (value is Map<String, dynamic>) {
|
||||
value.forEach((subKey, subValue) {
|
||||
if (!DeepCollectionEquality().equals(
|
||||
settings[key][subKey],
|
||||
subValue,
|
||||
)) {
|
||||
widget.mount.setValue('$key.$subKey', subValue.toString());
|
||||
}
|
||||
});
|
||||
} else {
|
||||
widget.mount.setValue(key, value.toString());
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
_settings = Map.from(widget.config.settings);
|
||||
_settings = jsonDecode(jsonEncode(widget.mount.mountConfig.settings));
|
||||
super.initState();
|
||||
}
|
||||
}
|
||||
|
@ -38,11 +38,7 @@ class _MountWidgetState extends State<MountWidget> {
|
||||
leading: IconButton(
|
||||
icon: Icon(Icons.settings, color: subTextColor),
|
||||
onPressed: () {
|
||||
Navigator.pushNamed(
|
||||
context,
|
||||
'/settings',
|
||||
arguments: mount.mountConfig,
|
||||
);
|
||||
Navigator.pushNamed(context, '/settings', arguments: mount);
|
||||
},
|
||||
),
|
||||
subtitle:
|
||||
|
Loading…
x
Reference in New Issue
Block a user