Compare commits

...
4 Commits
18 changed files with 173 additions and 55 deletions
+1 -1
View File
@@ -1 +1 @@
1.0.33 1.0.35
+3 -2
View File
@@ -12,12 +12,13 @@
- Путь до репо (Режим Mercurial) - путь до папки, в которую клонируются исходники. - Путь до репо (Режим Mercurial) - путь до папки, в которую клонируются исходники.
- Логин Jira - Логин в Jira (от этого пользователя будем выполнять запросы и вносить время). - Логин Jira - Логин в Jira (от этого пользователя будем выполнять запросы и вносить время).
- Пароль Jira - шифруется через DPAPI. - Пароль Jira - шифруется через DPAPI.
- Mercurial Name (Режим Mercurial) - обязателен к указанию для режима Mercurial - имя пользователя Mercurial, от которого проходят коммиты. - Mercurial Name (Режим Mercurial) - обязателен к указанию для режима Mercurial - имя пользователя Mercurial, от которого проходят коммиты (именно UserName, не E-Mail).
- Округление времени - Для красоты распределения времени тут устанавливается округление. По умолчанию - 15 минут, получим время 1:15, 0:30 итд. Остаток нераспределенного времени будет внесен в самую долгую задачу или же если это невозможно - количество рабочего времени будет увеличено или уменьшено. - Округление времени - Для красоты распределения времени тут устанавливается округление. По умолчанию - 15 минут, получим время 1:15, 0:30 итд. Остаток нераспределенного времени будет внесен в самую долгую задачу или же если это невозможно - количество рабочего времени будет увеличено или уменьшено.
- JQL (Режим Jira) - можно задать свой JQL для поиска задач. Возможные замены: %USER% - Логин Jira, %DATE% дата на которую формируем список. Значнеие по умолчанию: status changed by '%USER%' during ("%DATE%","%DATE%") - JQL (Режим Jira) - можно задать свой JQL для поиска задач. Возможные замены: %USER% - Логин Jira, %DATE% дата на которую формируем список. Значнеие по умолчанию: status changed by '%USER%' during ("%DATE%","%DATE%")
- Задача "учёта времени" - задача, куда будет списываться по 30 минут в день на "затраты на учет времени". Должна содержать знак '-'.
- Время запуска - время автоматического запуска бота. Если была установлена галочка "тестовый прогон" - она будет снята. - Время запуска - время автоматического запуска бота. Если была установлена галочка "тестовый прогон" - она будет снята.
- Добавлять описание (Режим Mercurial) - добавлять ли в описание CommitMessage, если не установлено - добавляются стандартные фразы программистов (типа "написание кода"). - Добавлять описание (Режим Mercurial) - добавлять ли в описание CommitMessage, если не установлено - добавляются стандартные фразы программистов (типа "написание кода").
- Задача "учёта времени" - задача, куда будет списываться по 30 минут в день на "затраты на учет времени". Должна содержать знак '-'. - Заменять время за день - если галочка установлена, то время внесенное пользователем за день будет удалено и заменено на добавленное ботом.
# Скачать # Скачать
Скачать актуальную версию можно тут: https://github.com/monster1025/JiraTimeBot/releases/latest Скачать актуальную версию можно тут: https://github.com/monster1025/JiraTimeBot/releases/latest
@@ -23,6 +23,7 @@ namespace JiraTimeBot.Configuration
public WorkType WorkType { get; set; } public WorkType WorkType { get; set; }
public string JiraQuery { get; set; } public string JiraQuery { get; set; }
public string TimeControlTask { get; set; } public string TimeControlTask { get; set; }
public bool RemoveWorklogsAddedByUser { get; set; }
public static Settings LoadAndCheck(Action settingsSource, Action<string> errorMessageReporter) public static Settings LoadAndCheck(Action settingsSource, Action<string> errorMessageReporter)
{ {
+6 -1
View File
@@ -9,6 +9,8 @@ using JiraTimeBot.TaskTime;
using JiraTimeBot.UI.Tray; using JiraTimeBot.UI.Tray;
using System; using System;
using System.Windows.Forms; using System.Windows.Forms;
using JiraTimeBot.UI;
using JiraTimeBot.UI.Startup;
namespace JiraTimeBot.DI namespace JiraTimeBot.DI
{ {
@@ -50,9 +52,12 @@ namespace JiraTimeBot.DI
_builder.RegisterType<JiraDescriptionSource>().AsSelf().As<IJiraDescriptionSource>(); _builder.RegisterType<JiraDescriptionSource>().AsSelf().As<IJiraDescriptionSource>();
_builder.RegisterType<JiraApi>().AsSelf().AsImplementedInterfaces(); _builder.RegisterType<JiraApi>().AsSelf().AsImplementedInterfaces();
_builder.Register(c => new Job(c.Resolve<IAllMercurialProviders>(), c.Resolve<ITaskTimeCalculator>(), c.Resolve<ILog>())).AsSelf(); _builder.Register(c => new Job(c.Resolve<IAllMercurialProviders>(), c.Resolve<ITaskTimeCalculator>(), c.Resolve<ILog>())).AsSelf();
_builder.RegisterType<AutoStartUp>().AsSelf().AsImplementedInterfaces();
_builder.RegisterType<frmSettings>().AsSelf().AsImplementedInterfaces();
var container = _builder.Build(); var container = _builder.Build();
return container; return container;
} }
+37 -1
View File
@@ -62,7 +62,37 @@ namespace JiraTimeBot.JiraIntegration
} }
} }
public void SetTodayWorklog(List<TaskTimeItem> taskTimeItems, Settings settings, DateTime? date = null, bool dummy = false, bool addCommentsToWorklog = false) public List<Issue> GetWorkloggedIssuesByDate(Settings settings, DateTime? date = null, CancellationToken cancellationToken = default(CancellationToken))
{
date = date.GetValueOrDefault(DateTime.Now.Date);
var jql = "issueFunction in workLogged(\"on %DATE% by '%USER%'\")";
return GetIssuesByJQL(jql, settings, date, cancellationToken);
}
private void RemoveWorklogsAddedByUser(List<TaskTimeItem> taskTimeItems, Settings settings, DateTime? date = null, bool dummy = false, CancellationToken cancellationToken = default(CancellationToken))
{
var alreadyLoggedToday = GetWorkloggedIssuesByDate(settings, date);
foreach (var issue in alreadyLoggedToday)
{
if (!taskTimeItems.Any(f => f.Branch.Equals(issue.Key.Value, StringComparison.InvariantCulture)))
{
_log.Trace($"Удаляю добавленный руками WorkLog для задачи {issue.Key.Value}.");
var workLogs = issue.GetWorklogsAsync(cancellationToken).Result;
var userWorklogs = workLogs.Where(w =>
w.CreateDate.GetValueOrDefault().Date == date && w.Author.Equals(settings.JiraUserName,
StringComparison.InvariantCultureIgnoreCase)).ToList();
foreach (var userWorklog in userWorklogs)
{
if (!dummy)
{
issue.DeleteWorklogAsync(userWorklog, token: cancellationToken);
}
}
}
}
}
public void SetTodayWorklog(List<TaskTimeItem> taskTimeItems, Settings settings, DateTime? date = null, bool dummy = false, bool addCommentsToWorklog = false, CancellationToken cancellationToken = default(CancellationToken))
{ {
var jira = Jira.CreateRestClient(settings.JiraUrl, settings.JiraUserName, settings.JiraPassword); var jira = Jira.CreateRestClient(settings.JiraUrl, settings.JiraUserName, settings.JiraPassword);
@@ -72,6 +102,12 @@ namespace JiraTimeBot.JiraIntegration
} }
date = date.Value.Date; date = date.Value.Date;
//Удаляем добавленные вручную пользователем данные.
if (settings.AddCommentsToWorklog)
{
RemoveWorklogsAddedByUser(taskTimeItems, settings, date, dummy, cancellationToken);
}
foreach (TaskTimeItem taskTimeItem in taskTimeItems) foreach (TaskTimeItem taskTimeItem in taskTimeItems)
{ {
Issue issue = null; Issue issue = null;
@@ -37,6 +37,7 @@ namespace JiraTimeBot.JiraIntegration
var comments = issue.GetCommentsAsync(cancellationToken).Result?.ToList() ?? new List<Comment>(); var comments = issue.GetCommentsAsync(cancellationToken).Result?.ToList() ?? new List<Comment>();
var user = settings.JiraUserName; var user = settings.JiraUserName;
//user = "Zoya.Aleksandridi";
var userComments = comments.Where(f => f.Author.Equals(user, StringComparison.InvariantCultureIgnoreCase)).ToList(); var userComments = comments.Where(f => f.Author.Equals(user, StringComparison.InvariantCultureIgnoreCase)).ToList();
_log.Trace($"Получены комментарии по задаче {issue.Key} ({issue.Type?.Name}): {userComments.Count}."); _log.Trace($"Получены комментарии по задаче {issue.Key} ({issue.Type?.Name}): {userComments.Count}.");
+1
View File
@@ -116,6 +116,7 @@
<Compile Include="UI\frmSettings.Designer.cs"> <Compile Include="UI\frmSettings.Designer.cs">
<DependentUpon>frmSettings.cs</DependentUpon> <DependentUpon>frmSettings.cs</DependentUpon>
</Compile> </Compile>
<Compile Include="UI\Startup\AutoStartUp.cs" />
<Compile Include="UI\Tray\SingleInstance.cs" /> <Compile Include="UI\Tray\SingleInstance.cs" />
<Compile Include="UI\Tray\ITrayMenu.cs" /> <Compile Include="UI\Tray\ITrayMenu.cs" />
<Compile Include="UI\Tray\RestoreFromTray.cs" /> <Compile Include="UI\Tray\RestoreFromTray.cs" />
+1 -1
View File
@@ -71,7 +71,7 @@ namespace JiraTimeBot
continue; continue;
} }
tasksProcessor.Process(date, taskTimes, settings, dummyMode); tasksProcessor.Process(date, taskTimes, settings, dummyMode, cancellationToken);
_log.Info("Готово."); _log.Info("Готово.");
return; return;
-2
View File
@@ -1,7 +1,5 @@
using JiraTimeBot.UI; using JiraTimeBot.UI;
using System; using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Threading; using System.Threading;
using System.Windows.Forms; using System.Windows.Forms;
using JiraTimeBot.UI.Tray; using JiraTimeBot.UI.Tray;
+31 -31
View File
@@ -1,31 +1,31 @@
using System.Reflection; using System.Reflection;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following // General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information // set of attributes. Change these attribute values to modify the information
// associated with an assembly. // associated with an assembly.
[assembly: AssemblyTitle("JiraTimeBot")] [assembly: AssemblyTitle("JiraTimeBot")]
[assembly: AssemblyDescription("")] [assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")] [assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("JiraTimeBot")] [assembly: AssemblyProduct("JiraTimeBot")]
[assembly: AssemblyCopyright("Copyright © 2019")] [assembly: AssemblyCopyright("Copyright © 2019")]
[assembly: AssemblyTrademark("")] [assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")] [assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible // Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from // to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type. // COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)] [assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM // The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("f3b89316-c38c-4ce6-9d88-0b1373cfba1a")] [assembly: Guid("f3b89316-c38c-4ce6-9d88-0b1373cfba1a")]
// Version information for an assembly consists of the following four values: // Version information for an assembly consists of the following four values:
// //
// Major Version // Major Version
// Minor Version // Minor Version
// Build Number // Build Number
// Revision // Revision
// //
// You can specify all the values or you can default the Build and Revision Numbers // You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.33")] [assembly: AssemblyVersion("1.0.35")]
[assembly: AssemblyFileVersion("1.0.33")] [assembly: AssemblyFileVersion("1.0.35")]
[assembly: AssemblyInformationalVersion("1.0.33")] [assembly: AssemblyInformationalVersion("1.0.35")]
@@ -3,7 +3,6 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
using System.Web.UI.WebControls.WebParts;
using JiraTimeBot.Configuration; using JiraTimeBot.Configuration;
using JiraTimeBot.Mercurial.Objects; using JiraTimeBot.Mercurial.Objects;
using JiraTimeBot.TaskTime.Objects; using JiraTimeBot.TaskTime.Objects;
@@ -105,9 +104,21 @@ namespace JiraTimeBot.TaskTime
workTimeItems.First().Time += TimeSpan.FromMinutes(remainMinutes); workTimeItems.First().Time += TimeSpan.FromMinutes(remainMinutes);
} }
PrintTotal(workTimeItems);
return workTimeItems; return workTimeItems;
} }
private void PrintTotal(List<TaskTimeItem> workTimeItems)
{
var totalTime = TimeSpan.Zero;
foreach (var workTimeItem in workTimeItems)
{
totalTime += workTimeItem.Time;
}
_log.Trace($"Итоговое реально проставляемое время: {totalTime}");
}
private decimal RoundTo(decimal value, decimal to = 15, bool up = true) private decimal RoundTo(decimal value, decimal to = 15, bool up = true)
@@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading;
using JiraTimeBot.Configuration; using JiraTimeBot.Configuration;
using JiraTimeBot.TaskTime.Objects; using JiraTimeBot.TaskTime.Objects;
@@ -7,6 +8,6 @@ namespace JiraTimeBot.TasksProcessors
{ {
interface ITasksProcessor interface ITasksProcessor
{ {
void Process(DateTime date, List<TaskTimeItem> taskTimes, Settings settings, bool dummyMode); void Process(DateTime date, List<TaskTimeItem> taskTimes, Settings settings, bool dummyMode, CancellationToken cancellationToken = default(CancellationToken));
} }
} }
@@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading;
using JiraTimeBot.Configuration; using JiraTimeBot.Configuration;
using JiraTimeBot.JiraIntegration; using JiraTimeBot.JiraIntegration;
using JiraTimeBot.TaskTime.Objects; using JiraTimeBot.TaskTime.Objects;
@@ -18,7 +19,7 @@ namespace JiraTimeBot.TasksProcessors
_jiraApi = jiraApi; _jiraApi = jiraApi;
} }
public void Process(DateTime date, List<TaskTimeItem> taskTimes, Settings settings, bool dummyMode) public void Process(DateTime date, List<TaskTimeItem> taskTimes, Settings settings, bool dummyMode, CancellationToken cancellationToken = default(CancellationToken))
{ {
_log.Trace($"На реальную дату {date:dd.MM.yyyy} распределение по задачам:"); _log.Trace($"На реальную дату {date:dd.MM.yyyy} распределение по задачам:");
@@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading;
using JiraTimeBot.Configuration; using JiraTimeBot.Configuration;
using JiraTimeBot.JiraIntegration; using JiraTimeBot.JiraIntegration;
using JiraTimeBot.TaskTime.Objects; using JiraTimeBot.TaskTime.Objects;
@@ -17,7 +18,7 @@ namespace JiraTimeBot.TasksProcessors
_jiraApi = jiraApi; _jiraApi = jiraApi;
} }
public void Process(DateTime date, List<TaskTimeItem> taskTimes, Settings settings, bool dummyMode) public void Process(DateTime date, List<TaskTimeItem> taskTimes, Settings settings, bool dummyMode, CancellationToken cancellationToken = default(CancellationToken))
{ {
_log.Trace($"На реальную дату {date:dd.MM.yyyy} распределение по задачам:"); _log.Trace($"На реальную дату {date:dd.MM.yyyy} распределение по задачам:");
foreach (var taskTime in taskTimes) foreach (var taskTime in taskTimes)
@@ -25,7 +26,7 @@ namespace JiraTimeBot.TasksProcessors
_log.Trace($"- {taskTime.Branch} (коммитов {taskTime.Commits}): {taskTime.Time}"); _log.Trace($"- {taskTime.Branch} (коммитов {taskTime.Commits}): {taskTime.Time}");
} }
_jiraApi.SetTodayWorklog(taskTimes, settings, dummy: dummyMode, addCommentsToWorklog: settings.AddCommentsToWorklog); _jiraApi.SetTodayWorklog(taskTimes, settings, dummy: dummyMode, addCommentsToWorklog: settings.AddCommentsToWorklog, cancellationToken: cancellationToken);
} }
} }
} }
+27
View File
@@ -0,0 +1,27 @@
using System.Windows.Forms;
using Microsoft.Win32;
namespace JiraTimeBot.UI.Startup
{
public class AutoStartUp
{
readonly RegistryKey _rkApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
public bool Get()
{
return _rkApp.GetValue(Application.ProductName) != null;
}
public void Set(bool autoStart)
{
if (autoStart)
{
_rkApp.SetValue(Application.ProductName, Application.ExecutablePath);
}
else
{
_rkApp.DeleteValue(Application.ProductName, false);
}
}
}
}
+4 -3
View File
@@ -11,6 +11,7 @@ using System.IO.Compression;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
using JiraTimeBot.UI.Startup;
// This is the code for your desktop app. // This is the code for your desktop app.
// Press Ctrl+F5 (or go to Debug > Start Without Debugging) to run your app. // Press Ctrl+F5 (or go to Debug > Start Without Debugging) to run your app.
@@ -69,7 +70,7 @@ namespace JiraTimeBot.UI
_settingsWindowShow = () => _settingsWindowShow = () =>
{ {
var frmSettings = new frmSettings(); var frmSettings = new frmSettings(_container.Resolve<AutoStartUp>());
frmSettings.ShowDialog(this); frmSettings.ShowDialog(this);
}; };
_settingsErrorReporter = msg => MessageBox.Show(msg, "Загрузка настроек", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);; _settingsErrorReporter = msg => MessageBox.Show(msg, "Загрузка настроек", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);;
@@ -102,7 +103,7 @@ namespace JiraTimeBot.UI
private void Form1_Load(object sender, EventArgs e) private void Form1_Load(object sender, EventArgs e)
{ {
this.Text = this.Text + " v." + Application.ProductVersion; this.Text = this.Text + " v" + Application.ProductVersion;
PrintStartMessage(); PrintStartMessage();
tmrStart.Enabled = true; tmrStart.Enabled = true;
@@ -201,7 +202,7 @@ namespace JiraTimeBot.UI
private void btnSettings_Click(object sender, EventArgs e) private void btnSettings_Click(object sender, EventArgs e)
{ {
var frm = new frmSettings(); var frm = _container.Resolve<frmSettings>();
frm.ShowDialog(); frm.ShowDialog();
PrintStartMessage(); PrintStartMessage();
+29 -3
View File
@@ -48,6 +48,8 @@
this.txtJQL = new System.Windows.Forms.TextBox(); this.txtJQL = new System.Windows.Forms.TextBox();
this.label8 = new System.Windows.Forms.Label(); this.label8 = new System.Windows.Forms.Label();
this.txtTimeControlTask = new System.Windows.Forms.TextBox(); this.txtTimeControlTask = new System.Windows.Forms.TextBox();
this.chkAutostart = new System.Windows.Forms.CheckBox();
this.chkRemoveAddedByUser = new System.Windows.Forms.CheckBox();
this.SuspendLayout(); this.SuspendLayout();
// //
// label5 // label5
@@ -152,7 +154,7 @@
// chkAddComments // chkAddComments
// //
this.chkAddComments.AutoSize = true; this.chkAddComments.AutoSize = true;
this.chkAddComments.Location = new System.Drawing.Point(56, 267); this.chkAddComments.Location = new System.Drawing.Point(56, 277);
this.chkAddComments.Name = "chkAddComments"; this.chkAddComments.Name = "chkAddComments";
this.chkAddComments.Size = new System.Drawing.Size(133, 17); this.chkAddComments.Size = new System.Drawing.Size(133, 17);
this.chkAddComments.TabIndex = 31; this.chkAddComments.TabIndex = 31;
@@ -161,7 +163,7 @@
// //
// btnSave // btnSave
// //
this.btnSave.Location = new System.Drawing.Point(72, 299); this.btnSave.Location = new System.Drawing.Point(92, 322);
this.btnSave.Name = "btnSave"; this.btnSave.Name = "btnSave";
this.btnSave.Size = new System.Drawing.Size(75, 23); this.btnSave.Size = new System.Drawing.Size(75, 23);
this.btnSave.TabIndex = 32; this.btnSave.TabIndex = 32;
@@ -223,11 +225,33 @@
this.txtTimeControlTask.Size = new System.Drawing.Size(99, 20); this.txtTimeControlTask.Size = new System.Drawing.Size(99, 20);
this.txtTimeControlTask.TabIndex = 38; this.txtTimeControlTask.TabIndex = 38;
// //
// chkAutostart
//
this.chkAutostart.AutoSize = true;
this.chkAutostart.Location = new System.Drawing.Point(56, 254);
this.chkAutostart.Name = "chkAutostart";
this.chkAutostart.Size = new System.Drawing.Size(96, 17);
this.chkAutostart.TabIndex = 40;
this.chkAutostart.Text = "Автозагрузка";
this.chkAutostart.UseVisualStyleBackColor = true;
//
// chkRemoveAddedByUser
//
this.chkRemoveAddedByUser.AutoSize = true;
this.chkRemoveAddedByUser.Location = new System.Drawing.Point(56, 299);
this.chkRemoveAddedByUser.Name = "chkRemoveAddedByUser";
this.chkRemoveAddedByUser.Size = new System.Drawing.Size(153, 17);
this.chkRemoveAddedByUser.TabIndex = 41;
this.chkRemoveAddedByUser.Text = "Заменять время за день";
this.chkRemoveAddedByUser.UseVisualStyleBackColor = true;
//
// frmSettings // frmSettings
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(243, 334); this.ClientSize = new System.Drawing.Size(243, 357);
this.Controls.Add(this.chkRemoveAddedByUser);
this.Controls.Add(this.chkAutostart);
this.Controls.Add(this.label8); this.Controls.Add(this.label8);
this.Controls.Add(this.txtTimeControlTask); this.Controls.Add(this.txtTimeControlTask);
this.Controls.Add(this.label7); this.Controls.Add(this.label7);
@@ -281,5 +305,7 @@
private System.Windows.Forms.TextBox txtJQL; private System.Windows.Forms.TextBox txtJQL;
private System.Windows.Forms.Label label8; private System.Windows.Forms.Label label8;
private System.Windows.Forms.TextBox txtTimeControlTask; private System.Windows.Forms.TextBox txtTimeControlTask;
private System.Windows.Forms.CheckBox chkAutostart;
private System.Windows.Forms.CheckBox chkRemoveAddedByUser;
} }
} }
+12 -5
View File
@@ -1,13 +1,17 @@
using System; using System;
using System.Windows.Forms; using System.Windows.Forms;
using JiraTimeBot.Configuration; using JiraTimeBot.Configuration;
using JiraTimeBot.UI.Startup;
namespace JiraTimeBot.UI namespace JiraTimeBot.UI
{ {
public partial class frmSettings : Form public partial class frmSettings : Form
{ {
public frmSettings() private readonly AutoStartUp _autoStart;
public frmSettings(AutoStartUp autoStart)
{ {
_autoStart = autoStart;
InitializeComponent(); InitializeComponent();
} }
@@ -18,6 +22,8 @@ namespace JiraTimeBot.UI
{ {
SetSettings(settings); SetSettings(settings);
} }
chkAutostart.Checked = _autoStart.Get();
} }
private void SetSettings(Settings settings) private void SetSettings(Settings settings)
@@ -27,11 +33,11 @@ namespace JiraTimeBot.UI
txtMercurialEmail.Text = settings.MercurialAuthorEmail; txtMercurialEmail.Text = settings.MercurialAuthorEmail;
txtRepoPath.Text = settings.RepositoryPath; txtRepoPath.Text = settings.RepositoryPath;
actTime.Text = settings.ActivationTime.ToString("hh\\:mm\\:ss"); actTime.Text = settings.ActivationTime.ToString("hh\\:mm\\:ss");
//txtDummyMode.Checked = settings.DummyMode;
chkAddComments.Checked = settings.AddCommentsToWorklog; chkAddComments.Checked = settings.AddCommentsToWorklog;
txtRoundTo.Text = settings.RountToMinutes.ToString(); txtRoundTo.Text = settings.RountToMinutes.ToString();
cboWorkType.SelectedIndex = (int) settings.WorkType; cboWorkType.SelectedIndex = (int) settings.WorkType;
txtTimeControlTask.Text = settings.TimeControlTask; txtTimeControlTask.Text = settings.TimeControlTask;
chkRemoveAddedByUser.Checked = settings.RemoveWorklogsAddedByUser;
txtJQL.Text = settings.JiraQuery; txtJQL.Text = settings.JiraQuery;
txtJQL.Enabled = settings.WorkType == WorkType.JiraLogs; txtJQL.Enabled = settings.WorkType == WorkType.JiraLogs;
} }
@@ -50,14 +56,14 @@ namespace JiraTimeBot.UI
MercurialAuthorEmail = txtMercurialEmail.Text, MercurialAuthorEmail = txtMercurialEmail.Text,
ActivationTime = TimeSpan.Parse(actTime.Text), ActivationTime = TimeSpan.Parse(actTime.Text),
RepositoryPath = txtRepoPath.Text, RepositoryPath = txtRepoPath.Text,
//DummyMode = txtDummyMode.Checked,
AddCommentsToWorklog = chkAddComments.Checked, AddCommentsToWorklog = chkAddComments.Checked,
RountToMinutes = roundTo, RountToMinutes = roundTo,
WorkType = (WorkType) cboWorkType.SelectedIndex, WorkType = (WorkType) cboWorkType.SelectedIndex,
JiraQuery = txtJQL.Text, JiraQuery = txtJQL.Text,
TimeControlTask = txtTimeControlTask.Text TimeControlTask = txtTimeControlTask.Text,
RemoveWorklogsAddedByUser = chkRemoveAddedByUser.Checked
}; };
//LockUnlock(false); //LockUnlock(false);
return settings; return settings;
@@ -67,6 +73,7 @@ namespace JiraTimeBot.UI
{ {
var settings = ReadSettingsAndLock(); var settings = ReadSettingsAndLock();
settings.Save(); settings.Save();
_autoStart.Set(chkAutostart.Checked);
MessageBox.Show("Настройки сохранены."); MessageBox.Show("Настройки сохранены.");