attempt to fix cspot track issues - release

This commit is contained in:
philippe44
2023-11-13 22:30:45 -08:00
parent d31697e7ef
commit a9ca4c4450
3 changed files with 16 additions and 21 deletions

View File

@@ -361,7 +361,7 @@ void services_init(void) {
} }
#endif #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); parse_set_GPIO(set_chip_power_gpio);
// shared I2C bus // shared I2C bus

View File

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

View File

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