2025-12-11 10:20:10 +09:00
|
|
|
using Microsoft.Extensions.Options;
|
|
|
|
|
using Serilog;
|
|
|
|
|
using System.Threading.Channels;
|
2025-12-11 17:54:18 +09:00
|
|
|
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;
|
2025-12-12 10:19:41 +09:00
|
|
|
private readonly IServiceScopeFactory _scopeFactory; // Singleton services cannot directly inject Scoped services.
|
2025-12-11 10:20:10 +09:00
|
|
|
private readonly TriliumService _triliumService;
|
|
|
|
|
private readonly Channel<Issue> _issueChannel;
|
|
|
|
|
|
2025-12-12 10:19:41 +09:00
|
|
|
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;
|
2025-12-12 10:19:41 +09:00
|
|
|
_scopeFactory = serviceScopeFactory;
|
2025-12-11 10:20:10 +09:00
|
|
|
_triliumService = triliumService;
|
|
|
|
|
_issueChannel = issueChannel;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
|
|
|
|
{
|
2025-12-11 17:54:18 +09:00
|
|
|
while (!stoppingToken.IsCancellationRequested)
|
2025-12-11 10:20:10 +09:00
|
|
|
{
|
2025-12-11 17:54:18 +09:00
|
|
|
_log.Debug("Worker running at: {time}", DateTimeOffset.Now);
|
2025-12-12 10:19:41 +09:00
|
|
|
|
|
|
|
|
using var scope = _scopeFactory.CreateScope();
|
|
|
|
|
var db = scope.ServiceProvider.GetRequiredService<AppDbService>();
|
|
|
|
|
var unpublishedIssues = await db.GetUnpublishedJiraIssuesAsync(stoppingToken);
|
|
|
|
|
if (unpublishedIssues != null)
|
|
|
|
|
{
|
|
|
|
|
// Publish or update Trilium notes
|
|
|
|
|
}
|
|
|
|
|
|
2025-12-11 17:54:18 +09:00
|
|
|
await Task.Delay(10 *1000, stoppingToken);
|
2025-12-11 10:20:10 +09:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|