2022-03-15 16:59:24 +00:00
|
|
|
|
namespace ASC.Files.ThumbnailBuilder;
|
2022-02-24 09:51:12 +00:00
|
|
|
|
|
|
|
|
|
[Singletone]
|
2022-02-24 20:28:07 +00:00
|
|
|
|
public class ThumbnailBuilderService : BackgroundService
|
2022-02-24 09:51:12 +00:00
|
|
|
|
{
|
2022-02-24 20:28:07 +00:00
|
|
|
|
private readonly IServiceScopeFactory _serviceScopeFactory;
|
2022-02-24 09:51:12 +00:00
|
|
|
|
private readonly ThumbnailSettings _thumbnailSettings;
|
|
|
|
|
private readonly ILog _logger;
|
2022-02-24 20:28:07 +00:00
|
|
|
|
private readonly BuilderQueue<int> _builderQueue;
|
2022-02-24 09:51:12 +00:00
|
|
|
|
|
2022-02-24 20:28:07 +00:00
|
|
|
|
public ThumbnailBuilderService(
|
|
|
|
|
BuilderQueue<int> builderQueue,
|
|
|
|
|
IServiceScopeFactory serviceScopeFactory,
|
2022-02-24 09:51:12 +00:00
|
|
|
|
IOptionsMonitor<ILog> options,
|
|
|
|
|
ThumbnailSettings settings)
|
|
|
|
|
{
|
2022-02-24 20:28:07 +00:00
|
|
|
|
_serviceScopeFactory = serviceScopeFactory;
|
2022-02-24 09:51:12 +00:00
|
|
|
|
_thumbnailSettings = settings;
|
|
|
|
|
_logger = options.Get("ASC.Files.ThumbnailBuilder");
|
2022-02-24 20:28:07 +00:00
|
|
|
|
_builderQueue = builderQueue;
|
2022-02-24 09:51:12 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
|
|
|
|
{
|
|
|
|
|
_logger.Info("Thumbnail Worker running.");
|
|
|
|
|
|
|
|
|
|
while (!stoppingToken.IsCancellationRequested)
|
|
|
|
|
{
|
|
|
|
|
await Procedure(stoppingToken);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_logger.Info("Thumbnail Worker is stopping.");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private async Task Procedure(CancellationToken stoppingToken)
|
|
|
|
|
{
|
|
|
|
|
_logger.Trace("Procedure: Start.");
|
|
|
|
|
|
|
|
|
|
if (stoppingToken.IsCancellationRequested)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//var configSection = (ConfigSection)ConfigurationManager.GetSection("thumbnailBuilder") ?? new ConfigSection();
|
|
|
|
|
//CommonLinkUtility.Initialize(configSection.ServerRoot, false);
|
|
|
|
|
|
|
|
|
|
var filesWithoutThumbnails = FileDataQueue.Queue.Select(pair => pair.Value).ToList();
|
|
|
|
|
|
|
|
|
|
if (filesWithoutThumbnails.Count == 0)
|
|
|
|
|
{
|
|
|
|
|
_logger.TraceFormat("Procedure: Waiting for data. Sleep {0}.", _thumbnailSettings.LaunchFrequency);
|
|
|
|
|
|
|
|
|
|
await Task.Delay(TimeSpan.FromSeconds(_thumbnailSettings.LaunchFrequency), stoppingToken);
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2022-02-24 20:28:07 +00:00
|
|
|
|
using (var scope = _serviceScopeFactory.CreateScope())
|
2022-02-24 09:51:12 +00:00
|
|
|
|
{
|
|
|
|
|
var fileDataProvider = scope.ServiceProvider.GetService<FileDataProvider>();
|
|
|
|
|
var premiumTenants = fileDataProvider.GetPremiumTenants();
|
|
|
|
|
|
|
|
|
|
filesWithoutThumbnails = filesWithoutThumbnails
|
|
|
|
|
.OrderByDescending(fileData => Array.IndexOf(premiumTenants, fileData.TenantId))
|
|
|
|
|
.ToList();
|
|
|
|
|
|
2022-02-24 20:28:07 +00:00
|
|
|
|
_builderQueue.BuildThumbnails(filesWithoutThumbnails);
|
2022-02-24 09:51:12 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_logger.Trace("Procedure: Finish.");
|
|
|
|
|
}
|
2022-02-24 09:00:51 +00:00
|
|
|
|
}
|
2022-02-24 09:51:12 +00:00
|
|
|
|
|
|
|
|
|
public static class WorkerExtension
|
|
|
|
|
{
|
|
|
|
|
public static void Register(DIHelper services)
|
|
|
|
|
{
|
|
|
|
|
services.TryAdd<FileDataProvider>();
|
|
|
|
|
services.TryAdd<BuilderQueue<int>>();
|
|
|
|
|
services.TryAdd<Builder<int>>();
|
|
|
|
|
}
|
|
|
|
|
}
|