mirror of
https://github.com/SoPat712/allstarr.git
synced 2026-02-09 15:45:10 -05:00
Major Features: - Spotify playlist injection with missing tracks search - Transparent proxy authentication system - WebSocket session management for external tracks - Manual track mapping and favorites system - Lyrics support (Spotify + LRCLib) with prefetching - Admin dashboard with analytics and configuration - Performance optimizations with health checks and endpoint racing - Comprehensive caching and memory management Performance Improvements: - Quick health checks (3s timeout) before trying endpoints - Health check results cached for 30 seconds - 5 minute timeout for large artist responses - Background Odesli conversion after streaming starts - Parallel lyrics prefetching - Endpoint benchmarking and racing - 16 SquidWTF endpoints with load balancing Reliability: - Automatic endpoint fallback and failover - Token expiration handling - Concurrent request optimization - Memory leak fixes - Proper session cleanup User Experience: - Web UI for configuration and playlist management - Real-time progress tracking - API analytics dashboard - Manual track mapping interface - Playlist statistics and health monitoring
80 lines
3.1 KiB
C#
80 lines
3.1 KiB
C#
namespace allstarr.Models.Settings;
|
|
|
|
/// <summary>
|
|
/// Configuration for direct Spotify API access.
|
|
/// This enables fetching playlist data directly from Spotify rather than relying on the Jellyfin plugin.
|
|
///
|
|
/// Benefits over Jellyfin plugin approach:
|
|
/// - Track ordering is preserved (critical for playlists like Release Radar)
|
|
/// - ISRC codes available for exact matching
|
|
/// - Real-time data without waiting for plugin sync
|
|
/// - Full track metadata (duration, release date, etc.)
|
|
/// </summary>
|
|
public class SpotifyApiSettings
|
|
{
|
|
/// <summary>
|
|
/// Enable direct Spotify API integration.
|
|
/// When enabled, playlists will be fetched directly from Spotify instead of the Jellyfin plugin.
|
|
/// </summary>
|
|
public bool Enabled { get; set; }
|
|
|
|
/// <summary>
|
|
/// Spotify Client ID from https://developer.spotify.com/dashboard
|
|
/// Used for OAuth token refresh and API access.
|
|
/// </summary>
|
|
public string ClientId { get; set; } = string.Empty;
|
|
|
|
/// <summary>
|
|
/// Spotify Client Secret from https://developer.spotify.com/dashboard
|
|
/// Optional - only needed for certain OAuth flows.
|
|
/// </summary>
|
|
public string ClientSecret { get; set; } = string.Empty;
|
|
|
|
/// <summary>
|
|
/// Spotify session cookie (sp_dc).
|
|
/// Required for accessing editorial/personalized playlists like Release Radar and Discover Weekly.
|
|
/// These playlists are not available via the official API.
|
|
///
|
|
/// To get this cookie:
|
|
/// 1. Log into open.spotify.com in your browser
|
|
/// 2. Open DevTools (F12) > Application > Cookies > https://open.spotify.com
|
|
/// 3. Copy the value of the "sp_dc" cookie
|
|
///
|
|
/// Note: This cookie expires periodically and will need to be refreshed.
|
|
/// </summary>
|
|
public string SessionCookie { get; set; } = string.Empty;
|
|
|
|
/// <summary>
|
|
/// Cache duration in minutes for playlist data.
|
|
/// Playlists like Release Radar only update weekly, so caching is beneficial.
|
|
/// Default: 60 minutes
|
|
/// </summary>
|
|
public int CacheDurationMinutes { get; set; } = 60;
|
|
|
|
/// <summary>
|
|
/// Rate limit delay between Spotify API requests in milliseconds.
|
|
/// Default: 100ms (Spotify allows ~100 requests per minute)
|
|
/// </summary>
|
|
public int RateLimitDelayMs { get; set; } = 100;
|
|
|
|
/// <summary>
|
|
/// Whether to prefer ISRC matching over fuzzy title/artist matching when ISRC is available.
|
|
/// ISRC provides exact track identification across services.
|
|
/// Default: true
|
|
/// </summary>
|
|
public bool PreferIsrcMatching { get; set; } = true;
|
|
|
|
/// <summary>
|
|
/// ISO date string of when the session cookie was last set/updated.
|
|
/// Used to track cookie age and warn when it's approaching expiration (~1 year).
|
|
/// </summary>
|
|
public string? SessionCookieSetDate { get; set; }
|
|
|
|
/// <summary>
|
|
/// URL of the Spotify Lyrics API sidecar service.
|
|
/// Default: http://spotify-lyrics:8080 (docker-compose service name)
|
|
/// This service wraps Spotify's color-lyrics API for easier access.
|
|
/// </summary>
|
|
public string LyricsApiUrl { get; set; } = "http://spotify-lyrics:8080";
|
|
}
|