From e8213d940f13b77108eee2afadec4e5fe24687f1 Mon Sep 17 00:00:00 2001 From: rutriff Date: Mon, 18 Mar 2019 11:34:09 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=B5=D0=BC=D0=BD=D0=BE=D0=B3=D0=BE=20?= =?UTF-8?q?=D0=B2=D0=B0=D0=BB=D0=B8=D0=B4=D0=B0=D1=86=D0=B8=D0=B8=20=D0=BD?= =?UTF-8?q?=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B5=D0=BA,=20=D0=BD=D0=B0?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D1=80,=20=D0=BF=D1=80=D0=B8=20?= =?UTF-8?q?=D0=BF=D0=BE=D1=8F=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B8=20=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D0=BE=D0=B9=20RountToMinutes,=20=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B8=D0=BB=D0=B8=20=D0=BD=D0=B0=200=20=D0=B8=20=D0=BA=D1=80?= =?UTF-8?q?=D1=8D=D1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- JiraTimeBotForm/Configuration/Settings.cs | 86 ++++++++++++++++++++++- JiraTimeBotForm/UI/frmMain.Designer.cs | 1 - JiraTimeBotForm/UI/frmMain.cs | 22 ++++-- JiraTimeBotForm/UI/frmSettings.cs | 15 ++-- 4 files changed, 107 insertions(+), 17 deletions(-) diff --git a/JiraTimeBotForm/Configuration/Settings.cs b/JiraTimeBotForm/Configuration/Settings.cs index 5aaad5f..818875b 100644 --- a/JiraTimeBotForm/Configuration/Settings.cs +++ b/JiraTimeBotForm/Configuration/Settings.cs @@ -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 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(); + 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(settingsText); - var password = new PasswordEncryptionClass().Decrypt(settings.JiraUserName, settings.JiraPassword, settings.JiraUrl); - settings.JiraPassword = password; + Settings settings; + + try + { + settings = JsonConvert.DeserializeObject(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; } diff --git a/JiraTimeBotForm/UI/frmMain.Designer.cs b/JiraTimeBotForm/UI/frmMain.Designer.cs index 8de8523..7adc607 100644 --- a/JiraTimeBotForm/UI/frmMain.Designer.cs +++ b/JiraTimeBotForm/UI/frmMain.Designer.cs @@ -67,7 +67,6 @@ // // tmrStart // - this.tmrStart.Enabled = true; this.tmrStart.Interval = 1500; this.tmrStart.Tick += new System.EventHandler(this.tmrStart_Tick); // diff --git a/JiraTimeBotForm/UI/frmMain.cs b/JiraTimeBotForm/UI/frmMain.cs index 0c295b1..9e38a61 100644 --- a/JiraTimeBotForm/UI/frmMain.cs +++ b/JiraTimeBotForm/UI/frmMain.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.IO; +using System.Net.Configuration; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; @@ -25,6 +25,8 @@ namespace JiraTimeBotForm.UI private readonly ITrayMenu _trayIcon; private CancellationTokenSource _tokenSource; private Settings _settings; + private readonly Action _settingsWindowShow; + private readonly Action _settingsErrorReporter; private CancellationTokenSource GetTokenSource() { @@ -46,13 +48,19 @@ namespace JiraTimeBotForm.UI _trayIcon = _container.Resolve(); _trayIcon.Create(this); - _settings = Settings.Load(); - _job = _container.Resolve(); _log = _container.Resolve(); _tasksProcessors = _container.Resolve(); _controls = new Control[] { txtDummyMode, btnStart, btnMeeting, btnSettings }; + + _settingsWindowShow = () => + { + var frmSettings = new frmSettings(); + frmSettings.ShowDialog(this); + }; + + _settingsErrorReporter = msg => MessageBox.Show(msg, "Загрузка настроек", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);; } private void frmMain_FormClosing(object sender, FormClosingEventArgs e) @@ -62,7 +70,7 @@ namespace JiraTimeBotForm.UI public Settings ReadSettingsAndLock() { - _settings = Settings.Load(); + _settings = Settings.LoadAndCheck(_settingsWindowShow, _settingsErrorReporter); LockUnlock(false); @@ -79,9 +87,13 @@ namespace JiraTimeBotForm.UI btnCancel.Enabled = !enabled; tmrStart.Enabled = enabled; } + private void Form1_Load(object sender, EventArgs e) { - _settings = Settings.Load(); + _settings = Settings.LoadAndCheck(_settingsWindowShow, _settingsErrorReporter); + tmrStart.Enabled = true; + + _log.Info($"Загружен бот для {_settings.JiraUserName}, работаем в {_settings.RepositoryPath}"); } private async void btnStart_Click(object sender, EventArgs e) diff --git a/JiraTimeBotForm/UI/frmSettings.cs b/JiraTimeBotForm/UI/frmSettings.cs index 96beb64..8d78429 100644 --- a/JiraTimeBotForm/UI/frmSettings.cs +++ b/JiraTimeBotForm/UI/frmSettings.cs @@ -1,11 +1,4 @@ using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; using JiraTimeBotForm.Configuration; @@ -21,7 +14,10 @@ namespace JiraTimeBotForm.UI private void frmSettings_Load(object sender, EventArgs e) { var settings = Settings.Load(); - SetSettings(settings); + if (settings != null) + { + SetSettings(settings); + } } private void SetSettings(Settings settings) @@ -64,7 +60,10 @@ namespace JiraTimeBotForm.UI { var settings = ReadSettingsAndLock(); settings.Save(); + MessageBox.Show("Настройки сохранены."); + + DialogResult = DialogResult.OK; this.Close(); }