From 0356f3c54d46e115a0a4d4e89e4c092619faf990 Mon Sep 17 00:00:00 2001 From: Josh Patra Date: Tue, 3 Feb 2026 01:46:38 -0500 Subject: [PATCH] logic fix 2 --- allstarr/Program.cs | 90 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 87 insertions(+), 3 deletions(-) diff --git a/allstarr/Program.cs b/allstarr/Program.cs index aec0fe5..49acc36 100644 --- a/allstarr/Program.cs +++ b/allstarr/Program.cs @@ -117,6 +117,11 @@ builder.Services.Configure(options => { builder.Configuration.GetSection("SpotifyImport").Bind(options); + // Debug: Check what Bind() populated + Console.WriteLine($"DEBUG: After Bind(), Playlists.Count = {options.Playlists.Count}"); + Console.WriteLine($"DEBUG: After Bind(), PlaylistIds.Count = {options.PlaylistIds.Count}"); + Console.WriteLine($"DEBUG: After Bind(), PlaylistNames.Count = {options.PlaylistNames.Count}"); + // Parse SPOTIFY_IMPORT_PLAYLISTS env var (JSON array format) // Format: [["Name","Id","first|last"],["Name2","Id2","first|last"]] var playlistsEnv = builder.Configuration.GetValue("SpotifyImport:Playlists"); @@ -167,7 +172,12 @@ builder.Services.Configure(options => // Legacy support: Parse old SPOTIFY_IMPORT_PLAYLIST_IDS/NAMES env vars // Only used if new Playlists format is not configured - if (options.Playlists.Count == 0) + // Check if we have legacy env vars to parse + var playlistIdsEnv = builder.Configuration.GetValue("SpotifyImport:PlaylistIds"); + var playlistNamesEnv = builder.Configuration.GetValue("SpotifyImport:PlaylistNames"); + var hasLegacyConfig = !string.IsNullOrWhiteSpace(playlistIdsEnv) || !string.IsNullOrWhiteSpace(playlistNamesEnv); + + if (hasLegacyConfig && options.Playlists.Count == 0) { Console.WriteLine("Parsing legacy Spotify playlist format..."); @@ -179,7 +189,6 @@ builder.Services.Configure(options => options.PlaylistNames.Clear(); options.PlaylistLocalTracksPositions.Clear(); - var playlistIdsEnv = builder.Configuration.GetValue("SpotifyImport:PlaylistIds"); if (!string.IsNullOrWhiteSpace(playlistIdsEnv)) { options.PlaylistIds = playlistIdsEnv @@ -190,7 +199,82 @@ builder.Services.Configure(options => Console.WriteLine($" Parsed {options.PlaylistIds.Count} playlist IDs from env var"); } - var playlistNamesEnv = builder.Configuration.GetValue("SpotifyImport:PlaylistNames"); + if (!string.IsNullOrWhiteSpace(playlistNamesEnv)) + { + options.PlaylistNames = playlistNamesEnv + .Split(',', StringSplitOptions.RemoveEmptyEntries) + .Select(name => name.Trim()) + .Where(name => !string.IsNullOrEmpty(name)) + .ToList(); + Console.WriteLine($" Parsed {options.PlaylistNames.Count} playlist names from env var"); + } + + var playlistPositionsEnv = builder.Configuration.GetValue("SpotifyImport:PlaylistLocalTracksPositions"); + if (!string.IsNullOrWhiteSpace(playlistPositionsEnv)) + { + options.PlaylistLocalTracksPositions = playlistPositionsEnv + .Split(',', StringSplitOptions.RemoveEmptyEntries) + .Select(pos => pos.Trim()) + .Where(pos => !string.IsNullOrEmpty(pos)) + .ToList(); + Console.WriteLine($" Parsed {options.PlaylistLocalTracksPositions.Count} playlist positions from env var"); + } + else + { + Console.WriteLine(" No playlist positions env var found, will use defaults"); + } + + // Convert legacy format to new Playlists array + Console.WriteLine($" Converting {options.PlaylistIds.Count} playlists to new format..."); + for (int i = 0; i < options.PlaylistIds.Count; i++) + { + var name = i < options.PlaylistNames.Count ? options.PlaylistNames[i] : options.PlaylistIds[i]; + var position = LocalTracksPosition.First; // Default + + // Parse position if provided + if (i < options.PlaylistLocalTracksPositions.Count) + { + var posStr = options.PlaylistLocalTracksPositions[i]; + if (posStr.Equals("last", StringComparison.OrdinalIgnoreCase)) + { + position = LocalTracksPosition.Last; + } + } + + options.Playlists.Add(new SpotifyPlaylistConfig + { + Name = name, + Id = options.PlaylistIds[i], + LocalTracksPosition = position + }); + Console.WriteLine($" [{i}] {name} (ID: {options.PlaylistIds[i]}, Position: {position})"); + } + #pragma warning restore CS0618 + } + else if (hasLegacyConfig && options.Playlists.Count > 0) + { + // Bind() incorrectly populated Playlists from legacy env vars + // Clear it and re-parse properly + Console.WriteLine($"DEBUG: Bind() incorrectly populated {options.Playlists.Count} playlists, clearing and re-parsing..."); + options.Playlists.Clear(); + options.PlaylistIds.Clear(); + options.PlaylistNames.Clear(); + options.PlaylistLocalTracksPositions.Clear(); + + Console.WriteLine("Parsing legacy Spotify playlist format..."); + + #pragma warning disable CS0618 // Type or member is obsolete + + if (!string.IsNullOrWhiteSpace(playlistIdsEnv)) + { + options.PlaylistIds = playlistIdsEnv + .Split(',', StringSplitOptions.RemoveEmptyEntries) + .Select(id => id.Trim()) + .Where(id => !string.IsNullOrEmpty(id)) + .ToList(); + Console.WriteLine($" Parsed {options.PlaylistIds.Count} playlist IDs from env var"); + } + if (!string.IsNullOrWhiteSpace(playlistNamesEnv)) { options.PlaylistNames = playlistNamesEnv