1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2026-02-04 02:43:32 +00:00

Hotfix workshop auto-update

This commit is contained in:
Robert 2025-12-22 20:47:26 +01:00
parent 4b58485956
commit 7c7d91eda9

View File

@ -26,9 +26,8 @@ public class WorkshopService : IWorkshopService
private readonly IWorkshopClient _workshopClient; private readonly IWorkshopClient _workshopClient;
private readonly PluginSetting<bool> _migratedBuiltInPlugins; private readonly PluginSetting<bool> _migratedBuiltInPlugins;
private bool _initialized; private bool _initialized;
private bool _mutating;
public WorkshopService(ILogger logger, public WorkshopService(ILogger logger,
IHttpClientFactory httpClientFactory, IHttpClientFactory httpClientFactory,
@ -172,6 +171,10 @@ public class WorkshopService : IWorkshopService
/// <inheritdoc /> /// <inheritdoc />
public async Task<EntryInstallResult> InstallEntry(IEntrySummary entry, IRelease release, Progress<StreamProgress> progress, CancellationToken cancellationToken) public async Task<EntryInstallResult> InstallEntry(IEntrySummary entry, IRelease release, Progress<StreamProgress> progress, CancellationToken cancellationToken)
{
_mutating = true;
try
{ {
IEntryInstallationHandler handler = _factory.CreateHandler(entry.EntryType); IEntryInstallationHandler handler = _factory.CreateHandler(entry.EntryType);
EntryInstallResult result = await handler.InstallAsync(entry, release, progress, cancellationToken); EntryInstallResult result = await handler.InstallAsync(entry, release, progress, cancellationToken);
@ -182,9 +185,18 @@ public class WorkshopService : IWorkshopService
return result; return result;
} }
finally
{
_mutating = false;
}
}
/// <inheritdoc /> /// <inheritdoc />
public async Task<EntryUninstallResult> UninstallEntry(InstalledEntry installedEntry, CancellationToken cancellationToken) public async Task<EntryUninstallResult> UninstallEntry(InstalledEntry installedEntry, CancellationToken cancellationToken)
{
_mutating = true;
try
{ {
IEntryInstallationHandler handler = _factory.CreateHandler(installedEntry.EntryType); IEntryInstallationHandler handler = _factory.CreateHandler(installedEntry.EntryType);
EntryUninstallResult result = await handler.UninstallAsync(installedEntry, cancellationToken); EntryUninstallResult result = await handler.UninstallAsync(installedEntry, cancellationToken);
@ -195,6 +207,11 @@ public class WorkshopService : IWorkshopService
return result; return result;
} }
finally
{
_mutating = false;
}
}
/// <inheritdoc /> /// <inheritdoc />
public List<InstalledEntry> GetInstalledEntries() public List<InstalledEntry> GetInstalledEntries()
@ -317,15 +334,27 @@ public class WorkshopService : IWorkshopService
if (_migratedBuiltInPlugins.Value) if (_migratedBuiltInPlugins.Value)
return; return;
_mutating = true;
try
{
MigratingBuildInPlugins?.Invoke(this, EventArgs.Empty); MigratingBuildInPlugins?.Invoke(this, EventArgs.Empty);
bool migrated = await BuiltInPluginsMigrator.Migrate(this, _workshopClient, _logger, _pluginRepository); bool migrated = await BuiltInPluginsMigrator.Migrate(this, _workshopClient, _logger, _pluginRepository);
_migratedBuiltInPlugins.Value = migrated; _migratedBuiltInPlugins.Value = migrated;
_migratedBuiltInPlugins.Save(); _migratedBuiltInPlugins.Save();
} }
finally
{
_mutating = false;
}
}
private void ProfileServiceOnProfileRemoved(object? sender, ProfileConfigurationEventArgs e) private void ProfileServiceOnProfileRemoved(object? sender, ProfileConfigurationEventArgs e)
{ {
if (_mutating)
return;
InstalledEntry? entry = GetInstalledEntryByProfile(e.ProfileConfiguration); InstalledEntry? entry = GetInstalledEntryByProfile(e.ProfileConfiguration);
if (entry == null) if (entry == null)
return; return;
@ -336,6 +365,9 @@ public class WorkshopService : IWorkshopService
private void PluginManagementServiceOnPluginRemoved(object? sender, PluginEventArgs e) private void PluginManagementServiceOnPluginRemoved(object? sender, PluginEventArgs e)
{ {
if (_mutating)
return;
InstalledEntry? entry = GetInstalledEntryByPlugin(e.Plugin); InstalledEntry? entry = GetInstalledEntryByPlugin(e.Plugin);
if (entry == null) if (entry == null)
return; return;