feat: playlist implementation

This commit is contained in:
V1ck3s
2026-01-14 23:18:27 +01:00
committed by Vickes
parent 2c5daeefed
commit ebe6e90f39
21 changed files with 2561 additions and 54 deletions

View File

@@ -113,4 +113,20 @@ public class SubsonicSettings
/// Only applies when StorageMode is Cache
/// </summary>
public int CacheDurationHours { get; set; } = 1;
/// <summary>
/// Enable external playlist search and streaming (default: true)
/// Environment variable: ENABLE_EXTERNAL_PLAYLISTS
/// When enabled, users can search for playlists from the configured music provider
/// Playlists appear as "albums" in search results with genre "Playlist"
/// </summary>
public bool EnableExternalPlaylists { get; set; } = true;
/// <summary>
/// Directory name for storing playlist .m3u files (default: "playlists")
/// Environment variable: PLAYLISTS_DIRECTORY
/// Relative to the music library root directory
/// Playlist files will be stored in {MusicDirectory}/{PlaylistsDirectory}/
/// </summary>
public string PlaylistsDirectory { get; set; } = "playlists";
}

View File

@@ -0,0 +1,58 @@
namespace octo_fiesta.Models.Subsonic;
/// <summary>
/// Represents a playlist from an external music provider (Deezer, Qobuz).
/// </summary>
public class ExternalPlaylist
{
/// <summary>
/// Unique identifier in the format "pl-{provider}-{externalId}"
/// Example: "pl-deezer-123456" or "pl-qobuz-789"
/// </summary>
public string Id { get; set; } = string.Empty;
/// <summary>
/// Playlist name
/// </summary>
public string Name { get; set; } = string.Empty;
/// <summary>
/// Playlist description
/// </summary>
public string? Description { get; set; }
/// <summary>
/// Name of the playlist creator/curator
/// </summary>
public string? CuratorName { get; set; }
/// <summary>
/// Provider name ("deezer" or "qobuz")
/// </summary>
public string Provider { get; set; } = string.Empty;
/// <summary>
/// External ID from the provider (without "pl-" prefix)
/// </summary>
public string ExternalId { get; set; } = string.Empty;
/// <summary>
/// Number of tracks in the playlist
/// </summary>
public int TrackCount { get; set; }
/// <summary>
/// Total duration in seconds
/// </summary>
public int Duration { get; set; }
/// <summary>
/// Cover art URL from the provider
/// </summary>
public string? CoverUrl { get; set; }
/// <summary>
/// Playlist creation date
/// </summary>
public DateTime? CreatedDate { get; set; }
}