2025-08-02 23:27:27 -05:00
|
|
|
using Hangfire;
|
|
|
|
|
using LANCommander.SDK.Enums;
|
|
|
|
|
using LANCommander.Server.Services;
|
|
|
|
|
|
|
|
|
|
namespace LANCommander.Server.Jobs.Recurring;
|
|
|
|
|
|
|
|
|
|
public sealed class AutomaticRepackage(
|
2025-11-16 12:31:25 -06:00
|
|
|
SettingsProvider<Settings.Settings> settingsProvider,
|
2025-08-02 23:27:27 -05:00
|
|
|
GameService gameService,
|
|
|
|
|
ScriptService scriptService,
|
|
|
|
|
ILogger<AutomaticRepackage> logger) : BaseRecurringJob(logger)
|
|
|
|
|
{
|
|
|
|
|
public override string CronExpression
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
2025-11-16 12:31:25 -06:00
|
|
|
var minutes = settingsProvider.CurrentValue.Server.Scripts.RepackageEvery % 60;
|
|
|
|
|
var hours = settingsProvider.CurrentValue.Server.Scripts.RepackageEvery / 60;
|
2025-08-02 23:27:27 -05:00
|
|
|
var days = hours % 24;
|
|
|
|
|
|
|
|
|
|
var minuteExpression = minutes > 0 ? $"*/{minutes}" : "*";
|
|
|
|
|
var hourExpression = hours > 0 ? $"*/{hours}" : "*";
|
|
|
|
|
var dayExpression = days > 0 ? $"*/{days}" : "*";
|
|
|
|
|
|
|
|
|
|
return $"{minuteExpression} {hourExpression} {dayExpression} * *";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override async Task ExecuteAsync()
|
|
|
|
|
{
|
2025-11-16 12:31:25 -06:00
|
|
|
if (!settingsProvider.CurrentValue.Server.Scripts.EnableAutomaticRepackaging)
|
2025-08-02 23:27:27 -05:00
|
|
|
{
|
|
|
|
|
logger.LogWarning("The automatic repackaging job attempted to execute, but automatic repackaging is disabled");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
logger.LogInformation("Starting automatic repackaging job");
|
|
|
|
|
|
|
|
|
|
var repackageScripts = await scriptService.GetAsync(s => s.Type == ScriptType.Package);
|
|
|
|
|
|
|
|
|
|
logger.LogInformation("Found {ScriptCount} packaging scripts}", repackageScripts.Count);
|
|
|
|
|
|
|
|
|
|
foreach (var script in repackageScripts)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
if (script.GameId.HasValue)
|
|
|
|
|
await gameService.PackageAsync(script.GameId.Value);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
logger?.LogError(ex, "Could not automatically run packaging script with ID {ScriptId}", script.Id);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|