mirror of
https://github.com/tomahawk-player/tomahawk.git
synced 2025-08-06 22:26:32 +02:00
Handle moves from spotify (doesn't show up till a restart)
This commit is contained in:
@@ -318,11 +318,12 @@ SpotifyAccount::resolverMessage( const QString &msgType, const QVariantMap &msg
|
|||||||
SpotifyPlaylistUpdater* updater = m_updaters[ plid ];
|
SpotifyPlaylistUpdater* updater = m_updaters[ plid ];
|
||||||
Q_ASSERT( updater->sync() );
|
Q_ASSERT( updater->sync() );
|
||||||
|
|
||||||
const QVariantList tracksList = msg.value( "trackPositions" ).toList();
|
const QString newStartPos = msg.value( "newStartPosition" ).toString();
|
||||||
|
const QVariantList tracksList = msg.value( "tracks" ).toList();
|
||||||
const QString newRev = msg.value( "revid" ).toString();
|
const QString newRev = msg.value( "revid" ).toString();
|
||||||
const QString oldRev = msg.value( "oldRev" ).toString();
|
const QString oldRev = msg.value( "oldRev" ).toString();
|
||||||
|
|
||||||
updater->spotifyTracksMoved( tracksList, newRev, oldRev );
|
updater->spotifyTracksMoved( tracksList, newStartPos, newRev, oldRev );
|
||||||
}
|
}
|
||||||
else if( msgType == "playlistRenamed" )
|
else if( msgType == "playlistRenamed" )
|
||||||
{
|
{
|
||||||
|
@@ -344,16 +344,60 @@ SpotifyPlaylistUpdater::tomahawkPlaylistRenamed(const QString &newT, const QStri
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
SpotifyPlaylistUpdater::spotifyTracksMoved( const QVariantList& tracks, const QString& newRev, const QString& oldRev )
|
SpotifyPlaylistUpdater::spotifyTracksMoved( const QVariantList& tracks, const QString& newStartPos, const QString& newRev, const QString& oldRev )
|
||||||
{
|
{
|
||||||
// TODO
|
if( playlist()->busy() )
|
||||||
// if( playlist()->busy() )
|
{
|
||||||
// {
|
// We might still be waiting for a add/remove tracks command to finish, so the entries we get here might be stale
|
||||||
// // We might still be waiting for a add/remove tracks command to finish, so the entries we get here might be stale
|
// wait for any to be complete
|
||||||
// // wait for any to be complete
|
m_queuedOps << NewClosure( 0, "", this, SLOT(spotifyTracksMoved(QVariantList, QString, QString, QString)), tracks, newStartPos, newRev, oldRev );
|
||||||
// m_queuedOps << NewClosure( 0, "", this, "spotifyPlaylistRenamed", title, newRev, oldRev );
|
return;
|
||||||
// return;
|
}
|
||||||
// }
|
|
||||||
|
|
||||||
|
qDebug() << "Moving some tracks in a spotify-synced playlist, tracks:" << tracks << "to new startpos:" << newStartPos;
|
||||||
|
// Uh oh, dont' want to get out of sync!!
|
||||||
|
// Q_ASSERT( m_latestRev == oldRev );
|
||||||
|
// m_latestRev = newRev;
|
||||||
|
QList< plentry_ptr > entries = playlist()->entries();
|
||||||
|
|
||||||
|
QList< plentry_ptr > toMove;
|
||||||
|
for ( QList< plentry_ptr >::iterator iter = entries.begin(); iter != entries.end(); )
|
||||||
|
{
|
||||||
|
if ( (*iter)->annotation().isEmpty() )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if ( tracks.contains( (*iter)->annotation() ) )
|
||||||
|
{
|
||||||
|
toMove << *iter;
|
||||||
|
iter = entries.erase( iter );
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
++iter;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Find the position of the track to insert from
|
||||||
|
for ( QList< plentry_ptr >::iterator iter = entries.begin(); iter != entries.end(); ++iter )
|
||||||
|
{
|
||||||
|
if ( (*iter)->annotation() == newStartPos )
|
||||||
|
{
|
||||||
|
++iter;
|
||||||
|
while ( !toMove.isEmpty() )
|
||||||
|
{
|
||||||
|
qDebug() << "Adding moved track to playlist at pos (end:" << (iter == entries.end());
|
||||||
|
if ( iter != entries.end() )
|
||||||
|
qDebug() << (*iter)->query()->track() << (*iter)->query()->artist();
|
||||||
|
iter = entries.insert( iter, toMove.takeLast() );
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_blockUpdatesForNextRevision = true;
|
||||||
|
playlist()->createNewRevision( uuid(), playlist()->currentrevision(), entries );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -59,7 +59,7 @@ public slots:
|
|||||||
/// Spotify callbacks when we are directly instructed from the resolver
|
/// Spotify callbacks when we are directly instructed from the resolver
|
||||||
void spotifyTracksAdded( const QVariantList& tracks, const QString& startPosId, const QString& newRev, const QString& oldRev );
|
void spotifyTracksAdded( const QVariantList& tracks, const QString& startPosId, const QString& newRev, const QString& oldRev );
|
||||||
void spotifyTracksRemoved( const QVariantList& tracks, const QString& newRev, const QString& oldRev );
|
void spotifyTracksRemoved( const QVariantList& tracks, const QString& newRev, const QString& oldRev );
|
||||||
void spotifyTracksMoved( const QVariantList& tracks, const QString& newRev, const QString& oldRev );
|
void spotifyTracksMoved( const QVariantList& tracks, const QString& newStartPos, const QString& newRev, const QString& oldRev );
|
||||||
void spotifyPlaylistRenamed( const QString& title, const QString& newRev, const QString& oldRev );
|
void spotifyPlaylistRenamed( const QString& title, const QString& newRev, const QString& oldRev );
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
Reference in New Issue
Block a user