fix: merge conflicts and upstream changes merged

This commit is contained in:
bransoned
2026-01-16 22:45:04 +00:00
27 changed files with 3063 additions and 108 deletions

View File

@@ -6,6 +6,7 @@ using octo_fiesta.Services.SquidWTF;
using octo_fiesta.Services.Local;
using octo_fiesta.Services.Validation;
using octo_fiesta.Services.Subsonic;
using octo_fiesta.Services.Common;
using octo_fiesta.Middleware;
var builder = WebApplication.CreateBuilder(args);
@@ -32,6 +33,7 @@ builder.Services.Configure<QobuzSettings>(
// Get the configured music service
var musicService = builder.Configuration.GetValue<MusicService>("Subsonic:MusicService");
var enableExternalPlaylists = builder.Configuration.GetValue<bool>("Subsonic:EnableExternalPlaylists", true);
// Business services
// Registered as Singleton to share state (mappings cache, scan debounce, download tracking, rate limiting)
@@ -44,16 +46,35 @@ builder.Services.AddSingleton<SubsonicModelMapper>();
builder.Services.AddScoped<SubsonicProxyService>();
// Register music service based on configuration
// IMPORTANT: Primary service MUST be registered LAST because ASP.NET Core DI
// will use the last registered implementation when injecting IMusicMetadataService/IDownloadService
if (musicService == MusicService.Qobuz)
{
// Qobuz services
// If playlists enabled, register Deezer FIRST (secondary provider)
if (enableExternalPlaylists)
{
builder.Services.AddSingleton<IMusicMetadataService, DeezerMetadataService>();
builder.Services.AddSingleton<IDownloadService, DeezerDownloadService>();
builder.Services.AddSingleton<PlaylistSyncService>();
}
// Qobuz services (primary) - registered LAST to be injected by default
builder.Services.AddSingleton<QobuzBundleService>();
builder.Services.AddSingleton<IMusicMetadataService, QobuzMetadataService>();
builder.Services.AddSingleton<IDownloadService, QobuzDownloadService>();
}
else if (musicService == MusicService.Deezer)
{
// Deezer services (default)
// If playlists enabled, register Qobuz FIRST (secondary provider)
if (enableExternalPlaylists)
{
builder.Services.AddSingleton<QobuzBundleService>();
builder.Services.AddSingleton<IMusicMetadataService, QobuzMetadataService>();
builder.Services.AddSingleton<IDownloadService, QobuzDownloadService>();
builder.Services.AddSingleton<PlaylistSyncService>();
}
// Deezer services (primary, default) - registered LAST to be injected by default
builder.Services.AddSingleton<IMusicMetadataService, DeezerMetadataService>();
builder.Services.AddSingleton<IDownloadService, DeezerDownloadService>();
}
@@ -73,6 +94,9 @@ builder.Services.AddSingleton<IStartupValidator, SquidWTFStartupValidator>();
// Register orchestrator as hosted service
builder.Services.AddHostedService<StartupValidationOrchestrator>();
// Register cache cleanup service (only runs when StorageMode is Cache)
builder.Services.AddHostedService<CacheCleanupService>();
builder.Services.AddCors(options =>
{
options.AddDefaultPolicy(policy =>