private void UpdateSettings(ClientRequestInfo requestInfo)
{
if (requestInfo.Request.Arguments.ContainsHelpRequest || requestInfo.Request.Arguments.OrderedArgCount < 3)
{
// We'll display help about the request since we either don't have the required arguments or the user
// has explicitly requested for the help to be displayed for this request type.
StringBuilder helpMessage = new StringBuilder();
helpMessage.Append("Updates the specified setting under the specified category in the config file.");
helpMessage.AppendLine();
helpMessage.AppendLine();
helpMessage.Append(" Usage:");
helpMessage.AppendLine();
helpMessage.Append(" UpdateSettings \"Category Name\" \"Setting Name\" \"Setting Value\" -options");
helpMessage.AppendLine();
helpMessage.AppendLine();
helpMessage.Append(" Options:");
helpMessage.AppendLine();
helpMessage.Append(" -?".PadRight(20));
helpMessage.Append("Displays this help message");
helpMessage.AppendLine();
helpMessage.Append(" -add".PadRight(20));
helpMessage.Append("Adds specified setting to the specified category");
helpMessage.AppendLine();
helpMessage.Append(" -delete".PadRight(20));
helpMessage.Append("Deletes specified setting from the specified category");
helpMessage.AppendLine();
helpMessage.Append(" -reload".PadRight(20));
helpMessage.Append("Causes corresponding component to reload settings");
helpMessage.AppendLine();
helpMessage.Append(" -list".PadRight(20));
helpMessage.Append("Displays list all of the queryable settings");
helpMessage.AppendLine();
helpMessage.AppendLine();
helpMessage.Append("IMPORTANT: Only settings under the categories listed by the \"Settings\" command can be updated.");
helpMessage.AppendLine();
helpMessage.AppendLine();
UpdateStatus(requestInfo.Sender.ClientID, UpdateType.Information, helpMessage.ToString());
}
else
{
string categoryName = requestInfo.Request.Arguments["orderedarg1"];
string settingName = requestInfo.Request.Arguments["orderedarg2"];
string settingValue = requestInfo.Request.Arguments["orderedarg3"];
bool addSetting = requestInfo.Request.Arguments.Exists("add");
bool deleteSetting = requestInfo.Request.Arguments.Exists("delete");
bool reloadSettings = requestInfo.Request.Arguments.Exists("reload");
bool listSettings = requestInfo.Request.Arguments.Exists("list");
IPersistSettings typedComponent;
lock (m_serviceComponents)
{
foreach (object component in m_serviceComponents)
{
typedComponent = component as IPersistSettings;
if ((object)typedComponent == null || string.Compare(categoryName, typedComponent.SettingsCategory, StringComparison.OrdinalIgnoreCase) != 0)
continue;
ConfigurationFile config = ConfigurationFile.Current;
CategorizedSettingsElementCollection settings = config.Settings[categoryName];
CategorizedSettingsElement setting = settings[settingName];
if (addSetting)
{
// Add new setting.
if ((object)setting == null)
{
UpdateStatus(requestInfo.Sender.ClientID, UpdateType.Information, "Attempting to add setting \"{0}\" under category \"{1}\"...\r\n\r\n", settingName, categoryName);
settings.Add(settingName, settingValue);
config.Save();
UpdateStatus(requestInfo.Sender.ClientID, UpdateType.Information, "Successfully added setting \"{0}\" under category \"{1}\".\r\n\r\n", settingName, categoryName);
}
else
{
UpdateStatus(requestInfo.Sender.ClientID, UpdateType.Alarm, "Failed to add setting \"{0}\" under category \"{1}\". Setting already exists.\r\n\r\n", settingName, categoryName);
return;
}
}
else if (deleteSetting)
{
// Delete existing setting.
if ((object)setting != null)
{
UpdateStatus(requestInfo.Sender.ClientID, UpdateType.Information, "Attempting to delete setting \"{0}\" under category \"{1}\"...\r\n\r\n", settingName, categoryName);
settings.Remove(setting);
config.Save();
UpdateStatus(requestInfo.Sender.ClientID, UpdateType.Information, "Successfully deleted setting \"{0}\" under category \"{1}\".\r\n\r\n", settingName, categoryName);
}
else
{
UpdateStatus(requestInfo.Sender.ClientID, UpdateType.Alarm, "Failed to delete setting \"{0}\" under category \"{1}\". Setting does not exist.\r\n\r\n", settingName, categoryName);
return;
}
}
else
{
// Update existing setting.
if ((object)setting != null)
{
UpdateStatus(requestInfo.Sender.ClientID, UpdateType.Information, "Attempting to update setting \"{0}\" under category \"{1}\"...\r\n\r\n", settingName, categoryName);
setting.Value = settingValue;
config.Save();
UpdateStatus(requestInfo.Sender.ClientID, UpdateType.Information, "Successfully updated setting \"{0}\" under category \"{1}\".\r\n\r\n", settingName, categoryName);
}
else
{
UpdateStatus(requestInfo.Sender.ClientID, UpdateType.Alarm, "Failed to update value of setting \"{0}\" under category \"{1}\" . Setting does not exist.\r\n\r\n", settingName, categoryName);
return;
}
}
if (reloadSettings)
{
// The user has requested to reload settings for all the components.
requestInfo.Request = ClientRequest.Parse($"ReloadSettings {categoryName}");
ReloadSettings(requestInfo);
}
if (!listSettings)
return;
// The user has requested to list all of the queryable settings.
requestInfo.Request = ClientRequest.Parse("Settings");
ShowSettings(requestInfo);
return;
}
}
UpdateStatus(requestInfo.Sender.ClientID, UpdateType.Alarm, "Failed to update settings under category \"{0}\". No corresponding component exists.\r\n\r\n", categoryName);
}
}