mirror of
https://github.com/sle118/squeezelite-esp32.git
synced 2025-12-07 20:17:04 +03:00
sync with upstream/cspot
This commit is contained in:
@@ -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>
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user