Compare commits

...
4 Commits
6 changed files with 130 additions and 51 deletions
+1 -1
View File
@@ -1 +1 @@
1.0.16
1.0.18
+1
View File
@@ -61,6 +61,7 @@
<Reference Include="System.Core" />
<Reference Include="System.DirectoryServices" />
<Reference Include="System.IO.Compression" />
<Reference Include="System.IO.Compression.FileSystem" />
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.Security" />
<Reference Include="System.ServiceModel" />
+3 -3
View File
@@ -26,6 +26,6 @@ using System.Runtime.InteropServices;
//
// 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.16")]
[assembly: AssemblyFileVersion("1.0.16")]
[assembly: AssemblyInformationalVersion("1.0.16")]
[assembly: AssemblyVersion("1.0.18")]
[assembly: AssemblyFileVersion("1.0.18")]
[assembly: AssemblyInformationalVersion("1.0.18")]
+1 -1
View File
@@ -114,7 +114,7 @@
//
// tmrUpdate
//
this.tmrUpdate.Interval = 1000;
this.tmrUpdate.Interval = 10000;
this.tmrUpdate.Tick += new System.EventHandler(this.tmrUpdate_Tick);
//
// frmMain
+82 -14
View File
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
@@ -189,23 +190,90 @@ namespace JiraTimeBotForm.UI
private void tmrUpdate_Tick(object sender, EventArgs e)
{
tmrUpdate.Interval = 8 * 60 * 60 * 1000;
var checker = new UpdateChecker();
var release = checker.GetRelease();
if (release == null)
try
{
return;
tmrUpdate.Interval = 8 * 60 * 60 * 1000;
var checker = new UpdateChecker();
var release = checker.GetRelease();
if (release == null)
{
return;
}
var gitVersionStr = checker.GetLatestVersion(release);
var gitVersion = new Version(gitVersionStr);
var appVersion = new Version(Application.ProductVersion);
if (gitVersion > appVersion)
{
var downloadUrl = checker.GetDownloadUrl(release);
_log.Info($"Доступна новая версия: {gitVersion} {downloadUrl}");
var success = checker.DownloadFile(downloadUrl, "update.zip");
if (!success)
{
return;
}
var result = InstallUpdate(gitVersion, "update.zip");
if (result)
{
//если обновились - отключаем до рестарта
tmrUpdate.Enabled = false;
}
}
else
{
_log.Info($"Вы используете последнюю версию.");
}
}
var gitVersionStr = checker.GetLatestVersion(release);
var gitVersion = new Version(gitVersionStr);
var appVersion = new Version(Application.ProductVersion);
if (gitVersion > appVersion)
catch (Exception ex)
{
var downloadUrl = checker.GetDownloadUrl(release);
_log.Info($"Доступна новая версия: {gitVersion} {downloadUrl}");
//в процессе обновления ни при каком раскладе мы не должны уложить бота.
_log.Error($"Фатальная ошибка в процессе обновления: {ex.Message}");
}
}
private bool InstallUpdate(Version gitVersion, string updateFile)
{
try
{
_log.Info($"Устанавливаю обновление до версии {gitVersion}.");
//Rename he executing file
System.IO.FileInfo appFile = new System.IO.FileInfo(System.Reflection.Assembly.GetExecutingAssembly().Location);
var bkpDir = Path.Combine(appFile.DirectoryName, "bkp");
if (!Directory.Exists(bkpDir))
{
Directory.CreateDirectory(bkpDir);
}
using (ZipArchive archive = ZipFile.OpenRead(Path.Combine(appFile.DirectoryName, updateFile)))
{
foreach (ZipArchiveEntry entry in archive.Entries)
{
var zipEntryPath = Path.Combine(appFile.DirectoryName, entry.FullName);
if (File.Exists(zipEntryPath))
{
System.IO.FileInfo zipEntryFile = new System.IO.FileInfo(zipEntryPath);
if (File.Exists(bkpDir + "\\" + zipEntryFile.Name))
{
File.Delete(bkpDir + "\\" + zipEntryFile.Name);
}
System.IO.File.Move(zipEntryFile.FullName, bkpDir + "\\" + zipEntryFile.Name);
}
entry.ExtractToFile(zipEntryPath);
}
}
_log.Info("Обновление установлено. Перезапустите программу для применения изменений.");
return true;
}
catch (Exception)
{
_log.Error($"Что-то пошло не так при обновлении.");
return false;
}
}
}
+14 -4
View File
@@ -38,12 +38,22 @@ namespace JiraTimeBotForm.Update
return release;
}
public void DownloadFile(string url)
public bool DownloadFile(string url, string to)
{
using (var client = new WebClient())
try
{
client.Headers.Add("User-Agent", "Mozilla/5.0 (X11; Linux i686; rv:64.0) Gecko/20100101 Firefox/64.0");
client.DownloadFile(url, "update.zip");
using (var client = new WebClient())
{
client.Headers.Add("User-Agent",
"Mozilla/5.0 (X11; Linux i686; rv:64.0) Gecko/20100101 Firefox/64.0");
client.DownloadFile(url, to);
return true;
}
}
catch (Exception)
{
return false;
}
}