feat: add pluggable music service architecture with Qobuz support

This commit is contained in:
V1ck3s
2026-01-07 23:36:35 +01:00
committed by Vickes
parent 9ec1bb77b5
commit 275467c5bf
8 changed files with 1818 additions and 24 deletions

View File

@@ -0,0 +1,25 @@
namespace octo_fiesta.Models;
/// <summary>
/// Configuration for the Qobuz downloader and metadata service
/// </summary>
public class QobuzSettings
{
/// <summary>
/// Qobuz user authentication token
/// Obtained from browser's localStorage after logging into play.qobuz.com
/// </summary>
public string? UserAuthToken { get; set; }
/// <summary>
/// Qobuz user ID
/// Obtained from browser's localStorage after logging into play.qobuz.com
/// </summary>
public string? UserId { get; set; }
/// <summary>
/// Preferred audio quality: FLAC, MP3_320, MP3_128
/// If not specified or unavailable, the highest available quality will be used.
/// </summary>
public string? Quality { get; set; }
}

View File

@@ -40,6 +40,22 @@ public enum ExplicitFilter
CleanOnly
}
/// <summary>
/// Music service provider
/// </summary>
public enum MusicService
{
/// <summary>
/// Deezer music service
/// </summary>
Deezer,
/// <summary>
/// Qobuz music service
/// </summary>
Qobuz
}
public class SubsonicSettings
{
public string? Url { get; set; }
@@ -48,6 +64,7 @@ public class SubsonicSettings
/// Explicit content filter mode (default: All)
/// Environment variable: EXPLICIT_FILTER
/// Values: "All", "ExplicitOnly", "CleanOnly"
/// Note: Only works with Deezer
/// </summary>
public ExplicitFilter ExplicitFilter { get; set; } = ExplicitFilter.All;
@@ -57,4 +74,11 @@ public class SubsonicSettings
/// Values: "Track" (download only played track), "Album" (download full album when playing a track)
/// </summary>
public DownloadMode DownloadMode { get; set; } = DownloadMode.Track;
/// <summary>
/// Music service to use (default: Deezer)
/// Environment variable: MUSIC_SERVICE
/// Values: "Deezer", "Qobuz"
/// </summary>
public MusicService MusicService { get; set; } = MusicService.Deezer;
}