refactor: reorganize Models into subdirectories by context

Split monolithic MusicModels.cs (177 lines) into separate files:
- Models/Settings/ (DeezerSettings, QobuzSettings, SubsonicSettings)
- Models/Domain/ (Song, Album, Artist)
- Models/Search/ (SearchResult)
- Models/Download/ (DownloadInfo, DownloadStatus)
- Models/Subsonic/ (ScanStatus)

Updated namespaces and imports across 22 files.
Improves navigation and separates models by business context.
This commit is contained in:
V1ck3s
2026-01-08 19:57:11 +01:00
parent c38291efa3
commit ce779b3c8a
29 changed files with 162 additions and 102 deletions

View File

@@ -0,0 +1,25 @@
namespace octo_fiesta.Models.Settings;
/// <summary>
/// Configuration for the Deezer downloader and metadata service
/// </summary>
public class DeezerSettings
{
/// <summary>
/// Deezer ARL token (required for downloading)
/// Obtained from browser cookies after logging into deezer.com
/// </summary>
public string? Arl { get; set; }
/// <summary>
/// Fallback ARL token (optional)
/// Used if the primary ARL token fails
/// </summary>
public string? ArlFallback { 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

@@ -0,0 +1,25 @@
namespace octo_fiesta.Models.Settings;
/// <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

@@ -0,0 +1,84 @@
namespace octo_fiesta.Models.Settings;
/// <summary>
/// Download mode for tracks
/// </summary>
public enum DownloadMode
{
/// <summary>
/// Download only the requested track (default behavior)
/// </summary>
Track,
/// <summary>
/// When a track is played, download the entire album in background
/// The requested track is downloaded first, then remaining tracks are queued
/// </summary>
Album
}
/// <summary>
/// Explicit content filter mode for Deezer tracks
/// </summary>
public enum ExplicitFilter
{
/// <summary>
/// Show all tracks (no filtering)
/// </summary>
All,
/// <summary>
/// Exclude clean/edited versions (explicit_content_lyrics == 3)
/// Shows original explicit content and naturally clean content
/// </summary>
ExplicitOnly,
/// <summary>
/// Only show clean content (explicit_content_lyrics == 0 or 3)
/// Excludes tracks with explicit_content_lyrics == 1
/// </summary>
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; }
/// <summary>
/// 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;
/// <summary>
/// Download mode for tracks (default: Track)
/// Environment variable: DOWNLOAD_MODE
/// 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;
}