From 6b7fb9704dd2402b4d1b7b7122a351b3172729d1 Mon Sep 17 00:00:00 2001 From: "d.kislov" Date: Thu, 9 Apr 2020 17:36:31 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=20=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B3=D0=B8=D1=82?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .semver.txt | 2 +- src/JiraTimeBot/Configuration/Settings.cs | 6 +- src/JiraTimeBot/DI/ContainerBuilder.cs | 19 +++--- src/JiraTimeBot/JiraIntegration/JiraApi.cs | 10 +-- .../JiraIntegration/JiraCommitEmulator.cs | 12 ++-- .../JiraIntegration/JiraHistory.cs | 12 ++-- src/JiraTimeBot/JiraTimeBot.csproj | 61 +++++++++++++----- src/JiraTimeBot/Job.cs | 18 +++--- src/JiraTimeBot/Program.cs | 2 +- src/JiraTimeBot/Properties/AssemblyInfo.cs | 62 +++++++++---------- .../GitLog.cs | 17 ++--- .../Interfaces/IAllVcsProviders.cs} | 4 +- .../Interfaces}/IRepositoryLog.cs | 8 +-- .../MercurialLog.cs | 21 ++++--- .../Modifiers/CommitSkipper.cs | 4 +- .../Modifiers/ICommitSkipper.cs | 2 +- .../Modifiers/ITechnicalInfoSkipper.cs | 2 +- .../Modifiers/TechnicalInfoSkipper.cs | 2 +- .../TaskTime/ITaskTimeCalculator.cs | 7 +-- .../TaskTime/Objects/CommitType.cs | 3 +- .../TaskTime/Objects/TaskTimeItem.cs | 2 +- .../TaskTime/TaskTimeByCommitsCalculator.cs | 18 +++--- src/JiraTimeBot/TaskTime/TaskTimeSpread.cs | 8 +-- .../TasksProcessors/ITasksProcessor.cs | 6 +- .../TasksProcessors/MeetingProcessor.cs | 14 ++--- .../TasksProcessors/WorkLogTasksProcessor.cs | 8 +-- src/JiraTimeBot/UI/Startup/AutoStartUp.cs | 4 +- src/JiraTimeBot/UI/Tray/RestoreFromTray.cs | 9 +-- src/JiraTimeBot/UI/Tray/SingleInstance.cs | 11 ++-- src/JiraTimeBot/UI/Tray/TrayMenu.cs | 12 ++-- src/JiraTimeBot/UI/frmMain.cs | 15 +++-- src/JiraTimeBot/UI/frmSettings.cs | 12 ++-- src/JiraTimeBot/Update/GitHubDataObjects.cs | 4 +- src/JiraTimeBot/Update/IUpdater.cs | 4 +- src/JiraTimeBot/Update/Updater.cs | 46 +++++++++----- src/JiraTimeBot/packages.config | 6 +- 36 files changed, 249 insertions(+), 204 deletions(-) rename src/JiraTimeBot/{Mercurial => RepositoryProviders}/GitLog.cs (97%) rename src/JiraTimeBot/{Mercurial/IAllMercurialProviders.cs => RepositoryProviders/Interfaces/IAllVcsProviders.cs} (69%) rename src/JiraTimeBot/{Mercurial => RepositoryProviders/Interfaces}/IRepositoryLog.cs (74%) rename src/JiraTimeBot/{Mercurial => RepositoryProviders}/MercurialLog.cs (93%) rename src/JiraTimeBot/{Mercurial => RepositoryProviders}/Modifiers/CommitSkipper.cs (94%) rename src/JiraTimeBot/{Mercurial => RepositoryProviders}/Modifiers/ICommitSkipper.cs (67%) rename src/JiraTimeBot/{Mercurial => RepositoryProviders}/Modifiers/ITechnicalInfoSkipper.cs (77%) rename src/JiraTimeBot/{Mercurial => RepositoryProviders}/Modifiers/TechnicalInfoSkipper.cs (96%) diff --git a/.semver.txt b/.semver.txt index ac329bf..a747663 100644 --- a/.semver.txt +++ b/.semver.txt @@ -1 +1 @@ -1.0.79 +1.0.80 diff --git a/src/JiraTimeBot/Configuration/Settings.cs b/src/JiraTimeBot/Configuration/Settings.cs index 8100245..cd75d4b 100644 --- a/src/JiraTimeBot/Configuration/Settings.cs +++ b/src/JiraTimeBot/Configuration/Settings.cs @@ -1,9 +1,9 @@ -using System; +using Newtonsoft.Json; +using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Windows.Forms; -using Newtonsoft.Json; namespace JiraTimeBot.Configuration { @@ -46,7 +46,7 @@ namespace JiraTimeBot.Configuration } } while (!settingsValid); - + return settings; } diff --git a/src/JiraTimeBot/DI/ContainerBuilder.cs b/src/JiraTimeBot/DI/ContainerBuilder.cs index 2cca8fe..e6b201a 100644 --- a/src/JiraTimeBot/DI/ContainerBuilder.cs +++ b/src/JiraTimeBot/DI/ContainerBuilder.cs @@ -2,16 +2,17 @@ using Autofac.Extras.AggregateService; using JiraTimeBot.JiraIntegration; using JiraTimeBot.JiraIntegration.Comments; -using JiraTimeBot.Mercurial; -using JiraTimeBot.Mercurial.Modifiers; +using JiraTimeBot.RepositoryProviders; +using JiraTimeBot.RepositoryProviders.Interfaces; +using JiraTimeBot.RepositoryProviders.Modifiers; using JiraTimeBot.TasksProcessors; using JiraTimeBot.TaskTime; -using JiraTimeBot.UI.Tray; -using System; -using System.Windows.Forms; using JiraTimeBot.UI; using JiraTimeBot.UI.Startup; +using JiraTimeBot.UI.Tray; using JiraTimeBot.Update; +using System; +using System.Windows.Forms; namespace JiraTimeBot.DI { @@ -46,8 +47,8 @@ namespace JiraTimeBot.DI _builder.RegisterType().As().AsSelf(); _builder.RegisterType().As().AsSelf(); _builder.RegisterType().As().AsSelf(); - _builder.RegisterAggregateService(); - + _builder.RegisterAggregateService(); + _builder.RegisterType().As().AsSelf(); _builder.RegisterType().As().AsSelf(); @@ -59,8 +60,8 @@ namespace JiraTimeBot.DI _builder.RegisterType().AsSelf().AsImplementedInterfaces(); _builder.RegisterType().AsSelf().As(); - - _builder.Register(c => new Job(c.Resolve(), c.Resolve(), c.Resolve())).AsSelf(); + + _builder.Register(c => new Job(c.Resolve(), c.Resolve(), c.Resolve())).AsSelf(); _builder.RegisterType().AsSelf().AsImplementedInterfaces(); _builder.RegisterType().AsSelf().AsImplementedInterfaces(); diff --git a/src/JiraTimeBot/JiraIntegration/JiraApi.cs b/src/JiraTimeBot/JiraIntegration/JiraApi.cs index 3e83029..65b4fee 100644 --- a/src/JiraTimeBot/JiraIntegration/JiraApi.cs +++ b/src/JiraTimeBot/JiraIntegration/JiraApi.cs @@ -1,11 +1,11 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using Atlassian.Jira; +using Atlassian.Jira; using JiraTimeBot.Configuration; using JiraTimeBot.JiraIntegration.Comments; using JiraTimeBot.TaskTime.Objects; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; namespace JiraTimeBot.JiraIntegration { diff --git a/src/JiraTimeBot/JiraIntegration/JiraCommitEmulator.cs b/src/JiraTimeBot/JiraIntegration/JiraCommitEmulator.cs index b692aca..213f2ac 100644 --- a/src/JiraTimeBot/JiraIntegration/JiraCommitEmulator.cs +++ b/src/JiraTimeBot/JiraIntegration/JiraCommitEmulator.cs @@ -1,11 +1,11 @@ -using System; +using Atlassian.Jira; +using JiraTimeBot.Configuration; +using JiraTimeBot.RepositoryProviders.Interfaces; +using JiraTimeBot.TaskTime.Objects; +using System; using System.Collections.Generic; using System.Linq; using System.Threading; -using Atlassian.Jira; -using JiraTimeBot.Configuration; -using JiraTimeBot.Mercurial; -using JiraTimeBot.TaskTime.Objects; namespace JiraTimeBot.JiraIntegration @@ -44,7 +44,7 @@ namespace JiraTimeBot.JiraIntegration if (userComments.Any()) { - foreach (var comment in userComments.OrderBy(f=>f.CreatedDate)) + foreach (var comment in userComments.OrderBy(f => f.CreatedDate)) { var item = new TaskTimeItem(issue.Key.Value, issue.Summary, diff --git a/src/JiraTimeBot/JiraIntegration/JiraHistory.cs b/src/JiraTimeBot/JiraIntegration/JiraHistory.cs index 5f539bd..f650ccc 100644 --- a/src/JiraTimeBot/JiraIntegration/JiraHistory.cs +++ b/src/JiraTimeBot/JiraIntegration/JiraHistory.cs @@ -1,11 +1,9 @@ -using System; +using JiraTimeBot.Configuration; +using JiraTimeBot.TaskTime.Objects; +using System; using System.Collections.Generic; using System.Linq; -using System.Text; using System.Threading; -using System.Threading.Tasks; -using JiraTimeBot.Configuration; -using JiraTimeBot.TaskTime.Objects; namespace JiraTimeBot.JiraIntegration { @@ -16,7 +14,7 @@ namespace JiraTimeBot.JiraIntegration CancellationToken cancellationToken = default); } - public class JiraHistory: IJiraHistory + public class JiraHistory : IJiraHistory { private readonly IJiraApi _jiraApi; @@ -59,7 +57,7 @@ namespace JiraTimeBot.JiraIntegration taskType = CommitType.Release; } - resultItems.Add(new TaskTimeItem(issue.Key.Value, description, issue.Project, startDate, totalTime, commits, 1, "", taskType)); + resultItems.Add(new TaskTimeItem(issue.Key.Value, description, issue.Project, startDate, totalTime, commits, 1, "", taskType)); } return resultItems; diff --git a/src/JiraTimeBot/JiraTimeBot.csproj b/src/JiraTimeBot/JiraTimeBot.csproj index 380ae66..d05acc9 100644 --- a/src/JiraTimeBot/JiraTimeBot.csproj +++ b/src/JiraTimeBot/JiraTimeBot.csproj @@ -1,6 +1,6 @@  - + Debug @@ -11,9 +11,24 @@ JiraTimeBot v4.6.1 512 - true + false + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true AnyCPU @@ -25,6 +40,7 @@ prompt 4 7.1 + false AnyCPU @@ -38,9 +54,12 @@ app.ico + + JiraTimeBot.Program + - - ..\packages\Atlassian.SDK.12.1.0\lib\net452\Atlassian.Jira.dll + + ..\packages\Atlassian.SDK.12.1.1\lib\net452\Atlassian.Jira.dll ..\packages\Autofac.5.1.2\lib\net461\Autofac.dll @@ -51,8 +70,8 @@ ..\packages\Castle.Core.4.4.0\lib\net45\Castle.Core.dll - - ..\packages\LibGit2Sharp.0.27.0-preview-0034\lib\net46\LibGit2Sharp.dll + + ..\packages\LibGit2Sharp.0.26.2\lib\net46\LibGit2Sharp.dll ..\packages\Mercurial.Net.1.1.1.607\lib\net35-Client\Mercurial.Net.dll @@ -103,13 +122,13 @@ - - - - - - - + + + + + + + @@ -120,7 +139,7 @@ frmMain.cs - + @@ -177,11 +196,23 @@ + + + False + Microsoft .NET Framework 4.6.1 %28x86 and x64%29 + true + + + False + .NET Framework 3.5 SP1 + false + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - + \ No newline at end of file diff --git a/src/JiraTimeBot/Job.cs b/src/JiraTimeBot/Job.cs index 7731d1d..010aa15 100644 --- a/src/JiraTimeBot/Job.cs +++ b/src/JiraTimeBot/Job.cs @@ -1,23 +1,23 @@ -using System; +using JiraTimeBot.Configuration; +using JiraTimeBot.RepositoryProviders.Interfaces; +using JiraTimeBot.TasksProcessors; +using JiraTimeBot.TaskTime; +using JiraTimeBot.TaskTime.Objects; +using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; -using JiraTimeBot.Configuration; -using JiraTimeBot.Mercurial; -using JiraTimeBot.TasksProcessors; -using JiraTimeBot.TaskTime; -using JiraTimeBot.TaskTime.Objects; namespace JiraTimeBot { class Job { - private readonly IAllMercurialProviders _mercurialProviders; + private readonly IAllRepositoryProviders _mercurialProviders; private readonly ITaskTimeCalculator _taskTimeDiscoverer; private readonly ILog _log; - public Job(IAllMercurialProviders mercurialProviders, ITaskTimeCalculator taskTimeDiscoverer, ILog log) + public Job(IAllRepositoryProviders mercurialProviders, ITaskTimeCalculator taskTimeDiscoverer, ILog log) { _mercurialProviders = mercurialProviders; _taskTimeDiscoverer = taskTimeDiscoverer; @@ -30,7 +30,7 @@ namespace JiraTimeBot return Task.Run(() => DoTheJobImpl(settings, tasksProcessor, dummyMode, cancellationToken), cancellationToken); } - + private void DoTheJobImpl(Settings settings, ITasksProcessor tasksProcessor, bool dummyMode, CancellationToken cancellationToken) { int daysDiff = 0; diff --git a/src/JiraTimeBot/Program.cs b/src/JiraTimeBot/Program.cs index 820cec9..ccaa42a 100644 --- a/src/JiraTimeBot/Program.cs +++ b/src/JiraTimeBot/Program.cs @@ -1,8 +1,8 @@ using JiraTimeBot.UI; +using JiraTimeBot.UI.Tray; using System; using System.Threading; using System.Windows.Forms; -using JiraTimeBot.UI.Tray; namespace JiraTimeBot { diff --git a/src/JiraTimeBot/Properties/AssemblyInfo.cs b/src/JiraTimeBot/Properties/AssemblyInfo.cs index 08ea236..2b71f74 100644 --- a/src/JiraTimeBot/Properties/AssemblyInfo.cs +++ b/src/JiraTimeBot/Properties/AssemblyInfo.cs @@ -1,31 +1,31 @@ -using System.Reflection; -using System.Runtime.InteropServices; -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("JiraTimeBot")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("JiraTimeBot")] -[assembly: AssemblyCopyright("Copyright © 2019")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] -// 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 -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("f3b89316-c38c-4ce6-9d88-0b1373cfba1a")] -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -[assembly: AssemblyVersion("1.0.79")] -[assembly: AssemblyFileVersion("1.0.79")] -[assembly: AssemblyInformationalVersion("1.0.79")] +using System.Reflection; +using System.Runtime.InteropServices; +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("JiraTimeBot")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("JiraTimeBot")] +[assembly: AssemblyCopyright("Copyright © 2020")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +// 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 +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("f3b89316-c38c-4ce6-9d88-0b1373cfba1a")] +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.80")] +[assembly: AssemblyFileVersion("1.0.80")] +[assembly: AssemblyInformationalVersion("1.0.80")] diff --git a/src/JiraTimeBot/Mercurial/GitLog.cs b/src/JiraTimeBot/RepositoryProviders/GitLog.cs similarity index 97% rename from src/JiraTimeBot/Mercurial/GitLog.cs rename to src/JiraTimeBot/RepositoryProviders/GitLog.cs index 3bf5bdc..62e34fc 100644 --- a/src/JiraTimeBot/Mercurial/GitLog.cs +++ b/src/JiraTimeBot/RepositoryProviders/GitLog.cs @@ -1,14 +1,15 @@ -using System; +using JiraTimeBot.Configuration; +using JiraTimeBot.RepositoryProviders.Interfaces; +using JiraTimeBot.RepositoryProviders.Modifiers; +using JiraTimeBot.TaskTime.Objects; +using LibGit2Sharp; +using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading; -using JiraTimeBot.Configuration; -using JiraTimeBot.Mercurial.Modifiers; -using JiraTimeBot.TaskTime.Objects; -using LibGit2Sharp; -namespace JiraTimeBot.Mercurial +namespace JiraTimeBot.RepositoryProviders { public class GitLog : IRepositoryLog { @@ -49,7 +50,7 @@ namespace JiraTimeBot.Mercurial var directoryInfo = new DirectoryInfo(repoDirectory); - + var repo = new LibGit2Sharp.Repository(repoDirectory); if (settings.PullBeforeProcess) @@ -71,7 +72,7 @@ namespace JiraTimeBot.Mercurial _log?.Trace($" - Не получается сделать pull для репозитория: {directoryInfo.Name} - {ex.Message}"); } } - + var allCommits = new List(); var reflog = repo.Refs.Log(repo.Refs.Head); diff --git a/src/JiraTimeBot/Mercurial/IAllMercurialProviders.cs b/src/JiraTimeBot/RepositoryProviders/Interfaces/IAllVcsProviders.cs similarity index 69% rename from src/JiraTimeBot/Mercurial/IAllMercurialProviders.cs rename to src/JiraTimeBot/RepositoryProviders/Interfaces/IAllVcsProviders.cs index d0bc0e8..7904c32 100644 --- a/src/JiraTimeBot/Mercurial/IAllMercurialProviders.cs +++ b/src/JiraTimeBot/RepositoryProviders/Interfaces/IAllVcsProviders.cs @@ -1,8 +1,8 @@ using JiraTimeBot.JiraIntegration; -namespace JiraTimeBot.Mercurial +namespace JiraTimeBot.RepositoryProviders.Interfaces { - public interface IAllMercurialProviders + public interface IAllRepositoryProviders { MercurialLog MercurialLog { get; } GitLog GitLog { get; } diff --git a/src/JiraTimeBot/Mercurial/IRepositoryLog.cs b/src/JiraTimeBot/RepositoryProviders/Interfaces/IRepositoryLog.cs similarity index 74% rename from src/JiraTimeBot/Mercurial/IRepositoryLog.cs rename to src/JiraTimeBot/RepositoryProviders/Interfaces/IRepositoryLog.cs index e2b21ad..5516c86 100644 --- a/src/JiraTimeBot/Mercurial/IRepositoryLog.cs +++ b/src/JiraTimeBot/RepositoryProviders/Interfaces/IRepositoryLog.cs @@ -1,10 +1,10 @@ -using System; +using JiraTimeBot.Configuration; +using JiraTimeBot.TaskTime.Objects; +using System; using System.Collections.Generic; using System.Threading; -using JiraTimeBot.Configuration; -using JiraTimeBot.TaskTime.Objects; -namespace JiraTimeBot.Mercurial +namespace JiraTimeBot.RepositoryProviders.Interfaces { public interface IRepositoryLog { diff --git a/src/JiraTimeBot/Mercurial/MercurialLog.cs b/src/JiraTimeBot/RepositoryProviders/MercurialLog.cs similarity index 93% rename from src/JiraTimeBot/Mercurial/MercurialLog.cs rename to src/JiraTimeBot/RepositoryProviders/MercurialLog.cs index ad61f75..30d1d65 100644 --- a/src/JiraTimeBot/Mercurial/MercurialLog.cs +++ b/src/JiraTimeBot/RepositoryProviders/MercurialLog.cs @@ -1,17 +1,18 @@ -using System; +using JiraTimeBot.Configuration; +using JiraTimeBot.RepositoryProviders.Interfaces; +using JiraTimeBot.RepositoryProviders.Modifiers; +using JiraTimeBot.TaskTime.Objects; +using Mercurial; +using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading; -using JiraTimeBot.Configuration; -using JiraTimeBot.Mercurial.Modifiers; -using JiraTimeBot.TaskTime.Objects; -using Mercurial; -namespace JiraTimeBot.Mercurial +namespace JiraTimeBot.RepositoryProviders { - public class MercurialLog: IRepositoryLog + public class MercurialLog : IRepositoryLog { private readonly ILog _log; private readonly ICommitSkipper _commitSkipper; @@ -23,7 +24,7 @@ namespace JiraTimeBot.Mercurial _commitSkipper = commitSkipper; _technicalInfoSkipper = technicalInfoSkipper; } - + public List GetRepositoryLog(Settings settings, DateTime? date = null, CancellationToken cancellationToken = default) { if (string.IsNullOrEmpty(settings.RepositoryPath) || !Directory.Exists(settings.RepositoryPath)) @@ -68,7 +69,7 @@ namespace JiraTimeBot.Mercurial { Date = date, Users = { settings.MercurialAuthorEmail }, - AdditionalArguments = { "--encoding=utf-8"}, + AdditionalArguments = { "--encoding=utf-8" }, }; var log = repo.Log(logCommand); @@ -93,7 +94,7 @@ namespace JiraTimeBot.Mercurial changeset.Timestamp, TimeSpan.Zero, 1, - changeset.PathActions.Count, + changeset.PathActions.Count, "", GetCommitType(changeset.Branch)); diff --git a/src/JiraTimeBot/Mercurial/Modifiers/CommitSkipper.cs b/src/JiraTimeBot/RepositoryProviders/Modifiers/CommitSkipper.cs similarity index 94% rename from src/JiraTimeBot/Mercurial/Modifiers/CommitSkipper.cs rename to src/JiraTimeBot/RepositoryProviders/Modifiers/CommitSkipper.cs index b80216d..b2b6e2a 100644 --- a/src/JiraTimeBot/Mercurial/Modifiers/CommitSkipper.cs +++ b/src/JiraTimeBot/RepositoryProviders/Modifiers/CommitSkipper.cs @@ -1,6 +1,6 @@ using System; -namespace JiraTimeBot.Mercurial.Modifiers +namespace JiraTimeBot.RepositoryProviders.Modifiers { public class CommitSkipper : ICommitSkipper { @@ -10,7 +10,7 @@ namespace JiraTimeBot.Mercurial.Modifiers { return false; } - + if (!branch.Contains("-")) { return true; diff --git a/src/JiraTimeBot/Mercurial/Modifiers/ICommitSkipper.cs b/src/JiraTimeBot/RepositoryProviders/Modifiers/ICommitSkipper.cs similarity index 67% rename from src/JiraTimeBot/Mercurial/Modifiers/ICommitSkipper.cs rename to src/JiraTimeBot/RepositoryProviders/Modifiers/ICommitSkipper.cs index 7da47ed..cd49413 100644 --- a/src/JiraTimeBot/Mercurial/Modifiers/ICommitSkipper.cs +++ b/src/JiraTimeBot/RepositoryProviders/Modifiers/ICommitSkipper.cs @@ -1,4 +1,4 @@ -namespace JiraTimeBot.Mercurial.Modifiers +namespace JiraTimeBot.RepositoryProviders.Modifiers { public interface ICommitSkipper { diff --git a/src/JiraTimeBot/Mercurial/Modifiers/ITechnicalInfoSkipper.cs b/src/JiraTimeBot/RepositoryProviders/Modifiers/ITechnicalInfoSkipper.cs similarity index 77% rename from src/JiraTimeBot/Mercurial/Modifiers/ITechnicalInfoSkipper.cs rename to src/JiraTimeBot/RepositoryProviders/Modifiers/ITechnicalInfoSkipper.cs index f38a577..5be49ff 100644 --- a/src/JiraTimeBot/Mercurial/Modifiers/ITechnicalInfoSkipper.cs +++ b/src/JiraTimeBot/RepositoryProviders/Modifiers/ITechnicalInfoSkipper.cs @@ -1,4 +1,4 @@ -namespace JiraTimeBot.Mercurial.Modifiers +namespace JiraTimeBot.RepositoryProviders.Modifiers { public interface ITechnicalInfoSkipper { diff --git a/src/JiraTimeBot/Mercurial/Modifiers/TechnicalInfoSkipper.cs b/src/JiraTimeBot/RepositoryProviders/Modifiers/TechnicalInfoSkipper.cs similarity index 96% rename from src/JiraTimeBot/Mercurial/Modifiers/TechnicalInfoSkipper.cs rename to src/JiraTimeBot/RepositoryProviders/Modifiers/TechnicalInfoSkipper.cs index a379f7a..e0c1474 100644 --- a/src/JiraTimeBot/Mercurial/Modifiers/TechnicalInfoSkipper.cs +++ b/src/JiraTimeBot/RepositoryProviders/Modifiers/TechnicalInfoSkipper.cs @@ -1,7 +1,7 @@ using System; using System.Text; -namespace JiraTimeBot.Mercurial.Modifiers +namespace JiraTimeBot.RepositoryProviders.Modifiers { public class TechnicalInfoSkipper : ITechnicalInfoSkipper { diff --git a/src/JiraTimeBot/TaskTime/ITaskTimeCalculator.cs b/src/JiraTimeBot/TaskTime/ITaskTimeCalculator.cs index d2c512a..8fc76c2 100644 --- a/src/JiraTimeBot/TaskTime/ITaskTimeCalculator.cs +++ b/src/JiraTimeBot/TaskTime/ITaskTimeCalculator.cs @@ -1,8 +1,7 @@ -using System.Collections.Generic; -using System.Threading; -using JiraTimeBot.Configuration; - +using JiraTimeBot.Configuration; using JiraTimeBot.TaskTime.Objects; +using System.Collections.Generic; +using System.Threading; namespace JiraTimeBot.TaskTime { diff --git a/src/JiraTimeBot/TaskTime/Objects/CommitType.cs b/src/JiraTimeBot/TaskTime/Objects/CommitType.cs index 51b1806..b98c4b5 100644 --- a/src/JiraTimeBot/TaskTime/Objects/CommitType.cs +++ b/src/JiraTimeBot/TaskTime/Objects/CommitType.cs @@ -3,7 +3,8 @@ namespace JiraTimeBot.TaskTime.Objects { [Flags] - public enum CommitType { + public enum CommitType + { Task = 1, Release = 2 } diff --git a/src/JiraTimeBot/TaskTime/Objects/TaskTimeItem.cs b/src/JiraTimeBot/TaskTime/Objects/TaskTimeItem.cs index 6ccea34..17e0b63 100644 --- a/src/JiraTimeBot/TaskTime/Objects/TaskTimeItem.cs +++ b/src/JiraTimeBot/TaskTime/Objects/TaskTimeItem.cs @@ -14,7 +14,7 @@ namespace JiraTimeBot.TaskTime.Objects public string Project { get; set; } public string ReleaseVersion { get; set; } - public TaskTimeItem(string branch, string description, string project, DateTime startTime, TimeSpan timeSpent, int commits, + public TaskTimeItem(string branch, string description, string project, DateTime startTime, TimeSpan timeSpent, int commits, int filesAffected = 1, string releaseVersion = "", CommitType type = CommitType.Task) { Branch = branch; diff --git a/src/JiraTimeBot/TaskTime/TaskTimeByCommitsCalculator.cs b/src/JiraTimeBot/TaskTime/TaskTimeByCommitsCalculator.cs index 3b1bb17..5b3702a 100644 --- a/src/JiraTimeBot/TaskTime/TaskTimeByCommitsCalculator.cs +++ b/src/JiraTimeBot/TaskTime/TaskTimeByCommitsCalculator.cs @@ -1,15 +1,13 @@ -using System; +using JiraTimeBot.Configuration; +using JiraTimeBot.TaskTime.Objects; +using System; using System.Collections.Generic; using System.Linq; -using System.Text; using System.Threading; -using JiraTimeBot.Configuration; - -using JiraTimeBot.TaskTime.Objects; namespace JiraTimeBot.TaskTime { - public class TaskTimeByCommitsCalculator: ITaskTimeCalculator + public class TaskTimeByCommitsCalculator : ITaskTimeCalculator { private readonly ILog _log; private readonly ITaskTimeSpread _spreadHelper; @@ -53,7 +51,7 @@ namespace JiraTimeBot.TaskTime { var releaseTasks = _spreadHelper.SpreadTime(releaseCommits, 30, 1); workTimeItems.AddRange(releaseTasks); - remainMinutes -= releaseTasks.Sum(f=>(int)f.TimeSpent.TotalMinutes); + remainMinutes -= releaseTasks.Sum(f => (int)f.TimeSpent.TotalMinutes); } var workTasks = _spreadHelper.SpreadTime(taskCommits, remainMinutes, settings.RoundToMinutes); @@ -70,7 +68,7 @@ namespace JiraTimeBot.TaskTime } workTimeItems = workTimeItems.OrderByDescending(f => f.TimeSpent).ToList(); - remainMinutes = minutesPerWorkDay - (int) workTimeItems.Sum(f => f.TimeSpent.TotalMinutes); + remainMinutes = minutesPerWorkDay - (int)workTimeItems.Sum(f => f.TimeSpent.TotalMinutes); if (remainMinutes != 0) { _log.Trace($"Погрешность распределения времени: {remainMinutes}. Добавляю к первой задаче."); @@ -83,7 +81,7 @@ namespace JiraTimeBot.TaskTime PrintTotal(workTimeItems); - return workTimeItems.OrderByDescending(f=>f.TimeSpent).ToList(); + return workTimeItems.OrderByDescending(f => f.TimeSpent).ToList(); } @@ -111,7 +109,7 @@ namespace JiraTimeBot.TaskTime //если кол-во коммитов более чем кол-во интервалов - то уменьшим интервал вдвое. while (totalCommitsCount > (workHours * (60.0 / settings.RoundToMinutes))) { - settings.RoundToMinutes = (int) RoundTo((decimal) (settings.RoundToMinutes / 2.0), 5); + settings.RoundToMinutes = (int)RoundTo((decimal)(settings.RoundToMinutes / 2.0), 5); _log.Info($"Слишком много задач - уменьшаю интервал до {settings.RoundToMinutes}."); if (settings.RoundToMinutes == 5) { diff --git a/src/JiraTimeBot/TaskTime/TaskTimeSpread.cs b/src/JiraTimeBot/TaskTime/TaskTimeSpread.cs index 9f8e5de..7e1f8b1 100644 --- a/src/JiraTimeBot/TaskTime/TaskTimeSpread.cs +++ b/src/JiraTimeBot/TaskTime/TaskTimeSpread.cs @@ -1,8 +1,8 @@ -using System; +using JiraTimeBot.TaskTime.Objects; +using System; using System.Collections.Generic; using System.Linq; using System.Text; -using JiraTimeBot.TaskTime.Objects; namespace JiraTimeBot.TaskTime { @@ -14,7 +14,7 @@ namespace JiraTimeBot.TaskTime bool roundUp = false, bool appendTime = true); } - public class TaskTimeSpread: ITaskTimeSpread + public class TaskTimeSpread : ITaskTimeSpread { public List SpreadTime(List source, int minutes, int roundToMinutes, bool roundUp = false, bool appendTime = true) { @@ -28,7 +28,7 @@ namespace JiraTimeBot.TaskTime var orderedTasks = taskGroup.OrderBy(f => f.StartTime).ToArray(); StringBuilder sb = new StringBuilder(); - foreach (var taskDescription in orderedTasks.Select(f=>f.Description).Distinct()) + foreach (var taskDescription in orderedTasks.Select(f => f.Description).Distinct()) { sb.AppendLine($"- {taskDescription}"); } diff --git a/src/JiraTimeBot/TasksProcessors/ITasksProcessor.cs b/src/JiraTimeBot/TasksProcessors/ITasksProcessor.cs index 8ff5477..3186a87 100644 --- a/src/JiraTimeBot/TasksProcessors/ITasksProcessor.cs +++ b/src/JiraTimeBot/TasksProcessors/ITasksProcessor.cs @@ -1,8 +1,8 @@ -using System; +using JiraTimeBot.Configuration; +using JiraTimeBot.TaskTime.Objects; +using System; using System.Collections.Generic; using System.Threading; -using JiraTimeBot.Configuration; -using JiraTimeBot.TaskTime.Objects; namespace JiraTimeBot.TasksProcessors { diff --git a/src/JiraTimeBot/TasksProcessors/MeetingProcessor.cs b/src/JiraTimeBot/TasksProcessors/MeetingProcessor.cs index 5b6766b..774f9d0 100644 --- a/src/JiraTimeBot/TasksProcessors/MeetingProcessor.cs +++ b/src/JiraTimeBot/TasksProcessors/MeetingProcessor.cs @@ -1,10 +1,10 @@ -using System; +using JiraTimeBot.Configuration; +using JiraTimeBot.JiraIntegration; +using JiraTimeBot.TaskTime.Objects; +using System; using System.Collections.Generic; using System.Linq; using System.Threading; -using JiraTimeBot.Configuration; -using JiraTimeBot.JiraIntegration; -using JiraTimeBot.TaskTime.Objects; namespace JiraTimeBot.TasksProcessors { @@ -24,16 +24,16 @@ namespace JiraTimeBot.TasksProcessors var totalTime = TimeSpan.FromSeconds(taskTimes.Sum(f => f.TimeSpent.TotalSeconds)); _log.Trace($"На реальную дату {realDate:dd.MM.yyyy} распределение по задачам ({totalTime:hh':'mm':'ss}):"); - foreach (var taskTime in taskTimes.Where(f=>f.Type.HasFlag(CommitType.Task)).OrderByDescending(f => f.TimeSpent)) + foreach (var taskTime in taskTimes.Where(f => f.Type.HasFlag(CommitType.Task)).OrderByDescending(f => f.TimeSpent)) { var taskName = _jiraApi.GetTaskName(taskTime.Branch, settings); _log.Trace($" - [{taskTime.Branch}, коммитов {taskTime.Commits}]: {taskName} - {taskTime.TimeSpent}"); } - var releases = taskTimes.Where(f => f.Type.HasFlag(CommitType.Release)).GroupBy(f=>f.Description); + var releases = taskTimes.Where(f => f.Type.HasFlag(CommitType.Release)).GroupBy(f => f.Description); foreach (var release in releases) { - var sum = release.Sum(f => (int) f.TimeSpent.TotalMinutes); + var sum = release.Sum(f => (int)f.TimeSpent.TotalMinutes); var description = release.First().Description.Replace(Environment.NewLine, ""); _log.Trace($" - [Release, задач {release.Count()}]: {description} - {TimeSpan.FromMinutes(sum)}"); } diff --git a/src/JiraTimeBot/TasksProcessors/WorkLogTasksProcessor.cs b/src/JiraTimeBot/TasksProcessors/WorkLogTasksProcessor.cs index a97544f..ff29164 100644 --- a/src/JiraTimeBot/TasksProcessors/WorkLogTasksProcessor.cs +++ b/src/JiraTimeBot/TasksProcessors/WorkLogTasksProcessor.cs @@ -1,9 +1,9 @@ -using System; -using System.Collections.Generic; -using System.Threading; -using JiraTimeBot.Configuration; +using JiraTimeBot.Configuration; using JiraTimeBot.JiraIntegration; using JiraTimeBot.TaskTime.Objects; +using System; +using System.Collections.Generic; +using System.Threading; namespace JiraTimeBot.TasksProcessors { diff --git a/src/JiraTimeBot/UI/Startup/AutoStartUp.cs b/src/JiraTimeBot/UI/Startup/AutoStartUp.cs index f6ec89f..1055389 100644 --- a/src/JiraTimeBot/UI/Startup/AutoStartUp.cs +++ b/src/JiraTimeBot/UI/Startup/AutoStartUp.cs @@ -1,5 +1,5 @@ -using System.Windows.Forms; -using Microsoft.Win32; +using Microsoft.Win32; +using System.Windows.Forms; namespace JiraTimeBot.UI.Startup { diff --git a/src/JiraTimeBot/UI/Tray/RestoreFromTray.cs b/src/JiraTimeBot/UI/Tray/RestoreFromTray.cs index 2a7ba20..b066ff7 100644 --- a/src/JiraTimeBot/UI/Tray/RestoreFromTray.cs +++ b/src/JiraTimeBot/UI/Tray/RestoreFromTray.cs @@ -4,13 +4,14 @@ using System.Windows.Forms; namespace JiraTimeBot.UI.Tray { - public static class RestoreFromTray { - [DllImport( "user32.dll" )] - private static extern int ShowWindow( IntPtr hWnd, uint Msg ); + public static class RestoreFromTray + { + [DllImport("user32.dll")] + private static extern int ShowWindow(IntPtr hWnd, uint Msg); private const uint SW_RESTORE = 0x09; - public static void Restore( this Form form ) + public static void Restore(this Form form) { if (form.WindowState == FormWindowState.Minimized) { diff --git a/src/JiraTimeBot/UI/Tray/SingleInstance.cs b/src/JiraTimeBot/UI/Tray/SingleInstance.cs index 8a4f6f3..d52238c 100644 --- a/src/JiraTimeBot/UI/Tray/SingleInstance.cs +++ b/src/JiraTimeBot/UI/Tray/SingleInstance.cs @@ -7,28 +7,29 @@ namespace JiraTimeBot.UI.Tray static class SingleInstance { public static readonly int WM_SHOWFIRSTINSTANCE = RegisterWindowMessage($"WM_SHOWFIRSTINSTANCE|{AssemblyGuid}"); - + public static void ShowFirstInstance() { const int HWND_BROADCAST = 0xffff; PostMessage((IntPtr)HWND_BROADCAST, WM_SHOWFIRSTINSTANCE, IntPtr.Zero, IntPtr.Zero); } - + public static string AssemblyGuid { get { object[] attributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(System.Runtime.InteropServices.GuidAttribute), false); - if (attributes.Length == 0) { + if (attributes.Length == 0) + { return string.Empty; } return ((GuidAttribute)attributes[0]).Value; } } - + [DllImport("user32")] public static extern int RegisterWindowMessage(string message); - + [DllImport("user32")] public static extern bool PostMessage(IntPtr hwnd, int msg, IntPtr wparam, IntPtr lparam); } diff --git a/src/JiraTimeBot/UI/Tray/TrayMenu.cs b/src/JiraTimeBot/UI/Tray/TrayMenu.cs index b5d16a6..268c6db 100644 --- a/src/JiraTimeBot/UI/Tray/TrayMenu.cs +++ b/src/JiraTimeBot/UI/Tray/TrayMenu.cs @@ -3,9 +3,9 @@ using System.Windows.Forms; namespace JiraTimeBot.UI.Tray { - public class TrayMenu: ITrayMenu + public class TrayMenu : ITrayMenu { - private NotifyIcon _trayIcon; + private NotifyIcon _trayIcon; public NotifyIcon Create(frmMain form) { @@ -14,8 +14,8 @@ namespace JiraTimeBot.UI.Tray _trayIcon = new NotifyIcon { - Text = "JiraTimeBot", - Icon = form.Icon, + Text = "JiraTimeBot", + Icon = form.Icon, ContextMenu = trayMenu, Visible = false, Tag = form @@ -43,8 +43,8 @@ namespace JiraTimeBot.UI.Tray private void btnTray_Click(object sender, EventArgs e) { - var icon = (NotifyIcon) sender; - var form = (frmMain) icon.Tag; + var icon = (NotifyIcon)sender; + var form = (frmMain)icon.Tag; form.Visible = true; form.Activate(); form.BringToFront(); diff --git a/src/JiraTimeBot/UI/frmMain.cs b/src/JiraTimeBot/UI/frmMain.cs index 77a40c5..ba6e3bc 100644 --- a/src/JiraTimeBot/UI/frmMain.cs +++ b/src/JiraTimeBot/UI/frmMain.cs @@ -2,16 +2,14 @@ using JiraTimeBot.Configuration; using JiraTimeBot.DI; using JiraTimeBot.TasksProcessors; +using JiraTimeBot.UI.Startup; using JiraTimeBot.UI.Tray; using JiraTimeBot.Update; using System; using System.Collections.Generic; -using System.IO; -using System.IO.Compression; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; -using JiraTimeBot.UI.Startup; // This is the code for your desktop app. // Press Ctrl+F5 (or go to Debug > Start Without Debugging) to run your app. @@ -34,7 +32,8 @@ namespace JiraTimeBot.UI protected override void WndProc(ref Message message) { - if (message.Msg == SingleInstance.WM_SHOWFIRSTINSTANCE) { + if (message.Msg == SingleInstance.WM_SHOWFIRSTINSTANCE) + { this.Show(); this.WindowState = FormWindowState.Normal; _trayIcon.Hide(); @@ -73,7 +72,7 @@ namespace JiraTimeBot.UI var frmSettings = new frmSettings(_container.Resolve()); frmSettings.ShowDialog(this); }; - _settingsErrorReporter = msg => MessageBox.Show(msg, "Загрузка настроек", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);; + _settingsErrorReporter = msg => MessageBox.Show(msg, "Загрузка настроек", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); ; } private void frmMain_FormClosing(object sender, FormClosingEventArgs e) @@ -84,7 +83,7 @@ namespace JiraTimeBot.UI public Settings ReadSettingsAndLock() { _settings = Settings.LoadAndCheck(_settingsWindowShow, _settingsErrorReporter); - + LockUnlock(false); return _settings; @@ -131,7 +130,7 @@ namespace JiraTimeBot.UI using (_tokenSource = GetTokenSource()) { - await _job.DoTheJob(settings, _tasksProcessors.WorkLogTasksProcessor, txtDummyMode.Checked, _tokenSource.Token); + await _job.DoTheJob(settings, _tasksProcessors.WorkLogTasksProcessor, txtDummyMode.Checked, _tokenSource.Token); } LockUnlock(true); @@ -195,7 +194,7 @@ namespace JiraTimeBot.UI LockUnlock(true); } - + private void btnCancel_Click(object sender, EventArgs e) { _tokenSource.Cancel(); diff --git a/src/JiraTimeBot/UI/frmSettings.cs b/src/JiraTimeBot/UI/frmSettings.cs index a13b615..74f72d7 100644 --- a/src/JiraTimeBot/UI/frmSettings.cs +++ b/src/JiraTimeBot/UI/frmSettings.cs @@ -1,7 +1,7 @@ -using System; -using System.Windows.Forms; -using JiraTimeBot.Configuration; +using JiraTimeBot.Configuration; using JiraTimeBot.UI.Startup; +using System; +using System.Windows.Forms; namespace JiraTimeBot.UI { @@ -36,7 +36,7 @@ namespace JiraTimeBot.UI actTime.Text = settings.ActivationTime.ToString("hh\\:mm\\:ss"); chkAddComments.Checked = settings.AddCommentsToWorklog; txtRoundTo.Text = settings.RoundToMinutes.ToString(); - cboWorkType.SelectedIndex = (int) settings.WorkType; + cboWorkType.SelectedIndex = (int)settings.WorkType; txtTimeControlTask.Text = settings.TimeControlTask; txtJQL.Text = settings.JiraQuery; txtWorkDayDuration.Text = settings.MinuterPerWorkDay.ToString(); @@ -71,7 +71,7 @@ namespace JiraTimeBot.UI RepositoryPath = txtRepoPath.Text, AddCommentsToWorklog = chkAddComments.Checked, RoundToMinutes = roundTo, - WorkType = (WorkType) cboWorkType.SelectedIndex, + WorkType = (WorkType)cboWorkType.SelectedIndex, JiraQuery = txtJQL.Text, TimeControlTask = txtTimeControlTask.Text, MinuterPerWorkDay = minuterPerWorkDay, @@ -88,7 +88,7 @@ namespace JiraTimeBot.UI { var settings = ReadSettingsAndLock(); settings.Save(); - _autoStart.Set(chkAutostart.Checked); + _autoStart.Set(chkAutostart.Checked); MessageBox.Show("Настройки сохранены."); diff --git a/src/JiraTimeBot/Update/GitHubDataObjects.cs b/src/JiraTimeBot/Update/GitHubDataObjects.cs index d3171c4..bba10f8 100644 --- a/src/JiraTimeBot/Update/GitHubDataObjects.cs +++ b/src/JiraTimeBot/Update/GitHubDataObjects.cs @@ -1,5 +1,5 @@ -using System; -using Newtonsoft.Json; +using Newtonsoft.Json; +using System; namespace JiraTimeBot.Update { diff --git a/src/JiraTimeBot/Update/IUpdater.cs b/src/JiraTimeBot/Update/IUpdater.cs index 38e5e09..3332c20 100644 --- a/src/JiraTimeBot/Update/IUpdater.cs +++ b/src/JiraTimeBot/Update/IUpdater.cs @@ -1,6 +1,4 @@ -using System; - -namespace JiraTimeBot.Update +namespace JiraTimeBot.Update { internal interface IUpdater { diff --git a/src/JiraTimeBot/Update/Updater.cs b/src/JiraTimeBot/Update/Updater.cs index e5476cd..c799973 100644 --- a/src/JiraTimeBot/Update/Updater.cs +++ b/src/JiraTimeBot/Update/Updater.cs @@ -1,11 +1,11 @@ -using System; +using Newtonsoft.Json; +using System; using System.Diagnostics; using System.IO; using System.IO.Compression; using System.Linq; using System.Net; using System.Windows.Forms; -using Newtonsoft.Json; namespace JiraTimeBot.Update { @@ -81,6 +81,7 @@ namespace JiraTimeBot.Update { _log.Info($"Вы используете актуальную версию."); } + return false; } @@ -90,10 +91,12 @@ namespace JiraTimeBot.Update { _log.Info($"Устанавливаю обновление до версии {gitVersion}."); //Rename he executing file - System.IO.FileInfo appFile = new System.IO.FileInfo(System.Reflection.Assembly.GetExecutingAssembly().Location); + System.IO.FileInfo appFile = + new System.IO.FileInfo(System.Reflection.Assembly.GetExecutingAssembly().Location); var bkpDir = Path.Combine(appFile.DirectoryName, "bkp"); if (!Directory.Exists(bkpDir)) { + _log.Info($"Создаю директорию {bkpDir}."); Directory.CreateDirectory(bkpDir); } @@ -102,33 +105,47 @@ namespace JiraTimeBot.Update foreach (ZipArchiveEntry entry in archive.Entries) { var zipEntryPath = Path.Combine(appFile.DirectoryName, entry.FullName); - if (File.Exists(zipEntryPath)) + if (entry.FullName.EndsWith("/")) { - System.IO.FileInfo zipEntryFile = new System.IO.FileInfo(zipEntryPath); - if (File.Exists(bkpDir + "\\" + zipEntryFile.Name)) + var bkpEntryPath = Path.Combine(bkpDir, entry.FullName); + bkpEntryPath = bkpEntryPath.TrimEnd('/'); + if (!Directory.Exists(bkpEntryPath)) { - File.Delete(bkpDir + "\\" + zipEntryFile.Name); + Directory.CreateDirectory(bkpEntryPath); } - System.IO.File.Move(zipEntryFile.FullName, bkpDir + "\\" + zipEntryFile.Name); } + else + { + if (File.Exists(zipEntryPath)) + { + System.IO.FileInfo zipEntryFile = new System.IO.FileInfo(zipEntryPath); + if (File.Exists(bkpDir + "\\" + zipEntryFile.Name)) + { + File.Delete(bkpDir + "\\" + zipEntryFile.Name); + } - entry.ExtractToFile(zipEntryPath); + System.IO.File.Move(zipEntryFile.FullName, bkpDir + "\\" + zipEntryFile.Name); + } + entry.ExtractToFile(zipEntryPath); + } } } _log.Info("Обновление установлено. Перезапустите программу для применения изменений."); return true; } - catch (Exception) + catch (Exception ex) { - _log.Error($"Что-то пошло не так при обновлении."); + _log.Error($"Что-то пошло не так при обновлении {ex.Message}: {ex.StackTrace}."); return false; } } + public void SelfRestart() { var name = Application.ExecutablePath; - ProcessStartInfo startInfo = new ProcessStartInfo { + ProcessStartInfo startInfo = new ProcessStartInfo + { Arguments = "/C choice /C Y /N /D Y /T 1 & \"" + name + "\"", WindowStyle = ProcessWindowStyle.Hidden, CreateNoWindow = true, @@ -143,7 +160,6 @@ namespace JiraTimeBot.Update { try { - using (var client = new WebClient()) { client.Headers.Add("User-Agent", @@ -162,11 +178,11 @@ namespace JiraTimeBot.Update { try { - HttpWebRequest request = (HttpWebRequest) WebRequest.Create(uri); + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; request.UserAgent = "Mozilla/5.0 (X11; Linux i686; rv:64.0) Gecko/20100101 Firefox/64.0"; - using (HttpWebResponse response = (HttpWebResponse) request.GetResponse()) + using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) using (Stream stream = response.GetResponseStream()) using (StreamReader reader = new StreamReader(stream)) { diff --git a/src/JiraTimeBot/packages.config b/src/JiraTimeBot/packages.config index 0b3bef3..92730d2 100644 --- a/src/JiraTimeBot/packages.config +++ b/src/JiraTimeBot/packages.config @@ -1,11 +1,11 @@  - + - - + +