mirror of
https://github.com/sle118/squeezelite-esp32.git
synced 2025-12-10 05:27:01 +03:00
attempt to fix cspot track issues - release
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user