Add simple update checker.

This commit is contained in:
Roger Far 2021-11-25 17:31:34 -07:00
parent 3fdad6b2f5
commit be73e1b543
7 changed files with 94 additions and 2 deletions

View file

@ -2,4 +2,6 @@ export class Profile {
public provider: string;
public userName: string;
public expiration: Date;
public currentVersion: string;
public latestVersion: string;
}

View file

@ -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>

View file

@ -1,3 +1,7 @@
.no-premium {
color: red;
}
.notification {
margin-top: 52px;
}

View file

@ -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; }
}
}

View file

@ -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;

View 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; }
}
}

View file

@ -112,6 +112,7 @@ namespace RdtClient.Web
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<TaskRunner>();
services.AddHostedService<UpdateChecker>();
})
.ConfigureWebHostDefaults(webBuilder =>
{