Browse Source

attempt to fix cspot track issues - release

philippe44 1 year ago
parent
commit
a9ca4c4450

+ 1 - 1
components/services/services.c

@@ -361,7 +361,7 @@ void services_init(void) {
 	}
 #endif
 
-	// set potential power GPIO on chip first in case expanders are power using these
+	// set potential power GPIO on chip first in case expanders are powered using these
 	parse_set_GPIO(set_chip_power_gpio);
 
 	// shared I2C bus

+ 1 - 1
components/spotify/cspot/src/SpircHandler.cpp

@@ -201,7 +201,7 @@ void SpircHandler::handleFrame(std::vector<uint8_t>& data) {
       break;
     }
     case MessageType_kMessageTypeReplace: {
-      CSPOT_LOG(debug, "Got replace frame");
+      CSPOT_LOG(debug, "Got replace frame %d", playbackState->remoteTracks.size());
       playbackState->syncWithRemote();
 
       // 1st track is the current one, but update the position

+ 14 - 19
components/spotify/cspot/src/TrackQueue.cpp

@@ -591,15 +591,14 @@ bool TrackQueue::updateTracks(uint32_t requestedPosition, bool initial) {
   std::scoped_lock lock(tracksMutex);
   bool cleared = true;
 
+  // Copy requested track list
+  currentTracks = playbackState->remoteTracks;
+  currentTracksIndex = playbackState->innerFrame.state.playing_track_index;
+
   if (initial) {
     // Clear preloaded tracks
     preloadedTracks.clear();
 
-    // Copy requested track list
-    currentTracks = playbackState->remoteTracks;
-
-    currentTracksIndex = playbackState->innerFrame.state.playing_track_index;
-
     if (currentTracksIndex < currentTracks.size()) {
       // Push a song on the preloaded queue
       queueNextTrack(0, requestedPosition);
@@ -609,28 +608,24 @@ bool TrackQueue::updateTracks(uint32_t requestedPosition, bool initial) {
     notifyPending = true;
 
     playableSemaphore->give();
-  } else {
-    // Copy requested track list
-    currentTracks = playbackState->remoteTracks;
-
-    // try to not re-load track if we are still loading it
-    if (preloadedTracks[0]->loading) {
+  } else if (preloadedTracks[0]->loading) {
+      // try to not re-load track if we are still loading it
+   
       // remove everything except first track
       preloadedTracks.erase(preloadedTracks.begin() + 1, preloadedTracks.end());
 
       // Push a song on the preloaded queue
-      CSPOT_LOG(info, "Keeping current track");
+      CSPOT_LOG(info, "Keeping current track %d", currentTracksIndex);
       queueNextTrack(1);
 
       cleared = false;
-    } else {
-      // Clear preloaded tracks
-      preloadedTracks.clear();
+  } else {
+    // Clear preloaded tracks
+    preloadedTracks.clear();
 
-      // Push a song on the preloaded queue
-      CSPOT_LOG(info, "Re-loading current track");
-      queueNextTrack(0, requestedPosition);
-    }
+    // Push a song on the preloaded queue
+    CSPOT_LOG(info, "Re-loading current track");
+    queueNextTrack(0, requestedPosition);
   }
 
   return cleared;