Files
TriliumMind/Workers/TriliumWorker.cs

44 lines
1.5 KiB
C#
Raw Permalink Normal View History

2025-12-11 10:20:10 +09:00
using Microsoft.Extensions.Options;
using Serilog;
using System.Threading.Channels;
using TriliumMind.Data.Entities;
2025-12-11 10:20:10 +09:00
using TriliumMind.Models;
using TriliumMind.Services;
namespace TriliumMind.Workers;
public class TriliumWorker : BackgroundService
{
private readonly Serilog.ILogger _log;
private readonly AppConfigs _config;
private readonly IServiceScopeFactory _scopeFactory; // Singleton services cannot directly inject Scoped services.
private readonly TriliumService _trilium;
2025-12-11 10:20:10 +09:00
private readonly Channel<Issue> _issueChannel;
public TriliumWorker(AppConfigs configs, IServiceScopeFactory serviceScopeFactory,
TriliumService triliumService, Channel<Issue> issueChannel)
2025-12-11 10:20:10 +09:00
{
_log = Log.ForContext<TriliumWorker>();
_config = configs;
_scopeFactory = serviceScopeFactory;
_trilium = triliumService;
2025-12-11 10:20:10 +09:00
_issueChannel = issueChannel;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
2025-12-11 10:20:10 +09:00
{
_log.Debug("Worker running at: {time}", DateTimeOffset.Now);
using var scope = _scopeFactory.CreateScope();
var db = scope.ServiceProvider.GetRequiredService<AppDbService>();
var unpublishedIssues = await db.GetUnpublishedJiraIssuesAsync(stoppingToken);
if (unpublishedIssues != null)
await _trilium.PublishNotesAsync(unpublishedIssues);
await Task.Delay(10 *1000, stoppingToken);
2025-12-11 10:20:10 +09:00
}
}
}