mirror of
https://github.com/Artemis-RGB/Artemis
synced 2025-12-13 05:48:35 +00:00
Merge branch 'development'
This commit is contained in:
commit
4debfee6c1
@ -54,14 +54,16 @@ public class WorkshopUpdateService : IWorkshopUpdateService
|
||||
_updateNotificationProvider.Value.ShowWorkshopNotification(updatedEntries);
|
||||
}
|
||||
|
||||
public async Task<bool> AutoUpdateEntry(InstalledEntry entry)
|
||||
public async Task<bool> AutoUpdateEntry(InstalledEntry installedEntry)
|
||||
{
|
||||
// Query the latest version
|
||||
IOperationResult<IGetEntryLatestReleaseByIdResult> latestReleaseResult = await _client.GetEntryLatestReleaseById.ExecuteAsync(entry.Id);
|
||||
|
||||
IOperationResult<IGetEntryLatestReleaseByIdResult> latestReleaseResult = await _client.GetEntryLatestReleaseById.ExecuteAsync(installedEntry.Id);
|
||||
IGetEntryById_Entry_LatestRelease_Entry? entry = latestReleaseResult.Data?.Entry?.LatestRelease?.Entry;
|
||||
if (entry == null)
|
||||
return false;
|
||||
if (latestReleaseResult.Data?.Entry?.LatestRelease is not IRelease latestRelease)
|
||||
return false;
|
||||
if (latestRelease.Id == entry.ReleaseId)
|
||||
if (latestRelease.Id == installedEntry.ReleaseId)
|
||||
return false;
|
||||
|
||||
_logger.Information("Auto-updating entry {Entry} to version {Version}", entry, latestRelease.Version);
|
||||
@ -72,7 +74,7 @@ public class WorkshopUpdateService : IWorkshopUpdateService
|
||||
|
||||
// This happens during installation too but not on our reference of the entry
|
||||
if (updateResult.IsSuccess)
|
||||
entry.ApplyRelease(latestRelease);
|
||||
installedEntry.ApplyRelease(latestRelease);
|
||||
|
||||
if (updateResult.IsSuccess)
|
||||
_logger.Information("Auto-update successful for entry {Entry}", entry);
|
||||
|
||||
@ -6,22 +6,22 @@ using Artemis.Storage.Entities.Workshop;
|
||||
|
||||
namespace Artemis.WebClient.Workshop.Models;
|
||||
|
||||
public class InstalledEntry : CorePropertyChanged, IEntrySummary
|
||||
public class InstalledEntry : CorePropertyChanged
|
||||
{
|
||||
private Dictionary<string, JsonNode> _metadata = new();
|
||||
private long _id;
|
||||
private string _author;
|
||||
private bool _isOfficial;
|
||||
private string _name;
|
||||
private string _summary;
|
||||
private EntryType _entryType;
|
||||
private long _downloads;
|
||||
private bool _autoUpdate;
|
||||
private IReadOnlyList<InstalledEntryCategory> _categories;
|
||||
private DateTimeOffset _createdAt;
|
||||
private long _downloads;
|
||||
private EntryType _entryType;
|
||||
private long _id;
|
||||
private bool _isOfficial;
|
||||
private long? _latestReleaseId;
|
||||
private IReadOnlyList<IGetDependantEntries_Entries_Items_Categories> _categories;
|
||||
private Dictionary<string, JsonNode> _metadata = new();
|
||||
private string _name;
|
||||
private long _releaseId;
|
||||
private string _releaseVersion = string.Empty;
|
||||
private bool _autoUpdate;
|
||||
private string _summary;
|
||||
|
||||
internal InstalledEntry(EntryEntity entity)
|
||||
{
|
||||
@ -40,7 +40,6 @@ public class InstalledEntry : CorePropertyChanged, IEntrySummary
|
||||
AutoUpdate = true;
|
||||
}
|
||||
|
||||
internal EntryEntity Entity { get; }
|
||||
public DateTimeOffset InstalledAt { get; set; }
|
||||
|
||||
public long ReleaseId
|
||||
@ -61,57 +60,82 @@ public class InstalledEntry : CorePropertyChanged, IEntrySummary
|
||||
set => SetAndNotify(ref _autoUpdate, value);
|
||||
}
|
||||
|
||||
internal void Load()
|
||||
public long Id
|
||||
{
|
||||
Id = Entity.EntryId;
|
||||
Author = Entity.Author;
|
||||
IsOfficial = Entity.IsOfficial;
|
||||
Name = Entity.Name;
|
||||
Summary = Entity.Summary;
|
||||
EntryType = (EntryType) Entity.EntryType;
|
||||
Downloads = Entity.Downloads;
|
||||
CreatedAt = Entity.CreatedAt;
|
||||
LatestReleaseId = Entity.LatestReleaseId;
|
||||
Categories = Entity.Categories?.Select(c => new GetDependantEntries_Entries_Items_Categories_Category(c.Name, c.Icon)).ToList() ?? [];
|
||||
|
||||
ReleaseId = Entity.ReleaseId;
|
||||
ReleaseVersion = Entity.ReleaseVersion;
|
||||
InstalledAt = Entity.InstalledAt;
|
||||
AutoUpdate = Entity.AutoUpdate;
|
||||
|
||||
_metadata = Entity.Metadata != null ? new Dictionary<string, JsonNode>(Entity.Metadata) : [];
|
||||
get => _id;
|
||||
private set => SetAndNotify(ref _id, value);
|
||||
}
|
||||
|
||||
internal void Save()
|
||||
public string Author
|
||||
{
|
||||
Entity.EntryId = Id;
|
||||
Entity.EntryType = (int) EntryType;
|
||||
|
||||
Entity.Author = Author;
|
||||
Entity.IsOfficial = IsOfficial;
|
||||
Entity.Name = Name;
|
||||
Entity.Summary = Summary;
|
||||
Entity.Downloads = Downloads;
|
||||
Entity.CreatedAt = CreatedAt;
|
||||
Entity.LatestReleaseId = LatestReleaseId;
|
||||
Entity.Categories = Categories.Select(c => new EntryCategoryEntity(c.Name, c.Icon)).ToList();
|
||||
|
||||
Entity.ReleaseId = ReleaseId;
|
||||
Entity.ReleaseVersion = ReleaseVersion;
|
||||
Entity.InstalledAt = InstalledAt;
|
||||
Entity.AutoUpdate = AutoUpdate;
|
||||
|
||||
Entity.Metadata = new Dictionary<string, JsonNode>(_metadata);
|
||||
get => _author;
|
||||
private set => SetAndNotify(ref _author, value);
|
||||
}
|
||||
|
||||
public bool IsOfficial
|
||||
{
|
||||
get => _isOfficial;
|
||||
private set => SetAndNotify(ref _isOfficial, value);
|
||||
}
|
||||
|
||||
public string Name
|
||||
{
|
||||
get => _name;
|
||||
private set => SetAndNotify(ref _name, value);
|
||||
}
|
||||
|
||||
public string Summary
|
||||
{
|
||||
get => _summary;
|
||||
private set => SetAndNotify(ref _summary, value);
|
||||
}
|
||||
|
||||
public EntryType EntryType
|
||||
{
|
||||
get => _entryType;
|
||||
private set => SetAndNotify(ref _entryType, value);
|
||||
}
|
||||
|
||||
public long Downloads
|
||||
{
|
||||
get => _downloads;
|
||||
private set => SetAndNotify(ref _downloads, value);
|
||||
}
|
||||
|
||||
public DateTimeOffset CreatedAt
|
||||
{
|
||||
get => _createdAt;
|
||||
private set => SetAndNotify(ref _createdAt, value);
|
||||
}
|
||||
|
||||
public long? LatestReleaseId
|
||||
{
|
||||
get => _latestReleaseId;
|
||||
private set => SetAndNotify(ref _latestReleaseId, value);
|
||||
}
|
||||
|
||||
public IReadOnlyList<InstalledEntryCategory> Categories
|
||||
{
|
||||
get => _categories;
|
||||
private set => SetAndNotify(ref _categories, value);
|
||||
}
|
||||
|
||||
internal EntryEntity Entity { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the metadata value associated with the specified key.
|
||||
/// </summary>
|
||||
/// <param name="key">The key of the value to get.</param>
|
||||
/// <param name="value">When this method returns, contains the value associated with the specified key, if the key is found and of type <typeparamref name="T"/>;
|
||||
/// otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized.</param>
|
||||
/// <param name="value">
|
||||
/// When this method returns, contains the value associated with the specified key, if the key is found and of type
|
||||
/// <typeparamref name="T" />;
|
||||
/// otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized.
|
||||
/// </param>
|
||||
/// <typeparam name="T">The type of the value.</typeparam>
|
||||
/// <returns><see langword="true"/> if the metadata contains an element with the specified key; otherwise, <see langword="false"/>.</returns>
|
||||
/// <returns>
|
||||
/// <see langword="true" /> if the metadata contains an element with the specified key; otherwise,
|
||||
/// <see langword="false" />.
|
||||
/// </returns>
|
||||
public bool TryGetMetadata<T>(string key, [NotNullWhen(true)] out T? value)
|
||||
{
|
||||
if (!_metadata.TryGetValue(key, out JsonNode? element))
|
||||
@ -185,86 +209,55 @@ public class InstalledEntry : CorePropertyChanged, IEntrySummary
|
||||
Downloads = entry.Downloads;
|
||||
CreatedAt = entry.CreatedAt;
|
||||
LatestReleaseId = entry.LatestReleaseId;
|
||||
Categories = entry.Categories;
|
||||
Categories = entry.Categories.Select(c => new InstalledEntryCategory(c.Name, c.Icon)).ToList();
|
||||
}
|
||||
|
||||
#region Implementation of IEntrySummary
|
||||
|
||||
/// <inheritdoc />
|
||||
public long Id
|
||||
{
|
||||
get => _id;
|
||||
private set => SetAndNotify(ref _id, value);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public string Author
|
||||
{
|
||||
get => _author;
|
||||
private set => SetAndNotify(ref _author, value);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public bool IsOfficial
|
||||
{
|
||||
get => _isOfficial;
|
||||
private set => SetAndNotify(ref _isOfficial, value);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public string Name
|
||||
{
|
||||
get => _name;
|
||||
private set => SetAndNotify(ref _name, value);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public string Summary
|
||||
{
|
||||
get => _summary;
|
||||
private set => SetAndNotify(ref _summary, value);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public EntryType EntryType
|
||||
{
|
||||
get => _entryType;
|
||||
private set => SetAndNotify(ref _entryType, value);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public long Downloads
|
||||
{
|
||||
get => _downloads;
|
||||
private set => SetAndNotify(ref _downloads, value);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public DateTimeOffset CreatedAt
|
||||
{
|
||||
get => _createdAt;
|
||||
private set => SetAndNotify(ref _createdAt, value);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public long? LatestReleaseId
|
||||
{
|
||||
get => _latestReleaseId;
|
||||
private set => SetAndNotify(ref _latestReleaseId, value);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public IReadOnlyList<IGetDependantEntries_Entries_Items_Categories> Categories
|
||||
{
|
||||
get => _categories;
|
||||
private set => SetAndNotify(ref _categories, value);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString()
|
||||
{
|
||||
return $"[{EntryType}] {Id} - {Name}";
|
||||
}
|
||||
|
||||
internal void Load()
|
||||
{
|
||||
Id = Entity.EntryId;
|
||||
Author = Entity.Author;
|
||||
IsOfficial = Entity.IsOfficial;
|
||||
Name = Entity.Name;
|
||||
Summary = Entity.Summary;
|
||||
EntryType = (EntryType) Entity.EntryType;
|
||||
Downloads = Entity.Downloads;
|
||||
CreatedAt = Entity.CreatedAt;
|
||||
LatestReleaseId = Entity.LatestReleaseId;
|
||||
Categories = Entity.Categories?.Select(c => new InstalledEntryCategory(c.Name, c.Icon)).ToList() ?? [];
|
||||
|
||||
ReleaseId = Entity.ReleaseId;
|
||||
ReleaseVersion = Entity.ReleaseVersion;
|
||||
InstalledAt = Entity.InstalledAt;
|
||||
AutoUpdate = Entity.AutoUpdate;
|
||||
|
||||
_metadata = Entity.Metadata != null ? new Dictionary<string, JsonNode>(Entity.Metadata) : [];
|
||||
}
|
||||
|
||||
internal void Save()
|
||||
{
|
||||
Entity.EntryId = Id;
|
||||
Entity.EntryType = (int) EntryType;
|
||||
|
||||
Entity.Author = Author;
|
||||
Entity.IsOfficial = IsOfficial;
|
||||
Entity.Name = Name;
|
||||
Entity.Summary = Summary;
|
||||
Entity.Downloads = Downloads;
|
||||
Entity.CreatedAt = CreatedAt;
|
||||
Entity.LatestReleaseId = LatestReleaseId;
|
||||
Entity.Categories = Categories.Select(c => new EntryCategoryEntity(c.Name, c.Icon)).ToList();
|
||||
|
||||
Entity.ReleaseId = ReleaseId;
|
||||
Entity.ReleaseVersion = ReleaseVersion;
|
||||
Entity.InstalledAt = InstalledAt;
|
||||
Entity.AutoUpdate = AutoUpdate;
|
||||
|
||||
Entity.Metadata = new Dictionary<string, JsonNode>(_metadata);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
namespace Artemis.WebClient.Workshop.Models;
|
||||
|
||||
public class InstalledEntryCategory
|
||||
{
|
||||
public InstalledEntryCategory(string name, string icon)
|
||||
{
|
||||
Name = name;
|
||||
Icon = icon;
|
||||
}
|
||||
|
||||
public string Name { get; }
|
||||
|
||||
public string Icon { get; }
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user