diff --git a/src/libtomahawk/accounts/spotify/SpotifyAccount.cpp b/src/libtomahawk/accounts/spotify/SpotifyAccount.cpp index 4b584ddce..afe9f33e8 100644 --- a/src/libtomahawk/accounts/spotify/SpotifyAccount.cpp +++ b/src/libtomahawk/accounts/spotify/SpotifyAccount.cpp @@ -639,9 +639,7 @@ SpotifyAccount::collaborateActionTriggered( QAction* action ) msg[ "_msgtype" ] = "setCollaborative"; msg[ "collaborative" ] = !updater->collaborative(); msg[ "playlistid" ] = info->plid; - sendMessage( msg, this ); - updater->setCollaborative( !updater->collaborative() ); } else tLog() << "cant set collab for this pl, not owner!?" << info->name << info->plid; @@ -906,7 +904,7 @@ SpotifyAccount::resolverMessage( const QString &msgType, const QVariantMap &msg updater->spotifyTracksMoved( tracksList, newStartPos, newRev, oldRev ); } - else if ( msgType == "playlistRenamed" ) + else if ( msgType == "playlistMetadataChanged" ) { const QString plid = msg.value( "id" ).toString(); // We should already be syncing this playlist if we get updates for it @@ -919,12 +917,30 @@ SpotifyAccount::resolverMessage( const QString &msgType, const QVariantMap &msg SpotifyPlaylistUpdater* updater = m_updaters[ plid ]; Q_ASSERT( updater->sync() ); - qDebug() << "Playlist renamed fetched in tomahawk"; const QString title = msg.value( "name" ).toString(); const QString newRev = msg.value( "revid" ).toString(); const QString oldRev = msg.value( "oldRev" ).toString(); + const bool collaborative = msg.value( "collaborative" ).toBool(); + const int subscribers = msg.value( "subscribers" ).toInt(); - updater->spotifyPlaylistRenamed( title, newRev, oldRev ); + SpotifyPlaylistInfo* info = m_allSpotifyPlaylists[ plid ]; + if( info && info->name != title ) + { + qDebug() << "Playlist renamed fetched in tomahawk"; + updater->spotifyPlaylistRenamed( title, newRev, oldRev ); + } + + if( updater->collaborative() != collaborative ) + { + tLog() << "Setting collaborative!" << collaborative; + updater->setCollaborative( collaborative ); + } + + if( updater->subscribers() != subscribers ) + { + tLog() << "Updateing number of subscribers" << subscribers; + updater->setSubscribers( subscribers ); + } } else if ( msgType == "spotifyError" ) { diff --git a/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.cpp b/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.cpp index 3b8c71ac8..bdc0910f9 100644 --- a/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.cpp +++ b/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.cpp @@ -61,6 +61,7 @@ SpotifyUpdaterFactory::create( const Tomahawk::playlist_ptr& pl, const QVariantH const bool isSubscribed = settings.value( "subscribed" ).toBool(); const bool isOwner = settings.value( "isOwner" ).toBool(); const bool isCollaborative = settings.value( "collaborative" ).toBool(); + const bool subscribers = settings.value( "subscribers" ).toInt(); Q_ASSERT( !spotifyId.isEmpty() ); SpotifyPlaylistUpdater* updater = new SpotifyPlaylistUpdater( m_account.data(), latestRev, spotifyId, pl ); updater->setSync( sync ); @@ -68,6 +69,7 @@ SpotifyUpdaterFactory::create( const Tomahawk::playlist_ptr& pl, const QVariantH updater->setSubscribedStatus( isSubscribed ); updater->setOwner( isOwner ); updater->setCollaborative( isCollaborative ); + updater->setSubscribers( subscribers ); m_account.data()->registerUpdaterForPlaylist( spotifyId, updater ); return updater; @@ -85,6 +87,7 @@ SpotifyPlaylistUpdater::SpotifyPlaylistUpdater( SpotifyAccount* acct, const QStr , m_subscribed( false ) , m_isOwner( false ) , m_collaborative( false ) + , m_subscribers( 0 ) { init(); } @@ -315,6 +318,17 @@ SpotifyPlaylistUpdater::canSubscribe() const return m_canSubscribe; } +void +SpotifyPlaylistUpdater::setSubscribers( int numSubscribers ) +{ + if ( m_subscribers == numSubscribers ) + return; + + m_subscribers = numSubscribers; + + saveToSettings(); + emit changed(); +} PlaylistDeleteQuestions SpotifyPlaylistUpdater::deleteQuestions() const diff --git a/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.h b/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.h index 2bc606386..bcd7c7f36 100644 --- a/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.h +++ b/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.h @@ -61,6 +61,8 @@ public: void setSubscribedStatus( bool subscribed ); bool canSubscribe() const; void setCanSubscribe( bool canSub ); + void setSubscribers( int numSubscribers ); + int subscribers() const { return m_subscribers; } // Collaborative actions void setOwner( bool owner ); bool owner() const; @@ -117,6 +119,7 @@ private: bool m_canSubscribe; bool m_isOwner; bool m_collaborative; + int m_subscribers; QQueue<_detail::Closure*> m_queuedOps; #ifndef ENABLE_HEADLESS diff --git a/src/libtomahawk/playlist/PlaylistUpdaterInterface.h b/src/libtomahawk/playlist/PlaylistUpdaterInterface.h index 53a2fe2ad..d0da1e98a 100644 --- a/src/libtomahawk/playlist/PlaylistUpdaterInterface.h +++ b/src/libtomahawk/playlist/PlaylistUpdaterInterface.h @@ -86,6 +86,8 @@ public: virtual void setSubscribed( bool ) {} virtual void setCollaborative( bool ) {} virtual bool collaborative() const { return false; } + virtual void setSubscribers( int ) {} + virtual int subscribers() const { return 0; } // The int data value associated with each question must be unique across *all* playlist updaters, // as setQuestionResults is called with all questions from all updaters. diff --git a/src/libtomahawk/utils/SpotifyParser.cpp b/src/libtomahawk/utils/SpotifyParser.cpp index 86a976f82..f6a455867 100644 --- a/src/libtomahawk/utils/SpotifyParser.cpp +++ b/src/libtomahawk/utils/SpotifyParser.cpp @@ -48,6 +48,7 @@ SpotifyParser::SpotifyParser( const QStringList& Urls, bool createNewPlaylist, Q , m_collaborative( false ) , m_createNewPlaylist( createNewPlaylist ) , m_browseJob( 0 ) + , m_subscribers( 0 ) { foreach ( const QString& url, Urls ) @@ -63,6 +64,7 @@ SpotifyParser::SpotifyParser( const QString& Url, bool createNewPlaylist, QObjec , m_collaborative( false ) , m_createNewPlaylist( createNewPlaylist ) , m_browseJob( 0 ) + , m_subscribers( 0 ) { lookupUrl( Url ); } @@ -331,6 +333,7 @@ SpotifyParser::playlistListingResult( const QString& msgType, const QVariantMap& m_single = false; m_creator = msg.value( "creator" ).toString(); m_collaborative = msg.value( "collaborative" ).toBool(); + m_subscribers = msg.value( "subscribers" ).toInt(); const QVariantList tracks = msg.value( "tracks" ).toList(); foreach ( const QVariant& blob, tracks ) @@ -397,7 +400,7 @@ SpotifyParser::checkBrowseFinished() updater->setOwner( true ); updater->setCollaborative( m_collaborative ); - + updater->setSubscribers( m_subscribers ); // Just register the infos Accounts::SpotifyAccount::instance()->registerPlaylistInfo( m_title, m_browseUri, m_browseUri, false, false, updater->owner() ); Accounts::SpotifyAccount::instance()->registerUpdaterForPlaylist( m_browseUri, updater ); diff --git a/src/libtomahawk/utils/SpotifyParser.h b/src/libtomahawk/utils/SpotifyParser.h index a86f4507e..b7a542fdf 100644 --- a/src/libtomahawk/utils/SpotifyParser.h +++ b/src/libtomahawk/utils/SpotifyParser.h @@ -86,6 +86,7 @@ private: bool m_trackMode; bool m_createNewPlaylist; bool m_collaborative; + int m_subscribers; QList< query_ptr > m_tracks; QSet< QNetworkReply* > m_queries; QString m_title, m_info, m_creator; diff --git a/src/sourcetree/SourceDelegate.cpp b/src/sourcetree/SourceDelegate.cpp index 4a9fbdb45..60dbcde01 100644 --- a/src/sourcetree/SourceDelegate.cpp +++ b/src/sourcetree/SourceDelegate.cpp @@ -569,6 +569,7 @@ SourceDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, co const QRect subRect( o.rect.right() - padding - imgWidth, o.rect.top() + padding, imgWidth, imgWidth ); painter->drawPixmap( subRect, icon ); } + if ( plItem->collaborative() ) { const int imgWidth = m_collaborativeOn.size().width(); diff --git a/src/sourcetree/items/PlaylistItems.cpp b/src/sourcetree/items/PlaylistItems.cpp index 12d27fa8e..72b3098a3 100644 --- a/src/sourcetree/items/PlaylistItems.cpp +++ b/src/sourcetree/items/PlaylistItems.cpp @@ -311,6 +311,22 @@ PlaylistItem::collaborative() const return collaborative; } +int +PlaylistItem::subscribers() const +{ + Q_ASSERT( !m_playlist.isNull() ); + + if ( m_playlist->updaters().isEmpty() ) + return false; + + foreach ( PlaylistUpdaterInterface* updater, m_playlist->updaters() ) + { + if( updater->subscribers() ) + return updater->subscribers(); + } + return 0; +} + bool PlaylistItem::createOverlay() { diff --git a/src/sourcetree/items/PlaylistItems.h b/src/sourcetree/items/PlaylistItems.h index 7f346b0f5..2f86279a5 100644 --- a/src/sourcetree/items/PlaylistItems.h +++ b/src/sourcetree/items/PlaylistItems.h @@ -48,6 +48,8 @@ public: QPixmap subscribedIcon() const { return m_showSubscribed ? m_subscribedOnIcon : m_subscribedOffIcon; } void setSubscribed( bool subscribed ); bool collaborative() const; + void setSubscribers( int numSubscribers ); + int subscribers() const; public slots: virtual void activate();