mirror of
https://github.com/BlossomiShymae/Needlework.Net.git
synced 2025-12-06 10:10:48 +01:00
feat: use file kv-store for updates
This commit is contained in:
9
Needlework.Net/Constants/AppInfo.cs
Normal file
9
Needlework.Net/Constants/AppInfo.cs
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
using System.Reflection;
|
||||||
|
|
||||||
|
namespace Needlework.Net.Constants
|
||||||
|
{
|
||||||
|
public static class AppInfo
|
||||||
|
{
|
||||||
|
public static readonly string Version = Assembly.GetEntryAssembly()?.GetName().Version?.ToString() ?? "0.0.0.0";
|
||||||
|
}
|
||||||
|
}
|
||||||
7
Needlework.Net/Constants/BlobCacheKeys.cs
Normal file
7
Needlework.Net/Constants/BlobCacheKeys.cs
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
namespace Needlework.Net.Constants
|
||||||
|
{
|
||||||
|
public static class BlobCacheKeys
|
||||||
|
{
|
||||||
|
public static readonly string GithubLatestRelease = nameof(GithubLatestRelease);
|
||||||
|
}
|
||||||
|
}
|
||||||
9
Needlework.Net/Constants/Intervals.cs
Normal file
9
Needlework.Net/Constants/Intervals.cs
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Needlework.Net.Constants
|
||||||
|
{
|
||||||
|
public static class Intervals
|
||||||
|
{
|
||||||
|
public static readonly TimeSpan CheckForUpdates = TimeSpan.FromMinutes(60);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -107,6 +107,7 @@ class Program
|
|||||||
builder.AddSingleton<NotificationService>();
|
builder.AddSingleton<NotificationService>();
|
||||||
builder.AddSingleton<SchemaPaneService>();
|
builder.AddSingleton<SchemaPaneService>();
|
||||||
builder.AddSingleton<HextechDocsPostService>();
|
builder.AddSingleton<HextechDocsPostService>();
|
||||||
|
builder.AddSingleton<GithubService>();
|
||||||
builder.AddSingleton<IBlobCache>((_) =>
|
builder.AddSingleton<IBlobCache>((_) =>
|
||||||
{
|
{
|
||||||
Directory.CreateDirectory("Data");
|
Directory.CreateDirectory("Data");
|
||||||
|
|||||||
42
Needlework.Net/Services/GithubService.cs
Normal file
42
Needlework.Net/Services/GithubService.cs
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
using Akavache;
|
||||||
|
using Flurl.Http;
|
||||||
|
using Flurl.Http.Configuration;
|
||||||
|
using Needlework.Net.Constants;
|
||||||
|
using Needlework.Net.Extensions;
|
||||||
|
using Needlework.Net.Models;
|
||||||
|
using System;
|
||||||
|
using System.Reactive.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Needlework.Net.Services
|
||||||
|
{
|
||||||
|
public class GithubService : IEnableLogger
|
||||||
|
{
|
||||||
|
private readonly IFlurlClient _githubClient;
|
||||||
|
|
||||||
|
private readonly IFlurlClient _githubUserContentClient;
|
||||||
|
|
||||||
|
private readonly IBlobCache _blobCache;
|
||||||
|
|
||||||
|
public GithubService(IBlobCache blobCache, IFlurlClientCache clients)
|
||||||
|
{
|
||||||
|
_githubClient = clients.Get("GithubClient");
|
||||||
|
_githubUserContentClient = clients.Get("GithubUserContentClient");
|
||||||
|
_blobCache = blobCache;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<GithubRelease> GetLatestReleaseAsync()
|
||||||
|
{
|
||||||
|
return await _blobCache.GetOrFetchObject(BlobCacheKeys.GithubLatestRelease, async () =>
|
||||||
|
{
|
||||||
|
this.Log()
|
||||||
|
.Debug("Downloading latest release info from GitHub...");
|
||||||
|
var release = await _githubClient
|
||||||
|
.Request("/repos/BlossomiShymae/Needlework.Net/releases/latest")
|
||||||
|
.WithHeader("User-Agent", $"Needlework.Net/{AppInfo.Version}")
|
||||||
|
.GetJsonAsync<GithubRelease>();
|
||||||
|
return release;
|
||||||
|
}, DateTimeOffset.Now + Intervals.CheckForUpdates);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,8 +7,7 @@ using CommunityToolkit.Mvvm.ComponentModel;
|
|||||||
using CommunityToolkit.Mvvm.Input;
|
using CommunityToolkit.Mvvm.Input;
|
||||||
using CommunityToolkit.Mvvm.Messaging;
|
using CommunityToolkit.Mvvm.Messaging;
|
||||||
using FluentAvalonia.UI.Controls;
|
using FluentAvalonia.UI.Controls;
|
||||||
using Flurl.Http;
|
using Needlework.Net.Constants;
|
||||||
using Flurl.Http.Configuration;
|
|
||||||
using Needlework.Net.Extensions;
|
using Needlework.Net.Extensions;
|
||||||
using Needlework.Net.Helpers;
|
using Needlework.Net.Helpers;
|
||||||
using Needlework.Net.Messages;
|
using Needlework.Net.Messages;
|
||||||
@@ -35,7 +34,7 @@ public partial class MainWindowViewModel
|
|||||||
{
|
{
|
||||||
private readonly DocumentService _documentService;
|
private readonly DocumentService _documentService;
|
||||||
|
|
||||||
private readonly IFlurlClient _githubClient;
|
private readonly GithubService _githubService;
|
||||||
|
|
||||||
private readonly NotificationService _notificationService;
|
private readonly NotificationService _notificationService;
|
||||||
|
|
||||||
@@ -47,13 +46,13 @@ public partial class MainWindowViewModel
|
|||||||
|
|
||||||
private readonly IDisposable _checkForSchemaVersionDisposable;
|
private readonly IDisposable _checkForSchemaVersionDisposable;
|
||||||
|
|
||||||
public MainWindowViewModel(IEnumerable<PageBase> pages, DialogService dialogService, DocumentService documentService, NotificationService notificationService, IFlurlClientCache clients, SchemaPaneService schemaPaneService)
|
public MainWindowViewModel(IEnumerable<PageBase> pages, DialogService dialogService, DocumentService documentService, NotificationService notificationService, GithubService githubService, SchemaPaneService schemaPaneService)
|
||||||
{
|
{
|
||||||
_dialogService = dialogService;
|
_dialogService = dialogService;
|
||||||
_documentService = documentService;
|
_documentService = documentService;
|
||||||
_notificationService = notificationService;
|
_notificationService = notificationService;
|
||||||
_schemaPaneService = schemaPaneService;
|
_schemaPaneService = schemaPaneService;
|
||||||
_githubClient = clients.Get("GithubClient");
|
_githubService = githubService;
|
||||||
|
|
||||||
NavigationViewItems = pages
|
NavigationViewItems = pages
|
||||||
.OrderBy(p => p.Index)
|
.OrderBy(p => p.Index)
|
||||||
@@ -91,7 +90,7 @@ public partial class MainWindowViewModel
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
_checkForUpdatesDisposable = Observable.Timer(TimeSpan.Zero, TimeSpan.FromMinutes(10))
|
_checkForUpdatesDisposable = Observable.Timer(TimeSpan.Zero, Intervals.CheckForUpdates)
|
||||||
.Select(time => Unit.Default)
|
.Select(time => Unit.Default)
|
||||||
.Subscribe(async _ =>
|
.Subscribe(async _ =>
|
||||||
{
|
{
|
||||||
@@ -109,7 +108,7 @@ public partial class MainWindowViewModel
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
_checkForSchemaVersionDisposable = Observable.Timer(TimeSpan.Zero, TimeSpan.FromMinutes(10))
|
_checkForSchemaVersionDisposable = Observable.Timer(TimeSpan.Zero, TimeSpan.FromMinutes(5))
|
||||||
.Select(time => Unit.Default)
|
.Select(time => Unit.Default)
|
||||||
.Subscribe(async _ =>
|
.Subscribe(async _ =>
|
||||||
{
|
{
|
||||||
@@ -228,11 +227,7 @@ public partial class MainWindowViewModel
|
|||||||
|
|
||||||
private async Task CheckForUpdatesAsync()
|
private async Task CheckForUpdatesAsync()
|
||||||
{
|
{
|
||||||
var release = await _githubClient
|
var release = await _githubService.GetLatestReleaseAsync();
|
||||||
.Request("/repos/BlossomiShymae/Needlework.Net/releases/latest")
|
|
||||||
.WithHeader("User-Agent", $"Needlework.Net/{Version}")
|
|
||||||
.GetJsonAsync<GithubRelease>();
|
|
||||||
|
|
||||||
if (release.IsLatest(Version))
|
if (release.IsLatest(Version))
|
||||||
{
|
{
|
||||||
this.Log()
|
this.Log()
|
||||||
|
|||||||
Reference in New Issue
Block a user