Немного валидации настроек, например, при появлении новой RountToMinutes, делили на 0 и крэш

This commit is contained in:
rutriff
2019-03-18 11:34:09 +03:00
parent 0fcce1bf1c
commit e8213d940f
4 changed files with 107 additions and 17 deletions
+83 -3
View File
@@ -1,5 +1,7 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Windows.Forms;
using Newtonsoft.Json;
@@ -19,6 +21,70 @@ namespace JiraTimeBotForm.Configuration
public TimeSpan ActivationTime { get; set; }
public bool AddCommentsToWorklog { get; set; }
public static Settings LoadAndCheck(Action settingsSource, Action<string> errorMessageReporter)
{
Settings settings;
bool settingsValid;
do
{
settings = Load();
settingsValid = SettingsIsValid(settings, out var message);
if (!settingsValid)
{
if (!string.IsNullOrEmpty(message))
{
errorMessageReporter(message);
}
settingsSource();
}
} while (!settingsValid);
return settings;
}
private static bool SettingsIsValid(Settings settings, out string message)
{
if (settings == null)
{
message = "Заполните настройки";
return false;
}
var errors = new List<string>();
message = null;
if (settings.RountToMinutes == default(int))
{
errors.Add("Укажите округление времени, например, 10 минут");
}
if (string.IsNullOrEmpty(settings.JiraPassword))
{
errors.Add("Укажите Password от Jira");
}
if (string.IsNullOrEmpty(settings.JiraUserName))
{
errors.Add("Укажите UserName от Jira");
}
if (string.IsNullOrEmpty(settings.RepositoryPath) || !Directory.Exists(settings.RepositoryPath))
{
errors.Add("Укажите RepositoryPath");
}
var hasErrors = errors.Any();
if (hasErrors)
{
message = string.Join(Environment.NewLine, errors);
}
return !hasErrors;
}
public static Settings Load()
{
@@ -29,10 +95,24 @@ namespace JiraTimeBotForm.Configuration
}
var settingsText = File.ReadAllText(settingsPath);
var settings = JsonConvert.DeserializeObject<Settings>(settingsText);
var password = new PasswordEncryptionClass().Decrypt(settings.JiraUserName, settings.JiraPassword, settings.JiraUrl);
settings.JiraPassword = password;
Settings settings;
try
{
settings = JsonConvert.DeserializeObject<Settings>(settingsText);
if (settings == null)
{
return null;
}
var password = new PasswordEncryptionClass().Decrypt(settings.JiraUserName, settings.JiraPassword, settings.JiraUrl);
settings.JiraPassword = password;
}
catch (JsonReaderException)
{
return null;
}
return settings;
}