sync with upstream/cspot

This commit is contained in:
philippe44
2023-11-21 12:52:55 -08:00
parent 807a0e547a
commit 5c90086bbd
3 changed files with 16 additions and 13 deletions

View File

@@ -5,6 +5,7 @@
#include <unistd.h> #include <unistd.h>
#include <cstring> #include <cstring>
#include <vector> #include <vector>
#include <mutex>
#if __has_include("avahi-client/client.h") #if __has_include("avahi-client/client.h")
#include <avahi-client/client.h> #include <avahi-client/client.h>

View File

@@ -201,21 +201,23 @@ void SpircHandler::handleFrame(std::vector<uint8_t>& data) {
break; break;
} }
case MessageType_kMessageTypeReplace: { case MessageType_kMessageTypeReplace: {
CSPOT_LOG(debug, "Got replace frame %d", playbackState->remoteTracks.size()); 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
bool cleared = trackQueue->updateTracks( bool cleared = trackQueue->updateTracks(
playbackState->remoteFrame.state.position_ms + playbackState->remoteFrame.state.position_ms +
ctx->timeProvider->getSyncedTimestamp() - ctx->timeProvider->getSyncedTimestamp() -
playbackState->innerFrame.state.position_measured_at); playbackState->innerFrame.state.position_measured_at,
false);
this->notify(); this->notify();
// need to re-load all if streaming track is completed // need to re-load all if streaming track is completed
if (cleared) { if (cleared) {
sendEvent(EventType::FLUSH); sendEvent(EventType::FLUSH);
trackPlayer->resetState(); trackPlayer->resetState();
} }
break; break;
} }

View File

@@ -609,16 +609,16 @@ bool TrackQueue::updateTracks(uint32_t requestedPosition, bool initial) {
playableSemaphore->give(); playableSemaphore->give();
} else if (preloadedTracks[0]->loading) { } else if (preloadedTracks[0]->loading) {
// try to not re-load track if we are still loading it // try to not re-load track if we are still loading it
// 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 %d", currentTracksIndex); CSPOT_LOG(info, "Keeping current track %d", currentTracksIndex);
queueNextTrack(1); queueNextTrack(1);
cleared = false; cleared = false;
} else { } else {
// Clear preloaded tracks // Clear preloaded tracks
preloadedTracks.clear(); preloadedTracks.clear();