Add simple update checker.
This commit is contained in:
parent
3fdad6b2f5
commit
be73e1b543
7 changed files with 94 additions and 2 deletions
|
|
@ -2,4 +2,6 @@ export class Profile {
|
|||
public provider: string;
|
||||
public userName: string;
|
||||
public expiration: Date;
|
||||
public currentVersion: string;
|
||||
public latestVersion: string;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
</span>
|
||||
<span>Settings</span>
|
||||
</a>
|
||||
<a class="navbar-item" *ngIf="profile" href="{{providerLink}}" target="_blank" rel="noopener">
|
||||
<a class="navbar-item" *ngIf="profile" href="{{ providerLink }}" target="_blank" rel="noopener">
|
||||
<span class="icon">
|
||||
<i class="fas fa-euro-sign" aria-hidden="true"></i>
|
||||
</span>
|
||||
|
|
@ -61,3 +61,7 @@
|
|||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="notification is-warning" *ngIf="profile.latestVersion && profile.currentVersion !== profile.latestVersion">
|
||||
Version {{ profile.latestVersion }} of RealDebrid Client was found. You are currently on version
|
||||
{{ profile.currentVersion }}.
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
.no-premium {
|
||||
color: red;
|
||||
}
|
||||
|
||||
.notification {
|
||||
margin-top: 52px;
|
||||
}
|
||||
|
|
@ -7,5 +7,7 @@ namespace RdtClient.Data.Models.Internal
|
|||
public String Provider { get; set; }
|
||||
public String UserName { get; set; }
|
||||
public DateTimeOffset? Expiration { get; set; }
|
||||
public String CurrentVersion { get; set; }
|
||||
public String LatestVersion { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -333,7 +333,9 @@ namespace RdtClient.Service.Services
|
|||
{
|
||||
Provider = Settings.Get.Provider,
|
||||
UserName = user.Username,
|
||||
Expiration = user.Expiration
|
||||
Expiration = user.Expiration,
|
||||
CurrentVersion = UpdateChecker.CurrentVersion,
|
||||
LatestVersion = UpdateChecker.LatestVersion
|
||||
};
|
||||
|
||||
return profile;
|
||||
|
|
|
|||
77
server/RdtClient.Service/Services/UpdateChecker.cs
Normal file
77
server/RdtClient.Service/Services/UpdateChecker.cs
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net.Http;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Reflection;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace RdtClient.Service.Services
|
||||
{
|
||||
public class UpdateChecker : BackgroundService
|
||||
{
|
||||
public static String CurrentVersion { get; set; }
|
||||
public static String LatestVersion { get; set; }
|
||||
|
||||
private readonly ILogger<TaskRunner> _logger;
|
||||
|
||||
public UpdateChecker(ILogger<TaskRunner> logger)
|
||||
{
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
||||
{
|
||||
var version = Assembly.GetEntryAssembly()?.GetName().Version?.ToString();
|
||||
|
||||
CurrentVersion = $"v{version[..version.LastIndexOf(".")]}";
|
||||
|
||||
_logger.LogInformation($"UpdateChecker started, currently on version {CurrentVersion}.");
|
||||
|
||||
while (!stoppingToken.IsCancellationRequested)
|
||||
{
|
||||
try
|
||||
{
|
||||
var httpClient = new HttpClient();
|
||||
httpClient.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("RdtClient", CurrentVersion));
|
||||
var response = await httpClient.GetStringAsync($"https://api.github.com/repos/rogerfar/rdt-client/tags?per_page=1", stoppingToken);
|
||||
|
||||
var gitHubReleases = JsonConvert.DeserializeObject<List<GitHubReleasesResponse>>(response);
|
||||
|
||||
if (gitHubReleases == null || gitHubReleases.Count == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var latestRelease = gitHubReleases.First().Name;
|
||||
|
||||
if (latestRelease != CurrentVersion)
|
||||
{
|
||||
_logger.LogInformation($"New version found on GitHub: {latestRelease}");
|
||||
}
|
||||
|
||||
LatestVersion = latestRelease;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Unexpected error occurred in TorrentDownloadManager.Tick");
|
||||
}
|
||||
|
||||
await Task.Delay(TimeSpan.FromHours(1), stoppingToken);
|
||||
}
|
||||
|
||||
_logger.LogInformation("UpdateChecker stopped.");
|
||||
}
|
||||
}
|
||||
|
||||
public class GitHubReleasesResponse
|
||||
{
|
||||
[JsonProperty("name")]
|
||||
public String Name { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
@ -112,6 +112,7 @@ namespace RdtClient.Web
|
|||
.ConfigureServices((hostContext, services) =>
|
||||
{
|
||||
services.AddHostedService<TaskRunner>();
|
||||
services.AddHostedService<UpdateChecker>();
|
||||
})
|
||||
.ConfigureWebHostDefaults(webBuilder =>
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in a new issue