From c0c7668cc4d7551e2d55eea3bbb89c9a31c27165 Mon Sep 17 00:00:00 2001 From: Josh Patra Date: Sun, 1 Feb 2026 11:22:12 -0500 Subject: [PATCH] Bypass sync window check on startup to fetch missing tracks immediately - On startup, if no cache exists, fetch immediately regardless of sync window - Regular background checks still respect sync window timing - Ensures playlists are populated even if app restarts before sync time --- .../Spotify/SpotifyMissingTracksFetcher.cs | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/allstarr/Services/Spotify/SpotifyMissingTracksFetcher.cs b/allstarr/Services/Spotify/SpotifyMissingTracksFetcher.cs index 37a2926..d377cc8 100644 --- a/allstarr/Services/Spotify/SpotifyMissingTracksFetcher.cs +++ b/allstarr/Services/Spotify/SpotifyMissingTracksFetcher.cs @@ -78,10 +78,10 @@ public class SpotifyMissingTracksFetcher : BackgroundService var shouldRunOnStartup = await ShouldRunOnStartupAsync(); if (shouldRunOnStartup) { - _logger.LogInformation("Running initial fetch on startup"); + _logger.LogInformation("Running initial fetch on startup (bypassing sync window check)"); try { - await FetchMissingTracksAsync(stoppingToken); + await FetchMissingTracksAsync(stoppingToken, bypassSyncWindowCheck: true); _hasRunOnce = true; } catch (Exception ex) @@ -91,7 +91,7 @@ public class SpotifyMissingTracksFetcher : BackgroundService } else { - _logger.LogInformation("Skipping startup fetch - already ran within last 24 hours"); + _logger.LogInformation("Skipping startup fetch - already have recent cache"); _hasRunOnce = true; } } @@ -213,7 +213,7 @@ public class SpotifyMissingTracksFetcher : BackgroundService } } - private async Task FetchMissingTracksAsync(CancellationToken cancellationToken) + private async Task FetchMissingTracksAsync(CancellationToken cancellationToken, bool bypassSyncWindowCheck = false) { var settings = _spotifySettings.Value; var now = DateTime.UtcNow; @@ -222,13 +222,20 @@ public class SpotifyMissingTracksFetcher : BackgroundService .AddMinutes(settings.SyncStartMinute); var syncEnd = syncStart.AddHours(settings.SyncWindowHours); - // Only run after the sync window has passed - if (now < syncEnd) + // Only run after the sync window has passed (unless bypassing for startup) + if (!bypassSyncWindowCheck && now < syncEnd) { return; } - _logger.LogInformation("Sync window passed, searching last 24 hours for missing tracks..."); + if (bypassSyncWindowCheck) + { + _logger.LogInformation("Fetching missing tracks (startup mode, bypassing sync window check)..."); + } + else + { + _logger.LogInformation("Sync window passed, searching last 24 hours for missing tracks..."); + } foreach (var kvp in _playlistIdToName) {