From 5c2da3d83530fa7760d39d712565ef8b46cfce9c Mon Sep 17 00:00:00 2001 From: Syd Lawrence Date: Fri, 13 Jul 2012 22:00:03 +0100 Subject: [PATCH 01/53] added grid view icons --- data/images/view-toggle-icon-grid-active.png | Bin 0 -> 2853 bytes data/images/view-toggle-icon-grid-inactive.png | Bin 0 -> 2911 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 data/images/view-toggle-icon-grid-active.png create mode 100644 data/images/view-toggle-icon-grid-inactive.png diff --git a/data/images/view-toggle-icon-grid-active.png b/data/images/view-toggle-icon-grid-active.png new file mode 100644 index 0000000000000000000000000000000000000000..2c475716f850b28ca927585069512f73e9d99600 GIT binary patch literal 2853 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 JPDHLkV1n{MXI}sS literal 0 HcmV?d00001 From 479262c846b23a7518c86e8cc0b326f629de1310 Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Fri, 13 Jul 2012 17:46:55 -0400 Subject: [PATCH 02/53] Extra pointer safety --- src/libtomahawk/playlist/TreeProxyModel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libtomahawk/playlist/TreeProxyModel.cpp b/src/libtomahawk/playlist/TreeProxyModel.cpp index d95232261..5cf9d2a1f 100644 --- a/src/libtomahawk/playlist/TreeProxyModel.cpp +++ b/src/libtomahawk/playlist/TreeProxyModel.cpp @@ -204,7 +204,7 @@ TreeProxyModel::filterAcceptsRow( int sourceRow, const QModelIndex& sourceParent PlayableItem* ti = sourceModel()->itemFromIndex( sourceModel()->index( i, 0, sourceParent ) ); - if ( ti && ti->name() == item->name() ) + if ( ti && ti->name() == item->name() && !ti->query().isNull() ) { if ( ti->query()->albumpos() == item->query()->albumpos() || ti->query()->albumpos() == 0 || item->query()->albumpos() == 0 ) { From 4e3febcb5b01e39ad27f02cd2193cffa1352a252 Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Fri, 13 Jul 2012 17:47:13 -0400 Subject: [PATCH 03/53] Let AlbumPlaylistInterface accept results from first good infoplugin result --- src/libtomahawk/AlbumPlaylistInterface.cpp | 19 +++++++++++++++++++ src/libtomahawk/AlbumPlaylistInterface.h | 1 + 2 files changed, 20 insertions(+) diff --git a/src/libtomahawk/AlbumPlaylistInterface.cpp b/src/libtomahawk/AlbumPlaylistInterface.cpp index d74af3811..050fcea81 100644 --- a/src/libtomahawk/AlbumPlaylistInterface.cpp +++ b/src/libtomahawk/AlbumPlaylistInterface.cpp @@ -114,6 +114,10 @@ AlbumPlaylistInterface::tracks() connect( Tomahawk::InfoSystem::InfoSystem::instance(), SIGNAL( info( Tomahawk::InfoSystem::InfoRequestData, QVariant ) ), SLOT( infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData, QVariant ) ) ); + + connect( Tomahawk::InfoSystem::InfoSystem::instance(), + SIGNAL( finished( QString ) ), + SLOT( infoSystemFinished( QString ) ) ); } else if ( m_mode == DatabaseMode && !m_databaseLoaded ) { @@ -178,9 +182,24 @@ AlbumPlaylistInterface::infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData re } } + if ( !m_queries.isEmpty() ) + { + infoSystemFinished( id() ); + } +} + + +void +AlbumPlaylistInterface::infoSystemFinished( const QString& infoId ) +{ + if ( infoId != id() ) + return; + m_infoSystemLoaded = true; disconnect( Tomahawk::InfoSystem::InfoSystem::instance(), SIGNAL( info( Tomahawk::InfoSystem::InfoRequestData, QVariant ) ), this, SLOT( infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData, QVariant ) ) ); + disconnect( Tomahawk::InfoSystem::InfoSystem::instance(), SIGNAL( finished( QString ) ), + this, SLOT( infoSystemFinished( QString ) ) ); if ( m_queries.isEmpty() && m_mode == Mixed ) { diff --git a/src/libtomahawk/AlbumPlaylistInterface.h b/src/libtomahawk/AlbumPlaylistInterface.h index b2c9d471c..f5f005c83 100644 --- a/src/libtomahawk/AlbumPlaylistInterface.h +++ b/src/libtomahawk/AlbumPlaylistInterface.h @@ -61,6 +61,7 @@ signals: private slots: void onTracksLoaded( const QList< Tomahawk::query_ptr >& tracks ); void infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData requestData, QVariant output ); + void infoSystemFinished( const QString& infoId ); private: QList< Tomahawk::query_ptr > m_queries; From 866bf9372153fbdf7f24d557bb857d56da2503c7 Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Fri, 13 Jul 2012 17:47:44 -0400 Subject: [PATCH 04/53] Call sendMessage() with a QueuedConnection as it's cross-thread --- .../accounts/spotify/SpotifyAccount.cpp | 18 +++++++++++------- .../accounts/spotify/SpotifyAccount.h | 10 ++++++---- .../accounts/spotify/SpotifyInfoPlugin.cpp | 16 +++++++--------- .../accounts/spotify/SpotifyInfoPlugin.h | 4 +--- .../spotify/SpotifyPlaylistUpdater.cpp | 8 +++++--- .../accounts/spotify/SpotifyPlaylistUpdater.h | 6 +++--- 6 files changed, 33 insertions(+), 29 deletions(-) diff --git a/src/libtomahawk/accounts/spotify/SpotifyAccount.cpp b/src/libtomahawk/accounts/spotify/SpotifyAccount.cpp index a72b828ea..f37c22645 100644 --- a/src/libtomahawk/accounts/spotify/SpotifyAccount.cpp +++ b/src/libtomahawk/accounts/spotify/SpotifyAccount.cpp @@ -564,8 +564,12 @@ SpotifyAccount::resolverMessage( const QString &msgType, const QVariantMap &msg QObject* receiver = m_qidToSlotMap[ qid ].first; QString slot = m_qidToSlotMap[ qid ].second; m_qidToSlotMap.remove( qid ); + + QVariant extraData; + if ( m_qidToExtraData.contains( qid ) ) + extraData = m_qidToExtraData.take( qid ); - QMetaObject::invokeMethod( receiver, slot.toLatin1(), Q_ARG( QString, msgType ), Q_ARG( QVariantMap, msg ) ); + QMetaObject::invokeMethod( receiver, slot.toLatin1(), Q_ARG( QString, msgType ), Q_ARG( QVariantMap, msg ), Q_ARG( QVariant, extraData ) ); } else if ( msgType == "allPlaylists" ) { @@ -911,7 +915,7 @@ SpotifyAccount::startPlaylistSync( SpotifyPlaylistInfo* playlist ) void -SpotifyAccount::startPlaylistSyncWithPlaylist( const QString& msgType, const QVariantMap& msg ) +SpotifyAccount::startPlaylistSyncWithPlaylist( const QString& msgType, const QVariantMap& msg, const QVariant& ) { Q_UNUSED( msgType ); qDebug() << Q_FUNC_INFO << "Got full spotify playlist body, creating a tomahawk playlist and enabling sync!!"; @@ -959,7 +963,7 @@ SpotifyAccount::startPlaylistSyncWithPlaylist( const QString& msgType, const QVa void -SpotifyAccount::playlistCreated( const QString& msgType, const QVariantMap& msg ) +SpotifyAccount::playlistCreated( const QString& msgType, const QVariantMap& msg, const QVariant& ) { Q_UNUSED( msgType ); @@ -990,20 +994,20 @@ SpotifyAccount::playlistCreated( const QString& msgType, const QVariantMap& msg QString -SpotifyAccount::sendMessage( const QVariantMap &m, QObject* obj, const QString& slot ) +SpotifyAccount::sendMessage( const QVariantMap &m, QObject* obj, const QString& slot, const QVariant& extraData ) { QVariantMap msg = m; - QString qid; + const QString qid = uuid(); if ( obj ) { - qid = QUuid::createUuid().toString().replace( "{", "" ).replace( "}", "" ); - m_qidToSlotMap[ qid ] = qMakePair( obj, slot ); msg[ "qid" ] = qid; } + m_qidToExtraData[ qid ] = extraData; + m_spotifyResolver.data()->sendMessage( msg ); return qid; diff --git a/src/libtomahawk/accounts/spotify/SpotifyAccount.h b/src/libtomahawk/accounts/spotify/SpotifyAccount.h index e524baed4..4347d7bb5 100644 --- a/src/libtomahawk/accounts/spotify/SpotifyAccount.h +++ b/src/libtomahawk/accounts/spotify/SpotifyAccount.h @@ -99,7 +99,6 @@ public: virtual SipPlugin* sipPlugin() { return 0; } virtual bool preventEnabling() const { return m_preventEnabling; } - QString sendMessage( const QVariantMap& msg, QObject* receiver = 0, const QString& slot = QString() ); void registerUpdaterForPlaylist( const QString& plId, SpotifyPlaylistUpdater* updater ); void unregisterUpdater( const QString& plid ); @@ -111,6 +110,8 @@ public: bool loggedIn() const; public slots: + QString sendMessage( const QVariantMap& msg, QObject* receiver = 0, const QString& slot = QString(), const QVariant& extraData = QVariant() ); + void aboutToShow( QAction* action, const Tomahawk::playlist_ptr& playlist ); void syncActionTriggered( bool ); void atticaLoaded(Attica::Content::List); @@ -125,9 +126,9 @@ private slots: void logout(); // SpotifyResolver message handlers, all take msgtype, msg as argument - // void ( const QString& msgType, const QVariantMap& msg ); - void startPlaylistSyncWithPlaylist( const QString& msgType, const QVariantMap& msg ); - void playlistCreated( const QString& msgType, const QVariantMap& msg ); + // void ( const QString& msgType, const QVariantMap& msg, const QVariant& extraData ); + void startPlaylistSyncWithPlaylist( const QString& msgType, const QVariantMap& msg, const QVariant& extraData ); + void playlistCreated( const QString& msgType, const QVariantMap& msg, const QVariant& extraData ); void delayedInit(); void hookupAfterDeletion( bool autoEnable ); @@ -156,6 +157,7 @@ private: QWeakPointer< InfoSystem::SpotifyInfoPlugin > m_infoPlugin; QMap > m_qidToSlotMap; + QMap m_qidToExtraData; // List of synced spotify playlists in config UI QList< SpotifyPlaylistInfo* > m_allSpotifyPlaylists; diff --git a/src/libtomahawk/accounts/spotify/SpotifyInfoPlugin.cpp b/src/libtomahawk/accounts/spotify/SpotifyInfoPlugin.cpp index 297b93fe2..b16e24351 100644 --- a/src/libtomahawk/accounts/spotify/SpotifyInfoPlugin.cpp +++ b/src/libtomahawk/accounts/spotify/SpotifyInfoPlugin.cpp @@ -103,9 +103,10 @@ SpotifyInfoPlugin::notInCacheSlot( InfoStringHash criteria, InfoRequestData requ message[ "artist" ] = artist; message[ "album" ] = album; - const QString qid = m_account.data()->sendMessage( message, this, "albumListingResult" ); - - m_waitingForResults[ qid ] = requestData; + QMetaObject::invokeMethod( m_account.data(), "sendMessage", Qt::QueuedConnection, Q_ARG( QVariantMap, message ), + Q_ARG( QObject*, this ), + Q_ARG( QString, "albumListingResult" ), + Q_ARG( QVariant, QVariant::fromValue< InfoRequestData >( requestData ) ) ); } break; } @@ -119,15 +120,12 @@ SpotifyInfoPlugin::notInCacheSlot( InfoStringHash criteria, InfoRequestData requ void -SpotifyInfoPlugin::albumListingResult( const QString& msgType, const QVariantMap& msg ) +SpotifyInfoPlugin::albumListingResult( const QString& msgType, const QVariantMap& msg, const QVariant& extraData ) { Q_ASSERT( msg.contains( "qid" ) ); - Q_ASSERT( m_waitingForResults.contains( msg.value( "qid" ).toString() ) ); + Q_ASSERT( extraData.canConvert< InfoRequestData >() ); - if ( !msg.contains( "qid" ) || !m_waitingForResults.contains( msg.value( "qid" ).toString() ) ) - return; - - const InfoRequestData requestData = m_waitingForResults.take( msg.value( "qid" ).toString() ); + const InfoRequestData requestData = extraData.value< InfoRequestData >(); QVariantList tracks = msg.value( "tracks" ).toList(); QStringList trackNameList; diff --git a/src/libtomahawk/accounts/spotify/SpotifyInfoPlugin.h b/src/libtomahawk/accounts/spotify/SpotifyInfoPlugin.h index fafc0cead..97c0b96ad 100644 --- a/src/libtomahawk/accounts/spotify/SpotifyInfoPlugin.h +++ b/src/libtomahawk/accounts/spotify/SpotifyInfoPlugin.h @@ -46,7 +46,7 @@ public: virtual ~SpotifyInfoPlugin(); public slots: - void albumListingResult( const QString& msgType, const QVariantMap& msg ); + void albumListingResult( const QString& msgType, const QVariantMap& msg, const QVariant& extraData ); protected slots: virtual void init() {} @@ -62,8 +62,6 @@ private: void dataError( InfoRequestData ); void trackListResult( const QStringList& trackNameList, const Tomahawk::InfoSystem::InfoRequestData& requestData ); - QHash< QString, InfoRequestData > m_waitingForResults; - QWeakPointer< Tomahawk::Accounts::SpotifyAccount > m_account; }; diff --git a/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.cpp b/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.cpp index 43ee8cf70..7e5c2d236 100644 --- a/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.cpp +++ b/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.cpp @@ -353,6 +353,8 @@ SpotifyPlaylistUpdater::tomahawkPlaylistRenamed(const QString &newT, const QStri msg[ "newTitle" ] = newT; msg[ "oldTitle" ] = oldT; msg[ "playlistid" ] = m_spotifyId; + + // TODO check return value m_spotify.data()->sendMessage( msg, this, "onPlaylistRename" ); } @@ -493,7 +495,7 @@ SpotifyPlaylistUpdater::plentryToVariant( const QList< plentry_ptr >& entries ) void -SpotifyPlaylistUpdater::onTracksInsertedReturn( const QString& msgType, const QVariantMap& msg ) +SpotifyPlaylistUpdater::onTracksInsertedReturn( const QString& msgType, const QVariantMap& msg, const QVariant& ) { const bool success = msg.value( "success" ).toBool(); @@ -577,7 +579,7 @@ SpotifyPlaylistUpdater::tomahawkTracksRemoved( const QList< query_ptr >& tracks void -SpotifyPlaylistUpdater::onTracksRemovedReturn( const QString& msgType, const QVariantMap& msg ) +SpotifyPlaylistUpdater::onTracksRemovedReturn( const QString& msgType, const QVariantMap& msg, const QVariant& ) { const bool success = msg.value( "success" ).toBool(); @@ -626,7 +628,7 @@ SpotifyPlaylistUpdater::tomahawkTracksMoved( const QList< plentry_ptr >& tracks, void -SpotifyPlaylistUpdater::onTracksMovedReturn( const QString& msgType, const QVariantMap& msg ) +SpotifyPlaylistUpdater::onTracksMovedReturn( const QString& msgType, const QVariantMap& msg, const QVariant& ) { const bool success = msg.value( "success" ).toBool(); diff --git a/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.h b/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.h index 896e507d3..3ac899a1d 100644 --- a/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.h +++ b/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.h @@ -74,9 +74,9 @@ protected: private slots: // SpotifyResolver message handlers, all take msgtype, msg as argument - void onTracksInsertedReturn( const QString& msgType, const QVariantMap& msg ); - void onTracksRemovedReturn( const QString& msgType, const QVariantMap& msg ); - void onTracksMovedReturn( const QString& msgType, const QVariantMap& msg ); + void onTracksInsertedReturn( const QString& msgType, const QVariantMap& msg, const QVariant& extraData ); + void onTracksRemovedReturn( const QString& msgType, const QVariantMap& msg, const QVariant& extraData ); + void onTracksMovedReturn( const QString& msgType, const QVariantMap& msg, const QVariant& extraData ); void checkDeleteDialog() const; From 1d63867f58342f1da74f944d76704e32154419f7 Mon Sep 17 00:00:00 2001 From: Syd Lawrence Date: Fri, 13 Jul 2012 22:53:58 +0100 Subject: [PATCH 05/53] slightly new take on the logo --- .../icons/tomahawk-icon-128x128-grayscale.png | Bin 69076 -> 9646 bytes data/icons/tomahawk-icon-128x128.png | Bin 69076 -> 8920 bytes data/icons/tomahawk-icon-16x16.png | Bin 4346 -> 3370 bytes data/icons/tomahawk-icon-256x256.png | Bin 266130 -> 15532 bytes data/icons/tomahawk-icon-32x32.png | Bin 7434 -> 4289 bytes data/icons/tomahawk-icon-512x512.png | Bin 1054090 -> 29976 bytes data/icons/tomahawk-icon-64x64.png | Bin 19778 -> 5775 bytes data/icons/tomahawk-icon.svg | 181 ++++++++++-------- 8 files changed, 101 insertions(+), 80 deletions(-) diff --git a/data/icons/tomahawk-icon-128x128-grayscale.png b/data/icons/tomahawk-icon-128x128-grayscale.png index f9daadb3321c75ce1cc106d2b3df34c552bba095..62b15efc1a6a0c0bae2391733f6adc3e8bac83f7 100644 GIT binary patch literal 9646 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 F{{eD@l>Gnz diff --git a/data/icons/tomahawk-icon-16x16.png b/data/icons/tomahawk-icon-16x16.png index 8d2cd8589ae116d0df883b302b70cab623790012..a08e02e808b3bd05b0d504168594ccc3414353f6 100644 GIT binary patch delta 3351 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 literal 4346 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 diff --git a/data/icons/tomahawk-icon-256x256.png b/data/icons/tomahawk-icon-256x256.png index 559067acd273aab127a4bdde419c21b9a882979f..d22d693cabec5fc765d82e3cdcda0b4839621b42 100644 GIT binary patch literal 15532 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�ia@^Y85Bz5>5z}Ru{u1kgl(>2saf!{t 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 DKVO=T diff --git a/data/icons/tomahawk-icon-32x32.png b/data/icons/tomahawk-icon-32x32.png index 952151ba2609cc82bbfab2ba663f7836537cf571..b2b4c0e4095a62ed1cff58b1550097cc3e9e90aa 100644 GIT binary patch delta 4277 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

>Nkp2i(9fWq{Dj%#$w$`9Tmn`vNwim30l;~{ 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 diff --git a/data/icons/tomahawk-icon-64x64.png b/data/icons/tomahawk-icon-64x64.png index e27712df7bc006ba87723329650c99d875290c74..5641d246a7d4126a4090009415c598598c5a7cb4 100644 GIT binary patch literal 5775 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 N002ovPDHLkV1liO2_gUh literal 19778 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 diff --git a/data/icons/tomahawk-icon.svg b/data/icons/tomahawk-icon.svg index 05b80614d..2570b4bef 100644 --- a/data/icons/tomahawk-icon.svg +++ b/data/icons/tomahawk-icon.svg @@ -1,80 +1,101 @@ - - - -image/svg+xml - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 20759b9b1c20ee51d858ccc3febbc9c841c9a5c7 Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Fri, 13 Jul 2012 18:09:14 -0400 Subject: [PATCH 06/53] Abuse^WMassage our use of QFutureInterface --- src/libtomahawk/database/IdThreadWorker.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libtomahawk/database/IdThreadWorker.cpp b/src/libtomahawk/database/IdThreadWorker.cpp index a8ff77e14..3e9b3d268 100644 --- a/src/libtomahawk/database/IdThreadWorker.cpp +++ b/src/libtomahawk/database/IdThreadWorker.cpp @@ -87,6 +87,7 @@ internalGet( const artist_ptr& artist, const album_ptr& album, bool autoCreate, item->album = album; item->type = type; item->create = autoCreate; + item->promise.reportStarted(); return item; } From bd071f472c7fb753499c471ee4b5b757b55681c0 Mon Sep 17 00:00:00 2001 From: Syd Lawrence Date: Fri, 13 Jul 2012 23:17:18 +0100 Subject: [PATCH 07/53] improved grayscale icon --- .../icons/tomahawk-icon-128x128-grayscale.png | Bin 9646 -> 9650 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/data/icons/tomahawk-icon-128x128-grayscale.png b/data/icons/tomahawk-icon-128x128-grayscale.png index 62b15efc1a6a0c0bae2391733f6adc3e8bac83f7..b7368f2bc0e4fe3ad046c7693a50888f8bf68fed 100644 GIT binary patch delta 6962 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 Date: Fri, 13 Jul 2012 18:21:48 -0400 Subject: [PATCH 08/53] Optional debug for help tracking done future race condition w/ IdThreadWorker --- src/libtomahawk/Artist.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/libtomahawk/Artist.cpp b/src/libtomahawk/Artist.cpp index d3c0d5751..486aab5f9 100644 --- a/src/libtomahawk/Artist.cpp +++ b/src/libtomahawk/Artist.cpp @@ -32,6 +32,8 @@ #include +#define ID_THREAD_DEBUG 0 + using namespace Tomahawk; QHash< QString, artist_ptr > Artist::s_artistsByName = QHash< QString, artist_ptr >(); @@ -64,6 +66,9 @@ Artist::get( const QString& name, bool autoCreate ) if ( !Database::instance() || !Database::instance()->impl() ) return artist_ptr(); +#if ID_THREAD_DEBUG + qDebug() << "Creating artist:" << name; +#endif artist_ptr artist = artist_ptr( new Artist( name ), &QObject::deleteLater ); artist->setWeakRef( artist.toWeakRef() ); artist->loadId( autoCreate ); @@ -252,8 +257,20 @@ Artist::id() const if ( waiting ) { + +#if ID_THREAD_DEBUG + qDebug() << Q_FUNC_INFO << "Asked for artist ID and NOT loaded yet" << m_name << m_idFuture.isFinished(); +#endif + m_idFuture.waitForFinished(); +#if ID_THREAD_DEBUG + qDebug() << "DONE WAITING:" << m_idFuture.resultCount() << m_idFuture.isResultReadyAt(0) << m_idFuture.isCanceled() << m_idFuture.isFinished() << m_idFuture.isPaused() << m_idFuture.isRunning() << m_idFuture.isStarted(); +#endif finalid = m_idFuture.result(); +#if ID_THREAD_DEBUG + qDebug() << Q_FUNC_INFO << "Got loaded artist:" << m_name << finalid; +#endif + s_idMutex.lockForWrite(); m_id = finalid; m_waitingForFuture = false; From d1e230121ed09fd6b665193d9e143cb77e92b198 Mon Sep 17 00:00:00 2001 From: Tomahawk CI Date: Fri, 13 Jul 2012 22:23:20 +0000 Subject: [PATCH 09/53] Automatic merge of Transifex translations --- lang/tomahawk_ar.ts | 2 +- lang/tomahawk_bg.ts | 2 +- lang/tomahawk_ca.ts | 2 +- lang/tomahawk_de.ts | 2 +- lang/tomahawk_en.ts | 2 +- lang/tomahawk_es.ts | 2 +- lang/tomahawk_fr.ts | 2 +- lang/tomahawk_ja.ts | 8 ++++---- lang/tomahawk_pl.ts | 2 +- lang/tomahawk_pt_BR.ts | 2 +- lang/tomahawk_ru.ts | 2 +- lang/tomahawk_sv.ts | 2 +- lang/tomahawk_tr.ts | 2 +- lang/tomahawk_zh_CN.ts | 2 +- lang/tomahawk_zh_TW.ts | 2 +- 15 files changed, 18 insertions(+), 18 deletions(-) diff --git a/lang/tomahawk_ar.ts b/lang/tomahawk_ar.ts index 41f6e1ebd..5e35311c7 100644 --- a/lang/tomahawk_ar.ts +++ b/lang/tomahawk_ar.ts @@ -3011,7 +3011,7 @@ Try tweaking the filters for a new set of songs to play. TomahawkApp - + My Collection مجموعتي الخاصة diff --git a/lang/tomahawk_bg.ts b/lang/tomahawk_bg.ts index 0ae5c430d..c264e4a05 100644 --- a/lang/tomahawk_bg.ts +++ b/lang/tomahawk_bg.ts @@ -3018,7 +3018,7 @@ Try tweaking the filters for a new set of songs to play. TomahawkApp - + My Collection Моята колекция diff --git a/lang/tomahawk_ca.ts b/lang/tomahawk_ca.ts index 578d03edc..f418c5b01 100644 --- a/lang/tomahawk_ca.ts +++ b/lang/tomahawk_ca.ts @@ -3010,7 +3010,7 @@ Intenteu ajustar els filtres per reproduir noves cançons. TomahawkApp - + My Collection La meva Col·lecció diff --git a/lang/tomahawk_de.ts b/lang/tomahawk_de.ts index 5bbf3920d..a42d46de9 100644 --- a/lang/tomahawk_de.ts +++ b/lang/tomahawk_de.ts @@ -3006,7 +3006,7 @@ Versuch die Filter anzupassen für neue Lieder. TomahawkApp - + My Collection Meine Sammlung diff --git a/lang/tomahawk_en.ts b/lang/tomahawk_en.ts index 52dafea70..3de7bf057 100644 --- a/lang/tomahawk_en.ts +++ b/lang/tomahawk_en.ts @@ -3011,7 +3011,7 @@ Try tweaking the filters for a new set of songs to play. TomahawkApp - + My Collection My Collection diff --git a/lang/tomahawk_es.ts b/lang/tomahawk_es.ts index ad5dbfa8a..a15a15459 100644 --- a/lang/tomahawk_es.ts +++ b/lang/tomahawk_es.ts @@ -3009,7 +3009,7 @@ Intente ajustar los filtros para reproducir nuevas canciones. TomahawkApp - + My Collection Mi colección diff --git a/lang/tomahawk_fr.ts b/lang/tomahawk_fr.ts index b02fa3971..218ec8cec 100644 --- a/lang/tomahawk_fr.ts +++ b/lang/tomahawk_fr.ts @@ -3011,7 +3011,7 @@ Essayez de changer les filtres pour avoir de nouveaux morceaux à jouer. TomahawkApp - + My Collection Ma Collection diff --git a/lang/tomahawk_ja.ts b/lang/tomahawk_ja.ts index 664ad2fbf..0b0f05cb0 100644 --- a/lang/tomahawk_ja.ts +++ b/lang/tomahawk_ja.ts @@ -1611,12 +1611,12 @@ connect and stream from you? Username: - + ユーザー名 Password: - + パスワード @@ -1637,7 +1637,7 @@ connect and stream from you? Tomahawk Settings - + 設定 @@ -3001,7 +3001,7 @@ Try tweaking the filters for a new set of songs to play. TomahawkApp - + My Collection diff --git a/lang/tomahawk_pl.ts b/lang/tomahawk_pl.ts index 638f26874..f0c7419de 100644 --- a/lang/tomahawk_pl.ts +++ b/lang/tomahawk_pl.ts @@ -3005,7 +3005,7 @@ Try tweaking the filters for a new set of songs to play. TomahawkApp - + My Collection Moja Kolekcja diff --git a/lang/tomahawk_pt_BR.ts b/lang/tomahawk_pt_BR.ts index 58ae843f8..4aff1a507 100644 --- a/lang/tomahawk_pt_BR.ts +++ b/lang/tomahawk_pt_BR.ts @@ -3011,7 +3011,7 @@ Tente ajustar os filtros para ouvir um novo conjunto de músicas. TomahawkApp - + My Collection Minha Coleção diff --git a/lang/tomahawk_ru.ts b/lang/tomahawk_ru.ts index c8e9962d1..90086180e 100644 --- a/lang/tomahawk_ru.ts +++ b/lang/tomahawk_ru.ts @@ -3005,7 +3005,7 @@ Try tweaking the filters for a new set of songs to play. TomahawkApp - + My Collection Моя коллекция diff --git a/lang/tomahawk_sv.ts b/lang/tomahawk_sv.ts index f73257155..fcdef6931 100644 --- a/lang/tomahawk_sv.ts +++ b/lang/tomahawk_sv.ts @@ -3000,7 +3000,7 @@ Try tweaking the filters for a new set of songs to play. TomahawkApp - + My Collection diff --git a/lang/tomahawk_tr.ts b/lang/tomahawk_tr.ts index 7149903f6..f68ddc294 100644 --- a/lang/tomahawk_tr.ts +++ b/lang/tomahawk_tr.ts @@ -2999,7 +2999,7 @@ Try tweaking the filters for a new set of songs to play. TomahawkApp - + My Collection diff --git a/lang/tomahawk_zh_CN.ts b/lang/tomahawk_zh_CN.ts index 4daaeaeab..afe90f1f0 100644 --- a/lang/tomahawk_zh_CN.ts +++ b/lang/tomahawk_zh_CN.ts @@ -2999,7 +2999,7 @@ Try tweaking the filters for a new set of songs to play. TomahawkApp - + My Collection diff --git a/lang/tomahawk_zh_TW.ts b/lang/tomahawk_zh_TW.ts index cb8ce803d..25d9db4db 100644 --- a/lang/tomahawk_zh_TW.ts +++ b/lang/tomahawk_zh_TW.ts @@ -2999,7 +2999,7 @@ Try tweaking the filters for a new set of songs to play. TomahawkApp - + My Collection 我的收藏 From ab574a2a1cf6c30f3c52617744e5eaf2b52b2675 Mon Sep 17 00:00:00 2001 From: Syd Lawrence Date: Fri, 13 Jul 2012 23:27:39 +0100 Subject: [PATCH 10/53] fixed anti alias on icons --- data/icons/tomahawk-icon-128x128.png | Bin 8920 -> 11202 bytes data/icons/tomahawk-icon-256x256.png | Bin 15532 -> 20630 bytes data/icons/tomahawk-icon-32x32.png | Bin 4289 -> 4485 bytes data/icons/tomahawk-icon-512x512.png | Bin 29976 -> 23813 bytes data/icons/tomahawk-icon-64x64.png | Bin 5775 -> 6454 bytes 5 files changed, 0 insertions(+), 0 deletions(-) diff --git a/data/icons/tomahawk-icon-128x128.png b/data/icons/tomahawk-icon-128x128.png index 84c7eda76e77ce8aef5e48084754a25a63cb4214..5bbe89c0f2d3d719a3d55944faf162118392cc13 100644 GIT binary patch delta 8527 zcmV-VA+X-qMZ#CGy$XLI?@2^KRCwC#op+dARr$w1=iGbePT$>ZNk}1tBtQs+&;&v+ ziUp(>rKlh(U1`!pR8Rr=feQKq3807)M8Xdg0#ZYy8Hfpx5JCwFo3@)R(`W9z=luS- z6I?LB&Yjto=OJ#Ra25n5|D(Z)-1(-v&pB;J4DbLxildlJAHU>q760S9;uSOL5VECJR4xeaB*%poqlMgzM5dji{+nce_Is(f~1 zkN02h@jeTz0{#Uo0OkVofc8xipnu3NGyE`M8Zf1N>Iah60M7!mfhT~4fZhav+Me`1 z%1l4FeA2}rU2A^`)qG;j=X1hCg2X8Olb7I+l68+ZiBZvsH?Xh-05 z;Lx%Ww;|Ac;P=3N!17H1SU>FqoC6#Ogf~#HYb7upxOK1qVK4w-C*a&Ncm}wj20r^xrisAs%I@QS z8v_6)0`~)dD8JuCKJ5oQ23!NgHdFwdQWkkfY~uHN$pS7a@6kRR5&%Y&t={SV?beC% z4>W*~5QNLGh!jMnBx-#46_Nh`+d^QLKQ{ouhn?^PN$2&)m-Y2sz>dHlfo=PX;Rawz zffNEI1Vw+P$qGqVsYF^BxLVVZ%aa16VU$0q(XLCAWswMn33)EVOoND&!~|Gqga%J* zT&+>`d8{`HTo3FFoZpw8LSF*lIN&$Hu)f?W1F(cZNoGbt8kayY~o)4%Uo!uM8Lft}KhAnna``hQZsO;_mit=67c>1>lq@=JRYZX)=eNaw-QN zeGK)@&4V(Ow|L$wJUIO}o_T*@CYi1-qKO1jO7fnv?iZUv)Q;UIPyDZ@`aO5CSF%JBx1U6zq){X zfAveAnt4B-;}D6*Q5y0}F+LXIuRj6sIsAW1ovJS`qEgU~ zWO`c{FLtE~3n=BXgzPYfeB%_3JLkJJjU35Pq<_zThC8mliurS%B^--kg+dfO4?`Lp z)zZLWby4stWHBKf?)5uX=eCzKx?3<@yS|K(xYG`R;|09pa^IR6pndAGiMhEV zo5v!IF=e$Nn1)}h@>X8};6UJ)`1dbWFyCZGcb0ort;H6Q>+WXCo_lfCJu{fJ%dTw5 zWLg%x9B?2b#*Tkw?o&@v$YqJxHW|lZZYIx|Xp}81qZ$xMU~gbX**L5j0207osp3BW z1Lk*SxOa62VFB5$E)F{GcrKrQ2aO{}u(8mD?WeHa?t3uzi6`k=+fF1Lrsyf=W^+CW z%&I_8SGLa{=q+D*LswD7oxUiG{l9c)`OE4KY&6-fE{=aZ{d6w*-EBk0y{jcnnYJg_ z%zS{&Cr%`jN)a+7B~S6I)-}B1ctmAYxjJ8?mtpzde9LEmGpbol%rJN`Q((sGwS>^* zQr#SP?)NzN7dK#<78@&VvCSlY_Scz=n>^VEf%GGVziw^g9i@o~QOzB~)n#c=6#yiD z>UQA7k(hs!yij!c^U8KYKrYqIQD>aR89)0u2*Jiqn~mLqtNt{D%_mMImrfIsl8oc< zs}=3E3yB?kk0t^aR~raA4!9@i3Tz>0)q)={UrokwD0Fx8`4dj$`@g-VM>^KWQ)%%+ zQa4_Q)|$jOzD0PqX#>u%wnrbvesd9oY*?2>A_ad4>FYXSl#>yq4{#y;_pXb*!;XZu zU;lo;v+#Akf5hQ*wXGo>jgoOacCJfs{)h&I=ivogZYO?W?cyK+NZ^MT#|N@_fs$cx zRckx%Wb?S0G&}CQA6L)#3z1mw0*LMBoJQ^+vk>73!VZx*;Tt5seKsOAFmB>2bLX<) zTPJ_>C9g=KqLV35>2B)JzJR*#Ui9&i!)Ir6*|EN>Xj&n%p5n0KjeM;kM$YwuF8ki{ zL9SQ@d_5@h0Yaw1pE}Yk$>yMtXVjMCx%ie_d(C{bMx`^zXbc&PA*4b2cfXN=FR*I-0`FmRjFXWwS zjKU-Edn!}}fFxCRQ1^=e) zJ6|V#*K|;--vHn`4y#*RF>TvlTL523t4}}0UpV<>4*%A7$aHrjgg|J`A6IwKj-P)S z6@V<@!b$-U`1G4VCxW|IcOtYVpUH62#g{O3?*O$9>)B`#i-F_N^^2d;e(tw%mcH9R z2oM6(?4OQ0r(OADw*Aa*JPGhG7J)Q#bK26(cCz5?=W^jncgBo^b`UtEtJiQu{p zQNv(%M~YX9E@3HxN`aGl3xF?vlFs-vtADYpc)X(vODST>Bxn5e=a^RC`1&%DK&QIs zyyE+GTz(;5+nT-wfRyxCTg7d5*_C6@K8IX7g8;PF+}qYgPRO9;TqodnQ2T#W0Gu2& z+NY)DzO~&HJ&!^*!%=6P$@uNI@4H>n8mtf^8YTD8OxjNUD*30M7`#q@g;_wyp7UKM z?l6^NK94O0Z)bDN&J+k6fgmspIO@{?FabZYpkfM3!Th4j{8ScEEHZA=wj6!t+5M)U zMKX!IvX!+Lo=w+vSD~}nK?r|<%8b@%JkHlHz67N_wANTcFsm~~HzMeb+==+L8y^dR zuK@8Nr{5KlhdWbfrEndG;Oy+v>#IP zOm`O7^YC1k!%q7aA$wr^Jc)?kc%=L08)-ZJ6r9DisjXDiARwRxId$)S*m?g0$meoc zLa;nv;Kf`KJ6Le&OZ0!}%F^=*Uk(y$Fa<306!S7!q~ox~q;1&u@LKhNsM6#%3}iA% z@s*co`}WCXX8e%>YvL*VqST-s$f2j4iWCB^H3sl(Dnl`tYdXHC8jw8>^1gxmekpk+ zS0LlKxWxho9&;R#c)SL@*JZ1@dYLO@ade?T=TEO>?RjV7wl04U%!q-aT@E~m2|MgS zsZby!B}=k--f~<*m9I(AqXWr00E{TBfXX%&$Rc<#l|y(Qb&XBzcf?VH&ywm9Jjy-! z7;UG1mE0o_4JiPGY@7X$JQ}B1L;xjE@p7hs5ljtymhu($oh> z7f^))Q>N|7=m~!l7|bLSNxY5@Ixah(jw>%gb#)FYkD#u(8RdC|gkXLqPliB!ezpg; z>`7|DMC5LZ(R?iiZd+)P(tu}t_XjgqM@aQ9rxXD=s4IyAd_{t z%a^hCd#BTV!!_u9zR$r|E$#N%&!Uv~ff`tpFJXv4YTz^L0FWR+!lxmi-P0^D7NJyR z!uC@bvH9jhE6SoZA{++OBz4EFw4HV$rTL#+VyDCa1Os}|ls)$*URRG&3PZr6T!E4Z zw4xpH^O%1ahkyTHvHoA`IHVjG?YV5X#~ut>k`kG$qqOKX+Rpd}={s&gyY8S|>gHQ* z#pv-9aEe7tAy{54vQ}w~$`P;~5SL}^zv4c+I899o^;Uj8%9yMq+U|5jx1S*@MSqfl2;0$ z_0Y5aE0uVOB&8LtoMw6)5VI)+_2+9OJ?ej(nrUcm#&cavA!v6M1tAGgM>JjraRG&Z zj(h>vQwSj#xy85*8USdGwk!<8pjml=_$UP6c{N#%VOi9dBZ2}bcrH1|MOJR4j0hA# zkO;aFxLPBm#EwSU7)S%&V30^c&@yT?p7MN8!1YLJjZwKF=mxGfP=*0o6S8d@25EoS zt__(&;qZS{iV!Hn3}Q2hzyNTR-!$E{EaLU`n>fFe8rO6E z;vFeB$d)dBqeE)v*2a>_|L7$RuICXTP!XwmVu%2Q+*Ib>pI!ifX_y~6kh<&!R;tNm zP`3B9IJMH7nA^|ft#d_%9}|>928n-81hWAI_;qpulv22*QXiZa(4HE46NCGSa_Q8E zTujq6f*651unI7RKp=1(his~Q6GwU_aBC+iv)$bvVtBw5@r8i_V7U%L2uj5woom`Q z3jRrg_sY>wliR>`R4NufF#4p{7>*Of2+RcnfTuMrAq&fpXr(CRvl}+&g+PBeC5o=c zN@)z}yj|ax)U>Zyfiw&}tw~xI4VD?i6|^LsU$$N zY4|Pp0+a^gn+SJ@oK$tYh%F zq{|k+K_Qn#l#4<(4~K%LPP}RYZv?W4wPvgxLYM~K?d>dGw20=BqlUJ+&t?#@I1OiA zPW-E1^ZWa)NBRvky|rLIsyz5IBqgIQ3$JqZ;s9$T{*(!)aw(u0Yg>d2gJQAB;#Xd- zx$))e%)UN$0+d3fQiOlDpGx!p-bwt#Z>*R3l*<(dG9yTN9&fzzGFB*rr#1DK$!4Yu z;sLA%7Mu9vMpm(&{xP2jAEg;%8Z=lID-DBJpL?#40MN&VUOoqgLGrXSNPg=~M4y$l zi@?>vJ!$2;@3L&k60A^&lGco|ZR(}KsXS5PH6Sg4H1K*5JD`7F3dTolL@30P1q)cc zeA$q4?^LQAbL=>pet8RZXP@7P%&(mnF#q}INUvRsGz=6lDHg`mfn?IF>w;SV{|*w_ zl3KGvEP^ymI@hdb-t5_fpYcMVOGR`(PyDFkX}RMb!n^M^WN`bh#~<^51ODvd?ISjB zun6Oa01!xiyGnmCIbu<7S!m$7hyOn4H&CTh7{i(v_Ot70xZ-MLvaTZV3?#L+zR#=A zJ%=5MP*RGqk#Kp;OvR7N0nhgYz+9lKVgLZcrDW?^7!eM$;Gc77edp~#>fSlNdw1Z$ zG*AB%(Sr}E*pK(e%2y%At5g9m%$mj8l`An!6HmjAi70;olhhXh@Ad@1D&WN+YQWHn zUE@)tY0=fz#xpbTAAF}in?ZylG+g>4ny$YYvyz_0HMIeP8-YqGp1AK`49h|Ram!?< zsEr%Uu>2?G{8rh6mrn(GQc-E9Mr?+MZG>&}#Jw{p43-{!o`*_x6W(c8ns507@#9Xc z{*ePz8MJ?3&KwrL^b&R?LQyHUjYk=41QP!W_@F&XPiOauAn^bXXb_rd$ryw}yt`-- zvmgAwfj9CCc|cQl`gdvi%^g@8{hR?CFi|TTVDY?Hcz)I+ zgky1vN-;4WVQSc-5G=vuiL&eeUjXocKLr8+Fwzk0Q=b4k%%Zvf;;H-Zt6pC!ulIpK zA<)Glx>zFqm6K_{{m^6uDQ378E&G_XF6tY>Qlz71YbqVZXzP|?U?D-ELjd#uj zvcZ3(fX6|}7{kILglTfmjW>`@r~B(@p;Fx#!$;6~%`d6H_=m_^w5l5fG;j7Z%z5Y` zqVYIIrI`?mGA$aoKJm?uy8Isnz*1mVAOL8;+ra(}NpvX8+poRG{lC4r@7+7cL1i*T zzi=om)Bi-|z|ZyJ*Y$54z$ulu^XjYcJkNh`RSz85SVvUrpkwFn2J)W-0DwOPU2xG; zd_EatWF(9kjdI^jzh>#8g?+X`Dw9UU;|#mvY8rojBgXI%eF`>d82x%3_|WaQF@Mgp zL}D@Wo?@4}1UrW<^1)7jc6};-eE@hEm=ok1T%ZZfkxlhrS)@8U`R!$w;?=s}j^}@& z(ka5b?@9BmcM&`Cxc-YN1oq{7H#2A*EnD&?cU|*y!m${h)i>coD{SVDe7Nb%ZvYblvpxJ-u2in8RL*- zlzj010yBYsRRVx+{890NsH8QcB^=+<2v&$I0g6cm4gtDgJuFZ(J6KpMCtxMvO}&*S7_3ARuAlQUnOHH%+g zcz&-tZAJFlkKuosNz0ux2=8;i&_CXvV7<4swsO@eU#GicEp|9e)>C|`xq$;?Hre3W z#4hlQPx^yTt8jP-cqFi~4uq8A^x+MRj@X#VBoEy_om+lzdGBp!+xCCe!5|6d^#ygc zxAVi3PT;*a-XI!Jkab;luTSumhBzhHtH$%Z<&#c-ZvddmQXms_1qH1cp*81@Y9?XZ zgc3>ax$%FP{-Z00)ZrED;sAZX{3}j4o`o;IK)kMwoa?b=BF1-yH(&;z8V;}wxcbxn zs5doE^MRYHIW;-0*;0QB&K}uB#I^{<MoWEHkaiu6#w>3WoR@MRl06!y84dI9513Os;=ZtJ2Y=sCV68!nb z|KYkb&!CVSI>n{cC?nm&ja#~C5f>eC7_YzZ0*QtOa-L#LG|Yd6qnc=ayN4N1v6ChF z{^;S1h}f9PI_7^q@i^xn@+4AargDt;W{NY zG_oTR7QOs3zrFlY1Yp?_a!RppV?7sd*2pmJQP8?tPh)>NFr$(WR0@C+@Ern%i9ZU0 z7BrWSYGnV$dUPa$r{UHse!%ySJc73tEZDFRAV7I8A=}2421*D{*sPhen(Ht;mtys{ z@SL*fr!N5je$K!tWxJp%pSq|umgjLsQ<76hHWRi(n8_sbW_vw#Af0 zoRywpjS?u=Vct_u^8Bnv2!+Fp-Flk=??3R!y)&p=y^@{lVmK9A>8230xgNr@ICn%N zTN;q_YEovJ0#4#%E_?b4006I)5AuGs*jz_znxubVS|Ua)WUJwi5>W?0K`lEa4eI{Ve`WD2^H5q*H>|NX^NK%J1>8$=)r!CXs4-m${HWT8)B*r5{-x2@z~ox}IuCG_ zX1IiD@hICSVrVI8Q{b8wr9zQ+Ut7TJ2OfXm>6w4!wHIF?)!~nUjVF_sHC7XASFYsI z`~E^>XFEG3V*?Fidgdus)Q9PH;^HM6yibBaB zn&5e;ViBzrkwk*wW5zIM;zY)6JDIUtZ_TjbBWM{lnn*lOG?~N>|92k%tu?t!ntXpc zL#nfrHSaHH&HL~3?xKY(UAU0ecitxJdK?@HabiO(Xkun9=nCK`HQU=70$?5epjPNy zAB6;%(jcwj^`gVenLG<~dD=^kKf*>S@cdy`%5#y@z_M+ki3A}#Ox>_yMB;IzY4~a0 z+V9}$Iu7ZsE;3zRl!`@i=`^0}qP2fN6G56LZaBhG!<+a@M3UD-pZR?S0Dw!&I?C#+ zoiKoq5FjO8TJvtnS%wsmDC#LdF9sX+BZ1L-L@$|OG@ca z;1B|hKnsvU5SEg-X>#nyX7(|3Ev@+8P&e@HN~3%O2>^gE0k;D!eZ4yd{wRN2DJ2fj zr8KKtkL4wo)sD+5$06f*bhs{BNQ$mYzGo+L4FXNfGBKrrsTGao-aDIxLyR;HMujYz z3_%!;*T3!Y7nhmeCl@7s2>^g?fIkBLHdj_qZt5%qhVW0Y5|W})6cBhqkS&!+c?uzo z5A?rO9t|N2+cYthA|?eUAklwl4W3rG8v0rD{|z`BKl;j01OWKc$*;w~Ll_VeJzn68 zbmJpa7PasrlDe!HR1ddw0LTSy#Lvd+(<#>d5nD|IrM4FbNj9)c84S~aDfp4bfuuC>GJf5}llTFzA!E=EwH6yi{64q;EK7#b zWkBp%mJHkBUp^Uq^!<6D6ThkE%jFY3w`|M}$pOkkO#*xx)dNQpfi3VaqU!Ne)eK+~ ze$vXPF-nv@kwy54NsG$<`s?@|w%;GD`aBQ-hFW#*CaNv{{{TkK>kol=fLQ=Q%mwA4!|0 z1GFbeo1}f8rw^QyWM^lu_v|(7wbxcil0-e~E)?$gqx4#h5(s|=S^!OeAfPeeWBzLh zc$E4`4v-Jz0qH;*kYfJR3!*N$o&e4(Y;T|^&S*0)7IP0lzrote|ir z!K;CXfmeXeZfI~v1MdSHoXL1pILQLEXa% zV74IYBI_Ih^jb|QuoMWV9_xWQf~fo3?FnG^;b#GhF-3pl>S01U@RHeUkld00dab4n z@Rix0uSdn$2Rtf>I(&4As}23bqOv-0KHbz2lx?aULy~8SR1Z~h7pyJ$j*KHDJ*hKoW;l6oBQq_O0PhF z8ecev;qMwz)q3DQLDZdc2?FS~nvuX}pn*e$-YS2LE3MnIe!ocErTAKzqq}zO$i)7= z3Aqr5;i^N)kO_co&RQMj> zfB;5MnMU8?!)e*B9X`H(cKL2elE_L+<6>+Kzwg?~&uiCEke^@a`&+kc$(kH5~|>Ljn9 zmL>ZRl8~5K?zQk|W^&)O$7vc;yLlm!B=Psf3w-yNeLZ0rXnUa9}&u36?fN7228&l8W62MXUQ>4I1#&qQwk;XdE7%o=z9R$<4}Q z`~Oz)^?UCk8I9#$e`v%#j7&?xm~_paHo*u%)a|Pk0_e4x9)O4`%hoRbd&+=;yt#f8 zMWx(0m0HcS?|;aUap9=cYMdPfd3k?qUHK)emn<&#T0?Jd7CtnFM!(x_0Wcl7QxJ7A zHA(=zRuc>y1zOof4+S=6tA7wX_Wfr4)I2qVh?nQ$>E(s1Av+_TK?FNDc z0awSl=xE-UG=a>tv~sq=%k5hsosYA}*X%K?gKGPqau$Q$wU_WS`)Qf6Yp<2?r@cO( z75fjmh42B|ckj+Or%p5CkqB#I#K-gOfhY=k^|i;>3 zTZ`q~(ASp_f80T?xggS_iQxoA*~KmxE{M9_4k3VEs|f;PfTp(g zGN#X+Ec?#l!F14QShDE{yc#sX-I11(!gC{slk&H90?@ok69|hsXlwHcKzBjZr8q(b zeBlV;4-FsB(rr8Igzy0Znl@#n7)6)9{jBxsx8HHG|3F)t4>8NhzBYe=IoLDK*51YT z)mjOE{Ij!oVcBvNN+op(9-f}OxA_P9-#gOk{*rIMHLV7=Q45j^VDTXlEkt(&-3es_0~j~G@d})Y=Q*fHbK;7*kcBG%U0p% z^%+nv{ED7Fg@V~1eawI02OqMw2i9-Gpy_3+DtN=@89=Yq+y2YYUl-z9(jrDf#F zN?$7~DrDxcA?VMYE4kObb7y9fZ_BdsRzcK_m8AmoT1|gjgb%PMv~7v-g9U*%R;{j@ z@Bw3Pj#YA|A>n^2$uplIW5p*(MK!;*Eg8@9` zuS7~Y**AUN$JdXKw(qpMw_?)|6!x|$TDY*<1kh_WcVK_R)@)@^Ft7b+5&moc`HFy` zAiD{pFzzpsrcEMiD)xNqO!m49Q7u}el0nf;~i|; zG5=DP37~)1Y6M`cY{A^#gEiZBm<%_ynioI)+@XV&fBXnZkB%pI&(Cf{0EJS?+v_%1 ztAfp2P|uCu`Db`Hbo?GrV`c`aZ@$8fw_e4VmFX5F zXc`j2!!Nv8I%>qatUS5RsemVLNdR+|jwfY5jeURbFnhMu8p*yxQ5bs4-e~o>S-v-&0qy~s$$k32IA-y4=YH|;D!Y94gdyn~ zDYO4c`ln0nosC=LP^&$7artLf_f}uLEVsE3;NDviAVO~IMZNkGd+s~{oqFCuyW4NC zy^(*DB(m0jL-G?56rMZl(j@3V;$8xpS{7jspFD-6xkGMqk5ozk^G@Ce=Bx(ctdBmny7%LaEV<2%(Q7pgE1Lm^Av42Q(Y8GY z4x99DNb4}#bm{6e11J?1lK%O>NSXB{hHHNbE=hvkLxx(}0z3B~KqZ9AY09T;e5W)4 zWLs>p&03WF|DTKAv5(*~?Q6~F>yDE+Wjr}Q?~rFkt7?dwn3vtwc7U~R{wvp z$7-dq8W?4+)np-nUaM&j$V$UC-mW1n!<2V$-_&WS)gCxIa`){fY07x=kNoa3YQV?O zpKb#NlwALvn24flH@V(G=dv@vV7VQO@v_(yqoz!AnE^GVB$M*O4AMS+59ubmeVr;U zFmsmG^;zFQxlIi!O90t<{u_STU1EQ&hPH2yt08;ydXgTSNa5L7r|)ame*LYkHyx0j zHg;E80?2YK6|KWayq;>(Q4fuC+2qcmOYtO4pG@ZJ|2Va~=+&SBZA(r2@mKVyTFTPg zB{>30y;kD|bdl3aW@uO`BgMswei{s9to)4RXC9;Is@`e4IeMzKn$2q6Moxb-9rRj_ zPw@=U4VjBSv3ZtIYrAf@;|?e|eTt+h6Uf=V#Q}}m9-8jf-&zfvlUI#K0dy}WKnJ;< zIaI1}m2Y4m?gA+1mStt|XF8hMfXNt_%`-l2a3PSYo~hX;O*8<$+4IDHz0yt)Z(iwPjBM!%|MD8*+E z_8u|}cZKmrD%W40jqgue@ldIpqEG#XTcWu}ql8kPAy`5HS%r3_V9Tm;t4^J8cLW|g z%=|VX-~>y|9W@&38^N+x@I%2=&rjBd&w>Dp&TrnTHFW{ajRr6pYQ29SE!$aZZ9|}} z3TZ($%>V`7mencWfB@=Ia|mc^onf8lEo*0W(_#Y1S^~~5l^$Iad4Kh=ppn0I5zKsf zHI!^4K#|g75UHK8Y@0iyY%K+YLVg5RiOjmbrA;Aa9oyeu+fXX4y^(yG)&BHajiO$1 zE{L-A5+xf#F!cm*#n^vDnQG)J8@9*ECV;xss+ojTFO?dE!C<{R+Lja?C6F!45Gf_} zqJqMDsnjF^imYbvg|YQwY8BJ_g1yn3nBAj+1gZy;}xDYJM6NR>4M zLR6Ku;Y!=$5iqw-gBad=-9A%&<$oqrJASM<0qT#ZLu>t5@VS6JJb# zi*i0K6&2B=iz$DV@aUdj-A?#EV;&^+&bP>wmSSB8dPq-=+@@lS32<6&3mw&# zY4J*2oXZQ}yT6v;Z#LmQaIn+%@%))HR@ZG+vg5#~0hE7&sLKLm)m-zrWYHdne{tO! zJqj-`0_MC*lMj}oYTU%B`+8vO4_4QWwa8R?`ZUUMDE zE0y?8nNEMx6{}IV3Ui4rU%hy-!m*cu-|a?#j+vIc`N(bCT*JLjj>-O2QPaQi{mH^Sn3<*nroFODQ7=X1OeOQtz?yP7ydMv@KH{f}D^=j}o zw9{F{vSSDa16x-9yX3lgP*W7AWt}LWSNefh0+@e~8wkNO2M1l zyQKuqd($c1yIUdV=uxXuv(xS!E_WmA0YTK|m7M_qcFOHsyZCb@2GrL}-gRR4Zivfz zDl1;MuHM^5A1}A5pR68?G6axShuxsR!l-|kY7QLT^DAk|$@T7?9g%P;-fCtYJ#;Wq z{6&Ac&26rb0D`DXEz6GT;Ql~M4V`b^UsCIX=1T6}t?=a=uUlP@@t0k%=&&H_E>|`K z0IZk&wCPUJucyhd`gz^jav{rVn-+2xPF&EvyXn&(f6;2KrFW0+C{CS_+uVk7!&T;b z3+7A_IhfMMvUT~3S6^`n_s-d|Y>xHeT91FV50iUFLLuXRE^}>Rf`r{2w=whw*1gL;$jGCW{M8}_wBbx zymG~^1L>;nom5n{^!f8=PFp=VO&bSt$9bF7>C#GP&`R$A4CrLf0vYMNHqcVla?Y4h z6cyQL?|?hGcNL)^FOPZQ)+dQB7&?E*mRdzufOXX(fFSB5Oh?AbhR5+EJT-1C0BOm| zeE7_a>go2fv3ECf?<$-jB#HTtOeCjNq3p-U-jB!eBepcVSP*pu)tvzlMBNtPuuZBU zCYtV@O=W2#w{K(X$}g+#Q8W*sQTRkqC{TyBaXa^}B7FVcyH-|z_s*T^clLh|TbjH8 z+%!?+R;jKp+h+9SGAqa*UmsHmf|U#Ab8PRPDu3Spxw*91cZ6nZzIQA4t|IJS|1BGr ze`0ZKy}g+g9DpQm(?>C0x!KcyO9BX@?f|gKCU@q_CEgo8q+~sP!Q@A{@W+{|8+>m3 z#24e(-n~`_RcPo1AlH_jsC36!GSN~>cGmE_x%}5( z)WanF1(P4Py7%tHa9aXC00!XMD%o1MdV?V9t^jY^`a=VvB6)q%gp%tSL;peCsZ*{e zF;6dt3jftf69|low6*Df38L<#T?kOhk34K^uR@~^GOrW~o*y;B3R0_)O1vJe(^kk?9);H^g^*!b!4Iy2=4RhNGMAW(`e_$a``kf- z{7e_8$AW)OC+3JnlX`i2vON5Ln%J)MF{|kL)%{Sl2w;v7K8DN&)zePw;qjfnj}+O;p6Sa#}mUD8gmL`W`@0* zomtsZufqsnCc%Fe;CXuvP{XK5{?)w`;UkBa+&jAGS0XgGvuw`uHs=}EHl7O#q~T%F zo=q+lMBNHo8nDT!6-3=9z@5-(< zUz3rVN*%sdaT?wAY6{c?=S+CBEiSNY=`}HrINy)z1fkH z%C7y9m8O43x9ZrDf%iYaZM}NaqD@=;8#l(QL4zt4dNLFhk)NB(jpQWs=gtv(>?r#- zZ|3^71Ol6du&}*Qn*{g{m~1cM+m!&Ni10eF(9t8IY#u^l``h^b#3@evQFV7QSP*E^ zJOq_mML^RavNJQu$;jY(;xLl zXXx%lV5}hOq8<9YIQm!UwHi-M`wV7NkE&uL@T4H>(i}cv*3>W3Yc->R{{qeGKklz%%9U=pTu^Z_m?_*hKw`~TI1Kks$~C_{!0m{QQj1D&0?t5-2qT3aWG zx)ZK2wk}s;L9f+x1jYixfx7^&TI`MiQ>p!3n36Pfwc*OuDFRgBN)7<-1o~oHa|m(Z zSEc~RffK+1Akuu`hRee3YOLtBn#M~&7oZc+9%yO)YXOs=el{ZM~=d>zOC4*;jx9w$yO*!KVc002ovPDHLkV1gezAh7@d diff --git a/data/icons/tomahawk-icon-256x256.png b/data/icons/tomahawk-icon-256x256.png index d22d693cabec5fc765d82e3cdcda0b4839621b42..bdc9c0ef0f32c48c7ddf48fa4c98cb293cee6278 100644 GIT binary patch delta 18030 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 delta 1560 zcmV+z2Iu*OBf%lCy$XK??ny*JRCwC7mu+xVXBEeP=h@w4LqZcu3E7)AAhsylWUmaC znXvmoTN*TKY=;&`89F$i;|toUc7$pjJ9eB}2c^`i?bLQc2h_rJ9Hmezjh)#IQyhf5 zB&3#?Or`8Dkn$GtGRf}Vz~t}0u{-npMz!oI7$^v$}7 z$QPTaUa)}T88bkY?n{?=x1)o-+nc$qqKwa#l_1XHv8GUiuD9aO3lmx(8L`)>@{;$= z7pmr!;xZQ9vyy026MlbSQj=f3e3_TGJ;mVh4(=J~C6|9rj`D|~P1SMduj3Rrv&^0k zoCJI$kyLB*$E@LdPd`IZFgPvWpF4e;$G)X@djIt*K$_{uX}z_9@)jx_o-Lu3wS80O_bLCKPjW$z}F8fRA|1 zzRUHo?k9ggMMM}lbda<6H8PkuJR#uG0|!VoL`biQl3o$z!sdr43I^Hw+CO;w@G;EX zs=N}Ix@080Iuvu%3?1;8SJ*Nc;Q9rBifm+`yIJZbdVL<4ykFduVSj zZch(xPtS<&i-JKmH^0Q5vITK#(eU(5_(fDV&E16g8#bzbIH39#g|cTOrWbLs?L8`f}j$BW>) zQ&M8>rp>ha^RcAa463@;s1hBC&_EHrl_8AJSGd+@GIalL8(rU7KRVSWpsJdA{NjbCgX_#?KA?ryo^ixduTuS)}+EpKC_(4=3NAr*5}<&G(R%#@n=tB%FCzhru2W`rS!si zIM$Ybyqg2qYpl3)!UzYvKiqXb$sd0FNFKQ2MuPQGDw}sPqoHwHF_O(>_{F*hXzaN( zW-#Fh=%L}Udecx-yw-Eho#hLc&+>or)?W{GwAwJUpWKGe(^97dp3U&+>ihZr$L8an zO?zCg2y6+(68$C}wM{7Qv>MUfqiRBX8};ubc=m@6lg(zPotoKPjvsybOKhAo6VrBd zbn!8~8HzhQ08D6jX%IGu=*3Z$u`NMUX9wHA^>q^Q*p#wkSy>VE&L!o^a# z&x$*{CmhSu5xYU*Rag1Io@{O?$G7NqGF2h6WitT?^!4CNrN|y^ow#lcRq73)nDhL^ zi%G;5EAD728m<@Esn6JQF{gOpsF^2pz6ujv4RBT+O3GZrSP;Bb9P?Wa+;3XsH#};gr=fl0TzqO z-HJ8>wuqGKP(FhQstkzGp|B6t*F@w{DCYDJ&;KFMKIou6rcj*&#!{JgzzOHA^7-OD$9WFm zAOgjkPaYAYKr3PJiIY!An24AFgs$C{48lj)Ke&9pw6GT7AKYZIXt>FLa6hLjG*bVA z+xky@0?X{0A0<;G+BwT)+PVmrOhwF8Tk!ZHM6E{6p7t znPDje7;?Jh<$2#i!{> z;^tFG2ij{%k(a(RzdnTskWw$80S#6VGzct2P!3qpt(*bBpLO>2!F&6Xi4h=~`J5gxYC!WeTSDc9zc4#x zAJ>9ojd7uS<7*6FhwQ!QkX$^0~v3c`UcX%-)oT z`a(CBm~+lXuA}1JV1G<#APTCQt)=?^fQ)d8Pme-#@InbSVBeW?2dMu3EoCHqUapMg z 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 NnHgCbmKnH2{Rce``2_#~ delta 27451 zcmXt9bzD?mu-~OY8YHDlx}>`mq>+*oq*IZGODu>=cPJp;As`^NG}0m^-Q8WwzRT~u z$3OewbMC$8OnztP%!K`drtUziT5tddr5B2Fdfqd8-#&QjsoaJi&Ns+m5juS#b*^3_ zR#hvOXXiHK&95DwfA~upOV;5aH8dehSwT~ipQ|~!W!gS0rFVScIpTA$+n*FjXUp0& zk|uU2_}*rr+FOzqMktSE$x{|Di^Twog@XSuz;J^eeykx6OAM$0J@^}O)WwJm!!i{Z z`}-z1Tvi}f2hk*VeweqDg+~AL#!KfM=zV2CWQ0H>mC%;N`?5IEIf4YT?_Ar|f;s>M zDa1#1crox|b`Rf~vqY)(i&`H9izqNy3daswdpD~onEm4XP%m37mO|Nl0B;ZTM{o<= zg&uYK6=Ja|2>1r4&6r=-=LAnD0FkE<>Jx#?Kxs;VdeoVF?&*y4$0q1ic+)6Oh}lD# zU_9ZbT$6GY4B3Yr@Pk{~-JXr2ZRlSzbhed)df-|&Vx^-|3 z7=9!CjRkfUmf@Qk3D4gUkX`h!dZ-K$g(1z}tpR4B`tnD%rr^e)mK)o!p#!)6|DHgj z+_patwhC&WkZCENVPuO`;pc0c!M(#Dtp7*z7^D$H7VACQouLJx8?l=tFpA33A;6hG zVY6hgBw|qveg@nKJW(XcSre2Eh0P%5;{4w1Nre9r`I5>KTgH6#>;EO+3@TIM>mh?e zfj^!1`6%=i{A?#n?7O4{Jt{p&OpxN zCj3w+VCVaPJ1b+|A%Z@^(Xv}fi7+ex@*|?7pF;=J|9k8!^HEonub3u^6Wc!W6iJQn z3^;kaztVq;ilXQNkKCTPQNEhJ%*p%AM}$66gW?Kq{PsVlrZOBALN*OB@9}jMvB*$( z^+#|L2Od~ySqoo$+>l(N6rkG8*#-R0**S-o3O8AOd^iq3xcua-9BvO6(#zj?EdPX7 z2raz3sG!nd&LC2DM#a%- zd`Y#5oOZ_lUXy1zs)xEjSifK1%8xVO29pPEf}F4TkNyvjuVOG<3OVdGVWdPkz~oa5 zGmOmYe>8soF}`RB4v4(^cv7^FrR|jnJ%nD)?nTeXD|inqs^`+K$OoH890{XTLSsN_ zNX09F$FM-Z_k^Ruz3Uz`SfhcW;|pA>e-(4ZD}Q(uhQ+2DY#YSpJ&j+)ucvlUoe@<`w7B z>!6wv6`bueo`#&{!y+`I0MC z^2IA+ItJKvQ65LyXaF$6@f0M|9TmWRW$$+gS;>ze1Pa(5H9Yq2wefnIpA8<~?ubrq zBA8M9yC&ALD;d;adM}zK9yA#WwxjyI9Z1~Y{BXh*EqAClO~bs6*V=P@N(fPFunchn zSp)g=SVnm)-rpD%HUDVnRB^zS!1gwoBaTs12P}p=YgV^3P|vv7ts#nAnD>fHL`yjH z1^|O1;ZyVj%*@(Liure zjU|R9hKzY_b}{gC^BBlwz494n9w8WET^Gj^qcde9l<)(|6-lw`vV;-1`woQs)o#?m zlv5CHP*Ka043;;Y9TWKU2VhWV$pkcNGmx1P>5uOC^~!r%h^kbH7!)J4aOTjO%RD*+ zAdFY-ZA?e(v8>=L4E>sL<_9;R1B-!<+6mN#BAG4HLfQx!yTs59@5W56}*UI zf+~rx_yXKMRabH1SI`Jc7;ccL_faK5GkPQ_WUSC*Nw)+uZ1A*54CJ$=N7>)T3FX?~ zw5P`gu}DMJUUDU;rj{UOcxctSzE2^1`}^VBU8^1|?3~@YX3>Rt6q-Jb9*={oAQX-@ z5(3O&0LTxV`%T@tX7+M*7lp7nHE@jqp%a>eAvVm_|Zoho_-9KbC(#j8}P7xRT5J(Elp-mGVp!@hVw zXD8omNw<7LB1Yba?ZLRA^f4~sKX$@BBDItOw$R7A6 z++C;Bn(4a8PBe#Qy;!~P^Jhyd7g{y_3Y&ppP+>QG$$EObMkUH6OlN90B2u4HkpgQ( z)tsna`UO;<#jX-d&_f=y9nRI>Mt&qTs^dT*Io;c>kiqoZaXNMXanhh^WBRMzsSKXc zTUB`zuF%`d++HH#bb~~aCP%gkQ;Bw_dE7o6i#$-zc|bjnq`m7!J^gvzH*Ww6aXb1JXKp*=ShcPK8F%u>suWhS>Juw)qlbe;fEqD} zH^(UyDbQSRVgEO|c|%x#jr;`RTGPkN5zkXs1WZNKh*ldA%!qSF+`LE4oO`lO+^UC? z0y10VL3iRpfG0=7d~y!3Ypgb-M<=sCZPQQ!pTG0C^~Bws%>aI`=PQ=I4lT?x%z@Eq zLh5Js@asVbf_1sHNP0!K#U|9@7E4JITKZl@xVz_cf6m8gp;aLVhOJ*3MiN8WRqbs2 z=cyHD<`AHocx1`(>NR?us1^pjQz%j!?vXem(~P3hsZ8p%6Dh@(;tJd+sTS(yPy~^w zr}Hht7;1Uhfv#URk2Bro^zC_)Q46>2EGdKBaPNEdnx-*ym~cY^9Z24ZKj|i*7UB2% zLtHK_BI?f1|21Hy`0R&ogvmBs_xoNgLqGl!DQJ)ypb5j&j_4lwL%NHa<# zPb)5+`~k0)movAKwV{9Z8(jko1Kxw2kuAbR?gjycdG-+)h%V;OO_$a;(YS$`R#RkB z#{|TytBprz%O0G=y)`ymtB=<&v$N;9?9J{$@^xsj`f9Zvi^46@06B1sO8PEm6Zq6ejBE_v~(8a`- zj#0<4aWx z${;PQ`#*3t_|sw{s@wnrW8Q*Ia)JFRz$iSmL+ZzS@)@tgVImsw(FUJKRKm`xh;Y0Y zMFv@0(}s+>xe*Z&U2lrNx$Jp1y6NldnCUBnyQ4RXt?kYBw$eyUHw8${ij>*TkFg{^ zrgkL=l=qj^9j1`$HI+Epn=ZK5_mU(qDGh~LLv{qNKsfIOipGmp<%~l~FFpXZZ{lPwj3RFJ_NFK#o8*l1GQ%U zDH$VYM(^b>1b-fQkoIPZeI7>KSUS!|g97E!FLha9c*@CRb2v{{wNkfR zN3S+4&m*87hFf-SPuGy+WeDNzZr^J8K7YKi@#Dk1aq|5IwV(__bd8+Rn2T(fhCi~M zC9EMSu;J&`x01480jK}~5hAMDx|$6#l6_sQ?H4RlKLW}8b}iv|v0r*R^0(}jqq51fPYVjb$FbVCoMl8rzg{rN z%4y&`l5<=4^wL#dO_|G|2xfY}6t~)8>%$tC{1TJ^hEc5#u1WvM6?Z!LLZ{OtxNT&V zgd%WR$>U%)rJ+l4{wrbcy2p?Af3pT}Za52C5M=B5`3&dR8kCX|g1g-VSbb=qkI+7v zl0eSD9rBA7Wr56lXN_;H2V(9WMz|74`56ys2m=6(%tcRRrzngU*9>g+Yj$UTv0UY{?V*IfW+()o%y_5 z;#y&Ngq`K;)S9yY3F6Ec(G-;~VmoGfIl2iW`4km16~%X}FuHFukS^qZviFzk%HH=| zU@~wuZRkSd$Er>~(yLqH{aCR8nhS=?`5>P~O^#wP3Q&91qNphLnVGAK9eFcv_P!Vo z&3SF)r?}5_eX)DjMf3}MB`7f|kq@|uX+B*-U9+B?U-_%gZS01~zVG5mFU%m8lrGp2 zwfsgykLotMLmT}qG^xxpuN8q0R%2L$NLu@$9}LR9JXXFD13DIY<_jYHC_9O zAj>*bj=gPkyFGQF{o1JPTDq?X3AecD!WJ{(?{z6epZ=9!s2_6kx zS+#c z$_2^|wUjz7Y&@?3?$O0Bwu(Ew6rXFwCUi;=NWlj+Wr`=-W-C>w5~!G0{{1o%X&-rw z`2@^b_4^^IyjNc68z{b(PqvC=>aZ85)GT)f!5AVeQkI(vS~}4&ZyQs1o#W%pQ8zSC z;0Z+qAyI=8fSjTs3*hqE`7?k;;)U8~^kHCLL!QkKXJLnhuNmfnNx8n4+Dqh?R%m8z zw;DD9ryt4@Lksgw?k`k{Go4?1p!(ZBj&=EI1yi?&B(C#5XNtM`eHW-mEuDE`6*Zov zRVgjfe8dNN+Fclen$doup!s{m)Ynk|p33Ejxga^eMvlOSm@J01PVm)Zfb&MOpxCPRel92ct; zRce|YdCjf`u1eE*8xNrx8QyUVr;l`NoDt#&ZA+2@f&va_hh062r+t)#L~VdwtKwyJ zoh-m~h|AXuEs~zO6rnfW|0e>b1xrynwxfl2O?WRie~K(HvWpopK7xABxdeJ6Ta10U z-PWhIJziInYQ7DF$w=x33r6|Eswi>crSN=*-qvN+-EM9{ps=b))b4|FZ>*f!ta3D!~G?z|PX#eg6GBjKK;T80;8&fpVu#G}QDYN5w+gZ>V)~JTiWfBQDt@`B# zuy;}gMV{3@vye7E+Z0M}@V2Sjrx@>&K7R2+@@jk2ej3_donE=;plc8$})YMv!aTOxraMl$lgt-T6AoAsAq#Mu0MC6c2Qo z)E0R&r72H7Jo5s0-o+-h$UL1;>g_sOvNd<}pnGdf#`v@b+TAVbajYbiu5;C8HAZQW z8Y&^98AA6}#M!ggnu!XM`=lr^H>B+{@nU;qT?Rp0yR>+F_1*u6O$(R`%P|Wx1Y=5H zM`oD$=J(w942pTu4)8L8Nf7bflF8S&OwaE`ZHCh$5NjZ>5D&5enK3*-m%w<^sXzzN z*50`ItP4epnJ%bBq%-qMWV{}J^1FgN!!hqZuL~_x^qzvNRR8%NsxHbISSQ-;KzyOt zcr1JF2Vm0Q`id5kQ~r)WXz@V|xQ6JMCnR(GyxDoCqm%L6guwv{nnn|WOxILps|nM& zieb5=5MaaX{)HU;S`E$?^}#MQ@(gDQ4;|nQ0sK*9YF+4Rmw+7~@}r))Yn*%eamL9A zES_JxE}3@+w^T;fyYHGBFTS|`lUSno6kzcSWrTu57@_Cm%z0CPfMu*%zSzZWZBHg{QY0SGn=&XqLoutD^z@Lq35_R0d!c z7}ocEf1jLj+)#Me>p*(5jH>uHlH{X+)20m#=bgC?Q~`_!rq$zMw^Tv5q;~{Sbpa{| zCN2C=+kumo%lEUpt{hj7h;q&(U9b*$%#>Ra6SJof`-A4!%=zreFf?q0W;ANWquby& zsZsZsP{88r9eVp_QEsFAMMx0A8Sp70a;>_uEnl~CVN5TAFFU9CYtsnr$PRkDdACfJ z7cZ;0S|Z<;c|2+W=uZ3HzCp35QDfsWld;OsW{T!%x`sY%_rDUf(KaKRj>}>%R`(9v zsALv#VAc-9s`+?JeL2_d<=R4d_RH_XZV#zr{!6%w(JN<^{?6j4J0;PmJRs}UQRVg0 zVzDjnf=Si$cJl}~e|$qOlXu8algqtRxk|t7{-oxW&+wU|YS=xUX)tEz&lcG4Eu`L( zN?lz#-aT7n7F%xe*VUNb1$XuRYR~x#yk-j zWn#z9V_9WiV<`(EH`t8P5P**Sa_}odTbCy#Tb?2U;dkkF9lQFJr;os)#h2#DybV1s zOd%QW=7)Zi7=n}&{quLDo+c;4jS>*Dv>=51`=O6UD_f^ScIvM$Sqv!0}n7 z?JoVk@GI50Z%UcrZ?jD-65iY0~mXccaX{s{sh^Li1Dh-(TXgm!l(h5XBiVQ)@ z{F^~ipo4YODEFB#lC+airuIm_xua_X?_c?8rZeI2&UEOJ%UPuq5}8wFE-n&ylfSs0 z@zbGuplw9|h+O_j^5KGS!qj1_pxrqO3&47$H&Ws4=^|27Mw?wZbYPf685D|%e7=PK zp}kG4hR3vV{j?HMpQ)a4yz(;YE{t%&{U+~A=r6vis-o0huf6X0IrwtdL;(44f`F2g7gKeaim z3lfjk^_D=UquTZ>W$n$voejq=fQc_$lNS}#B)_jP0Y-hGX&S)gyuYd%uI^E|;SvPg zH7>53XIK?>$2oWINEnnE%U#EZiC*rZ6edL2a7S$a%SfedX)m#1Q2Z7}I`48oA(NbR z8dCFZ5dZ>a<_phb?Te5j%?Oz}AU&ewtd%GS`f`6uSy zd%MLR2UEOGt(EU*_21Doe*7#{ihp$&S3Vo-KVRN;wo}@}fPX_jaDSn;!ogXks6=-r zOQm+!j*Qx(;QI3ilie!<`0`0?%g-`dMPw!RJG@<$v!C>DMbFWd%YCc{;>HCQ2#X!~Z16&3FEDl|Fi}x0vqC)$grw3kJl>-$g zV>+zohYDt%o?1J*i#3?!kJp!q%lI7sN)6k1-4WqnWNT~~mYxC#neQqThHtEV?1A9L zc4XPE3s&jU;qZtRvV6)XAkh0yN>;p>yJQmeRB?3#l1)S~LFBM)(NK_TeZAq!XZ)+x z{^5=~FU@cM6`+ck-3JI0$%*f~w*Oe?I<(ob>dV4UdXKWR!?LTG{e{-5>Z<5~%e#e^{v;`0swpp71&~(5}sMl3KLQUPOG|l(zW}4!mV{FA6%g?yu5$_ zxaa3@{+jgh@Ag^g-Kh*x)ydy~I>1%)g}d7hJ2%5+-0d_l`=R0V-MOAH(V@%@mQjEZ)i-9Tz@x z`6I8%knJ?gb@5Fm`G?PY=5XxkEw`h23BXk?;ukI4kZbPvLLzU*Nv`;CqOvu=)(a3+ z{YTm`O!|oHB?ySW(c6$`MdiIJll@ z+s~TED0n}tF0%XkJ>loVz!w`~tHp**s&6P_ePr(YCOaX3YVM^Wp zLds*kfj(E52cL-S6LXx68eTTx4DC?lybOj{RYz%?OSL z6XGt}#3Tn#Osq!F`DztSo(ACjB76M&bg$9+oX)zZ$=BI*2xUBZ{udG7`M+8vRE*<^ z$h5$ufSZroiga8_#aC=DB4Ms=%9DwY+z#e=q#^^G)HgoO=d&;i-*`)%@O;U%zbNQB=;6=^)jQV$9=m&p_V%n3@cSnE{P7gRks=o{| zFAluTddI=0Av(Y(K7N71qiICxqbc2WpHb1VZgnBY0J~HK^NOxL$Hf5itCYmAgWQ$P1#D`BPhVTGoi_6)4&ST4!O~W!-5U-5 za)_r9KXof}KNwkwQc<$s3=xt-byKRV;b)l~XPrar6M#(G%Q%b}!}gZz{FbFMye|@a z+t*Te!y%6)$bYh;wlyYmB!zIPFWh+*)aZ%+48kJ_gBA?~*FasGL}z58-e)y`^IE~< z=q9^=-$OH5g=Bvd=>GF+_vX;&NuiKOqx_E}0ngXuqJ=KP!Ukxp2`HR|u`3@8weInv zkbUJarq0j|5r^;P>cF}VJ5I**G>%hy-4cxfJo5*SY?JS>noYnC z78!QqPu*N*8Kq!YjPrjn`91a;f_B*}i!2=c8rrLjZZSxYA7T&v|QWLAz-e1BZHNG#0GeGbpyO z8fe4svZ#fbpHiB@P2*v-&nQ1Gtq(@d#j&1#EOKtu+T4q>qUChHP2&letzO1zNJx$|%Rzw_PU}-0!BIusr%L32@~DZNsq? z49X_*A&OYN-sxm zL#3iFdk4{Wje$JImfY!m0RS|9XV#+;f6o)K_*Db%;|5QAwOjo^brCW`7@2atml8%$ zD|+`Yj_|Z?;$57SeP@W4pP{-@6597Dx90otUf8_7HaR%BlpY-iB3An6)Gj7cVv#F< zy*W6UBM1Y>Dqf33OT5>EpTEo!qBf{(wTa_KDf%O|EGGy739E(!`8G~-L_@|$U4^Z@ zo{d)vw?&Ip-!t*QNA@cGDWr@2aNMZpGV@dlc9Z~$iQ_4DNapKSDz!ZOp0or90e&q$ zTL>#8YH+#=X*Z6R5`#IPmnUqwmiOD21BRWHfn;_(X(SD}qa8o_t}IUx3__%fA7TjP zZ(Q_%?sWdDf2OUYun-BEMf zpJ$ST9mTb>Wh&0{n4(r}#<><+mb<1~*;HWJKL~sBF@;4B2Es_Ycm&%zT59#>%#(Q| z%}~Dlx$49K^2mJa9s**8@d|9b)6g<5vPWL62p0f;PD=W?dVA}@rg0x3IQG{Uc7hwk zu7a${47i$*Ui6Z<+*R3p?@Blva%AjTV%9u22Hxq4U4 zCWAn6bRemjyQVV2rKtK3mNAC~O;u_Qy#o+g(&QN@OPyV8X*~6Hmh6ZCRuC@p{r>>| zpBP{%CT_PhP+lyL#(A#lI{q)#Bw#02NG2X9g&>3^=*Gqo{y5-v)v#u`P~coghr;t7 zeFvdTo%q%^E&#EI#Y=>LZ-hb_hXA@Wa9KraPmhmYN) z4%NSfuRqs)A}zrO0;ulOAxNsL^sK}BdDwtIkLM|8Wl3)adde3dM8u47_wyIGgW*_O z`6q8I#sfzAgI}#2ANiHpDyrHUbfLx^O;|ahrBCe)3PhW!_p3 z42UEH%g$y1~ktAy>f)$Np{sc`1T0|I?H; za(J&Py=k(3OP)BC*4=vAqb2P6vx{)W{2^C|P93*2cb;uAe+V16@hRT^ zRK8gVACgXK+!}5gZ$gJ0%sshS^vCnjl!O)5Du!SI+Uh#*1en+`lQoA|kE_ax*>T~N zpk;pgAco2pSrYK6pdGy5W#QDn(X%;QH;C1$Z1t_b!tB;ykVaKd=j<1F<(#bf_MuKZ4MRJ3aCe(?!CCbA zR>n@gG}mbAdu5f!MfS;pzQ@$(1N=kt(U2b3aX4^+KlEHvt@sONkYKQ(pisZkd4PGB z$bGuwct)6kUfF8}FtTC4-*}Xznf$B;8UaKkVqs*UQ~13C?*SU}U~{wqkvy-gKX6ri zK;;{Li8mHM7gXPtwxgT&m(8@y3)#UYxeluQIp3}8FC2s6K#-7u)PYK@hUlq{>2?R9 zUwT%K|G8NfC|g=F|G|E8_&{%B#cE}vMvLK<(mxc5w9Tl3vlw%ha6T67^Bv&*3Jji{ z=KQY})nH^nIfY|s3eswvXDM52uZ#ps4JQe%1S`Rv;f{-KSXf?x(qdk7&kvX`SJ-)y z=~s{-5~Z&AnYr!mL#Oz;IeWJR(C?_=2B>ZYY2vSyDqHvd)sGYkkk9+nXX-FMO}yhv z3LuZpeY5`V6GI7Z(2M8{4ZvkCRaya6&07Q!(`X~g;q6gQ@emwSEa?e;`046(aJ+qU zVQ>G;`EA8sUyco!JE>15k?S7qoPr*nC4vtx;hw5*)~4@hhn-*NedOz9YA}@moc2*9mNt_>Px>iJ z@W;zPXjMETkd#Q0pr6}#|O$-6HOr<~MbdF8geCWZndHN--!ba3J(ZOTG{BXQ7M=M0NWVJK}A47hw-gq*1wv_w6_6#BpzklCnAOG$Dmyf*_>8`0ny`uq)F9 zs5CDDM1t7O;ABwp@s=*E=gS%;#$ZPjKvd zKz0_;OWHd%ersAjwhVrCDy%ZL7Qr;Gru6MUT&~mY1HijA)-Tn@Odbj9ga4)$DYUME zfZNN}?PMG4Prq!zTa5BgltCnrzh|u@G_BwMNN*qbjY}xmfgKlT+nCns;vf6fsq;Vb z;c`oOGP8?`Ws4^(Q%HX*ADM-=2tf+q?-V(cD~$Jb(=vPUv=2!cl-85gt<|Mda$*)H zI@By9ZELzauIm@bv}ovF-nMUvLHz>(yrn28g+sFP&!#9>KcpswOmNYb-MI#lZvr$a zX|3(#$v*?lo;t4>G$PB9r8rwOz1FhkkRJz9cv26DyYW~4qk`E(K^<*$m+H7wo`V^gMjBGlQ2XYV*V>FP`A66(b2ye-^ub?|>=T~)j2}Gq0uTWRa&1>h z&Hq8(1#3N0u%1e&MS}t0@lB_EfMB+O=(Yd+ zW&FKJPFU2dT@mkqfOomd&zxpnwrIn+yUhbsH@ZOlG-TsfGz7!^-@$knHiKQn)Q);S zR1o|2R4AYNNmd!t?5zjl%CSP1m(()meXp|6)O+CRW6ZRCIYjgCdcnzCvp!&5eY8Gk-qI>5&Kjko0+`407~%==)9AT#i_e?tM(Lzuo4VT8*Of`Ap9 zQHtsF_6*+80TwyM=Y%xWYK58iA30)r6_g5dqc}9{L2uki8vwSsK17)5B?{=cBX{$y z-{L1rblJ|uEj1ocF(C9mRIKKhcFPsgjDTOQ5 z2*6ru?7ycIg}V}$yOj&9U5ig&i^hN{hSp7QB^U~0lL24C5{AVkvc>ynKk$`EevDej z6oAYRj=Cl951qBf8I^;ouGgX-0W1%Xux&IdY~qn|k9?r~TzG+JmwYSIat%pzf;Xe@sVs}DQe^~wxc`4!8@Hn!mUCnF}! z<3Q1v;=9zyR%9l0%OM=Y%6=kThi+J2#%0{@Tz~;T)N#b+M@9O}cFvL2;<7~g9Q_DQ zRq!VE-{Fa)h_moJ=^&R@iU-z^-!vfGtYR{E-pYH2&Z;k~9L9e5?W5;1&n2Z;?zRGh zOhUaS8={>Y_3VFvZ4qCh9=Aqm#8V3aIs_ygm>kGC*-0f^-Lq>IhH6tSii|+EZ%?$Y zTh6IK+J-@3hdY@c*bTeb75Z(KxuH+;3@-DpON66h~7W3^4dxOB`i&zUgV|`X4 zeA$6$8dQ!pk4u+a)xQ(usH1q@#?)2bA0vn^i*x^arP@1iteKd%KrGVjoYKQw=z+cV&Ju@v`0dvgGUxOC42ng7# z8UOyUd~ME;`XEOhn=wS9s>W~&IAIS=;pO3E0&nbc`~S9QPzK@K*gf@;W`&F$x5=Z$ zjF|^Ap59f1K+4Ros0C1pI(f^kb2@QHaj3Jo;>xNBK8xpmyWol}O^GMgN`Jx71-QRG zU;=4eYda#%{EP!`B;Vu`TyD8YPVQ=GZw)Ci`njxGS*cFvneLlJC=?7Pj<$61ACASq z#L;_tV3mXNT41>n7H}Rhz~hXFU)Ky?6N91`Y-mVub$0?k=?$qfO6jMddbsaxInA zP2YlKTdV*)>~UBtONhT9RDt6752}v7)LNlr)ScHly;U?K26I9xnsJC8(kkQ+wTgzx z*UK98xVWw>x0WN66g8>{1(_hV&%XnXc-|c}6L|%;q7g|GZMDlPv4;=c%-m=RLdu6m zMLkLVWKi~#rJuLFh!D^5n5?wUlnH-8DIokPU6vfh#t64*GB0Tx51w8=+tT{;BN+ro zyRhNHw&p*4y3zi|^R$_ffxXJ>D&svkq7m6Y_LviV4y^I)sLR73-R6MunS$3Sm$d$y z2!%J*#?^I>n_ky%ODCybrB8kofN)1G@RhOSv0qw}#`$&;J-nofoUi!^G-U`|JWs#? zONH2s_^Ou>vqhJGji`)_kx$hI6expOm0d|QSz80TF`}qS*|3S^6;W*2y50>DMcEUQ zaLaW;?Wf9{7T?ah#AuJ8RnhcAYWaL~i_VUlH&d^?&zTwIV~692<`x;l7Vvh}aF6Mt zw+Ib2BqHBTAB;!l@Ub#X% z51y59MS<-8wQ0UFgz_+c>~qvdOD9ff-*8dNSA;c}FaEUH#C z13_r1Yd>YsN{^%B0LXfx8bAtd_5;}hZ^6LFg z{#9FN%Uo(9k23Q1xdkVyD0Wp|$1P>h74ustDLA7h0=YkQgpXpOg3*|;lY?C-Ou3*B%}~#zY=Iue7li8e0+knR zbR}+2*@i&%9bt;##2g=6qa{<@fUhKNZa*;tsvA}U-5ew4}%c`Ok%~E|38EGG8pLHPsaLh9xqZ>zWK73MlUg`_!ZW}_{FjU zil`tpq?5pB_05NlEJFFzPb(q*Z3D{GUPRfOix}CXTX^5iaxO9N64@tgqP{;XkdH9- zTR=M!7h!L&`qwp@-ZB+f#A07aQA$q3_8)_MgisE#uh6CsU`}S zBI&UbM~x+2M+|WZyui0(fbj|V{QDP}5*5R@fgzSLf1CwsM;l7S<+5R4h{*#hu)N+0 z3Lj1ER5 z*UGNA{2GT6>Mr^PpoTLtyQert#fvnU3g%WWK-MT*_!X~Xi8utA6j~mLps-c4 z5M#%O!XQr@(=G3#s({UK-#ILUJZo|)yx5QAP`e1mg_{XJi(twSI$vPjUnr+#R>Z35 z-Cu4WloS?rV&v}vrhj=xExvs%Z08T7nn5b`W4=JaMpwjc&ZC^S&Hp5))cn}S0# z&yC-aEL4i%nPncXQh^@cj^G9j9TWj@wAWDTtJoR$-CuP(a`G?=bXtOuHPYkl3MX{H zU2BfVK=x7NF0~*Y9~@Y4Mt)F@UOrvyxs9E++|NCW@Y;iS;|m=~OcyT%lR^k@dP`H>s?_n~VQD2Tv{)N;f<7|-`LUpx_PFKp!;9LjW_ zMRog{Tw-V`=}EhVtfk$di-HyAgpf&>9dPyi*48A>;i)oyA@0Q(WsVH$n{>|mc=TzX zdh*uvr_ySVHwUf{@lu5XB@jeoV@Dy?wa zAax3FX%dAcGiudeT)bR`l1smEk#dvonaqmZ#J~<#dh@N=pLyTA&BZrwtXN`?aC*Or z1*SNsq&ujh##)Al|B)QKy^JW`7%>1(MOHOgs@Wf^IkpsiTg?nGKRHS-O0~mA_r|Gv zw4x=-$;r-hBohPFV3lg;i!CL3u6@7%W5>Mio3%2EDUN+_9v z(E?>2s?|n6QZ(iyw)G&>zEubtI%PEOA)7cy|G)>1Y(k+f^VwS}>Fb=3HY}>9pHBEi z%^wOaQ#xtpAb?)Y@2#lLgban2EAPt6#Wt@P-$X(=<=Ir6A(@>uHRWR7W+tT?Vex%GASc}DruQ%~Mg4HLx9G3ja7^_piTnwo=OF{%da zxeunCm~Z0S!sc^qNrM{NhAXekG=^?HJuIZJ@qAlki@jX>=RhQO{IX5!h`g?+-^Ua5 zrGSdk%D?KNqOmfWGHB5Pj@^|m)V+yPz%A&qpWCz~lLeMyn3Gcs3=KUH@l9+|{k&-} zHW(GYFI@6$w>b?ex~3N#w>4FgKQ%RswEyLsOlU?p(aKbO=r6xAT~phlInKdTD41>f zy2U>N+fteGLiitxS&Rn&eGi z$IN3}B&vSzlC6hJ-3NpY9f)p?E9X(-$*$=i)+jZ8)i}94WNXxB0yCw1CB?rs&l*nU z-i-N9{$5NGA%}py6j(+6XVK*pXXtPSt6%Kq(1!OHe`h8;c6UMTEv9AdYKs75d_>h3 zZgYmghAM!6H=`0khY+z3nQbsKH@JBNc}cPzPC&JFUUxxPQ2Y_ys#YIFO5C72vj81h z@2?nMQr@F~Z(&7so1bTgPGoGZO#{2CLnFCHa4PXYO?=wLd<_x5s#4y*tZW?@56bq? zOHssn|K{e5?Yw2=6ZN~CE`X3h?jjSed`Odv_ib}M7Gp`4dL;$AAGu(+Qt#7-4>vM; z5$GxWJF2eyMJkD!-m`O_Hhs*ih*+x$e?QsvgrBb6*$N3S!A`^8UCJPbW;s$|ylVuA5d#A{%I&q`eeCMgM3Z4lHJL|-d zgsXt&)nI`wVtbNFCoFFCq-H%)~18EUszx)CaU+ou*d$Bun_5&E_u+|X3 zlm?Bv?OQOM4****Sff_a<=ab ze%kN7cHTcc*)NC%3HXndH}3>5y1qcqs*`c6OSs& zp!FcJi;OaJwRbJP3nIVFfmb6W;j-YNMNh9Eja-`w3$s$~iYwT*ny=MEtH7~#Jr*

U^pL=DCdA@<95`)1xy2{V^`hC$ta9+8llvXjQKc%G6A(*s?@J* z=XJN9d-S{#ucfqMlKd^V_I_D>q+ftEO0DbFbjm<-11%c}#3n6Yo2AU`)5H!!bqjP4 zuQW*+zOZnl-xw@D&$TsU$Z;=0BMM*cWTU%mGdJWKH*cHiJ8=SeW_IYD0xbf1Oby|b zY(6roH%Fg(lSrS#n6>xCN3Zr{UOe%Nw)}aiq}03Bg9AovD8>k2jDNe~lG^uTvTzOS zqadV)|F<|K$coxKiy*s!KC5N6zF6fmA=Sm}=aQT9RBgvlZRZ)Pol>RVo}GIf8%>08 z_6b|PlcmQee^tHr&rvPFX@7w4&oSJclSc8{ZN{A5rzi}Il}J5(Y%5Hp2>2%ix<0T_ z{)9H><0Tz1es}^7UFId>GpVg%1QKlELg1PO_7*JNUq#+DOicl|J&vN^l6KN^G(Le& zrT8#F?xivBCrghxm%oAM;LMhezR8}~^`FA8)@Kt)HL$7ItO_p(C>CzHYzIrYr5i&E z5x?N+dNGN&wE69(1aH(|CeqtPAX&N#5C>V(w=ZSaF{cFY$PBXxRE~NeTo9bWvA(iW z{n4lS!BbOh;Ovht$0uX90t0iMMPx|BcQ!R#OYeTQ|7q#E-Bu8 zSK_eEvrDuKzvE0Rr&mReWlVsk2lUqpH8-IegBr{=q()C;)_`x+J2+rKd8M`;=eZqn zUINAo@kC(|8|4B*_{F_wojjM3tjXz3_2ro6|)Uf z&}oz;^VHbKYeM}v*v$EAo|mV&r*FpDv+tIScxH?+O(HILFqjgbVIr!}yw-a5KIg`h zq`E_vf^BEcPV8rvIjPd>kPjJ(1%GZkz)Ft4Y9tD_RlW>ld-42p_>jd~F=vre$m~2{ z$+v;b6uyB$`(w81Gl_3T{CuU%V22qHXcgv1QVpcsbtXy6xih@JE-ETAQ5T*aT!vx* zBzXUfZ3Y5Kbo%TdDd6zt^)DW_iGh?Gak5Q8cfbhiEFH2Xd^~%tl9L_Sy4V}QK!^Ta zq=k=uum5scdZM-18_#Ak7%}}pgxhR)ZzM4gL|}R!A8Z;9U6IR!Hp7(8Qh(~Vw$Umq zcfgy27iOG}On(Xh905c30T?V4+@J;qr{0sZ!1am_6|G!)`wdX~;`Y(wrl8}4DMX2_ zQViE1`{;PY<%3b!0HSJOgo-OopumuHTRZv9MO(z4n)>OCzLMhuM(Aq^ZqB*vs@j`>Ud1H=w=qCePCA@sPhbp!PyV93p>S9gjzh~+19$kSckpNDlc|ulk}sZkW)p|S z502@`nu&Xl3D43!Zr;a)tFJ7Ik{7d$WYIGM9g3KQ=W-*AaH8%v=_-BA&xhx7Vk&uf)TlT@t;Zy+bj_35 zbXXk6;w9qETR~rw#XI0i)Q=BV+tbn?HPFp9GL;)^OR(cwo3{z@`!xolAp_Z3o8mOY zPGZ=#aKvuFJAhOvcm_yd$vK%zKa$WNT5;WDwXP$-$=l`Y4nK&euqz$4tq94)R9A`Q zO5MAbzWfVk`NGwxDR|0v%cKN0XWYV1GHJijTaJoahe^$YA;EH#_ z7yh^+)K6?{A4<0H4r#n-X5F}i6o-x8foo(O&4AJrEvGTjQjnEE|Qtw~^8ARtM!8 z2^DnD3BO>+Z~r~aU3vloRRcTjU-cKxJU?ByKZWYxHG1TKq`Qqv3Dk10GETbJ zH>Mi(wVzOdlPbl3DdLT@hJ~LTb)b_@2^)gW7^Y1#98$`tj>PQ96>bY<)+$O^+7&8i zip#xf#I^6$unR|hKWL%)eBIldhGPKY>l<46VCDgIwu7dgbM3UjomDwt9lAK&!Q1I! z!`u)RchR=LHvV^YK|f=2ecTo|A0kVwM26Rm%YhqJ>Y&_Yj3aXA<(oC@%B#{k-B%Y+ zG^9zX8be7sVwl%`9C-z94C`~K;MJB(lHuM;<=Jyn_~@-7ZO=#agQ8HXnqFu0PB978g5BCg7w^^f@mGsX6c2g2yHRPP2g=Frq802i);$xf2LV@uT2viTXl z-aS`pZM;p)6o?_DgH*EvkCNi<7rLm&f?OWKSmI}4k^h&8SpTyaWL)7<9C;v1L1|_ zEP&X+nHnucKV&a(WCIr6eCm`;N%upQOSFjRbQt~9pddg*J8OuBeqxa4*Sf&6;LxXc zN9I1Fu+eImI$C~U8au=*z|AvRAJBK0UQifxg(7W}r)btgADmBOUvBw&X%SgVIGtKO&Db(s^m`>sgS-+Nl-QkJ3+_RPX6} z`}-Dl`U?rnhZ1SK+yAR|c!`aeJhQ#+0xLNbmUBDM`tH_desZ`mub*LICcf9*9Izg@ zpl++B!M!x2dcW~d7k{GHpagna?6C@F-`8dQ^+7*XKQ)2IbqTUzy(OvX?9}b!{d( zFWFn)znfpCkLdX$mX}Zsjx7{@8wO<(PPiRV{Qlav*p?b|WWJR)B)2p!)P5TK6e=?M zh%CoPFeq{vR!U0EH}?;=e!<80vFRxdA{x?a=8mP!u7j|N4T?escuA~fRV-iL5Vmnz zblh?fWD3cqwpl>?Uu-P4=`&slONAbsRo}e0jg453nlF4I36-1LXW3LsuibPHcW;$E zr<%wuN6L`o7&yil|B zHQBGmt^vIn!@{9Ozz#sZ0*X!zSk{9~JAymAkHix#EFbpmcW8B8DcJ5?v+}MnfU;0b>coP?Eb$aKUz*sK5Kq z0j@Nyi=ppH^XO~hN%w|YwcK!jm96M$^YHs(0C)=K-e=y5#p`W5wqBl-PDXqd?}QmZ zwU|!WJ&eHG1H(>%te%&*98b(W+O&ThFa9ZP-<397A1$0u6&l9wti*0gP^r63<8Wqn zrDNRLkZ1}IfJwspluw%)incgk|L7&>iq=n0qxZ5{$(GA{N$4{W%0COR4qVqxlvT#M z*ubwopeC{a&NcGk-AbQ5+1iiH#`v@&gRS3%Z}WpP#hE2sd`-f)Cn6%_SR@u1j9DTw2&}3I9YzsOf~OwWfvvmY!232v@0UBK*4$y{;DfeC5puQ6NI*hU7p{ zpF_aLty+9|vyQGGsV(tx+*)dZH&>Y4luK)#ud%V)oV-T;luFSNU|j5Ukq!|N zy!HQRc53bq($3R?Ctg`v8Q}h5d(m#owy&~>;6pjx;2Ur6m&Dpo@gGMXc>tHdAwft( z(_aoG_BqDauNepG9e$4)4Hl)PuloGd{rhIrs@%yN;{EHhg(WZ(U1MwaPyOuiPw`@6r$Lsej5pyV6thu=e?V* z)>vo04 z%9o43bG1F+i~zD3jRDoj=G1Gm zal3ccey(vM zNFODe2pSAX)sV9dd z53$?hT#1#9r`XkuU3$`pwD$SPXlQrG)f3rTD!_svc$wzoaNv=&IXm=ecWV68$}^50 zy@v+ex1I`9ucrYnwjGYF8e+>euJ(k>7VRC?H8|S8oSpVRd0XJ~J9b|2^rk8l;52mE^%@AR zf2HGgl0p9?tst9tKBYBa$xL(;=zaA-2-X@5mu5mdxd0f5H26cMYrjJrpNgc;pV>Dt zf7m|vM5gi(ZQ3%Awy=zkJ_pUE*GoyN&Be!rj}nG-_OO_@cfOk+4#FLcbt3pWZ7=bq(hR{6Ll5ixQ z1lHj9mr(iH}c341S zZ_*-QZYPkth{{F-U^W?N2g<}l=hvM44%WsD+i;jN2)0GqL+L@DH*_K+tnR)k%!AQi zKHP$#ojqH-eywCZt=4NqM4?ox0=69<&020uG~9}9Yh}_e(;~#-^x)Ti>G;bhSpyi&c)NuJsmyT zvb`3L+9;Rij_2}8d+Lv`oKX%SN+>Ew&C2EvB7iJNW9VH%VuILTriuFgzRL4lu47xu zTAlFTy!QrK~&*{gAez>g1 zuI!El6#0{XSoL&zV}vWQsGt3A|Xj;q z@6p)o<6f`W+k4w=vw{a?6I^+p1h_*cY|v0feCfp;5wi4YAx}bEopq9moTOO<-@Rjz zF=5=iS5`q)n=rL$^Eem^KNV@{&wW8d z8+crks%Bo)^M}JrZ-1s0T(F8cz_Ty})~%BT0fA#5mr^L)SEq|@74`?t!>`gGthE7P z9PSdTS`}|^>I}vjEDJUpoImNL%Usf9R4WHPPl>byEIJby49 zE_pM*1#iwJBnX&GhihQ`nuE4w%|rUs6gA~Iql!#41gd9o=|O^WHMwN#No+79 znraF1u&$dd5z>bXCOx!U>8QUWA~#E00(gc5)Ec6va@aI+iA#N=cRCAIN%BJ-i)G5%qWOVRa1Sxy3qmePvGjY3&i;)-*HQnlp6u$k-XQ^A z%IFLvT*gC!Qah(Jkt>>5RyU5SU80;p^qE>$W5eN%l(e*)g*Seey@M*R?x+LQleCC{ zk?3>G()*6~Mj3g3ZjzlHxN*JBvB+1=^@p|k3K?BdMTU=T-v@b2^ZqB0{ps+0CKZ_g zG8!L5VDtS;7@AspT&!tT>`JgNPqXKC?#SVC^P!i`TT3^Krh5yQbV>iN4ri>K9&-Bc zgvQOwdX&(eyNh;twINAto14cwgUv|ySF-HdEmnNge* zAgpiI>YGErO*l`9JMq2F-D@(#1%!E8a<`oPT71_9vNFeBfjokmwYSLvZ7O#=2ZP+A z3G4c|7eyc9xudrS-mTSEHfq!|wg4E&BeDixxAw+pMZ>rD`!C>B?inmV+Qb2cGCW@8XDp9wA?1wCD6OqjkcI@W)=e}# z=m*fxGGFO)e@8|>;kPArwBK5M=X0Hkkr8672?l;iw$G3McGp3@YIyIS!=Cw}R)X~YVy-bR zjXH4s;?#GeLO9Hd7QQ3s)oLePj9(!hU5VBoWRD#x7ziV?XnjH7lay~5Pp9|^mpN`Z zU-mUS@ZiL?_h(@w+fyn??iNc!O|WJ<89JjCkF^C)&v&2-egFFALQ?Se>F|ROPv4>JvYuim`B#>>%ZoA#9bsuybl2->eby4(6unm|NsL=@K{Q_ft*@PayraVYp z>2_;e_bbp-Xd1$Scq(@O;13E(jG?PhIk(#6hXbFTDzz+ zRkKw1#iZq;@qor>UoM>2_S5G#NwOg{j8{Hn0yydfMLsV8@Q7Nk*%pEMc_LbfwG5z= zF2)Fo?4vgKrKyb8v9;MvsINFHsP}RP9AFV&wBf{nzA$Tms2S1!Nx*kTd8}hkpjUSi zFjk_-4xz03D=p`-+QW>0MPN#8Rzw(IqB&0<>lpF|3l$Tj$Ok7Cz%g~uUEWr(Chfs35m#b@A7qHg8Hyf&|sH+RW`Hu3r zwHPFF;Dr=<`?{*BCao#GCDwr`$qN&t-Qqd6fY)qgy5q;tOe zO;S13v58!*j%+gz8=?R6^0vq(y7*L=TK#|uFx z^D6|aZhFn?TugM4g75)orBdwB=5ohY)~t=hMQgsHVPSGTnOc4<#rLJx2Ec}uS$s}E z{sGx_?Apf&j8{5(jtM{(oJjVnQq>F6#1le$n9?|b37WpRkC|7A!1afNo9B3(F_f<5 zujTP2{3}Q`2b0OY_W1LM`DY`kW|ET{Xs_t(>|!k6#+U633|<5NnEyp%#O-*x%E09T zC}AV)olk3c*~1DQBFyy0ha0^^H@F}*0D>ifphVUe%STT@`3iR2Uu$yC^mN)KIg@V@0p_Sb2d-YRIAGlODDm9B0W z6$@>A7lJPS6(Gh9e*QVD^O+^zd0!&{NLYMRD6i`ClNSq|4=!Ee?Hej&mq`0ucC*Ug zzT)>#;>OvYcHgu3^~KXe$pgvPU*B9qTFZ?gpzE1S)@+Pu>@7Gw!V{LVmdD{nG#Ris z)U6rhctTdCbaW*`QbyCP*5j8B0Ji*LhHfuZSlvoa@Qm(f&^p1Yp=@x&wDruNaFi8z+TH@l-} zgk`5b)nX(zCvT+^rfXe6Id=a!rWwG|*>(#7F#s)@q$AHx zdKB_lIozr#=~z82X7oTQ4}jM>X<3SED>1~#Sic1J;@5@}_+BeX1?&(JpiUmi_#}#8 zdQ-Ymv{HTlIkcQe)5YM1)T)I*rsy9`a{{Ij zW2R6uB3#4~8wa#aug7$h;i=ED{gzDCtHrv5^oZah_L!fKl z0~Ar=c#>E`OG3fqs|&bO4L9bR3f+w1*!H8qs%($Cl|`t+{|DWe=VVm>CPnFXDixD@ zTAtMR@(+nzYvb3u5c|(A#SKiygDw=WM&BQUnu5Y(AOgApu(b!A2+9d_2srbjB{z!h z6tli2;%i7vEsoXB<>h%zLwWf>b36Jgso7STt%0z`jUf(E>C8)M(nXZX>0eN9@(YH` z)M)jtim^l2_)@y#NJgGN>y1cJ2qri1HRHK$6f-pBS*6Bd`6g|U((RGj`6TT`PVSD*Z znQ{;oHRguNz)UGr0mOR-Fh7EHz&GI&sBUhphR?!e(S&$l`ECP*1iX;{$dyRpNSv06 zLwEablR%I#2SJk$aQLIrDe>snb@!iPMPLsJ7K0MZ|2OYSFpLg} z*a92ZRd0ysi3kDnKU5nR@$(9bq-m)PWtqHU96*-y_CWNSZtLz#JcMf0gc}eHZ9q7b zh~ON_oE*q@@&MF-JDAcCfeJ!GrkfC=p(1htInM-1?!2kp>C*&%4 zpwYhvGR&gHU|UE*Voor)p}A<7hF`lf%~mb=h5hpr#4T$vVLZ1(#QT7%t3pa5p#}YXv42NZmptqFp2SBTm5n zu68Mo&RarO=le;m;`ieIcYr<=HzEx_j?@IBDHQE_uuafNGhiiGZisb1{()NbFU6c{x=k4-kN|0U0o~{EvfkorFaeNx9>Fj$+sDJfsg?lEc&LC$I9X z@KZ`qTmGH;TcNQAI=8b z2GIR}w~u4~olCfcv4}F^qd2nX{bm%WZ|?^e#n~PM&7JW+=g@znRef4m?9~(QnKQ7P8XG6eb^@6B;qvliW`0Hk*~SCc5XQXM{HWd4QYlxme)4~v`#_Wc diff --git a/data/icons/tomahawk-icon-64x64.png b/data/icons/tomahawk-icon-64x64.png index 5641d246a7d4126a4090009415c598598c5a7cb4..b640108058e7f7fab3ec83c43b15fb725c437014 100644 GIT binary patch delta 3742 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 IM6N<$f=B5qBLDyZ delta 3057 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 Date: Sat, 14 Jul 2012 05:18:13 +0200 Subject: [PATCH 11/53] * Mute JobStatusModel and -View again. --- src/libtomahawk/jobview/JobStatusModel.cpp | 14 +++++++------- src/libtomahawk/jobview/JobStatusView.cpp | 6 ------ 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/src/libtomahawk/jobview/JobStatusModel.cpp b/src/libtomahawk/jobview/JobStatusModel.cpp index 64ec73c05..1744a5d4b 100644 --- a/src/libtomahawk/jobview/JobStatusModel.cpp +++ b/src/libtomahawk/jobview/JobStatusModel.cpp @@ -110,7 +110,7 @@ JobStatusModel::~JobStatusModel() void JobStatusModel::addJob( JobStatusItem* item ) { - tLog() << Q_FUNC_INFO << "current jobs of item type: " << m_jobTypeCount[ item->type() ] << ", current queue size of item type: " << m_jobQueue[ item->type() ].size(); +// tLog() << Q_FUNC_INFO << "current jobs of item type: " << m_jobTypeCount[ item->type() ] << ", current queue size of item type: " << m_jobQueue[ item->type() ].size(); if ( item->concurrentJobLimit() > 0 ) { if ( m_jobTypeCount[ item->type() ] >= item->concurrentJobLimit() ) @@ -123,7 +123,7 @@ JobStatusModel::addJob( JobStatusItem* item ) m_jobTypeCount[ item->type() ] = currentJobCount; } - tLog() << Q_FUNC_INFO << "new current jobs of item type: " << m_jobTypeCount[ item->type() ]; +// tLog() << Q_FUNC_INFO << "new current jobs of item type: " << m_jobTypeCount[ item->type() ]; connect( item, SIGNAL( statusChanged() ), SLOT( itemUpdated() ) ); connect( item, SIGNAL( finished() ), SLOT( itemFinished() ) ); @@ -142,7 +142,7 @@ JobStatusModel::addJob( JobStatusItem* item ) } } - tLog() << Q_FUNC_INFO << "Adding item:" << item; +// tLog() << Q_FUNC_INFO << "Adding item:" << item; int currentEndRow = m_items.count(); beginInsertRows( QModelIndex(), currentEndRow, currentEndRow ); @@ -151,7 +151,7 @@ JobStatusModel::addJob( JobStatusItem* item ) if ( item->hasCustomDelegate() ) { - tLog() << Q_FUNC_INFO << "job has custom delegate"; +// tLog() << Q_FUNC_INFO << "job has custom delegate"; emit customDelegateJobInserted( currentEndRow, item ); } @@ -221,7 +221,7 @@ JobStatusModel::rowCount( const QModelIndex& parent ) const void JobStatusModel::itemFinished() { - tLog( LOGVERBOSE ) << Q_FUNC_INFO; +// tLog( LOGVERBOSE ) << Q_FUNC_INFO; JobStatusItem* item = qobject_cast< JobStatusItem* >( sender() ); Q_ASSERT( item ); @@ -278,7 +278,7 @@ JobStatusModel::itemFinished() emit refreshDelegates(); - tLog() << Q_FUNC_INFO << "current jobs of item type: " << m_jobTypeCount[ item->type() ] << ", current queue size of item type: " << m_jobQueue[ item->type() ].size(); +// tLog() << Q_FUNC_INFO << "current jobs of item type: " << m_jobTypeCount[ item->type() ] << ", current queue size of item type: " << m_jobQueue[ item->type() ].size(); if ( item->concurrentJobLimit() > 0 ) { int currentJobs = m_jobTypeCount[ item->type() ]; @@ -299,7 +299,7 @@ JobStatusModel::itemFinished() void JobStatusModel::itemUpdated() { - tLog( LOGVERBOSE ) << Q_FUNC_INFO; +// tLog( LOGVERBOSE ) << Q_FUNC_INFO; JobStatusItem* item = qobject_cast< JobStatusItem* >( sender() ); Q_ASSERT( item ); diff --git a/src/libtomahawk/jobview/JobStatusView.cpp b/src/libtomahawk/jobview/JobStatusView.cpp index 26254ebff..46acc4413 100644 --- a/src/libtomahawk/jobview/JobStatusView.cpp +++ b/src/libtomahawk/jobview/JobStatusView.cpp @@ -101,17 +101,14 @@ JobStatusView::setModel( JobStatusSortModel* m ) void JobStatusView::customDelegateJobInserted( int row, JobStatusItem* item ) { - tLog() << Q_FUNC_INFO << "item is" << item << ", row is" << row; if ( !item ) return; item->createDelegate( m_view ); - tLog() << Q_FUNC_INFO << "item delegate is" << item->customDelegate(); m_view->setItemDelegateForRow( row, item->customDelegate() ); ACLJobDelegate* delegate = qobject_cast< ACLJobDelegate* >( item->customDelegate() ); if ( delegate ) { - tLog() << Q_FUNC_INFO << "delegate found"; connect( delegate, SIGNAL( update( const QModelIndex& ) ), m_view, SLOT( update( const QModelIndex & ) ) ); connect( delegate, SIGNAL( aclResult( ACLRegistry::ACL ) ), item, SLOT( aclResult( ACLRegistry::ACL ) ) ); delegate->emitSizeHintChanged( m_model->index( row, 0 ) ); @@ -126,7 +123,6 @@ JobStatusView::customDelegateJobInserted( int row, JobStatusItem* item ) void JobStatusView::customDelegateJobRemoved( int row ) { - tLog() << Q_FUNC_INFO << "row is" << row; checkCount(); } @@ -134,11 +130,9 @@ JobStatusView::customDelegateJobRemoved( int row ) void JobStatusView::refreshDelegates() { - tLog() << Q_FUNC_INFO; int count = m_model->rowCount(); for ( int i = 0; i < count; i++ ) { - tLog() << Q_FUNC_INFO << "checking row" << i; QModelIndex index = m_model->index( i, 0 ); QVariant itemVar = index.data( JobStatusModel::JobDataRole ); if ( !itemVar.canConvert< JobStatusItem* >() || !itemVar.value< JobStatusItem* >() ) From b39dbe688006b2e9cdd3d2aa2140d6c6c9925f5a Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Fri, 13 Jul 2012 23:19:21 -0400 Subject: [PATCH 12/53] Also allow multiple infoplugins to return data for artist top tracks --- src/libtomahawk/ArtistPlaylistInterface.cpp | 18 ++++++++++++++++++ src/libtomahawk/ArtistPlaylistInterface.h | 1 + 2 files changed, 19 insertions(+) diff --git a/src/libtomahawk/ArtistPlaylistInterface.cpp b/src/libtomahawk/ArtistPlaylistInterface.cpp index 977edec2c..750c08c4b 100644 --- a/src/libtomahawk/ArtistPlaylistInterface.cpp +++ b/src/libtomahawk/ArtistPlaylistInterface.cpp @@ -112,6 +112,10 @@ ArtistPlaylistInterface::tracks() connect( Tomahawk::InfoSystem::InfoSystem::instance(), SIGNAL( info( Tomahawk::InfoSystem::InfoRequestData, QVariant ) ), SLOT( infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData, QVariant ) ) ); + + connect( Tomahawk::InfoSystem::InfoSystem::instance(), + SIGNAL( finished( QString ) ), + SLOT( infoSystemFinished( QString ) ) ); } else if ( m_mode == DatabaseMode && !m_databaseLoaded ) { @@ -176,9 +180,23 @@ ArtistPlaylistInterface::infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData r } } + if ( !m_queries.isEmpty() ) + infoSystemFinished( id() ); +} + + +void +ArtistPlaylistInterface::infoSystemFinished( const QString &infoId ) +{ + if ( infoId != id() ) + return; + m_infoSystemLoaded = true; + disconnect( Tomahawk::InfoSystem::InfoSystem::instance(), SIGNAL( info( Tomahawk::InfoSystem::InfoRequestData, QVariant ) ), this, SLOT( infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData, QVariant ) ) ); + disconnect( Tomahawk::InfoSystem::InfoSystem::instance(), SIGNAL( finished( QString ) ), + this, SLOT( infoSystemFinished( QString) ) ); if ( m_queries.isEmpty() && m_mode == Mixed ) { diff --git a/src/libtomahawk/ArtistPlaylistInterface.h b/src/libtomahawk/ArtistPlaylistInterface.h index 655832d1f..fd8ecf302 100644 --- a/src/libtomahawk/ArtistPlaylistInterface.h +++ b/src/libtomahawk/ArtistPlaylistInterface.h @@ -60,6 +60,7 @@ signals: private slots: void onTracksLoaded( const QList< Tomahawk::query_ptr >& tracks ); void infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData requestData, QVariant output ); + void infoSystemFinished( const QString& infoId ); private: Q_DISABLE_COPY( ArtistPlaylistInterface ) From fedb669041d66327e2b6f7443995ec0856ad5b35 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sat, 14 Jul 2012 05:47:18 +0200 Subject: [PATCH 13/53] * Fixed queue auto-collapsing when playing the last track in it. --- src/libtomahawk/playlist/QueueProxyModel.cpp | 12 +++++------- src/libtomahawk/playlist/QueueProxyModel.h | 1 - 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/libtomahawk/playlist/QueueProxyModel.cpp b/src/libtomahawk/playlist/QueueProxyModel.cpp index 78a0f7cb0..c2023642a 100644 --- a/src/libtomahawk/playlist/QueueProxyModel.cpp +++ b/src/libtomahawk/playlist/QueueProxyModel.cpp @@ -33,7 +33,6 @@ QueueProxyModel::QueueProxyModel( TrackView* parent ) : PlayableProxyModel( parent ) { connect( parent, SIGNAL( itemActivated( QModelIndex ) ), SLOT( onIndexActivated( QModelIndex ) ) ); - connect( playlistInterface().data(), SIGNAL( sourceTrackCountChanged( unsigned int ) ), SLOT( onTrackCountChanged( unsigned int ) ) ); connect( AudioEngine::instance(), SIGNAL( loading( Tomahawk::result_ptr ) ), SLOT( onPlaybackStarted( Tomahawk::result_ptr ) ) ); } @@ -52,7 +51,11 @@ QueueProxyModel::onPlaybackStarted( const Tomahawk::result_ptr& result ) PlayableItem* item = itemFromIndex( mapToSource( idx ) ); if ( item && item->query() && ( item->query()->results().contains( result ) || item->query()->equals( result->toQuery() ) ) ) + { removeIndex( idx ); + if ( !rowCount() ) + ViewManager::instance()->hideQueue(); + } } } @@ -62,12 +65,7 @@ QueueProxyModel::onIndexActivated( const QModelIndex& index ) { setCurrentIndex( QModelIndex() ); removeIndex( index ); -} - -void -QueueProxyModel::onTrackCountChanged( unsigned int count ) -{ - if ( count == 0 ) + if ( !rowCount() ) ViewManager::instance()->hideQueue(); } diff --git a/src/libtomahawk/playlist/QueueProxyModel.h b/src/libtomahawk/playlist/QueueProxyModel.h index 3c39a68dc..f2755a03a 100644 --- a/src/libtomahawk/playlist/QueueProxyModel.h +++ b/src/libtomahawk/playlist/QueueProxyModel.h @@ -37,7 +37,6 @@ public: private slots: void onIndexActivated( const QModelIndex& index ); - void onTrackCountChanged( unsigned int count ); void onPlaybackStarted( const Tomahawk::result_ptr& result ); }; From 4eb33594228a85cba1f6b1398fbe570a293374a1 Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Sat, 14 Jul 2012 00:08:09 -0400 Subject: [PATCH 14/53] TWK-985: Log into spotify on return pressed in Spotify config --- src/libtomahawk/accounts/spotify/SpotifyAccountConfig.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/libtomahawk/accounts/spotify/SpotifyAccountConfig.cpp b/src/libtomahawk/accounts/spotify/SpotifyAccountConfig.cpp index a91890abf..ec57e12e2 100644 --- a/src/libtomahawk/accounts/spotify/SpotifyAccountConfig.cpp +++ b/src/libtomahawk/accounts/spotify/SpotifyAccountConfig.cpp @@ -41,6 +41,8 @@ SpotifyAccountConfig::SpotifyAccountConfig( SpotifyAccount *account ) { m_ui->setupUi( this ); + m_ui->loginButton->setDefault( true ); + connect( m_ui->loginButton, SIGNAL( clicked( bool ) ), this, SLOT( doLogin() ) ); connect( m_ui->usernameEdit, SIGNAL( textEdited( QString ) ), this, SLOT( resetLoginButton() ) ); From bd0e347281febee999ecef5030cae7aaf35898c5 Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Sat, 14 Jul 2012 00:31:09 -0400 Subject: [PATCH 15/53] Remove unnecessary debug --- src/sourcetree/SourceTreeView.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/sourcetree/SourceTreeView.cpp b/src/sourcetree/SourceTreeView.cpp index ce9911c08..55a97a338 100644 --- a/src/sourcetree/SourceTreeView.cpp +++ b/src/sourcetree/SourceTreeView.cpp @@ -609,7 +609,6 @@ SourceTreeView::dragEnterEvent( QDragEnterEvent* event ) m_dropRect = QRect(); m_dropIndex = QPersistentModelIndex(); - qDebug() << Q_FUNC_INFO << "Accepting Drag Event"; event->setDropAction( Qt::CopyAction ); event->acceptProposedAction(); } From 96c6ebfe99e83d414e5818626da5e076be429baf Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Sat, 14 Jul 2012 00:31:27 -0400 Subject: [PATCH 16/53] TWK-968: Part Two: Allow drop helper for mixed query/result lists. --- src/sourcetree/items/PlaylistItems.cpp | 32 ++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/src/sourcetree/items/PlaylistItems.cpp b/src/sourcetree/items/PlaylistItems.cpp index f4806abf3..8fb322915 100644 --- a/src/sourcetree/items/PlaylistItems.cpp +++ b/src/sourcetree/items/PlaylistItems.cpp @@ -170,6 +170,34 @@ PlaylistItem::willAcceptDrag( const QMimeData* data ) const PlaylistItem::DropTypes PlaylistItem::supportedDropTypes( const QMimeData* data ) const { + if ( data->hasFormat( "application/tomahawk.mixed" ) ) + { + // If this is mixed but only queries/results, we can still handle them + bool mixedQueries = true; + + QByteArray itemData = data->data( "application/tomahawk.mixed" ); + QDataStream stream( &itemData, QIODevice::ReadOnly ); + QString mimeType; + qlonglong val; + + while ( !stream.atEnd() ) + { + stream >> mimeType; + if ( mimeType != "application/tomahawk.query.list" && + mimeType != "application/tomahawk.result.list" ) + { + mixedQueries = false; + break; + } + stream >> val; + } + + if ( mixedQueries ) + return DropTypeThisTrack | DropTypeThisAlbum | DropTypeAllFromArtist | DropTypeLocalItems | DropTypeTop50; + else + return DropTypesNone; + } + if ( data->hasFormat( "application/tomahawk.query.list" ) ) return DropTypeThisTrack | DropTypeThisAlbum | DropTypeAllFromArtist | DropTypeLocalItems | DropTypeTop50; else if ( data->hasFormat( "application/tomahawk.result.list" ) ) @@ -178,10 +206,6 @@ PlaylistItem::supportedDropTypes( const QMimeData* data ) const return DropTypeThisAlbum | DropTypeAllFromArtist | DropTypeLocalItems | DropTypeTop50; else if ( data->hasFormat( "application/tomahawk.metadata.artist" ) ) return DropTypeAllFromArtist | DropTypeLocalItems | DropTypeTop50; - else if ( data->hasFormat( "application/tomahawk.mixed" ) ) - { - return DropTypesNone; - } else if ( data->hasFormat( "text/plain" ) ) { return DropTypesNone; From aa82c276c9c9a9d3429e694a4ee1d1c4e32ff756 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sat, 14 Jul 2012 09:48:45 +0200 Subject: [PATCH 17/53] * Added Flexibleheader and PlaylistHeader.ui. --- src/libtomahawk/CMakeLists.txt | 4 +- src/libtomahawk/playlist/FlexibleHeader.cpp | 156 +++++++++++ src/libtomahawk/playlist/FlexibleHeader.h | 68 +++++ src/libtomahawk/playlist/PlaylistHeader.ui | 279 ++++++++++++++++++++ 4 files changed, 505 insertions(+), 2 deletions(-) create mode 100644 src/libtomahawk/playlist/FlexibleHeader.cpp create mode 100644 src/libtomahawk/playlist/FlexibleHeader.h create mode 100644 src/libtomahawk/playlist/PlaylistHeader.ui diff --git a/src/libtomahawk/CMakeLists.txt b/src/libtomahawk/CMakeLists.txt index a8118437e..535e581e0 100644 --- a/src/libtomahawk/CMakeLists.txt +++ b/src/libtomahawk/CMakeLists.txt @@ -48,6 +48,7 @@ set( libGuiSources infobar/InfoBar.cpp + playlist/FlexibleHeader.cpp playlist/FlexibleView.cpp playlist/TreeModel.cpp playlist/TreeProxyModel.cpp @@ -88,8 +89,6 @@ set( libGuiSources playlist/dynamic/widgets/CollapsibleControls.cpp playlist/dynamic/widgets/DynamicSetupWidget.cpp - - ExternalResolverGui.cpp resolvers/ScriptResolver.cpp resolvers/QtScriptResolver.cpp @@ -320,6 +319,7 @@ set( libUI ${libUI} widgets/infowidgets/AlbumInfoWidget.ui widgets/infowidgets/TrackInfoWidget.ui playlist/QueueView.ui + playlist/PlaylistHeader.ui filemetadata/MetadataEditor.ui context/ContextWidget.ui infobar/InfoBar.ui diff --git a/src/libtomahawk/playlist/FlexibleHeader.cpp b/src/libtomahawk/playlist/FlexibleHeader.cpp new file mode 100644 index 000000000..e58a2ea02 --- /dev/null +++ b/src/libtomahawk/playlist/FlexibleHeader.cpp @@ -0,0 +1,156 @@ +/* === This file is part of Tomahawk Player - === + * + * Copyright 2010-2011, Christian Muehlhaeuser + * + * Tomahawk is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Tomahawk is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Tomahawk. If not, see . + */ + +#include "FlexibleHeader.h" +#include "ui_PlaylistHeader.h" + +#include +#include +#include +#include +#include + +#include "playlist/FlexibleView.h" +#include "ViewManager.h" +#include "thirdparty/Qocoa/qsearchfield.h" +#include "utils/Closure.h" +#include "utils/TomahawkUtilsGui.h" +#include "utils/Logger.h" +#include "widgets/QueryLabel.h" +#include "Source.h" + +using namespace Tomahawk; + + +FlexibleHeader::FlexibleHeader( FlexibleView* parent ) + : QWidget( parent ) + , m_parent( parent ) + , ui( new Ui::PlaylistHeader ) +{ + ui->setupUi( this ); + + QPalette pal = palette(); + pal.setColor( QPalette::Foreground, Qt::white ); + + ui->captionLabel->setPalette( pal ); + ui->descLabel->setPalette( pal ); + + QFont font = ui->captionLabel->font(); + font.setPixelSize( 16 ); + font.setBold( true ); + ui->captionLabel->setFont( font ); + + font.setPixelSize( 11 ); + ui->descLabel->setFont( font ); + + ui->radioNormal->setFocusPolicy( Qt::NoFocus ); + ui->radioDetailed->setFocusPolicy( Qt::NoFocus ); + ui->radioCloud->setFocusPolicy( Qt::NoFocus ); + + QFile f( RESPATH "stylesheets/topbar-radiobuttons.css" ); + f.open( QFile::ReadOnly ); + QString css = QString::fromAscii( f.readAll() ); + f.close(); + + ui->modeWidget->setStyleSheet( css ); + + ui->radioNormal->setChecked( true ); + ui->filter->setPlaceholderText( tr( "Filter..." ) ); + + pal = palette(); + pal.setColor( QPalette::Window, QColor( "#454e59" ) ); + + setPalette( pal ); + setAutoFillBackground( true ); + + connect( &m_filterTimer, SIGNAL( timeout() ), SLOT( applyFilter() ) ); + connect( ui->filter, SIGNAL( textChanged( QString ) ), SLOT( onFilterEdited() ) ); + + NewClosure( ui->radioNormal, SIGNAL( clicked() ), const_cast< FlexibleView* >( parent ), SLOT( setCurrentMode( FlexibleViewMode ) ), FlexibleView::Flat )->setAutoDelete( false ); + NewClosure( ui->radioDetailed, SIGNAL( clicked() ), const_cast< FlexibleView* >( parent ), SLOT( setCurrentMode( FlexibleViewMode ) ), FlexibleView::Detailed )->setAutoDelete( false ); + NewClosure( ui->radioCloud, SIGNAL( clicked() ), const_cast< FlexibleView* >( parent ), SLOT( setCurrentMode( FlexibleViewMode ) ), FlexibleView::Grid )->setAutoDelete( false ); +} + + +FlexibleHeader::~FlexibleHeader() +{ + delete ui; +} + + +void +FlexibleHeader::setCaption( const QString& s ) +{ + ui->captionLabel->setText( s ); +} + + +void +FlexibleHeader::setDescription( const QString& s ) +{ + ui->descLabel->setText( s ); +} + + +void +FlexibleHeader::setPixmap( const QPixmap& p ) +{ + ui->imageLabel->setPixmap( p.scaledToHeight( ui->imageLabel->height(), Qt::SmoothTransformation ) ); +} + + +void +FlexibleHeader::setFilter( const QString& filter ) +{ + ui->filter->setText( filter ); +} + + +void +FlexibleHeader::onFilterEdited() +{ + m_filter = ui->filter->text(); + + m_filterTimer.stop(); + m_filterTimer.setInterval( 280 ); + m_filterTimer.setSingleShot( true ); + m_filterTimer.start(); +} + + +void +FlexibleHeader::applyFilter() +{ + emit filterTextChanged( ui->filter->text() ); +} + + +void +FlexibleHeader::changeEvent( QEvent* e ) +{ + QWidget::changeEvent( e ); + switch ( e->type() ) + { + case QEvent::LanguageChange: +// ui->retranslateUi( this ); + break; + + default: + break; + } +} diff --git a/src/libtomahawk/playlist/FlexibleHeader.h b/src/libtomahawk/playlist/FlexibleHeader.h new file mode 100644 index 000000000..623293cec --- /dev/null +++ b/src/libtomahawk/playlist/FlexibleHeader.h @@ -0,0 +1,68 @@ +/* === This file is part of Tomahawk Player - === + * + * Copyright 2010-2011, Christian Muehlhaeuser + * + * Tomahawk is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Tomahawk is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Tomahawk. If not, see . + */ + +#ifndef FLEXIBLEHEADER_H +#define FLEXIBLEHEADER_H + +#include +#include + +#include "DllMacro.h" +#include "Artist.h" + +class FlexibleView; + +namespace Ui +{ + class PlaylistHeader; +} + +class DLLEXPORT FlexibleHeader : public QWidget +{ +Q_OBJECT + +public: + FlexibleHeader( FlexibleView* parent ); + ~FlexibleHeader(); + +public slots: + void setCaption( const QString& s ); + void setDescription( const QString& s ); + void setPixmap( const QPixmap& p ); + + void setFilter( const QString& filter ); + +signals: + void filterTextChanged( const QString& filter ); + +protected: + void changeEvent( QEvent* e ); + +private slots: + void onFilterEdited(); + void applyFilter(); + +private: + FlexibleView* m_parent; + Ui::PlaylistHeader* ui; + + QString m_filter; + QTimer m_filterTimer; +}; + +#endif diff --git a/src/libtomahawk/playlist/PlaylistHeader.ui b/src/libtomahawk/playlist/PlaylistHeader.ui new file mode 100644 index 000000000..d6429c8fb --- /dev/null +++ b/src/libtomahawk/playlist/PlaylistHeader.ui @@ -0,0 +1,279 @@ + + + PlaylistHeader + + + + 0 + 0 + 774 + 80 + + + + + 0 + 0 + + + + + 0 + 72 + + + + InfoBar + + + + + + + 0 + 0 + + + + + 64 + 64 + + + + + 64 + 64 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 16 + 20 + + + + + + + + 0 + + + 0 + + + 2 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + Caption + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + + + + + Description + + + + + + + Qt::Vertical + + + + 20 + 1 + + + + + + + + 0 + + + 0 + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 156 + 20 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + + 87 + 30 + + + + + 87 + 30 + + + + + 0 + + + 0 + + + + + RadioButton + + + + + + + RadioButton + + + + + + + RadioButton + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 16 + 20 + + + + + + + + + 0 + 0 + + + + + 220 + 0 + + + + + 220 + 16777215 + + + + + + + + + ElidedLabel + QLabel +

widgets/ElidedLabel.h
+ + + QSearchField + QLineEdit +
thirdparty/Qocoa/qsearchfield.h
+
+ + + + From 2783651537af7b58c2708b757da47d3d0893e54e Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sat, 14 Jul 2012 09:49:11 +0200 Subject: [PATCH 18/53] * Set PlaylistModel once its loaded only. --- src/libtomahawk/ViewManager.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/libtomahawk/ViewManager.cpp b/src/libtomahawk/ViewManager.cpp index 1b0a70a69..d896d14cc 100644 --- a/src/libtomahawk/ViewManager.cpp +++ b/src/libtomahawk/ViewManager.cpp @@ -137,13 +137,14 @@ ViewManager::createPageForPlaylist( const playlist_ptr& playlist ) { FlexibleView* view = new FlexibleView(); PlaylistModel* model = new PlaylistModel(); - view->setPlayableModel( model ); PlaylistView* pv = new PlaylistView(); pv->setPlaylistModel( model ); view->setDetailedView( pv ); + view->setPixmap( pv->pixmap() ); model->loadPlaylist( playlist ); + view->setPlayableModel( model ); playlist->resolve(); return view; From a62a4c354f34195499b290719c9b0e3868a43aa8 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sat, 14 Jul 2012 09:49:39 +0200 Subject: [PATCH 19/53] * Use a FlexibleView for Recently Played playlists. --- src/sourcetree/items/SourceItem.cpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/sourcetree/items/SourceItem.cpp b/src/sourcetree/items/SourceItem.cpp index 8275f9f81..9967fc2a3 100644 --- a/src/sourcetree/items/SourceItem.cpp +++ b/src/sourcetree/items/SourceItem.cpp @@ -29,6 +29,7 @@ #include "utils/Logger.h" #include "widgets/SocialPlaylistWidget.h" #include "playlist/CustomPlaylistView.h" +#include "playlist/FlexibleView.h" #include "playlist/PlaylistView.h" #include "playlist/RecentlyAddedModel.h" #include "playlist/RecentlyPlayedModel.h" @@ -551,12 +552,10 @@ SourceItem::recentPlaysClicked() { if ( !m_recentPlaysPage ) { - PlaylistView* pv = new PlaylistView( ViewManager::instance()->widget() ); - pv->setFrameShape( QFrame::NoFrame ); - pv->setAttribute( Qt::WA_MacShowFocusRect, 0 ); + FlexibleView* pv = new FlexibleView( ViewManager::instance()->widget() ); + pv->setPixmap( QPixmap( RESPATH "images/recently-played.png" ) ); RecentlyPlayedModel* raModel = new RecentlyPlayedModel( pv ); - pv->proxyModel()->setStyle( PlayableProxyModel::Large ); raModel->setTitle( tr( "Recently Played Tracks" ) ); if ( m_source->isLocal() ) @@ -564,11 +563,11 @@ SourceItem::recentPlaysClicked() else raModel->setDescription( tr( "%1's recently played tracks" ).arg( m_source->friendlyName() ) ); - PlaylistLargeItemDelegate* del = new PlaylistLargeItemDelegate( PlaylistLargeItemDelegate::RecentlyPlayed, pv, pv->proxyModel() ); - connect( del, SIGNAL( updateIndex( QModelIndex ) ), pv, SLOT( update( QModelIndex ) ) ); - pv->setItemDelegate( del ); + PlaylistLargeItemDelegate* del = new PlaylistLargeItemDelegate( PlaylistLargeItemDelegate::RecentlyPlayed, pv->trackView(), pv->trackView()->proxyModel() ); + connect( del, SIGNAL( updateIndex( QModelIndex ) ), pv->trackView(), SLOT( update( QModelIndex ) ) ); + pv->trackView()->setItemDelegate( del ); - pv->setPlaylistModel( raModel ); + pv->setPlayableModel( raModel ); pv->setEmptyTip( tr( "Sorry, we could not find any recent plays!" ) ); raModel->setSource( m_source ); From 7ab179e23ffb70401cf81ecf1d797c87d63cf3ba Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sat, 14 Jul 2012 09:50:06 +0200 Subject: [PATCH 20/53] * Use FlexibleHeader in FlexibleView. --- src/libtomahawk/playlist/FlexibleView.cpp | 78 +++++++++-------------- src/libtomahawk/playlist/FlexibleView.h | 16 ++++- 2 files changed, 45 insertions(+), 49 deletions(-) diff --git a/src/libtomahawk/playlist/FlexibleView.cpp b/src/libtomahawk/playlist/FlexibleView.cpp index faf09383d..3a6d7534d 100644 --- a/src/libtomahawk/playlist/FlexibleView.cpp +++ b/src/libtomahawk/playlist/FlexibleView.cpp @@ -22,11 +22,11 @@ #include #include +#include "playlist/FlexibleHeader.h" #include "playlist/PlayableModel.h" #include "playlist/TrackView.h" #include "playlist/GridView.h" #include "playlist/PlaylistLargeItemDelegate.h" -#include "utils/Closure.h" #include "utils/TomahawkUtilsGui.h" #include "utils/Logger.h" @@ -35,6 +35,7 @@ using namespace Tomahawk; FlexibleView::FlexibleView( QWidget* parent ) : QWidget( parent ) + , m_header( new FlexibleHeader( this ) ) , m_trackView( new TrackView() ) , m_detailedView( new TrackView() ) , m_gridView( new GridView() ) @@ -51,54 +52,16 @@ FlexibleView::FlexibleView( QWidget* parent ) setLayout( new QVBoxLayout() ); TomahawkUtils::unmarginLayout( layout() ); - QWidget* modeBar = new QWidget(); - modeBar->setLayout( new QHBoxLayout() ); - TomahawkUtils::unmarginLayout( modeBar->layout() ); - - QWidget* modeWidget = new QWidget(); - modeWidget->setLayout( new QHBoxLayout() ); - modeWidget->setFixedSize( QSize( 87, 30 ) ); - TomahawkUtils::unmarginLayout( modeWidget->layout() ); - - QRadioButton* radioNormal = new QRadioButton(); - radioNormal->setObjectName( "radioNormal" ); - QRadioButton* radioDetailed = new QRadioButton(); - radioDetailed->setObjectName( "radioDetailed" ); - QRadioButton* radioCloud = new QRadioButton(); - radioCloud->setObjectName( "radioCloud" ); - - radioNormal->setFocusPolicy( Qt::NoFocus ); - radioDetailed->setFocusPolicy( Qt::NoFocus ); - radioCloud->setFocusPolicy( Qt::NoFocus ); - - QFile f( RESPATH "stylesheets/topbar-radiobuttons.css" ); - f.open( QFile::ReadOnly ); - QString css = QString::fromAscii( f.readAll() ); - f.close(); - - modeWidget->setStyleSheet( css ); - modeWidget->layout()->addWidget( radioNormal ); - modeWidget->layout()->addWidget( radioDetailed ); - modeWidget->layout()->addWidget( radioCloud ); - modeWidget->layout()->addItem( new QSpacerItem( 1, 1, QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - - modeBar->layout()->addItem( new QSpacerItem( 1, 1, QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - modeBar->layout()->addWidget( modeWidget ); - modeBar->layout()->addItem( new QSpacerItem( 1, 1, QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - - layout()->addWidget( modeBar ); + layout()->addWidget( m_header ); layout()->addWidget( m_stack ); m_stack->addWidget( m_trackView ); m_stack->addWidget( m_detailedView ); m_stack->addWidget( m_gridView ); - radioNormal->setChecked( true ); setCurrentMode( Flat ); - NewClosure( radioNormal, SIGNAL( clicked() ), const_cast< FlexibleView* >( this ), SLOT( setCurrentMode( FlexibleViewMode ) ), Flat )->setAutoDelete( false ); - NewClosure( radioDetailed, SIGNAL( clicked() ), const_cast< FlexibleView* >( this ), SLOT( setCurrentMode( FlexibleViewMode ) ), Detailed )->setAutoDelete( false ); - NewClosure( radioCloud, SIGNAL( clicked() ), const_cast< FlexibleView* >( this ), SLOT( setCurrentMode( FlexibleViewMode ) ), Grid )->setAutoDelete( false ); + connect( m_header, SIGNAL( filterTextChanged( QString ) ), SLOT( setFilter( QString ) ) ); } @@ -166,6 +129,10 @@ FlexibleView::setPlayableModel( PlayableModel* model ) m_trackView->proxyModel()->sort( -1 ); m_detailedView->proxyModel()->sort( -1 ); m_gridView->proxyModel()->sort( -1 ); + + m_header->setPixmap( m_pixmap ); + m_header->setCaption( model->title() ); + m_header->setDescription( model->description() ); } @@ -223,7 +190,7 @@ FlexibleView::description() const QPixmap FlexibleView::pixmap() const { - return m_trackView->pixmap(); + return m_pixmap; } @@ -238,13 +205,30 @@ FlexibleView::jumpToCurrentTrack() bool -FlexibleView::setFilter( const QString& filter ) +FlexibleView::setFilter( const QString& pattern ) { - ViewPage::setFilter( filter ); + ViewPage::setFilter( pattern ); - m_trackView->setFilter( filter ); - m_detailedView->setFilter( filter ); - m_gridView->setFilter( filter ); + m_trackView->setFilter( pattern ); + m_detailedView->setFilter( pattern ); + m_gridView->setFilter( pattern ); return true; } + + +void +FlexibleView::setEmptyTip( const QString& tip ) +{ + m_trackView->setEmptyTip( tip ); + m_detailedView->setEmptyTip( tip ); + m_gridView->setEmptyTip( tip ); +} + + +void +FlexibleView::setPixmap( const QPixmap& pixmap ) +{ + m_pixmap = pixmap; + m_header->setPixmap( pixmap ); +} diff --git a/src/libtomahawk/playlist/FlexibleView.h b/src/libtomahawk/playlist/FlexibleView.h index a18ab0ea9..3b502643a 100644 --- a/src/libtomahawk/playlist/FlexibleView.h +++ b/src/libtomahawk/playlist/FlexibleView.h @@ -28,6 +28,7 @@ class QStackedWidget; class GridView; class TrackView; class PlayableModel; +class FlexibleHeader; class DLLEXPORT FlexibleView : public QWidget, public Tomahawk::ViewPage { @@ -47,23 +48,34 @@ public: virtual QString description() const; virtual QPixmap pixmap() const; - virtual bool showFilter() const { return true; } - virtual bool setFilter( const QString& filter ); + virtual bool showInfoBar() const { return false; } virtual bool jumpToCurrentTrack(); + TrackView* trackView() const { return m_trackView; } + TrackView* detailedView() const { return m_detailedView; } + GridView* gridView() const { return m_gridView; } + void setTrackView( TrackView* view ); void setDetailedView( TrackView* view ); void setGridView( GridView* view ); + void setPixmap( const QPixmap& pixmap ); void setPlayableModel( PlayableModel* model ); + void setEmptyTip( const QString& tip ); public slots: void setCurrentMode( FlexibleViewMode mode ); + virtual bool setFilter( const QString& pattern ); signals: void modeChanged( FlexibleViewMode mode ); +private slots: + private: + FlexibleHeader* m_header; + QPixmap m_pixmap; + TrackView* m_trackView; TrackView* m_detailedView; GridView* m_gridView; From 6b5ef37724fa1d39f135bd453bf593a239d653b8 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sat, 14 Jul 2012 10:25:17 +0200 Subject: [PATCH 21/53] * Add a little more left-margin. --- src/libtomahawk/playlist/PlaylistHeader.ui | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/libtomahawk/playlist/PlaylistHeader.ui b/src/libtomahawk/playlist/PlaylistHeader.ui index d6429c8fb..a55ea5fd7 100644 --- a/src/libtomahawk/playlist/PlaylistHeader.ui +++ b/src/libtomahawk/playlist/PlaylistHeader.ui @@ -26,6 +26,9 @@ InfoBar + + 8 + From d06b0e824d8e90be4531e603faca0edb5045c083 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sat, 14 Jul 2012 10:25:35 +0200 Subject: [PATCH 22/53] * Turn Latest Additions into a FlexibleView. --- src/sourcetree/items/SourceItem.cpp | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/src/sourcetree/items/SourceItem.cpp b/src/sourcetree/items/SourceItem.cpp index 9967fc2a3..063814bbf 100644 --- a/src/sourcetree/items/SourceItem.cpp +++ b/src/sourcetree/items/SourceItem.cpp @@ -509,12 +509,10 @@ SourceItem::latestAdditionsClicked() { if ( !m_latestAdditionsPage ) { - TrackView* cv = new TrackView( ViewManager::instance()->widget() ); - cv->setFrameShape( QFrame::NoFrame ); - cv->setAttribute( Qt::WA_MacShowFocusRect, 0 ); + FlexibleView* pv = new FlexibleView( ViewManager::instance()->widget() ); + pv->setPixmap( QPixmap( RESPATH "images/new-additions.png" ) ); - RecentlyAddedModel* raModel = new RecentlyAddedModel( cv ); - cv->proxyModel()->setStyle( PlayableProxyModel::Large ); + RecentlyAddedModel* raModel = new RecentlyAddedModel( pv ); raModel->setTitle( tr( "Latest Additions" ) ); if ( m_source->isLocal() ) @@ -522,17 +520,17 @@ SourceItem::latestAdditionsClicked() else raModel->setDescription( tr( "Latest additions to %1's collection" ).arg( m_source->friendlyName() ) ); - PlaylistLargeItemDelegate* del = new PlaylistLargeItemDelegate( PlaylistLargeItemDelegate::LatestAdditions, cv, cv->proxyModel() ); - connect( del, SIGNAL( updateIndex( QModelIndex ) ), cv, SLOT( update( QModelIndex ) ) ); - cv->setItemDelegate( del ); - - cv->setPlayableModel( raModel ); - cv->sortByColumn( PlayableModel::Age, Qt::DescendingOrder ); - cv->setEmptyTip( tr( "Sorry, we could not find any recent additions!" ) ); + PlaylistLargeItemDelegate* del = new PlaylistLargeItemDelegate( PlaylistLargeItemDelegate::LatestAdditions, pv->trackView(), pv->trackView()->proxyModel() ); + connect( del, SIGNAL( updateIndex( QModelIndex ) ), pv->trackView(), SLOT( update( QModelIndex ) ) ); + pv->trackView()->setItemDelegate( del ); + pv->setPlayableModel( raModel ); + pv->trackView()->sortByColumn( PlayableModel::Age, Qt::DescendingOrder ); + pv->detailedView()->sortByColumn( PlayableModel::Age, Qt::DescendingOrder ); + pv->setEmptyTip( tr( "Sorry, we could not find any recent additions!" ) ); raModel->setSource( m_source ); - m_latestAdditionsPage = cv; + m_latestAdditionsPage = pv; } ViewManager::instance()->show( m_latestAdditionsPage ); From e21f2a5e8752a7327ce97043e6f31de6e8cf486a Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sat, 14 Jul 2012 10:30:21 +0200 Subject: [PATCH 23/53] * Make global Recently Played a FlexibleView. --- src/libtomahawk/ViewManager.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/libtomahawk/ViewManager.cpp b/src/libtomahawk/ViewManager.cpp index d896d14cc..0de1e8156 100644 --- a/src/libtomahawk/ViewManager.cpp +++ b/src/libtomahawk/ViewManager.cpp @@ -408,18 +408,19 @@ ViewManager::showRecentPlaysPage() { if ( !m_recentPlaysWidget ) { - PlaylistView* pv = new PlaylistView( m_widget ); + FlexibleView* pv = new FlexibleView( m_widget ); + pv->setPixmap( QPixmap( RESPATH "images/recently-played.png" ) ); RecentlyPlayedModel* raModel = new RecentlyPlayedModel( pv ); raModel->setTitle( tr( "Recently Played Tracks" ) ); raModel->setDescription( tr( "Recently played tracks from all your friends" ) ); - pv->proxyModel()->setStyle( PlayableProxyModel::Large ); - PlaylistLargeItemDelegate* del = new PlaylistLargeItemDelegate( PlaylistLargeItemDelegate::RecentlyPlayed, pv, pv->proxyModel() ); - connect( del, SIGNAL( updateIndex( QModelIndex ) ), pv, SLOT( update( QModelIndex ) ) ); - pv->setItemDelegate( del ); + PlaylistLargeItemDelegate* del = new PlaylistLargeItemDelegate( PlaylistLargeItemDelegate::RecentlyPlayed, pv->trackView(), pv->trackView()->proxyModel() ); + connect( del, SIGNAL( updateIndex( QModelIndex ) ), pv->trackView(), SLOT( update( QModelIndex ) ) ); + pv->trackView()->setItemDelegate( del ); - pv->setPlaylistModel( raModel ); + pv->setPlayableModel( raModel ); + pv->setEmptyTip( tr( "Sorry, we could not find any recent plays!" ) ); raModel->setSource( source_ptr() ); m_recentPlaysWidget = pv; From 077e9ab84a44784dac105d6dedea0d82d3cbc35f Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sat, 14 Jul 2012 10:36:38 +0200 Subject: [PATCH 24/53] * Use new grid view-mode icon and fix center icon background. --- data/stylesheets/topbar-radiobuttons.css | 14 +++++++------- resources.qrc | 2 ++ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/data/stylesheets/topbar-radiobuttons.css b/data/stylesheets/topbar-radiobuttons.css index 6ee4719d6..402d3c1cb 100644 --- a/data/stylesheets/topbar-radiobuttons.css +++ b/data/stylesheets/topbar-radiobuttons.css @@ -10,7 +10,7 @@ QRadioButton { padding:0; background-repeat: none; /*width:0; height:0;*/ -} +} QRadioButton::indicator { width: 29px; @@ -18,15 +18,15 @@ QRadioButton::indicator { } QRadioButton::indicator::unchecked { - background-image: url(:/data/images/view-toggle-inactive-right.png); + background-image: url(:/data/images/view-toggle-inactive-centre.png); image: url(:/data/images/view-toggle-icon-list-inactive.png); } QRadioButton::indicator::checked { - background-image: url(:/data/images/view-toggle-active-right.png); + background-image: url(:/data/images/view-toggle-active-centre.png); image: url(:/data/images/view-toggle-icon-list-active.png); } QRadioButton::indicator::pressed { - background-image: url(:/data/images/view-toggle-pressed-right.png); + background-image: url(:/data/images/view-toggle-pressed-centre.png); image: url(:/data/images/view-toggle-icon-list-active.png); } QRadioButton#radioNormal::indicator::unchecked { @@ -43,13 +43,13 @@ QRadioButton#radioNormal::indicator::pressed { } QRadioButton#radioCloud::indicator::unchecked { background-image: url(:/data/images/view-toggle-inactive-right.png); - image: url(:/data/images/view-toggle-icon-cloud-inactive.png); + image: url(:/data/images/view-toggle-icon-grid-inactive.png); } QRadioButton#radioCloud::indicator::checked { background-image: url(:/data/images/view-toggle-active-right.png); - image: url(:/data/images/view-toggle-icon-cloud-active.png); + image: url(:/data/images/view-toggle-icon-grid-active.png); } QRadioButton#radioCloud::indicator::pressed { background-image: url(:/data/images/view-toggle-pressed-right.png); - image: url(:/data/images/view-toggle-icon-cloud-active.png); + image: url(:/data/images/view-toggle-icon-grid-active.png); } diff --git a/resources.qrc b/resources.qrc index 275207bd4..ca9e2d340 100644 --- a/resources.qrc +++ b/resources.qrc @@ -45,6 +45,8 @@ data/images/view-toggle-icon-artist-inactive.png data/images/view-toggle-icon-cloud-active.png data/images/view-toggle-icon-cloud-inactive.png + data/images/view-toggle-icon-grid-active.png + data/images/view-toggle-icon-grid-inactive.png data/images/view-toggle-icon-list-active.png data/images/view-toggle-icon-list-inactive.png data/images/view-toggle-inactive-centre.png From 78aa6606f9a2560e9c5a0c82c0d71c83336397b2 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sat, 14 Jul 2012 11:13:22 +0200 Subject: [PATCH 25/53] * Added LovedTracksModel. --- src/libtomahawk/playlist/LovedTracksModel.cpp | 133 ++++++++++++++++++ src/libtomahawk/playlist/LovedTracksModel.h | 58 ++++++++ 2 files changed, 191 insertions(+) create mode 100644 src/libtomahawk/playlist/LovedTracksModel.cpp create mode 100644 src/libtomahawk/playlist/LovedTracksModel.h diff --git a/src/libtomahawk/playlist/LovedTracksModel.cpp b/src/libtomahawk/playlist/LovedTracksModel.cpp new file mode 100644 index 000000000..b0552d76e --- /dev/null +++ b/src/libtomahawk/playlist/LovedTracksModel.cpp @@ -0,0 +1,133 @@ +/* === This file is part of Tomahawk Player - === + * + * Copyright 2010-2012, Christian Muehlhaeuser + * + * Tomahawk is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Tomahawk is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Tomahawk. If not, see . + */ + +#include "LovedTracksModel.h" + +#include +#include + +#include "Source.h" +#include "SourceList.h" +#include "database/Database.h" +#include "database/DatabaseCommand_GenericSelect.h" +#include "PlayableItem.h" +#include "utils/TomahawkUtils.h" +#include "utils/Logger.h" + +#define LOVED_TRACK_ITEMS 25 + +using namespace Tomahawk; + + +LovedTracksModel::LovedTracksModel( QObject* parent ) + : PlaylistModel( parent ) + , m_limit( LOVED_TRACK_ITEMS ) +{ +} + + +LovedTracksModel::~LovedTracksModel() +{ +} + + +void +LovedTracksModel::loadTracks() +{ + if ( rowCount( QModelIndex() ) ) + { + clear(); + } + startLoading(); + + QString sql; + if ( m_source.isNull() ) + { + sql = QString( "SELECT track.name, artist.name, source, COUNT(*) as counter " + "FROM social_attributes, track, artist " + "WHERE social_attributes.id = track.id AND artist.id = track.artist AND social_attributes.k = 'Love' AND social_attributes.v = 'true' " + "GROUP BY track.id " + "ORDER BY counter DESC, social_attributes.timestamp DESC LIMIT 0, 50" ); + } + else + { + sql = QString( "SELECT track.name, artist.name, COUNT(*) as counter " + "FROM social_attributes, track, artist " + "WHERE social_attributes.id = track.id AND artist.id = track.artist AND social_attributes.k = 'Love' AND social_attributes.v = 'true' AND social_attributes.source %1 " + "GROUP BY track.id " + "ORDER BY counter DESC, social_attributes.timestamp DESC " ).arg( m_source->isLocal() ? "IS NULL" : QString( "= %1" ).arg( m_source->id() ) ); + } + + DatabaseCommand_GenericSelect* cmd = new DatabaseCommand_GenericSelect( sql, DatabaseCommand_GenericSelect::Track, -1, 0 ); + connect( cmd, SIGNAL( tracks( QList ) ), this, SLOT( appendQueries( QList ) ) ); + Database::instance()->enqueue( QSharedPointer( cmd ) ); +} + + +void +LovedTracksModel::onSourcesReady() +{ + Q_ASSERT( m_source.isNull() ); + + loadTracks(); + + foreach ( const source_ptr& source, SourceList::instance()->sources() ) + onSourceAdded( source ); +} + + +void +LovedTracksModel::setSource( const Tomahawk::source_ptr& source ) +{ + m_source = source; + if ( source.isNull() ) + { + if ( SourceList::instance()->isReady() ) + onSourcesReady(); + else + connect( SourceList::instance(), SIGNAL( ready() ), SLOT( onSourcesReady() ) ); + + connect( SourceList::instance(), SIGNAL( sourceAdded( Tomahawk::source_ptr ) ), SLOT( onSourceAdded( Tomahawk::source_ptr ) ) ); + } + else + { + onSourceAdded( source ); + loadTracks(); + } +} + + +void +LovedTracksModel::onSourceAdded( const Tomahawk::source_ptr& source ) +{ + connect( source.data(), SIGNAL( socialAttributesChanged( QString ) ), SLOT( onTrackLoved() ), Qt::UniqueConnection ); +} + + +void +LovedTracksModel::onTrackLoved() +{ + loadTracks(); +} + + +bool +LovedTracksModel::isTemporary() const +{ + return true; +} diff --git a/src/libtomahawk/playlist/LovedTracksModel.h b/src/libtomahawk/playlist/LovedTracksModel.h new file mode 100644 index 000000000..6b3b40d1d --- /dev/null +++ b/src/libtomahawk/playlist/LovedTracksModel.h @@ -0,0 +1,58 @@ +/* === This file is part of Tomahawk Player - === + * + * Copyright 2010-2011, Christian Muehlhaeuser + * + * Tomahawk is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Tomahawk is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Tomahawk. If not, see . + */ + +#ifndef LOVEDTRACKSMODEL_H +#define LOVEDTRACKSMODEL_H + +#include +#include + +#include "Typedefs.h" +#include "PlaylistModel.h" + +#include "DllMacro.h" + +class DLLEXPORT LovedTracksModel : public PlaylistModel +{ +Q_OBJECT + +public: + explicit LovedTracksModel( QObject* parent = 0 ); + ~LovedTracksModel(); + + unsigned int limit() const { return m_limit; } + void setLimit( unsigned int limit ) { m_limit = limit; } + + bool isTemporary() const; + +public slots: + void setSource( const Tomahawk::source_ptr& source ); + +private slots: + void onSourcesReady(); + void onSourceAdded( const Tomahawk::source_ptr& source ); + + void onTrackLoved(); + void loadTracks(); + +private: + Tomahawk::source_ptr m_source; + unsigned int m_limit; +}; + +#endif // LOVEDTRACKSMODEL_H From 98a196192e29870d431f199077140cf3b478c8ba Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sat, 14 Jul 2012 11:14:08 +0200 Subject: [PATCH 26/53] * Removed CustomPlaylistView. --- src/libtomahawk/CMakeLists.txt | 2 +- .../playlist/CustomPlaylistView.cpp | 180 ------------------ src/libtomahawk/playlist/CustomPlaylistView.h | 70 ------- 3 files changed, 1 insertion(+), 251 deletions(-) delete mode 100644 src/libtomahawk/playlist/CustomPlaylistView.cpp delete mode 100644 src/libtomahawk/playlist/CustomPlaylistView.h diff --git a/src/libtomahawk/CMakeLists.txt b/src/libtomahawk/CMakeLists.txt index 535e581e0..0a325c166 100644 --- a/src/libtomahawk/CMakeLists.txt +++ b/src/libtomahawk/CMakeLists.txt @@ -67,8 +67,8 @@ set( libGuiSources playlist/GridItemDelegate.cpp playlist/GridView.cpp playlist/TreeView.cpp - playlist/CustomPlaylistView.cpp playlist/ViewHeader.cpp + playlist/LovedTracksModel.cpp playlist/RecentlyAddedModel.cpp playlist/RecentlyPlayedModel.cpp playlist/PlaylistLargeItemDelegate.cpp diff --git a/src/libtomahawk/playlist/CustomPlaylistView.cpp b/src/libtomahawk/playlist/CustomPlaylistView.cpp deleted file mode 100644 index f29bac29b..000000000 --- a/src/libtomahawk/playlist/CustomPlaylistView.cpp +++ /dev/null @@ -1,180 +0,0 @@ -/* === This file is part of Tomahawk Player - === - * - * Copyright 2010-2011, Leo Franchi - * - * Tomahawk is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Tomahawk is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Tomahawk. If not, see . - */ - - -#include "CustomPlaylistView.h" - -#include "database/DatabaseCommand_GenericSelect.h" -#include "database/Database.h" -#include "utils/TomahawkUtils.h" -#include "SourceList.h" -#include "audio/AudioEngine.h" - -using namespace Tomahawk; - -CustomPlaylistView::CustomPlaylistView( CustomPlaylistView::PlaylistType type, const source_ptr& s, QWidget* parent ) - : PlaylistView( parent ) - , m_type( type ) - , m_source( s ) - , m_model( new PlaylistModel( this ) ) -{ - // Generate the tracks, add them to the playlist - proxyModel()->setStyle( PlayableProxyModel::Large ); - - setPlaylistModel( m_model ); - generateTracks(); - - if ( m_type == SourceLovedTracks ) - { - connect( m_source.data(), SIGNAL( socialAttributesChanged( QString ) ), SLOT( socialAttributesChanged( QString ) ) ); - } - else if ( m_type == TopLovedTracks ) - { - connect( SourceList::instance()->getLocal().data(), SIGNAL( socialAttributesChanged( QString ) ), SLOT( socialAttributesChanged( QString ) ) ); - foreach ( const source_ptr& s, SourceList::instance()->sources( true ) ) - connect( s.data(), SIGNAL( socialAttributesChanged( QString ) ), SLOT( socialAttributesChanged( QString ) ) ); - - connect( SourceList::instance(), SIGNAL( sourceAdded( Tomahawk::source_ptr ) ), SLOT( sourceAdded( Tomahawk::source_ptr ) ) ); - } -} - - -CustomPlaylistView::~CustomPlaylistView() -{ -} - - -bool -CustomPlaylistView::isBeingPlayed() const -{ - return AudioEngine::instance()->currentTrackPlaylist() == playlistInterface(); -} - - -bool -CustomPlaylistView::jumpToCurrentTrack() -{ - return PlaylistView::jumpToCurrentTrack(); -} - - -void -CustomPlaylistView::generateTracks() -{ - m_model->startLoading(); - - QString sql; - switch ( m_type ) - { - // TODO - case SourceLovedTracks: - sql = QString( "SELECT track.name, artist.name, COUNT(*) as counter " - "FROM social_attributes, track, artist " - "WHERE social_attributes.id = track.id AND artist.id = track.artist AND social_attributes.k = 'Love' AND social_attributes.v = 'true' AND social_attributes.source %1 " - "GROUP BY track.id " - "ORDER BY counter DESC, social_attributes.timestamp DESC " ).arg( m_source->isLocal() ? "IS NULL" : QString( "= %1" ).arg( m_source->id() ) ); - break; - case TopLovedTracks: - sql = QString( "SELECT track.name, artist.name, source, COUNT(*) as counter " - "FROM social_attributes, track, artist " - "WHERE social_attributes.id = track.id AND artist.id = track.artist AND social_attributes.k = 'Love' AND social_attributes.v = 'true' " - "GROUP BY track.id " - "ORDER BY counter DESC, social_attributes.timestamp DESC LIMIT 0, 50" ); - break; - } - - DatabaseCommand_GenericSelect* cmd = new DatabaseCommand_GenericSelect( sql, DatabaseCommand_GenericSelect::Track, -1, 0 ); - connect( cmd, SIGNAL( tracks( QList ) ), this, SLOT( tracksGenerated( QList ) ) ); - Database::instance()->enqueue( QSharedPointer( cmd ) ); -} - - -void -CustomPlaylistView::tracksGenerated( QList< query_ptr > tracks ) -{ - bool changed = false; - QList< query_ptr > newTracks = TomahawkUtils::mergePlaylistChanges( m_model->queries(), tracks, changed ); - - m_model->finishLoading(); - if ( !changed ) - return; - - m_model->clear(); - m_model->appendQueries( newTracks ); -} - - -QString -CustomPlaylistView::title() const -{ - if ( m_source.isNull() ) - return tr( "Top Loved Tracks" ); - else - { - if ( m_source->isLocal() ) - return tr( "Your loved tracks" ); - else - return tr( "%1's loved tracks" ).arg( m_source->friendlyName() ); - } -} - - -QString -CustomPlaylistView::description() const -{ - if ( m_source.isNull() ) - return tr( "The most loved tracks from all your friends" ); - else - { - if ( m_source->isLocal() ) - return tr( "All of your loved tracks" ); - else - return tr( "All of %1's loved tracks" ).arg( m_source->friendlyName() ); - } -} - - -QString -CustomPlaylistView::longDescription() const -{ - return QString(); -} - - -QPixmap -CustomPlaylistView::pixmap() const -{ - return QPixmap( RESPATH "images/loved_playlist.png" ); -} - - -void -CustomPlaylistView::socialAttributesChanged( const QString& action ) -{ - if ( action == "Love" ) - { - generateTracks(); - } -} - - -void -CustomPlaylistView::sourceAdded( const source_ptr& s ) -{ - connect( s.data(), SIGNAL( socialAttributesChanged( QString ) ), this, SLOT( socialAttributesChanged( QString ) ) ); -} diff --git a/src/libtomahawk/playlist/CustomPlaylistView.h b/src/libtomahawk/playlist/CustomPlaylistView.h deleted file mode 100644 index 8ea0c828a..000000000 --- a/src/libtomahawk/playlist/CustomPlaylistView.h +++ /dev/null @@ -1,70 +0,0 @@ -/* === This file is part of Tomahawk Player - === - * - * Copyright 2010-2011, Leo Franchi - * - * Tomahawk is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Tomahawk is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Tomahawk. If not, see . - */ - - -#ifndef CUSTOMPLAYLISTVIEW_H -#define CUSTOMPLAYLISTVIEW_H - -#include "PlaylistView.h" - -#include "DllMacro.h" - -namespace Tomahawk -{ - -class DLLEXPORT CustomPlaylistView : public PlaylistView -{ - Q_OBJECT -public: - enum PlaylistType - { - SourceLovedTracks, - TopLovedTracks - }; - - explicit CustomPlaylistView( PlaylistType type, const source_ptr& s, QWidget* parent = 0 ); - virtual ~CustomPlaylistView(); - - virtual bool showFilter() const { return true; } - - virtual QString title() const; - virtual QPixmap pixmap() const; - virtual QString description() const; - virtual QString longDescription() const; - - virtual bool isTemporaryPage() const { return false; } - virtual bool isBeingPlayed() const; - virtual bool jumpToCurrentTrack(); - -private slots: - void tracksGenerated( QList tracks ); - - void socialAttributesChanged( const QString& ); - void sourceAdded( const Tomahawk::source_ptr& ); - -private: - void generateTracks(); - - PlaylistType m_type; - source_ptr m_source; - PlaylistModel* m_model; -}; - -} - -#endif // CUSTOMPLAYLISTVIEW_H From 124d31c5426b3700b3eb9138b7fc1f62b289bfb2 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sat, 14 Jul 2012 11:14:36 +0200 Subject: [PATCH 27/53] * ViewManager doesn't handle topLoved widget anymore. --- src/libtomahawk/ViewManager.cpp | 27 --------------------------- src/libtomahawk/ViewManager.h | 3 --- 2 files changed, 30 deletions(-) diff --git a/src/libtomahawk/ViewManager.cpp b/src/libtomahawk/ViewManager.cpp index 0de1e8156..7ec8e0f5d 100644 --- a/src/libtomahawk/ViewManager.cpp +++ b/src/libtomahawk/ViewManager.cpp @@ -38,7 +38,6 @@ #include "SourceList.h" #include "TomahawkSettings.h" -#include "CustomPlaylistView.h" #include "PlaylistLargeItemDelegate.h" #include "RecentlyPlayedModel.h" #include "dynamic/widgets/DynamicWidget.h" @@ -75,7 +74,6 @@ ViewManager::ViewManager( QObject* parent ) , m_welcomeWidget( new WelcomeWidget() ) , m_whatsHotWidget( new WhatsHotWidget() ) , m_newReleasesWidget( new NewReleasesWidget() ) - , m_topLovedWidget( 0 ) , m_recentPlaysWidget( 0 ) , m_currentPage( 0 ) , m_loaded( false ) @@ -125,7 +123,6 @@ ViewManager::~ViewManager() delete m_whatsHotWidget; delete m_newReleasesWidget; delete m_welcomeWidget; - delete m_topLovedWidget; delete m_recentPlaysWidget; delete m_contextWidget; delete m_widget; @@ -386,23 +383,6 @@ ViewManager::showNewReleasesPage() } -Tomahawk::ViewPage* -ViewManager::showTopLovedPage() -{ - if ( !m_topLovedWidget ) - { - CustomPlaylistView* view = new CustomPlaylistView( CustomPlaylistView::TopLovedTracks, source_ptr(), m_widget ); - PlaylistLargeItemDelegate* del = new PlaylistLargeItemDelegate( PlaylistLargeItemDelegate::LovedTracks, view, view->proxyModel() ); - connect( del, SIGNAL( updateIndex( QModelIndex ) ), view, SLOT( update( QModelIndex ) ) ); - view->setItemDelegate( del ); - - m_topLovedWidget = view; - } - - return show( m_topLovedWidget ); -} - - Tomahawk::ViewPage* ViewManager::showRecentPlaysPage() { @@ -905,13 +885,6 @@ ViewManager::newReleasesWidget() const } -Tomahawk::ViewPage* -ViewManager::topLovedWidget() const -{ - return m_topLovedWidget; -} - - Tomahawk::ViewPage* ViewManager::recentPlaysWidget() const { diff --git a/src/libtomahawk/ViewManager.h b/src/libtomahawk/ViewManager.h index 71a942ec7..c83a4730c 100644 --- a/src/libtomahawk/ViewManager.h +++ b/src/libtomahawk/ViewManager.h @@ -90,7 +90,6 @@ public: Tomahawk::ViewPage* welcomeWidget() const; Tomahawk::ViewPage* whatsHotWidget() const; Tomahawk::ViewPage* newReleasesWidget() const; - Tomahawk::ViewPage* topLovedWidget() const; Tomahawk::ViewPage* recentPlaysWidget() const; TreeView* superCollectionView() const; @@ -133,7 +132,6 @@ public slots: Tomahawk::ViewPage* showWelcomePage(); Tomahawk::ViewPage* showWhatsHotPage(); Tomahawk::ViewPage* showNewReleasesPage(); - Tomahawk::ViewPage* showTopLovedPage(); Tomahawk::ViewPage* showRecentPlaysPage(); void showCurrentTrack(); @@ -194,7 +192,6 @@ private: WelcomeWidget* m_welcomeWidget; WhatsHotWidget* m_whatsHotWidget; NewReleasesWidget* m_newReleasesWidget; - Tomahawk::ViewPage* m_topLovedWidget; Tomahawk::ViewPage* m_recentPlaysWidget; QList< Tomahawk::collection_ptr > m_superCollections; From 6a4bbb7ec105b50819b4b5d9231547938faede2f Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sat, 14 Jul 2012 11:15:15 +0200 Subject: [PATCH 28/53] * Handle top loved tracks in LovedTracksItem. --- src/sourcetree/items/LovedTracksItem.cpp | 47 +++++++++++++++++++----- src/sourcetree/items/LovedTracksItem.h | 7 +++- 2 files changed, 43 insertions(+), 11 deletions(-) diff --git a/src/sourcetree/items/LovedTracksItem.cpp b/src/sourcetree/items/LovedTracksItem.cpp index 8b468b99c..4623b3437 100644 --- a/src/sourcetree/items/LovedTracksItem.cpp +++ b/src/sourcetree/items/LovedTracksItem.cpp @@ -24,7 +24,9 @@ #include "DropJob.h" #include "ViewManager.h" -#include "playlist/CustomPlaylistView.h" +#include "playlist/FlexibleView.h" +#include "playlist/TrackView.h" +#include "playlist/LovedTracksModel.h" #include "playlist/PlaylistLargeItemDelegate.h" using namespace Tomahawk; @@ -33,6 +35,7 @@ using namespace Tomahawk; LovedTracksItem::LovedTracksItem( SourcesModel* mdl, SourceTreeItem* parent ) : SourceTreeItem( mdl, parent, SourcesModel::LovedTracksPage ) , m_lovedTracksPage( 0 ) + , m_sortValue( -150 ) { } @@ -42,23 +45,49 @@ LovedTracksItem::~LovedTracksItem() } +QString +LovedTracksItem::text() const +{ + SourceItem* par = dynamic_cast< SourceItem* >( parent() ); + + if ( !par ) + return QString( tr( "Top Loved Tracks" ) ); + else + return QString( tr( "Loved Tracks" ) ); +} + + void LovedTracksItem::activate() { if ( !m_lovedTracksPage ) { SourceItem* par = dynamic_cast< SourceItem* >( parent() ); + FlexibleView* pv = new FlexibleView( ViewManager::instance()->widget() ); + pv->setPixmap( QPixmap( RESPATH "images/loved_playlist.png" ) ); + + LovedTracksModel* raModel = new LovedTracksModel( pv ); + raModel->setTitle( text() ); + + PlaylistLargeItemDelegate* del = new PlaylistLargeItemDelegate( PlaylistLargeItemDelegate::LovedTracks, pv->trackView(), pv->trackView()->proxyModel() ); + connect( del, SIGNAL( updateIndex( QModelIndex ) ), pv->trackView(), SLOT( update( QModelIndex ) ) ); + pv->trackView()->setItemDelegate( del ); + + pv->setEmptyTip( tr( "Sorry, we could not find any loved tracks!" ) ); if ( !par ) - return; + raModel->setDescription( tr( "The most loved tracks from all your friends" ) ); + else + { + if ( par->source()->isLocal() ) + raModel->setDescription( tr( "All of your loved tracks" ) ); + else + raModel->setDescription( tr( "All of %1's loved tracks" ).arg( par->source()->friendlyName() ) ); + } - CustomPlaylistView* view = new CustomPlaylistView( par->source().isNull() ? CustomPlaylistView::TopLovedTracks : - CustomPlaylistView::SourceLovedTracks, par->source(), ViewManager::instance()->widget() ); - PlaylistLargeItemDelegate* del = new PlaylistLargeItemDelegate(PlaylistLargeItemDelegate::LovedTracks, view, view->proxyModel() ); - connect( del, SIGNAL( updateIndex( QModelIndex ) ), view, SLOT( update( QModelIndex ) ) ); - view->setItemDelegate( del ); - view->setEmptyTip( tr( "Sorry, we could not find any loved tracks!" ) ); + pv->setPlayableModel( raModel ); + raModel->setSource( !par ? source_ptr() : par->source() ); - m_lovedTracksPage = view; + m_lovedTracksPage = pv; } ViewManager::instance()->show( m_lovedTracksPage ); diff --git a/src/sourcetree/items/LovedTracksItem.h b/src/sourcetree/items/LovedTracksItem.h index e2bec4ce1..81dae6016 100644 --- a/src/sourcetree/items/LovedTracksItem.h +++ b/src/sourcetree/items/LovedTracksItem.h @@ -33,20 +33,23 @@ public: LovedTracksItem( SourcesModel* model, SourceTreeItem* parent ); virtual ~LovedTracksItem(); - virtual QString text() const { return QString( tr( "Loved Tracks" ) ); } + virtual QString text() const; virtual QIcon icon() const { return QIcon( RESPATH "images/loved_playlist.png" ); } - virtual int peerSortValue() const { return -150; } + virtual int peerSortValue() const { return m_sortValue; } virtual void activate(); virtual bool willAcceptDrag( const QMimeData* data ) const; virtual DropTypes supportedDropTypes( const QMimeData* data ) const; virtual bool dropMimeData( const QMimeData* data, Qt::DropAction action ); + void setSortValue( int value ) { m_sortValue = value; } + private slots: void loveDroppedTracks( QList< Tomahawk::query_ptr > qrys ); private: Tomahawk::ViewPage* m_lovedTracksPage; + int m_sortValue; }; #endif From d5e6151eeece41698e4ce3f7c25de2b0de4824cd Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sat, 14 Jul 2012 11:15:45 +0200 Subject: [PATCH 29/53] * Use LovedTracksItem for Top Loved Tracks sidebar item. --- src/sourcetree/SourcesModel.cpp | 5 ++--- src/sourcetree/items/HistoryItem.cpp | 1 - src/sourcetree/items/SourceItem.cpp | 1 - 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/sourcetree/SourcesModel.cpp b/src/sourcetree/SourcesModel.cpp index a2fe261ae..c800a13e1 100644 --- a/src/sourcetree/SourcesModel.cpp +++ b/src/sourcetree/SourcesModel.cpp @@ -30,6 +30,7 @@ #include "sourcetree/items/GroupItem.h" #include "sourcetree/items/GenericPageItems.h" #include "sourcetree/items/HistoryItem.h" +#include "sourcetree/items/LovedTracksItem.h" #include "SourceList.h" #include "Playlist.h" #include "Collection.h" @@ -293,9 +294,7 @@ SourcesModel::appendGroups() sc->setSortValue( 1 ); // browse section - GenericPageItem* loved = new GenericPageItem( this, browse, tr( "Top Loved Tracks" ), QIcon( RESPATH "images/loved_playlist.png" ), - boost::bind( &ViewManager::showTopLovedPage, ViewManager::instance() ), - boost::bind( &ViewManager::topLovedWidget, ViewManager::instance() ) ); + LovedTracksItem* loved = new LovedTracksItem( this, browse ); loved->setSortValue( 2 ); GenericPageItem* recent = new GenericPageItem( this, browse, tr( "Recently Played" ), QIcon( RESPATH "images/recently-played.png" ), diff --git a/src/sourcetree/items/HistoryItem.cpp b/src/sourcetree/items/HistoryItem.cpp index 0f941ec3f..93be20dc1 100644 --- a/src/sourcetree/items/HistoryItem.cpp +++ b/src/sourcetree/items/HistoryItem.cpp @@ -23,7 +23,6 @@ #include "GenericPageItems.h" #include "utils/TomahawkUtilsGui.h" #include "utils/Logger.h" -#include "playlist/CustomPlaylistView.h" #include "TemporaryPageItem.h" #include "SourceList.h" diff --git a/src/sourcetree/items/SourceItem.cpp b/src/sourcetree/items/SourceItem.cpp index 063814bbf..a70e4228c 100644 --- a/src/sourcetree/items/SourceItem.cpp +++ b/src/sourcetree/items/SourceItem.cpp @@ -28,7 +28,6 @@ #include "utils/TomahawkUtilsGui.h" #include "utils/Logger.h" #include "widgets/SocialPlaylistWidget.h" -#include "playlist/CustomPlaylistView.h" #include "playlist/FlexibleView.h" #include "playlist/PlaylistView.h" #include "playlist/RecentlyAddedModel.h" From 82ac16feb4b0fad03f04497f16d38fca5d526aaf Mon Sep 17 00:00:00 2001 From: Tomahawk CI Date: Sat, 14 Jul 2012 22:17:33 +0000 Subject: [PATCH 30/53] Automatic merge of Transifex translations --- lang/tomahawk_ar.ts | 184 +++++++++++++++++++++++------------------ lang/tomahawk_bg.ts | 168 ++++++++++++++++++++----------------- lang/tomahawk_ca.ts | 168 ++++++++++++++++++++----------------- lang/tomahawk_de.ts | 168 ++++++++++++++++++++----------------- lang/tomahawk_en.ts | 168 ++++++++++++++++++++----------------- lang/tomahawk_es.ts | 168 ++++++++++++++++++++----------------- lang/tomahawk_fr.ts | 184 +++++++++++++++++++++++------------------ lang/tomahawk_ja.ts | 168 ++++++++++++++++++++----------------- lang/tomahawk_pl.ts | 168 ++++++++++++++++++++----------------- lang/tomahawk_pt_BR.ts | 168 ++++++++++++++++++++----------------- lang/tomahawk_ru.ts | 168 ++++++++++++++++++++----------------- lang/tomahawk_sv.ts | 168 ++++++++++++++++++++----------------- lang/tomahawk_tr.ts | 168 ++++++++++++++++++++----------------- lang/tomahawk_zh_CN.ts | 168 ++++++++++++++++++++----------------- lang/tomahawk_zh_TW.ts | 168 ++++++++++++++++++++----------------- 15 files changed, 1426 insertions(+), 1126 deletions(-) diff --git a/lang/tomahawk_ar.ts b/lang/tomahawk_ar.ts index 5e35311c7..1b2b8c1e3 100644 --- a/lang/tomahawk_ar.ts +++ b/lang/tomahawk_ar.ts @@ -474,11 +474,19 @@ connect and stream from you? &Copy to Clipboard - + &نسخ إلى الحافظة Open &Log-file + فتح &ملف السجل + + + + FlexibleHeader + + + Filter... @@ -557,7 +565,7 @@ connect and stream from you? %1 is listening along with you! - + %1 يستمع معك! @@ -617,12 +625,32 @@ connect and stream from you? LovedTracksItem - + + Top Loved Tracks + + + + Sorry, we could not find any loved tracks! نعتذر، لم نستطيع إيجاد اي من الأغاني المحبوبة! - + + The most loved tracks from all your friends + + + + + All of your loved tracks + + + + + All of %1's loved tracks + + + + Loved Tracks الأغاني المحبوبة @@ -845,6 +873,31 @@ connect and stream from you? إسم + + PlaylistHeader + + + InfoBar + + + + + Caption + + + + + Description + + + + + + + RadioButton + + + PlaylistItemDelegate @@ -1369,7 +1422,7 @@ connect and stream from you? - + Latest Additions أحدث الإضافات @@ -1384,37 +1437,37 @@ connect and stream from you? سوبر كولكشن - + Latest additions to your collection آخر إضافات على مجموعتك - + Latest additions to %1's collection آخر إضافات على مجموعة %1 - + Sorry, we could not find any recent additions! نعتذر، لم نستطيع إيجاد إضافة جديدة! - + Recently Played Tracks الأغاني التي إستمعت إليها مؤخرا - + Your recently played tracks الأغاني التي إستمعت إليها مؤخرا - + %1's recently played tracks الأغاني التي سمعها مؤخرا %1 - + Sorry, we could not find any recent plays! نعتذر، لم نستطيع إيجاد أغاني مسموعة مؤخرا! @@ -1492,77 +1545,72 @@ connect and stream from you? SourcesModel - + Group فئة - + Collection مجموعة - + Playlist قائمة الأغاني - + Automatic Playlist قائمة أغاني أوتوماتيكية - + Station إذاعة - + Browse تصفح - + Search History تاريخ البحث - + My Music موسيقتي الخاصة - + SuperCollection سوبر كولكشن - - Top Loved Tracks - الأغاني المحبوبة الأكثر شهرة - - - + Dashboard لوحة القيادة - + Recently Played تم الاستماع لها مؤخرا - + Charts الرسوم البيانية - + New Releases جديد الاصدارات - + Friends الأصدقاء @@ -1953,28 +2001,28 @@ connect and stream from you? Tomahawk::Accounts::SpotifyAccountConfig - + Logging in... جاري تسجيل الدخول... - + Failed: %1 فشل: %1 - - - Logged in as %1 - - - Log Out - + Logged in as %1 + مسجل تحت اسم %1 - - + + Log Out + تسجيل الخروج + + + + Log In تسجيل الدخول @@ -2203,7 +2251,7 @@ You may wish to try re-authenticating. Properties... - + خصائص... @@ -2221,39 +2269,6 @@ You may wish to try re-authenticating. &أظهر صفحة الفنان - - Tomahawk::CustomPlaylistView - - - Top Loved Tracks - الأغاني المحبوبة الأكثر شهرة - - - - Your loved tracks - الأغاني التي أحببتها - - - - %1's loved tracks - الأغاني المحبوبة ل%1 - - - - The most loved tracks from all your friends - الأغاني المحبوبة كثيرا بين أصدقائك - - - - All of your loved tracks - جميع الأغاني التي أحببتها - - - - All of %1's loved tracks - جميع الأغاني المحبوبة ل%1 - - Tomahawk::DropJobNotifier @@ -3623,35 +3638,40 @@ You can re-send a sync message at any time simply by sending another tweet using ViewManager - + After you have scanned your music collection you will find your tracks right here. بعد إجراء مسح مجموعة أغانيك الخاصة ستجد أغانيك هنا. - + This collection is empty. هذه المجموعة فارغة. - + SuperCollection سوبر كولكشن - + Combined libraries of all your online friends مكتبات مجمعة لكل اصحابك المتصلين - + Recently Played Tracks الأغاني التي إستمعت إليها مؤخرا - + Recently played tracks from all your friends جميع الأغاني التي استمع إليها أصدقائك مؤخرا + + + Sorry, we could not find any recent plays! + + WelcomeWidget diff --git a/lang/tomahawk_bg.ts b/lang/tomahawk_bg.ts index c264e4a05..5ff0b2d41 100644 --- a/lang/tomahawk_bg.ts +++ b/lang/tomahawk_bg.ts @@ -484,6 +484,14 @@ Tomahaw създаде доклад относно това и изпращай + + FlexibleHeader + + + Filter... + + + GlobalSearchWidget @@ -619,12 +627,32 @@ Tomahaw създаде доклад относно това и изпращай LovedTracksItem - + + Top Loved Tracks + + + + Sorry, we could not find any loved tracks! - + + The most loved tracks from all your friends + + + + + All of your loved tracks + + + + + All of %1's loved tracks + + + + Loved Tracks @@ -847,6 +875,31 @@ Tomahaw създаде доклад относно това и изпращай Име + + PlaylistHeader + + + InfoBar + + + + + Caption + + + + + Description + + + + + + + RadioButton + + + PlaylistItemDelegate @@ -1369,7 +1422,7 @@ Tomahaw създаде доклад относно това и изпращай - + Latest Additions Последно добавени @@ -1385,37 +1438,37 @@ Tomahaw създаде доклад относно това и изпращай /Сборен излед от локалните и наличните в колекциите на приятелите ти/ - + Latest additions to your collection Последно добавени към колекцията - + Latest additions to %1's collection Последно добавени в колекцията на %1 - + Sorry, we could not find any recent additions! Съжалявам, но не откривам нито една ново-добавена позиция! - + Recently Played Tracks Наскоро изпълнени песни - + Your recently played tracks Наскоро изпълнени песни от теб - + %1's recently played tracks Наскоро изпълнените песни от %1 - + Sorry, we could not find any recent plays! Съжалявам, но не откривам нито една наскоро изпълнена песен! @@ -1493,78 +1546,73 @@ Tomahaw създаде доклад относно това и изпращай SourcesModel - + Group Гпупирай - + Collection Колекция - + Playlist Списък за изпълнение - + Automatic Playlist Автоматичен списък - + Station Станция - + Browse Разгледай - + Search History Търси в историята - + My Music Моята музика - + SuperCollection Супер колекция /Сборен излед от локалните и наличните в колекциите на приятелите ти/ - - Top Loved Tracks - Най-харесвани песни - - - + Dashboard Табло - + Recently Played Наскоро изпълнени песни - + Charts Класации - + New Releases Нови албуми - + Friends Приятели @@ -1959,28 +2007,28 @@ Tomahaw създаде доклад относно това и изпращай Tomahawk::Accounts::SpotifyAccountConfig - + Logging in... Влизам... - + Failed: %1 Неуспех: %1 - + Logged in as %1 - + Log Out - - + + Log In Влез @@ -2229,39 +2277,6 @@ You may wish to try re-authenticating. &Покажи страницата на артистът - - Tomahawk::CustomPlaylistView - - - Top Loved Tracks - Най-харесвани песни - - - - Your loved tracks - Песните, които харесам. - - - - %1's loved tracks - Песните, каресвани от %1 - - - - The most loved tracks from all your friends - Най-харесваните песни от всички твои приятели. - - - - All of your loved tracks - Всички песни, които харесвам. - - - - All of %1's loved tracks - Всички песни, харесвани от %1 - - Tomahawk::DropJobNotifier @@ -3634,36 +3649,41 @@ You can re-send a sync message at any time simply by sending another tweet using ViewManager - + After you have scanned your music collection you will find your tracks right here. След като бъде сканирана колекцията ти, ще откриеш твоите песни точно тук. - + This collection is empty. Празна колекция. - + SuperCollection Супер колекция /Сборен излед от локалните и наличните в колекциите на приятелите ти/ - + Combined libraries of all your online friends Обща колекция с всичките ми приятели на линия - + Recently Played Tracks Наскоро изпълени песни - + Recently played tracks from all your friends Наскоро изпълнени песни от всичките ти приятели + + + Sorry, we could not find any recent plays! + + WelcomeWidget diff --git a/lang/tomahawk_ca.ts b/lang/tomahawk_ca.ts index f418c5b01..33031c015 100644 --- a/lang/tomahawk_ca.ts +++ b/lang/tomahawk_ca.ts @@ -481,6 +481,14 @@ connect and stream from you? + + FlexibleHeader + + + Filter... + + + GlobalSearchWidget @@ -616,12 +624,32 @@ connect and stream from you? LovedTracksItem - + + Top Loved Tracks + + + + Sorry, we could not find any loved tracks! - + + The most loved tracks from all your friends + + + + + All of your loved tracks + + + + + All of %1's loved tracks + + + + Loved Tracks @@ -844,6 +872,31 @@ connect and stream from you? Nom + + PlaylistHeader + + + InfoBar + + + + + Caption + + + + + Description + + + + + + + RadioButton + + + PlaylistItemDelegate @@ -1367,7 +1420,7 @@ connect and stream from you? - + Latest Additions Darreres Novetats @@ -1382,37 +1435,37 @@ connect and stream from you? SuperCol·lecció - + Latest additions to your collection Darreres novetats a la vostra col·lecció - + Latest additions to %1's collection Darreres novetats a la col·lecció de %1 - + Sorry, we could not find any recent additions! - + Recently Played Tracks Cançons Escoltades Recentment - + Your recently played tracks Cançons Escoltades Recentment - + %1's recently played tracks Cançons Escoltades Recentment per %1 - + Sorry, we could not find any recent plays! @@ -1490,77 +1543,72 @@ connect and stream from you? SourcesModel - + Group Grup - + Collection Col·lecció - + Playlist Llista de Reproducció - + Automatic Playlist Llista de Reproducció Automàtica - + Station Emissora - + Browse Cerca - + Search History Historial de Cerca - + My Music La Meva Música - + SuperCollection SuperCol·lecció - - Top Loved Tracks - Top de Cançons Preferides - - - + Dashboard Presentació - + Recently Played Escoltades Recentment - + Charts Llistes - + New Releases Nous Llançaments - + Friends Amics @@ -1952,28 +2000,28 @@ i emissores de ràdio basades en el vostre gust musical. Tomahawk::Accounts::SpotifyAccountConfig - + Logging in... Iniciant sessió... - + Failed: %1 Error: %1 - + Logged in as %1 - + Log Out - - + + Log In Incia Sessió @@ -2220,39 +2268,6 @@ Torneu a autenticar-vos. &Mostra la pàgina de l'artista - - Tomahawk::CustomPlaylistView - - - Top Loved Tracks - Top de Cançons Preferides - - - - Your loved tracks - Les meves cançons preferides - - - - %1's loved tracks - Les cançons preferides de %1 - - - - The most loved tracks from all your friends - Les cançons preferides de tots els amics - - - - All of your loved tracks - Totes les meves cançons preferides - - - - All of %1's loved tracks - Totes les cançons preferides de %1 - - Tomahawk::DropJobNotifier @@ -3622,35 +3637,40 @@ Podeu reenviar un missatge de sincronisme en qualsevol moment simplement enviant ViewManager - + After you have scanned your music collection you will find your tracks right here. - + This collection is empty. - + SuperCollection SuperCol·lecció - + Combined libraries of all your online friends Biblioteques combinades de tots els amis en línia - + Recently Played Tracks Cançons Escoltades Recentment - + Recently played tracks from all your friends Cançons escoltades recentment pels amics + + + Sorry, we could not find any recent plays! + + WelcomeWidget diff --git a/lang/tomahawk_de.ts b/lang/tomahawk_de.ts index a42d46de9..a58797f0d 100644 --- a/lang/tomahawk_de.ts +++ b/lang/tomahawk_de.ts @@ -482,6 +482,14 @@ erlauben sich mit dir zu verbinden? + + FlexibleHeader + + + Filter... + + + GlobalSearchWidget @@ -617,12 +625,32 @@ erlauben sich mit dir zu verbinden? LovedTracksItem - + + Top Loved Tracks + + + + Sorry, we could not find any loved tracks! Sorry, wir konnten keine Lieblingslieder finden! - + + The most loved tracks from all your friends + + + + + All of your loved tracks + + + + + All of %1's loved tracks + + + + Loved Tracks Lieblingslieder @@ -845,6 +873,31 @@ erlauben sich mit dir zu verbinden? Name + + PlaylistHeader + + + InfoBar + + + + + Caption + + + + + Description + + + + + + + RadioButton + + + PlaylistItemDelegate @@ -1368,7 +1421,7 @@ erlauben sich mit dir zu verbinden? - + Latest Additions Kürzlich hinzugekommen @@ -1383,37 +1436,37 @@ erlauben sich mit dir zu verbinden? Supersammlung - + Latest additions to your collection Neueste Lieder in deiner Sammlung - + Latest additions to %1's collection Neueste Lieder in %1's Sammlung - + Sorry, we could not find any recent additions! Sorry, wir konnten keine Lieder finden die kürzlich hinzugefügt wurden! - + Recently Played Tracks Zuletzt gehörte Lieder - + Your recently played tracks Deine zuletzt gehörten Lieder - + %1's recently played tracks %1's zuletzt gehörte Lieder - + Sorry, we could not find any recent plays! Sorry, wir konnten keine kürzlich gespielten Lieder finden! @@ -1491,77 +1544,72 @@ erlauben sich mit dir zu verbinden? SourcesModel - + Group Gruppe - + Collection Sammlung - + Playlist Playlist - + Automatic Playlist Automatische Playlist - + Station Station - + Browse Stöbern - + Search History Suchverlauf - + My Music Meine Musik - + SuperCollection Supersammlung - - Top Loved Tracks - Gemeinsame Lieblingslieder - - - + Dashboard Dashboard - + Recently Played Kürzlich gehörte Lieder - + Charts Charts - + New Releases Neuerscheinungen - + Friends Freunde @@ -1950,28 +1998,28 @@ erlauben sich mit dir zu verbinden? Tomahawk::Accounts::SpotifyAccountConfig - + Logging in... Anmelden... - + Failed: %1 Fehler: %1 - + Logged in as %1 - + Log Out - - + + Log In Anmelden @@ -2216,39 +2264,6 @@ You may wish to try re-authenticating. &Gehe zur Künstler Seite - - Tomahawk::CustomPlaylistView - - - Top Loved Tracks - Meist geliebte Lieder - - - - Your loved tracks - Deine Lieblingslieder - - - - %1's loved tracks - Die Lieblingslieder von %1 - - - - The most loved tracks from all your friends - Die Lieblingslieder deiner Freunde - - - - All of your loved tracks - All deine Lieblingslieder - - - - All of %1's loved tracks - Alle Lieblingslieder von %1 - - Tomahawk::DropJobNotifier @@ -3613,35 +3628,40 @@ You can re-send a sync message at any time simply by sending another tweet using ViewManager - + After you have scanned your music collection you will find your tracks right here. Nachdem du deine Musik Sammlung gescannt hast, findest du all deine Lieder genau hier. - + This collection is empty. Diese Sammlung ist leer. - + SuperCollection SuperCollection - + Combined libraries of all your online friends Kombinierte Sammlung all deiner Freunde - + Recently Played Tracks Zuletzt gehörte Lieder - + Recently played tracks from all your friends Zuletzt gehörte Lieder all deiner Freunde + + + Sorry, we could not find any recent plays! + + WelcomeWidget diff --git a/lang/tomahawk_en.ts b/lang/tomahawk_en.ts index 3de7bf057..0d2142058 100644 --- a/lang/tomahawk_en.ts +++ b/lang/tomahawk_en.ts @@ -482,6 +482,14 @@ connect and stream from you? Open &Log-file + + FlexibleHeader + + + Filter... + Filter... + + GlobalSearchWidget @@ -617,12 +625,32 @@ connect and stream from you? LovedTracksItem - + + Top Loved Tracks + Top Loved Tracks + + + Sorry, we could not find any loved tracks! Sorry, we could not find any loved tracks! - + + The most loved tracks from all your friends + The most loved tracks from all your friends + + + + All of your loved tracks + All of your loved tracks + + + + All of %1's loved tracks + All of %1's loved tracks + + + Loved Tracks Loved Tracks @@ -845,6 +873,31 @@ connect and stream from you? Name + + PlaylistHeader + + + InfoBar + InfoBar + + + + Caption + Caption + + + + Description + Description + + + + + + RadioButton + RadioButton + + PlaylistItemDelegate @@ -1368,7 +1421,7 @@ connect and stream from you? - + Latest Additions Latest Additions @@ -1383,37 +1436,37 @@ connect and stream from you? SuperCollection - + Latest additions to your collection Latest additions to your collection - + Latest additions to %1's collection Latest additions to %1's collection - + Sorry, we could not find any recent additions! Sorry, we could not find any recent additions! - + Recently Played Tracks Recently Played Tracks - + Your recently played tracks Your recently played tracks - + %1's recently played tracks %1's recently played tracks - + Sorry, we could not find any recent plays! Sorry, we could not find any recent plays! @@ -1491,77 +1544,72 @@ connect and stream from you? SourcesModel - + Group Group - + Collection Collection - + Playlist Playlist - + Automatic Playlist Automatic Playlist - + Station Station - + Browse Browse - + Search History Search History - + My Music My Music - + SuperCollection SuperCollection - - Top Loved Tracks - Top Loved Tracks - - - + Dashboard Dashboard - + Recently Played Recently Played - + Charts Charts - + New Releases New Releases - + Friends Friends @@ -1953,28 +2001,28 @@ connect and stream from you? Tomahawk::Accounts::SpotifyAccountConfig - + Logging in... Logging in... - + Failed: %1 Failed: %1 - + Logged in as %1 Logged in as %1 - + Log Out Log Out - - + + Log In Log In @@ -2221,39 +2269,6 @@ You may wish to try re-authenticating. &Show Artist Page - - Tomahawk::CustomPlaylistView - - - Top Loved Tracks - Top Loved Tracks - - - - Your loved tracks - Your loved tracks - - - - %1's loved tracks - %1's loved tracks - - - - The most loved tracks from all your friends - The most loved tracks from all your friends - - - - All of your loved tracks - All of your loved tracks - - - - All of %1's loved tracks - All of %1's loved tracks - - Tomahawk::DropJobNotifier @@ -3623,35 +3638,40 @@ You can re-send a sync message at any time simply by sending another tweet using ViewManager - + After you have scanned your music collection you will find your tracks right here. After you have scanned your music collection you will find your tracks right here. - + This collection is empty. This collection is empty. - + SuperCollection SuperCollection - + Combined libraries of all your online friends Combined libraries of all your online friends - + Recently Played Tracks Recently Played Tracks - + Recently played tracks from all your friends Recently played tracks from all your friends + + + Sorry, we could not find any recent plays! + Sorry, we could not find any recent plays! + WelcomeWidget diff --git a/lang/tomahawk_es.ts b/lang/tomahawk_es.ts index a15a15459..987f2c789 100644 --- a/lang/tomahawk_es.ts +++ b/lang/tomahawk_es.ts @@ -481,6 +481,14 @@ connect and stream from you? + + FlexibleHeader + + + Filter... + + + GlobalSearchWidget @@ -616,12 +624,32 @@ connect and stream from you? LovedTracksItem - + + Top Loved Tracks + + + + Sorry, we could not find any loved tracks! - + + The most loved tracks from all your friends + + + + + All of your loved tracks + + + + + All of %1's loved tracks + + + + Loved Tracks @@ -844,6 +872,31 @@ connect and stream from you? + + PlaylistHeader + + + InfoBar + + + + + Caption + + + + + Description + + + + + + + RadioButton + + + PlaylistItemDelegate @@ -1366,7 +1419,7 @@ connect and stream from you? - + Latest Additions Añadidos recientemente @@ -1381,37 +1434,37 @@ connect and stream from you? SuperColección - + Latest additions to your collection Últimas novedades en mi colección - + Latest additions to %1's collection Últimas novedadoes en la colección de %1 - + Sorry, we could not find any recent additions! - + Recently Played Tracks Temas Escuchados Recientemente - + Your recently played tracks Mis canciones escuchadas recientemente - + %1's recently played tracks Las canciones escuchadas recientemente por %1 - + Sorry, we could not find any recent plays! @@ -1489,77 +1542,72 @@ connect and stream from you? SourcesModel - + Group Grupo - + Collection Colección - + Playlist Lista de reproducción - + Automatic Playlist Lista de reproducción automática - + Station Estación - + Browse Buscar - + Search History Historial de Búsqueda - + My Music Mi Musica - + SuperCollection SuperColección - - Top Loved Tracks - Pistas favoritas - - - + Dashboard Panel de inicio - + Recently Played Reproducido recientemente - + Charts Listas - + New Releases Últimas novedades - + Friends Amigos @@ -1951,28 +1999,28 @@ y estaciones basadas en sus gustos personales. Tomahawk::Accounts::SpotifyAccountConfig - + Logging in... Inciando sesión... - + Failed: %1 Fallo: %1 - + Logged in as %1 - + Log Out - - + + Log In Iniciar Sesión @@ -2219,39 +2267,6 @@ Hay que volverse a autenticar. - - Tomahawk::CustomPlaylistView - - - Top Loved Tracks - Pistas favoritas - - - - Your loved tracks - Tus pistas favoritas - - - - %1's loved tracks - Pistas favoritas de %1 - - - - The most loved tracks from all your friends - Las pistas favoritas de tus amigos - - - - All of your loved tracks - Todas tus pistas favoritas - - - - All of %1's loved tracks - Todas las pistas favoritas de %1 - - Tomahawk::DropJobNotifier @@ -3621,35 +3636,40 @@ Puede reenviar el mensaje de sincronización en cualquier momento simplemente en ViewManager - + After you have scanned your music collection you will find your tracks right here. - + This collection is empty. - + SuperCollection SuperColección - + Combined libraries of all your online friends Bibliotecas combinadas de todos tus amigos conectados - + Recently Played Tracks Temas Escuchados Recientemente - + Recently played tracks from all your friends Temas escuchados recientemente por mis amigos + + + Sorry, we could not find any recent plays! + + WelcomeWidget diff --git a/lang/tomahawk_fr.ts b/lang/tomahawk_fr.ts index 218ec8cec..fa4a392ac 100644 --- a/lang/tomahawk_fr.ts +++ b/lang/tomahawk_fr.ts @@ -474,11 +474,19 @@ de se connecter et streamer de vous? &Copy to Clipboard - + &Copier à la planchette Open &Log-file + Ouvrir le &fichier journal + + + + FlexibleHeader + + + Filter... @@ -557,7 +565,7 @@ de se connecter et streamer de vous? %1 is listening along with you! - + %1 écoute avec vous! @@ -617,12 +625,32 @@ de se connecter et streamer de vous? LovedTracksItem - + + Top Loved Tracks + + + + Sorry, we could not find any loved tracks! Désolé, on a pas pu trouver aucune piste favoris! - + + The most loved tracks from all your friends + + + + + All of your loved tracks + + + + + All of %1's loved tracks + + + + Loved Tracks Titres favoris @@ -845,6 +873,31 @@ de se connecter et streamer de vous? Nom + + PlaylistHeader + + + InfoBar + + + + + Caption + + + + + Description + + + + + + + RadioButton + + + PlaylistItemDelegate @@ -1368,7 +1421,7 @@ de se connecter et streamer de vous? - + Latest Additions Derniers ajouts @@ -1383,37 +1436,37 @@ de se connecter et streamer de vous? SuperCollection - + Latest additions to your collection Derniers ajouts à votre collection - + Latest additions to %1's collection Derniers ajouts à la collection de %1 - + Sorry, we could not find any recent additions! Désolé, on a pas pu trouver des dernier ajouts! - + Recently Played Tracks Derniers titres joués - + Your recently played tracks Les derniers titres que vous avez joués - + %1's recently played tracks Derniers titres joués par %1 - + Sorry, we could not find any recent plays! Désolé, on a pas pu trouver aucune piste récement joués! @@ -1491,77 +1544,72 @@ de se connecter et streamer de vous? SourcesModel - + Group Groupe - + Collection Collection - + Playlist Liste de lecture - + Automatic Playlist Liste de lecture automatique - + Station Station - + Browse Parcourir - + Search History Chercher dans l'historique - + My Music Ma Musique - + SuperCollection SuperCollection - - Top Loved Tracks - Top des titres favoris - - - + Dashboard Tableau de bord - + Recently Played Joués récemment - + Charts Charts - + New Releases Nouveautés - + Friends Amis @@ -1953,28 +2001,28 @@ et des stations basées sur vos goûts. Tomahawk::Accounts::SpotifyAccountConfig - + Logging in... Connexion... - + Failed: %1 Echec : %1 - - - Logged in as %1 - - - Log Out - + Logged in as %1 + Connecté sous %1 - - + + Log Out + Déconnectez-vous + + + + Log In Connexion @@ -2203,7 +2251,7 @@ Essayez de vous authentifier de nouveau. Properties... - + Propriétés... @@ -2221,39 +2269,6 @@ Essayez de vous authentifier de nouveau. &Afficher la page artiste - - Tomahawk::CustomPlaylistView - - - Top Loved Tracks - Top des titres favoris - - - - Your loved tracks - Vos titres favoris - - - - %1's loved tracks - Titres favoris de %1 - - - - The most loved tracks from all your friends - Les titres favoris de vos amis - - - - All of your loved tracks - Tous vos titres favoris - - - - All of %1's loved tracks - Tous les titres favoris de %1 - - Tomahawk::DropJobNotifier @@ -3623,35 +3638,40 @@ Vous pouvez envoyer un message de synchronisation quand vous le souhaitez en env ViewManager - + After you have scanned your music collection you will find your tracks right here. Après avoir scanné votre collection musicale, vous trouverez tous vos titres ici. - + This collection is empty. La collection est vide. - + SuperCollection SuperCollection - + Combined libraries of all your online friends Collections regroupant toutes celles de vos amis en ligne - + Recently Played Tracks Derniers titres joués - + Recently played tracks from all your friends Derniers titres joués par vos amis + + + Sorry, we could not find any recent plays! + + WelcomeWidget diff --git a/lang/tomahawk_ja.ts b/lang/tomahawk_ja.ts index 0b0f05cb0..d26cccf8b 100644 --- a/lang/tomahawk_ja.ts +++ b/lang/tomahawk_ja.ts @@ -482,6 +482,14 @@ connect and stream from you? + + FlexibleHeader + + + Filter... + + + GlobalSearchWidget @@ -617,12 +625,32 @@ connect and stream from you? LovedTracksItem - + + Top Loved Tracks + + + + Sorry, we could not find any loved tracks! - + + The most loved tracks from all your friends + + + + + All of your loved tracks + + + + + All of %1's loved tracks + + + + Loved Tracks @@ -845,6 +873,31 @@ connect and stream from you? 名前 + + PlaylistHeader + + + InfoBar + + + + + Caption + + + + + Description + + + + + + + RadioButton + + + PlaylistItemDelegate @@ -1368,7 +1421,7 @@ connect and stream from you? - + Latest Additions @@ -1383,37 +1436,37 @@ connect and stream from you? スーパーコレクション - + Latest additions to your collection - + Latest additions to %1's collection - + Sorry, we could not find any recent additions! - + Recently Played Tracks - + Your recently played tracks - + %1's recently played tracks - + Sorry, we could not find any recent plays! @@ -1491,77 +1544,72 @@ connect and stream from you? SourcesModel - + Group - + Collection コレクション - + Playlist プレイリスト - + Automatic Playlist - + Station ステーション - + Browse - + Search History - + My Music マイミュージック - + SuperCollection スーパーコレクション - - Top Loved Tracks - - - - + Dashboard ダッシュボード - + Recently Played 最近聴いたトラック - + Charts - + New Releases - + Friends @@ -1950,28 +1998,28 @@ connect and stream from you? Tomahawk::Accounts::SpotifyAccountConfig - + Logging in... ログイン中... - + Failed: %1 - + Logged in as %1 - + Log Out - - + + Log In ログイン @@ -2215,39 +2263,6 @@ You may wish to try re-authenticating. - - Tomahawk::CustomPlaylistView - - - Top Loved Tracks - - - - - Your loved tracks - - - - - %1's loved tracks - - - - - The most loved tracks from all your friends - - - - - All of your loved tracks - - - - - All of %1's loved tracks - - - Tomahawk::DropJobNotifier @@ -3613,35 +3628,40 @@ Twitterを使っている友達にTomahawkを接続したいなら、ツイー ViewManager - + After you have scanned your music collection you will find your tracks right here. コレクションのスキャンが完了したら、トラックはここに表示されます。 - + This collection is empty. このコレクションには何も入っていません。 - + SuperCollection スーパーコレクション - + Combined libraries of all your online friends オンラインの友達全員のライブラリ - + Recently Played Tracks 最近再生したトラック - + Recently played tracks from all your friends 友達の最近再生したトラック + + + Sorry, we could not find any recent plays! + + WelcomeWidget diff --git a/lang/tomahawk_pl.ts b/lang/tomahawk_pl.ts index f0c7419de..0f0c4d3f8 100644 --- a/lang/tomahawk_pl.ts +++ b/lang/tomahawk_pl.ts @@ -481,6 +481,14 @@ connect and stream from you? + + FlexibleHeader + + + Filter... + + + GlobalSearchWidget @@ -616,12 +624,32 @@ connect and stream from you? LovedTracksItem - + + Top Loved Tracks + + + + Sorry, we could not find any loved tracks! - + + The most loved tracks from all your friends + + + + + All of your loved tracks + + + + + All of %1's loved tracks + + + + Loved Tracks @@ -844,6 +872,31 @@ connect and stream from you? + + PlaylistHeader + + + InfoBar + + + + + Caption + + + + + Description + + + + + + + RadioButton + + + PlaylistItemDelegate @@ -1366,7 +1419,7 @@ connect and stream from you? - + Latest Additions Ostatnio Dodane @@ -1381,37 +1434,37 @@ connect and stream from you? Superkolekcja - + Latest additions to your collection - + Latest additions to %1's collection - + Sorry, we could not find any recent additions! - + Recently Played Tracks - + Your recently played tracks - + %1's recently played tracks - + Sorry, we could not find any recent plays! @@ -1489,77 +1542,72 @@ connect and stream from you? SourcesModel - + Group Grupa - + Collection kolekcja - + Playlist Lista - + Automatic Playlist Automatyczna Lista - + Station Stacja - + Browse Przeglądaj - + Search History Historia wyszukiwania - + My Music Moja Muzyka - + SuperCollection Superkolekcja - - Top Loved Tracks - - - - + Dashboard - + Recently Played Ostatnio Odtworzone - + Charts Listy Przebojów - + New Releases Nowe Wydania - + Friends Znajomi @@ -1952,28 +2000,28 @@ indywidualnego profilu gustu. Tomahawk::Accounts::SpotifyAccountConfig - + Logging in... - + Failed: %1 - + Logged in as %1 - + Log Out - - + + Log In @@ -2217,39 +2265,6 @@ You may wish to try re-authenticating. - - Tomahawk::CustomPlaylistView - - - Top Loved Tracks - Najbardziej Lubiane Utwory - - - - Your loved tracks - Twoje ulubione utwory - - - - %1's loved tracks - Ulubione utwory %1 - - - - The most loved tracks from all your friends - Najbardziej lubiane utwory wszystkich twoich znajomych - - - - All of your loved tracks - Wszystkie twoje ulubione utwory - - - - All of %1's loved tracks - Wszystkie ulubione utwory %1 - - Tomahawk::DropJobNotifier @@ -3617,35 +3632,40 @@ Zawsze możesz ponownie wysłać wiadomość synchronizacyjną - po prostu wyśl ViewManager - + After you have scanned your music collection you will find your tracks right here. - + This collection is empty. - + SuperCollection SuperKolekcja - + Combined libraries of all your online friends Połączone biblioteki wszystkich twoich znajomych online - + Recently Played Tracks - + Recently played tracks from all your friends + + + Sorry, we could not find any recent plays! + + WelcomeWidget diff --git a/lang/tomahawk_pt_BR.ts b/lang/tomahawk_pt_BR.ts index 4aff1a507..8797e59fb 100644 --- a/lang/tomahawk_pt_BR.ts +++ b/lang/tomahawk_pt_BR.ts @@ -482,6 +482,14 @@ se conecte e faça o stream de você? + + FlexibleHeader + + + Filter... + + + GlobalSearchWidget @@ -617,12 +625,32 @@ se conecte e faça o stream de você? LovedTracksItem - + + Top Loved Tracks + + + + Sorry, we could not find any loved tracks! Desculpe, não encontramos nenhuma faixa favorita! - + + The most loved tracks from all your friends + + + + + All of your loved tracks + + + + + All of %1's loved tracks + + + + Loved Tracks Faixas Favoritas @@ -845,6 +873,31 @@ se conecte e faça o stream de você? Nome + + PlaylistHeader + + + InfoBar + + + + + Caption + + + + + Description + + + + + + + RadioButton + + + PlaylistItemDelegate @@ -1368,7 +1421,7 @@ se conecte e faça o stream de você? - + Latest Additions Últimas Adições @@ -1383,37 +1436,37 @@ se conecte e faça o stream de você? SuperColeção - + Latest additions to your collection Últimas adições à sua coleção - + Latest additions to %1's collection Últimas adições à coleção de %1 - + Sorry, we could not find any recent additions! Desculpe, não foi possível encontrar adições recentes! - + Recently Played Tracks Faixas Reproduzidas Recentemente - + Your recently played tracks Suas faixas reproduzidas recentemente - + %1's recently played tracks Faixas reproduzidas recentemente por %1 - + Sorry, we could not find any recent plays! Desculpe, não foi possível encontrar playlists recentes! @@ -1491,77 +1544,72 @@ se conecte e faça o stream de você? SourcesModel - + Group Grupo - + Collection Coleção - + Playlist Playlist - + Automatic Playlist Playlist Automática - + Station Estação - + Browse Navegar - + Search History Histórico de Busca - + My Music Minhas Músicas - + SuperCollection SuperColeção - - Top Loved Tracks - Faixas Favoritas - - - + Dashboard Painel - + Recently Played Ouvidas Recentemente - + Charts Charts - + New Releases Lançamentos - + Friends Amigos @@ -1953,28 +2001,28 @@ automáticas baseadas no seu gosto pessoal. Tomahawk::Accounts::SpotifyAccountConfig - + Logging in... Logando... - + Failed: %1 Falha: %1 - + Logged in as %1 - + Log Out - - + + Log In Log In @@ -2221,39 +2269,6 @@ Você pode tentar re-autenticar. &Mostrar Página do Artista - - Tomahawk::CustomPlaylistView - - - Top Loved Tracks - Faixas Favoritas - - - - Your loved tracks - Suas faixas favoritas - - - - %1's loved tracks - Faixas favoritas de %1 - - - - The most loved tracks from all your friends - As faixas favoritas de todos os seus amigos - - - - All of your loved tracks - Todas as suas faixas favoritas - - - - All of %1's loved tracks - Todas as faixas favoritas de %1 - - Tomahawk::DropJobNotifier @@ -3623,35 +3638,40 @@ Você pode enviar uma outra mensagem de sincronia a qualquer momento simplesment ViewManager - + After you have scanned your music collection you will find your tracks right here. Depois de escanear sua biblioteca de músicas as faixas irão aparecer aqui. - + This collection is empty. Esta coleção esta vazia. - + SuperCollection SuperColeção - + Combined libraries of all your online friends Bibliotecas combinadas de todos os seus amigos online - + Recently Played Tracks Faixas Reproduzidas Recentemente - + Recently played tracks from all your friends Faixas reproduzidas recentemente por todos os seus amigos + + + Sorry, we could not find any recent plays! + + WelcomeWidget diff --git a/lang/tomahawk_ru.ts b/lang/tomahawk_ru.ts index 90086180e..e97095d44 100644 --- a/lang/tomahawk_ru.ts +++ b/lang/tomahawk_ru.ts @@ -481,6 +481,14 @@ connect and stream from you? + + FlexibleHeader + + + Filter... + + + GlobalSearchWidget @@ -616,12 +624,32 @@ connect and stream from you? LovedTracksItem - + + Top Loved Tracks + + + + Sorry, we could not find any loved tracks! - + + The most loved tracks from all your friends + + + + + All of your loved tracks + + + + + All of %1's loved tracks + + + + Loved Tracks @@ -844,6 +872,31 @@ connect and stream from you? Имя + + PlaylistHeader + + + InfoBar + + + + + Caption + + + + + Description + + + + + + + RadioButton + + + PlaylistItemDelegate @@ -1367,7 +1420,7 @@ connect and stream from you? - + Latest Additions Последние добавленные @@ -1382,37 +1435,37 @@ connect and stream from you? Общая коллекция - + Latest additions to your collection Последние добавления в коллекцию - + Latest additions to %1's collection - + Sorry, we could not find any recent additions! - + Recently Played Tracks Недавно Воспроизводимые - + Your recently played tracks Ваши Недавно Воспроизводимые - + %1's recently played tracks - + Sorry, we could not find any recent plays! @@ -1490,77 +1543,72 @@ connect and stream from you? SourcesModel - + Group Группа - + Collection Коллекция - + Playlist Плейлист - + Automatic Playlist Автоматический плейлист - + Station Станция - + Browse Просмотреть - + Search History История поиска - + My Music Моя музыка - + SuperCollection Общая коллекция - - Top Loved Tracks - Топ любимых песен - - - + Dashboard Панель - + Recently Played Последние воспроизводимые - + Charts Чарты - + New Releases Новые релизы - + Friends Друзья @@ -1949,28 +1997,28 @@ connect and stream from you? Tomahawk::Accounts::SpotifyAccountConfig - + Logging in... Вхожу... - + Failed: %1 Ошибка: %1 - + Logged in as %1 - + Log Out - - + + Log In Войти @@ -2217,39 +2265,6 @@ You may wish to try re-authenticating. &Показать Станицу Исполнителя - - Tomahawk::CustomPlaylistView - - - Top Loved Tracks - Топ любимых песен - - - - Your loved tracks - Ваши любимые песни - - - - %1's loved tracks - %1's любимая песня - - - - The most loved tracks from all your friends - Самые любимые песни от всех ваших друзей - - - - All of your loved tracks - Все любимые песни - - - - All of %1's loved tracks - Все от %1 любимые песни - - Tomahawk::DropJobNotifier @@ -3615,35 +3630,40 @@ You can re-send a sync message at any time simply by sending another tweet using ViewManager - + After you have scanned your music collection you will find your tracks right here. - + This collection is empty. Коллекция пуста - + SuperCollection Общая коллекция - + Combined libraries of all your online friends Комбинированные библиотек всех ваших друзей онлайн - + Recently Played Tracks - + Recently played tracks from all your friends + + + Sorry, we could not find any recent plays! + + WelcomeWidget diff --git a/lang/tomahawk_sv.ts b/lang/tomahawk_sv.ts index fcdef6931..aa5e8ad9d 100644 --- a/lang/tomahawk_sv.ts +++ b/lang/tomahawk_sv.ts @@ -481,6 +481,14 @@ connect and stream from you? + + FlexibleHeader + + + Filter... + + + GlobalSearchWidget @@ -616,12 +624,32 @@ connect and stream from you? LovedTracksItem - + + Top Loved Tracks + + + + Sorry, we could not find any loved tracks! - + + The most loved tracks from all your friends + + + + + All of your loved tracks + + + + + All of %1's loved tracks + + + + Loved Tracks @@ -844,6 +872,31 @@ connect and stream from you? + + PlaylistHeader + + + InfoBar + + + + + Caption + + + + + Description + + + + + + + RadioButton + + + PlaylistItemDelegate @@ -1367,7 +1420,7 @@ connect and stream from you? - + Latest Additions Senast tillagda @@ -1382,37 +1435,37 @@ connect and stream from you? SuperCollection - + Latest additions to your collection - + Latest additions to %1's collection - + Sorry, we could not find any recent additions! - + Recently Played Tracks - + Your recently played tracks - + %1's recently played tracks - + Sorry, we could not find any recent plays! @@ -1490,77 +1543,72 @@ connect and stream from you? SourcesModel - + Group Grupp - + Collection Samling - + Playlist Spellista - + Automatic Playlist Automatisk spellista - + Station Station - + Browse Bläddra - + Search History Sökhistorik - + My Music Min Musik - + SuperCollection SuperCollection - - Top Loved Tracks - Mest älskade spår - - - + Dashboard - + Recently Played - + Charts Topplistor - + New Releases - + Friends Vänner @@ -1949,28 +1997,28 @@ connect and stream from you? Tomahawk::Accounts::SpotifyAccountConfig - + Logging in... - + Failed: %1 - + Logged in as %1 - + Log Out - - + + Log In @@ -2214,39 +2262,6 @@ You may wish to try re-authenticating. - - Tomahawk::CustomPlaylistView - - - Top Loved Tracks - Mest älskade spår - - - - Your loved tracks - Dina älskade spår - - - - %1's loved tracks - Älskade spår för %1 - - - - The most loved tracks from all your friends - De mest älskade spåren från alla dina vänner - - - - All of your loved tracks - Alla dina älskade spår - - - - All of %1's loved tracks - Alla spår som %1 älskar - - Tomahawk::DropJobNotifier @@ -3606,35 +3621,40 @@ You can re-send a sync message at any time simply by sending another tweet using ViewManager - + After you have scanned your music collection you will find your tracks right here. - + This collection is empty. - + SuperCollection - + Combined libraries of all your online friends - + Recently Played Tracks - + Recently played tracks from all your friends + + + Sorry, we could not find any recent plays! + + WelcomeWidget diff --git a/lang/tomahawk_tr.ts b/lang/tomahawk_tr.ts index f68ddc294..b24ebeac5 100644 --- a/lang/tomahawk_tr.ts +++ b/lang/tomahawk_tr.ts @@ -481,6 +481,14 @@ connect and stream from you? + + FlexibleHeader + + + Filter... + + + GlobalSearchWidget @@ -616,12 +624,32 @@ connect and stream from you? LovedTracksItem - + + Top Loved Tracks + + + + Sorry, we could not find any loved tracks! - + + The most loved tracks from all your friends + + + + + All of your loved tracks + + + + + All of %1's loved tracks + + + + Loved Tracks @@ -844,6 +872,31 @@ connect and stream from you? + + PlaylistHeader + + + InfoBar + + + + + Caption + + + + + Description + + + + + + + RadioButton + + + PlaylistItemDelegate @@ -1366,7 +1419,7 @@ connect and stream from you? - + Latest Additions @@ -1381,37 +1434,37 @@ connect and stream from you? - + Latest additions to your collection - + Latest additions to %1's collection - + Sorry, we could not find any recent additions! - + Recently Played Tracks - + Your recently played tracks - + %1's recently played tracks - + Sorry, we could not find any recent plays! @@ -1489,77 +1542,72 @@ connect and stream from you? SourcesModel - + Group - + Collection - + Playlist - + Automatic Playlist - + Station - + Browse - + Search History - + My Music - + SuperCollection - - Top Loved Tracks - - - - + Dashboard - + Recently Played - + Charts - + New Releases - + Friends @@ -1948,28 +1996,28 @@ connect and stream from you? Tomahawk::Accounts::SpotifyAccountConfig - + Logging in... - + Failed: %1 - + Logged in as %1 - + Log Out - - + + Log In @@ -2213,39 +2261,6 @@ You may wish to try re-authenticating. - - Tomahawk::CustomPlaylistView - - - Top Loved Tracks - - - - - Your loved tracks - - - - - %1's loved tracks - - - - - The most loved tracks from all your friends - - - - - All of your loved tracks - - - - - All of %1's loved tracks - - - Tomahawk::DropJobNotifier @@ -3605,35 +3620,40 @@ You can re-send a sync message at any time simply by sending another tweet using ViewManager - + After you have scanned your music collection you will find your tracks right here. - + This collection is empty. - + SuperCollection - + Combined libraries of all your online friends - + Recently Played Tracks - + Recently played tracks from all your friends + + + Sorry, we could not find any recent plays! + + WelcomeWidget diff --git a/lang/tomahawk_zh_CN.ts b/lang/tomahawk_zh_CN.ts index afe90f1f0..bf5e6dee3 100644 --- a/lang/tomahawk_zh_CN.ts +++ b/lang/tomahawk_zh_CN.ts @@ -481,6 +481,14 @@ connect and stream from you? + + FlexibleHeader + + + Filter... + + + GlobalSearchWidget @@ -616,12 +624,32 @@ connect and stream from you? LovedTracksItem - + + Top Loved Tracks + + + + Sorry, we could not find any loved tracks! - + + The most loved tracks from all your friends + + + + + All of your loved tracks + + + + + All of %1's loved tracks + + + + Loved Tracks 喜爱曲目 @@ -844,6 +872,31 @@ connect and stream from you? + + PlaylistHeader + + + InfoBar + + + + + Caption + + + + + Description + + + + + + + RadioButton + + + PlaylistItemDelegate @@ -1366,7 +1419,7 @@ connect and stream from you? - + Latest Additions @@ -1381,37 +1434,37 @@ connect and stream from you? - + Latest additions to your collection - + Latest additions to %1's collection - + Sorry, we could not find any recent additions! - + Recently Played Tracks 最近播放曲目 - + Your recently played tracks 你最近播放的曲目 - + %1's recently played tracks %1最近播放的曲目 - + Sorry, we could not find any recent plays! @@ -1489,77 +1542,72 @@ connect and stream from you? SourcesModel - + Group - + Collection - + Playlist - + Automatic Playlist - + Station - + Browse 随便看看 - + Search History 搜索历史 - + My Music 我的音乐 - + SuperCollection - - Top Loved Tracks - - - - + Dashboard - + Recently Played 最近播放 - + Charts 排行榜 - + New Releases 新专辑 - + Friends @@ -1948,28 +1996,28 @@ connect and stream from you? Tomahawk::Accounts::SpotifyAccountConfig - + Logging in... - + Failed: %1 - + Logged in as %1 - + Log Out - - + + Log In @@ -2213,39 +2261,6 @@ You may wish to try re-authenticating. - - Tomahawk::CustomPlaylistView - - - Top Loved Tracks - - - - - Your loved tracks - - - - - %1's loved tracks - - - - - The most loved tracks from all your friends - - - - - All of your loved tracks - - - - - All of %1's loved tracks - - - Tomahawk::DropJobNotifier @@ -3605,35 +3620,40 @@ You can re-send a sync message at any time simply by sending another tweet using ViewManager - + After you have scanned your music collection you will find your tracks right here. - + This collection is empty. - + SuperCollection - + Combined libraries of all your online friends - + Recently Played Tracks 最近播放曲目 - + Recently played tracks from all your friends 所有朋友最近播放的曲目 + + + Sorry, we could not find any recent plays! + + WelcomeWidget diff --git a/lang/tomahawk_zh_TW.ts b/lang/tomahawk_zh_TW.ts index 25d9db4db..a24b6a607 100644 --- a/lang/tomahawk_zh_TW.ts +++ b/lang/tomahawk_zh_TW.ts @@ -481,6 +481,14 @@ connect and stream from you? + + FlexibleHeader + + + Filter... + + + GlobalSearchWidget @@ -616,12 +624,32 @@ connect and stream from you? LovedTracksItem - + + Top Loved Tracks + + + + Sorry, we could not find any loved tracks! - + + The most loved tracks from all your friends + + + + + All of your loved tracks + + + + + All of %1's loved tracks + + + + Loved Tracks @@ -844,6 +872,31 @@ connect and stream from you? + + PlaylistHeader + + + InfoBar + + + + + Caption + + + + + Description + + + + + + + RadioButton + + + PlaylistItemDelegate @@ -1366,7 +1419,7 @@ connect and stream from you? - + Latest Additions 最新加入 @@ -1381,37 +1434,37 @@ connect and stream from you? 超級收藏 - + Latest additions to your collection - + Latest additions to %1's collection - + Sorry, we could not find any recent additions! - + Recently Played Tracks - + Your recently played tracks - + %1's recently played tracks - + Sorry, we could not find any recent plays! @@ -1489,77 +1542,72 @@ connect and stream from you? SourcesModel - + Group - + Collection 收藏 - + Playlist 播放清單 - + Automatic Playlist 自動播放清單 - + Station - + Browse 瀏覽 - + Search History 搜尋記錄 - + My Music 我的音樂 - + SuperCollection 超級收藏 - - Top Loved Tracks - 最喜愛的曲目 - - - + Dashboard 儀表板 - + Recently Played 最近播放的 - + Charts - + New Releases 新版本 - + Friends 朋友 @@ -1948,28 +1996,28 @@ connect and stream from you? Tomahawk::Accounts::SpotifyAccountConfig - + Logging in... 登錄中... - + Failed: %1 失敗:%1 - + Logged in as %1 - + Log Out - - + + Log In 登錄 @@ -2213,39 +2261,6 @@ You may wish to try re-authenticating. - - Tomahawk::CustomPlaylistView - - - Top Loved Tracks - - - - - Your loved tracks - - - - - %1's loved tracks - - - - - The most loved tracks from all your friends - 在您所有的朋友中,最受喜愛的曲目 - - - - All of your loved tracks - - - - - All of %1's loved tracks - - - Tomahawk::DropJobNotifier @@ -3605,35 +3620,40 @@ You can re-send a sync message at any time simply by sending another tweet using ViewManager - + After you have scanned your music collection you will find your tracks right here. - + This collection is empty. - + SuperCollection 超級收藏 - + Combined libraries of all your online friends 聯合您所有線上朋友的音樂庫 - + Recently Played Tracks - + Recently played tracks from all your friends + + + Sorry, we could not find any recent plays! + + WelcomeWidget From a1c8b326ab7e55073052c5505146078c3e86fc20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20Lindstr=C3=B6m?= Date: Sun, 15 Jul 2012 19:07:33 +0200 Subject: [PATCH 31/53] Enable spotify subscriptions --- .../accounts/spotify/SpotifyAccount.cpp | 249 ++++++++++++++++-- .../accounts/spotify/SpotifyAccount.h | 15 +- .../spotify/SpotifyPlaylistUpdater.cpp | 48 ++++ .../accounts/spotify/SpotifyPlaylistUpdater.h | 8 +- src/libtomahawk/utils/SpotifyParser.cpp | 42 ++- src/libtomahawk/utils/SpotifyParser.h | 7 +- 6 files changed, 333 insertions(+), 36 deletions(-) diff --git a/src/libtomahawk/accounts/spotify/SpotifyAccount.cpp b/src/libtomahawk/accounts/spotify/SpotifyAccount.cpp index f37c22645..2d9c36219 100644 --- a/src/libtomahawk/accounts/spotify/SpotifyAccount.cpp +++ b/src/libtomahawk/accounts/spotify/SpotifyAccount.cpp @@ -62,6 +62,7 @@ static QString s_resolverId = "spotify-linux-x86"; static QString s_resolverId = "spotify-unknown"; #endif + Account* SpotifyAccountFactory::createAccount( const QString& accountId ) { @@ -79,6 +80,14 @@ SpotifyAccountFactory::icon() const } +SpotifyAccount* SpotifyAccount::s_instance = 0; + +SpotifyAccount* +SpotifyAccount::instance() +{ + return s_instance; +} + SpotifyAccount::SpotifyAccount( const QString& accountId ) : CustomAtticaAccount( accountId ) , m_preventEnabling( false ) @@ -424,34 +433,171 @@ SpotifyAccount::aboutToShow( QAction* action, const playlist_ptr& playlist ) // If it's not being synced, allow the option to sync bool found = false; + bool canSubscribe = false; + bool isSubscribed = false; bool manuallyDisabled = false; + bool sync = false; + action->setVisible( true ); + QList updaters = playlist->updaters(); foreach ( PlaylistUpdaterInterface* updater, updaters ) { if ( SpotifyPlaylistUpdater* spotifyUpdater = qobject_cast< SpotifyPlaylistUpdater* >( updater ) ) { found = true; - if ( !spotifyUpdater->sync() ) + + if( spotifyUpdater->canSubscribe() ) + canSubscribe = true; + + isSubscribed = spotifyUpdater->subscribed(); + + if ( !spotifyUpdater->canSubscribe() && !spotifyUpdater->sync() ) manuallyDisabled = true; + if( spotifyUpdater->sync() ) + sync = true; + } } - if ( !found ) + if( action->data().toString() == "sync" ) { - action->setText( tr( "Sync with Spotify" ) ); + + if ( !found ) + { + action->setText( tr( "Sync with Spotify" ) ); + } + else if ( manuallyDisabled ) + { + action->setText( tr( "Re-enable syncing with Spotify" ) ); + } + else + { + // We dont want to sync a subscribeable playlist but if a playlist isnt + // collaborative, he will loose his changes on next update, thus, + // we create a new copy of it + if( canSubscribe ) + action->setText( tr( "Create subscribed copy and sync with Spotify") ); + else if( sync ) + action->setText( tr( "Stop syncing with Spotify" ) ); + else + action->setVisible( false ); + } } - else if ( manuallyDisabled ) + + // User can sync or subscribe on playlist. + // Sync means creating a new copy of it, subscribe is listening on changes from owner + if( action->data().toString() == "subscribe" ) { - action->setText( tr( "Re-enable syncing with Spotify" ) ); - } - else - { - action->setText( tr( "Stop syncing with Spotify" ) ); + if( found && canSubscribe ) + { + if ( canSubscribe && !isSubscribed ) + { + action->setText( tr( "Subscribe with Spotify" ) ); + } + else if ( manuallyDisabled ) + { + action->setText( tr( "Re-enable subscribing with Spotify" ) ); + } + else if( isSubscribed ) + { + action->setText( tr( "Stop subscribing with Spotify" ) ); + } + else + { + // Hide the action, we dont have this option on the playlist + action->setVisible(false); + } + }else + action->setVisible( false ); } } +void +SpotifyAccount::subscribeActionTriggered( bool checked ) +{ + Q_UNUSED( checked ); + QAction* action = qobject_cast< QAction* >( sender() ); + if ( !action || !m_customActions.contains( action ) ) + return; + + const playlist_ptr playlist = action->property( "payload" ).value< playlist_ptr >(); + if ( playlist.isNull() ) + { + qWarning() << "Got context menu spotify sync action triggered, but invalid playlist payload!"; + Q_ASSERT( false ); + return; + } + + SpotifyPlaylistUpdater* updater = 0; + QList updaters = playlist->updaters(); + foreach ( PlaylistUpdaterInterface* u, updaters ) + { + if ( SpotifyPlaylistUpdater* spotifyUpdater = qobject_cast< SpotifyPlaylistUpdater* >( u ) ) + { + updater = spotifyUpdater; + } + } + + if ( !updater ) + { + qDebug() << "Errr GOT NO UPDATER! uho What to do??"; + JobStatusView::instance()->model()->addJob( new ErrorStatusMessage( QString( "Spotify: Failed to get SpotifyID from playlist" ) ) ); + } + else + { + + SpotifyPlaylistInfo* info = 0; + foreach ( SpotifyPlaylistInfo* ifo, m_allSpotifyPlaylists ) + { + if ( ifo->plid == updater->spotifyId() ) + { + info = ifo; + break; + } + } + + // When we unsubscribe, all playlists is resent + // and we will could loose the SpotifyPlaylistInfo, but all we really need is the id + if ( !updater->spotifyId().isEmpty() ) + { + if( !info ) + { + info = new SpotifyPlaylistInfo( playlist->title() + , updater->spotifyId() + , updater->spotifyId() + , false + , false + ); + + registerPlaylistInfo( info ); + } + + info->subscribed = !updater->subscribed(); + + QVariantMap msg; + msg[ "_msgtype" ] = "setSubscription"; + msg[ "subscribe" ] = info->subscribed; + msg[ "playlistid" ] = info->plid; + + + sendMessage( msg, this ); + + updater->setSync( !updater->sync() ); + updater->setSubscribed( !updater->subscribed() ); + info->sync = !updater->sync(); + info->subscribed = !updater->subscribed(); + + + } + else + { + qDebug() << "oh no! DONT HAVE ANY INFO NOR UPDATER!!"; + } + + } +} void SpotifyAccount::syncActionTriggered( bool checked ) { @@ -495,6 +641,22 @@ SpotifyAccount::syncActionTriggered( bool checked ) const QString qid = sendMessage( msg, this, "playlistCreated" ); m_waitingForCreateReply[ qid ] = playlist; } + else if ( updater->canSubscribe() ) + { + QVariantMap msg; + msg[ "_msgtype" ] = "createPlaylist"; + msg[ "sync" ] = true; + msg[ "title" ] = "Copy of " + playlist->title(); + + QList< query_ptr > queries; + foreach ( const plentry_ptr& ple, playlist->entries() ) + queries << ple->query(); + QVariantList tracks = SpotifyPlaylistUpdater::queriesToVariant( queries ); + msg[ "tracks" ] = tracks; + + const QString qid = sendMessage( msg, this, "playlistCopyCreated" ); + m_waitingForCreateReply[ qid ] = playlist; + } else { SpotifyPlaylistInfo* info = 0; @@ -584,13 +746,15 @@ SpotifyAccount::resolverMessage( const QString &msgType, const QVariantMap &msg const QString plid = plMap.value( "id" ).toString(); const QString revid = plMap.value( "revid" ).toString(); const bool sync = plMap.value( "sync" ).toBool(); + const bool subscribed = plMap.value( "subscribed" ).toBool(); if ( name.isNull() || plid.isNull() || revid.isNull() ) { qDebug() << "Did not get name and plid and revid for spotify playlist:" << name << plid << revid << plMap; continue; } - m_allSpotifyPlaylists << new SpotifyPlaylistInfo( name, plid, revid, sync ); + + m_allSpotifyPlaylists << new SpotifyPlaylistInfo( name, plid, revid, sync, subscribed ); } if ( !m_configWidget.isNull() ) @@ -714,8 +878,10 @@ SpotifyAccount::resolverMessage( const QString &msgType, const QVariantMap &msg m_loggedIn = success; if ( success ) + { createActions(); - + s_instance = this; + } configurationWidget(); // ensure it's created so we can set the login button if ( m_configWidget.data() ) { @@ -741,7 +907,10 @@ SpotifyAccount::resolverMessage( const QString &msgType, const QVariantMap &msg qDebug() << "Got status message with login info:" << loggedIn << username; if ( !loggedIn || username.isEmpty() || credentials().value( "username").toString() != username ) + { m_loggedIn = false; + s_instance = 0; + } QVariantMap msg; msg[ "_msgtype" ] = "status"; @@ -896,6 +1065,7 @@ SpotifyAccount::logout() QVariantMap msg; msg[ "_msgtype" ] = "logout"; m_spotifyResolver.data()->sendMessage( msg ); + s_instance = 0; } @@ -961,7 +1131,35 @@ SpotifyAccount::startPlaylistSyncWithPlaylist( const QString& msgType, const QVa } } +void +SpotifyAccount::playlistCopyCreated( const QString& msgType, const QVariantMap& msg, const QVariant& ) +{ + Q_UNUSED( msgType ); + qDebug() << Q_FUNC_INFO << "Got response from our createCopyPlaylist command, now creating updater and attaching"; + const bool success = msg.value( "success" ).toBool(); + + if ( !success ) + { + qWarning() << "Got FAILED return code from spotify resolver createPlaylist command, aborting sync"; + return; + } + + const QString id = msg.value( "playlistid" ).toString(); + const QString revid = msg.value( "playlistid" ).toString(); + const QString qid = msg.value( "qid" ).toString(); + const QString title = msg.value( "playlistname" ).toString(); + + qDebug() << msg; + if ( !m_waitingForCreateReply.contains( qid ) ) + { + qWarning() << "Got a createPlaylist reply for a playlist/qid we were not waiting for :-/ " << qid << m_waitingForCreateReply; + return; + } + + SpotifyPlaylistInfo *info = new SpotifyPlaylistInfo( title, id, revid, true, false ); + startPlaylistSync( info ); +} void SpotifyAccount::playlistCreated( const QString& msgType, const QVariantMap& msg, const QVariant& ) { @@ -1020,7 +1218,17 @@ SpotifyAccount::registerUpdaterForPlaylist( const QString& plId, SpotifyPlaylist m_updaters[ plId ] = updater; } +void +SpotifyAccount::registerPlaylistInfo( const QString& name, const QString& plid, const QString &revid, const bool sync, const bool subscribed ) +{ + m_allSpotifyPlaylists << new SpotifyPlaylistInfo( name, plid, revid, sync, subscribed ); +} +void +SpotifyAccount::registerPlaylistInfo( SpotifyPlaylistInfo* info ) +{ + m_allSpotifyPlaylists << info; +} void SpotifyAccount::unregisterUpdater( const QString& plid ) { @@ -1055,6 +1263,7 @@ SpotifyAccount::stopPlaylistSync( SpotifyPlaylistInfo* playlist, bool forceDontD if ( m_updaters.contains( playlist->plid ) ) { + SpotifyPlaylistUpdater* updater = m_updaters[ playlist->plid ]; updater->setSync( false ); @@ -1105,11 +1314,19 @@ SpotifyAccount::createActions() if ( !m_customActions.isEmpty() ) return; - QAction* action = new QAction( 0 ); - action->setIcon( QIcon( RESPATH "images/spotify-logo.png" ) ); - connect( action, SIGNAL( triggered( bool ) ), this, SLOT( syncActionTriggered( bool ) ) ); - ActionCollection::instance()->addAction( ActionCollection::LocalPlaylists, action, this ); - m_customActions.append( action ); + QAction* syncAction = new QAction( 0 ); + syncAction->setIcon( QIcon( RESPATH "images/spotify-logo.png" ) ); + connect( syncAction, SIGNAL( triggered( bool ) ), this, SLOT( syncActionTriggered( bool ) ) ); + ActionCollection::instance()->addAction( ActionCollection::LocalPlaylists, syncAction, this ); + syncAction->setData( QString( "sync" ) ); + m_customActions.append( syncAction ); + + QAction* subscribeAction = new QAction( 0 ); + subscribeAction->setIcon( QIcon( RESPATH "images/spotify-logo.png" ) ); + connect( subscribeAction, SIGNAL( triggered( bool ) ), this, SLOT( subscribeActionTriggered( bool ) ) ); + ActionCollection::instance()->addAction( ActionCollection::LocalPlaylists, subscribeAction, this ); + subscribeAction->setData( "subscribe" ); + m_customActions.append( subscribeAction ); } diff --git a/src/libtomahawk/accounts/spotify/SpotifyAccount.h b/src/libtomahawk/accounts/spotify/SpotifyAccount.h index 4347d7bb5..14cb239b3 100644 --- a/src/libtomahawk/accounts/spotify/SpotifyAccount.h +++ b/src/libtomahawk/accounts/spotify/SpotifyAccount.h @@ -48,11 +48,11 @@ class SpotifyAccountConfig; // metadata for a playlist struct SpotifyPlaylistInfo { QString name, plid, revid; - bool sync, changed; + bool sync, subscribed, changed; - SpotifyPlaylistInfo( const QString& nname, const QString& pid, const QString& rrevid, bool ssync ) - : name( nname ), plid( pid ), revid( rrevid ), sync( ssync ), changed( false ) {} + SpotifyPlaylistInfo( const QString& nname, const QString& pid, const QString& rrevid, bool ssync, bool ssubscribed ) + : name( nname ), plid( pid ), revid( rrevid ), sync( ssync ), subscribed( ssubscribed ), changed( false ) {} SpotifyPlaylistInfo() : sync( false ), changed( false ) {} }; @@ -83,7 +83,7 @@ public: SpotifyAccount( const QString& accountId ); SpotifyAccount( const QString& accountId, const QString& path ); virtual ~SpotifyAccount(); - + static SpotifyAccount* instance(); virtual QPixmap icon() const; virtual QWidget* configurationWidget(); virtual QWidget* aboutWidget(); @@ -101,6 +101,8 @@ public: void registerUpdaterForPlaylist( const QString& plId, SpotifyPlaylistUpdater* updater ); + void registerPlaylistInfo( const QString& name, const QString& plid, const QString &revid, const bool sync, const bool subscribed ); + void registerPlaylistInfo( SpotifyPlaylistInfo* info ); void unregisterUpdater( const QString& plid ); bool deleteOnUnsync() const; @@ -114,6 +116,7 @@ public slots: void aboutToShow( QAction* action, const Tomahawk::playlist_ptr& playlist ); void syncActionTriggered( bool ); + void subscribeActionTriggered( bool ); void atticaLoaded(Attica::Content::List); private slots: @@ -129,7 +132,7 @@ private slots: // void ( const QString& msgType, const QVariantMap& msg, const QVariant& extraData ); void startPlaylistSyncWithPlaylist( const QString& msgType, const QVariantMap& msg, const QVariant& extraData ); void playlistCreated( const QString& msgType, const QVariantMap& msg, const QVariant& extraData ); - + void playlistCopyCreated( const QString& msgType, const QVariantMap& msg, const QVariant& extraData ); void delayedInit(); void hookupAfterDeletion( bool autoEnable ); @@ -151,6 +154,8 @@ private: void createActions(); void removeActions(); + static SpotifyAccount* s_instance; + QWeakPointer m_configWidget; QWeakPointer m_aboutWidget; QWeakPointer m_spotifyResolver; diff --git a/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.cpp b/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.cpp index 7e5c2d236..a13a9eeb8 100644 --- a/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.cpp +++ b/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.cpp @@ -57,10 +57,14 @@ SpotifyUpdaterFactory::create( const Tomahawk::playlist_ptr& pl, const QVariantH const QString spotifyId = settings.value( "spotifyId" ).toString(); const QString latestRev = settings.value( "latestrev" ).toString(); const bool sync = settings.value( "sync" ).toBool(); + const bool canSubscribe = settings.value( "canSubscribe" ).toBool(); + const bool isSubscribed = settings.value( "subscribed" ).toBool(); Q_ASSERT( !spotifyId.isEmpty() ); SpotifyPlaylistUpdater* updater = new SpotifyPlaylistUpdater( m_account.data(), latestRev, spotifyId, pl ); updater->setSync( sync ); + updater->setCanSubscribe( canSubscribe ); + updater->setSubscribed( isSubscribed ); m_account.data()->registerUpdaterForPlaylist( spotifyId, updater ); return updater; @@ -74,6 +78,8 @@ SpotifyPlaylistUpdater::SpotifyPlaylistUpdater( SpotifyAccount* acct, const QStr , m_spotifyId( spotifyId ) , m_blockUpdatesForNextRevision( false ) , m_sync( false ) + , m_canSubscribe( false ) + , m_subscribed( false ) { init(); } @@ -177,6 +183,8 @@ SpotifyPlaylistUpdater::saveToSettings() s[ "latestrev" ] = m_latestRev; s[ "sync" ] = m_sync; + s[ "canSubscribe" ] = m_canSubscribe; + s[ "subscribed" ] = m_subscribed; s[ "spotifyId" ] = m_spotifyId; saveSettings( s ); @@ -227,6 +235,46 @@ SpotifyPlaylistUpdater::sync() const return m_sync; } +void +SpotifyPlaylistUpdater::setSubscribed( bool subscribed ) +{ + if ( m_subscribed == subscribed ) + return; + + m_subscribed = subscribed; + setSync( subscribed ); + saveToSettings(); + emit changed(); +} + + +bool +SpotifyPlaylistUpdater::subscribed() const +{ + return m_subscribed; +} + + +void +SpotifyPlaylistUpdater::setCanSubscribe( bool canSubscribe ) +{ + + if ( m_canSubscribe == canSubscribe ) + return; + + m_canSubscribe = canSubscribe; + + saveToSettings(); + emit changed(); +} + + +bool +SpotifyPlaylistUpdater::canSubscribe() const +{ + return m_canSubscribe; +} + void SpotifyPlaylistUpdater::spotifyTracksAdded( const QVariantList& tracks, const QString& startPosId, const QString& newRev, const QString& oldRev ) diff --git a/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.h b/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.h index 3ac899a1d..c2ae2f5fa 100644 --- a/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.h +++ b/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.h @@ -53,7 +53,10 @@ public: bool sync() const; void setSync( bool sync ); - + bool subscribed() const; + void setSubscribed( bool subscribed ); + bool canSubscribe() const; + void setCanSubscribe( bool canSub ); QString spotifyId() const { return m_spotifyId; } void remove( bool askToDeletePlaylist = true ); @@ -99,7 +102,8 @@ private: bool m_blockUpdatesForNextRevision; bool m_sync; - + bool m_subscribed; + bool m_canSubscribe; QQueue<_detail::Closure*> m_queuedOps; #ifndef ENABLE_HEADLESS static QPixmap* s_typePixmap; diff --git a/src/libtomahawk/utils/SpotifyParser.cpp b/src/libtomahawk/utils/SpotifyParser.cpp index 7c37e1ed2..33a3efdf7 100644 --- a/src/libtomahawk/utils/SpotifyParser.cpp +++ b/src/libtomahawk/utils/SpotifyParser.cpp @@ -97,31 +97,31 @@ void SpotifyParser::lookupSpotifyBrowse( const QString& linkRaw ) { tLog() << "Parsing Spotify Browse URI:" << linkRaw; - QString browseUri = linkRaw; - if ( browseUri.contains( "open.spotify.com/" ) ) // convert to a URI + m_browseUri = linkRaw; + if ( m_browseUri.contains( "open.spotify.com/" ) ) // convert to a URI { - browseUri.replace( "http://open.spotify.com/", "" ); - browseUri.replace( "/", ":" ); - browseUri = "spotify:" + browseUri; + m_browseUri.replace( "http://open.spotify.com/", "" ); + m_browseUri.replace( "/", ":" ); + m_browseUri = "spotify:" + m_browseUri; } DropJob::DropType type; - if ( browseUri.contains( "spotify:user" ) ) + if ( m_browseUri.contains( "spotify:user" ) ) type = DropJob::Playlist; - if ( browseUri.contains( "spotify:artist" ) ) + if ( m_browseUri.contains( "spotify:artist" ) ) type = DropJob::Artist; - if ( browseUri.contains( "spotify:album" ) ) + if ( m_browseUri.contains( "spotify:album" ) ) type = DropJob::Album; - if ( browseUri.contains( "spotify:track" ) ) + if ( m_browseUri.contains( "spotify:track" ) ) type = DropJob::Track; QUrl url; if( type != DropJob::Artist ) - url = QUrl( QString( SPOTIFY_PLAYLIST_API_URL "/browse/%1" ).arg( browseUri ) ); + url = QUrl( QString( SPOTIFY_PLAYLIST_API_URL "/browse/%1" ).arg( m_browseUri ) ); else - url = QUrl( QString( SPOTIFY_PLAYLIST_API_URL "/browse/%1/%2" ).arg( browseUri ) + url = QUrl( QString( SPOTIFY_PLAYLIST_API_URL "/browse/%1/%2" ).arg( m_browseUri ) .arg ( m_limit ) ); tDebug() << "Looking up URL..." << url.toString(); @@ -304,6 +304,7 @@ SpotifyParser::checkBrowseFinished() if ( m_createNewPlaylist && !m_tracks.isEmpty() ) { + m_playlist = Playlist::create( SourceList::instance()->getLocal(), uuid(), m_title, @@ -312,6 +313,25 @@ SpotifyParser::checkBrowseFinished() false, m_tracks ); connect( m_playlist.data(), SIGNAL( revisionLoaded( Tomahawk::PlaylistRevision ) ), this, SLOT( playlistCreated() ) ); + + if( Accounts::SpotifyAccount::instance() != 0 ) + { + SpotifyPlaylistUpdater* updater = new SpotifyPlaylistUpdater( + Accounts::SpotifyAccount::instance(), m_playlist->currentrevision(), m_browseUri, m_playlist ); + + QVariantHash creds = Accounts::SpotifyAccount::instance()->credentials(); + + // If the user isnt dropping a playlist the he owns, its subscribeable + if( !m_browseUri.contains( creds.value( "username" ).toString() ) ) + updater->setCanSubscribe( true ); + + updater->setSubscribed( false ); + updater->setSync( false ); + + // Just register the infos + Accounts::SpotifyAccount::instance()->registerPlaylistInfo( m_title, m_browseUri, m_browseUri, false, false ); + Accounts::SpotifyAccount::instance()->registerUpdaterForPlaylist( m_browseUri, updater ); + } return; } diff --git a/src/libtomahawk/utils/SpotifyParser.h b/src/libtomahawk/utils/SpotifyParser.h index 7f5c65b61..1bde874e3 100644 --- a/src/libtomahawk/utils/SpotifyParser.h +++ b/src/libtomahawk/utils/SpotifyParser.h @@ -24,7 +24,8 @@ #include "Typedefs.h" #include "Query.h" #include "jobview/JobStatusItem.h" - +#include "accounts/spotify/SpotifyPlaylistUpdater.h" +#include "accounts/spotify/SpotifyAccount.h" #include #include #include @@ -38,6 +39,8 @@ */ class QNetworkReply; +class SpotifyAccount; +class SpotifyPlaylistUpdater; namespace Tomahawk { @@ -84,7 +87,7 @@ private: QString m_title, m_info, m_creator; Tomahawk::playlist_ptr m_playlist; DropJobNotifier* m_browseJob; - + QString m_browseUri; static QPixmap* s_pixmap; }; From d1f6a50e3064d5d42ce1da89310001db41b8a412 Mon Sep 17 00:00:00 2001 From: Tomahawk CI Date: Sun, 15 Jul 2012 22:17:47 +0000 Subject: [PATCH 32/53] Automatic merge of Transifex translations --- lang/tomahawk_ar.ts | 30 +++++++++++++++++++++++++----- lang/tomahawk_bg.ts | 30 +++++++++++++++++++++++++----- lang/tomahawk_ca.ts | 30 +++++++++++++++++++++++++----- lang/tomahawk_de.ts | 30 +++++++++++++++++++++++++----- lang/tomahawk_en.ts | 30 +++++++++++++++++++++++++----- lang/tomahawk_es.ts | 30 +++++++++++++++++++++++++----- lang/tomahawk_fr.ts | 30 +++++++++++++++++++++++++----- lang/tomahawk_ja.ts | 30 +++++++++++++++++++++++++----- lang/tomahawk_pl.ts | 30 +++++++++++++++++++++++++----- lang/tomahawk_pt_BR.ts | 30 +++++++++++++++++++++++++----- lang/tomahawk_ru.ts | 30 +++++++++++++++++++++++++----- lang/tomahawk_sv.ts | 30 +++++++++++++++++++++++++----- lang/tomahawk_tr.ts | 30 +++++++++++++++++++++++++----- lang/tomahawk_zh_CN.ts | 30 +++++++++++++++++++++++++----- lang/tomahawk_zh_TW.ts | 30 +++++++++++++++++++++++++----- 15 files changed, 375 insertions(+), 75 deletions(-) diff --git a/lang/tomahawk_ar.ts b/lang/tomahawk_ar.ts index 1b2b8c1e3..19176ba0e 100644 --- a/lang/tomahawk_ar.ts +++ b/lang/tomahawk_ar.ts @@ -1671,12 +1671,12 @@ connect and stream from you? SpotifyPlaylistUpdater - + Delete in Spotify? أحذف في سبوتيفي (Spotify)؟ - + Would you like to delete the corresponding Spotify playlist as well? هل ترغب في حذف قائمة التشغيل المطابقة على سبوتيفي (Spotify)؟ @@ -1983,20 +1983,40 @@ connect and stream from you? Tomahawk::Accounts::SpotifyAccount - + Sync with Spotify مزامنة مع سبوتيفي (Spotify) - + Re-enable syncing with Spotify إعادة تمكين المزامنة مع سبوتيفي (Spotify) - + + Create subscribed copy and sync with Spotify + + + + Stop syncing with Spotify أوقف المزامنة مع سبوتيفي (Spotify) + + + Subscribe with Spotify + + + + + Re-enable subscribing with Spotify + + + + + Stop subscribing with Spotify + + Tomahawk::Accounts::SpotifyAccountConfig diff --git a/lang/tomahawk_bg.ts b/lang/tomahawk_bg.ts index 5ff0b2d41..f94c03f9b 100644 --- a/lang/tomahawk_bg.ts +++ b/lang/tomahawk_bg.ts @@ -1673,12 +1673,12 @@ Tomahaw създаде доклад относно това и изпращай SpotifyPlaylistUpdater - + Delete in Spotify? Изтривам и в Spotify? - + Would you like to delete the corresponding Spotify playlist as well? Желаеш ли да изтриеш и съответните Spotify списъци? @@ -1989,20 +1989,40 @@ Tomahaw създаде доклад относно това и изпращай Tomahawk::Accounts::SpotifyAccount - + Sync with Spotify Синхронизирай със Spotify - + Re-enable syncing with Spotify Включи отново синхронизирането със Spotify - + + Create subscribed copy and sync with Spotify + + + + Stop syncing with Spotify Спри синхронизацията със Spotify + + + Subscribe with Spotify + + + + + Re-enable subscribing with Spotify + + + + + Stop subscribing with Spotify + + Tomahawk::Accounts::SpotifyAccountConfig diff --git a/lang/tomahawk_ca.ts b/lang/tomahawk_ca.ts index 33031c015..15bafbd04 100644 --- a/lang/tomahawk_ca.ts +++ b/lang/tomahawk_ca.ts @@ -1669,12 +1669,12 @@ connect and stream from you? SpotifyPlaylistUpdater - + Delete in Spotify? Voleu esborrar-ho de Spotify? - + Would you like to delete the corresponding Spotify playlist as well? Voleu esborrar les llistes de Spotify, també? @@ -1982,20 +1982,40 @@ i emissores de ràdio basades en el vostre gust musical. Tomahawk::Accounts::SpotifyAccount - + Sync with Spotify Sincronitza amb Spotify - + Re-enable syncing with Spotify - + + Create subscribed copy and sync with Spotify + + + + Stop syncing with Spotify Atura la sincronització amb Spotify + + + Subscribe with Spotify + + + + + Re-enable subscribing with Spotify + + + + + Stop subscribing with Spotify + + Tomahawk::Accounts::SpotifyAccountConfig diff --git a/lang/tomahawk_de.ts b/lang/tomahawk_de.ts index a58797f0d..771e131b4 100644 --- a/lang/tomahawk_de.ts +++ b/lang/tomahawk_de.ts @@ -1670,12 +1670,12 @@ erlauben sich mit dir zu verbinden? SpotifyPlaylistUpdater - + Delete in Spotify? Auf Spotify löschen - + Would you like to delete the corresponding Spotify playlist as well? Möchtest du die entsprechende Spotify Playlist auch löschen? @@ -1980,20 +1980,40 @@ erlauben sich mit dir zu verbinden? Tomahawk::Accounts::SpotifyAccount - + Sync with Spotify Mit Spotify synchronisieren - + Re-enable syncing with Spotify Synchronisierung mit Spotify re-aktivieren - + + Create subscribed copy and sync with Spotify + + + + Stop syncing with Spotify Synchronisation beenden + + + Subscribe with Spotify + + + + + Re-enable subscribing with Spotify + + + + + Stop subscribing with Spotify + + Tomahawk::Accounts::SpotifyAccountConfig diff --git a/lang/tomahawk_en.ts b/lang/tomahawk_en.ts index 0d2142058..80ea7dd52 100644 --- a/lang/tomahawk_en.ts +++ b/lang/tomahawk_en.ts @@ -1670,12 +1670,12 @@ connect and stream from you? SpotifyPlaylistUpdater - + Delete in Spotify? Delete in Spotify? - + Would you like to delete the corresponding Spotify playlist as well? Would you like to delete the corresponding Spotify playlist as well? @@ -1983,20 +1983,40 @@ connect and stream from you? Tomahawk::Accounts::SpotifyAccount - + Sync with Spotify Sync with Spotify - + Re-enable syncing with Spotify Re-enable syncing with Spotify - + + Create subscribed copy and sync with Spotify + Create subscribed copy and sync with Spotify + + + Stop syncing with Spotify Stop syncing with Spotify + + + Subscribe with Spotify + Subscribe with Spotify + + + + Re-enable subscribing with Spotify + Re-enable subscribing with Spotify + + + + Stop subscribing with Spotify + Stop subscribing with Spotify + Tomahawk::Accounts::SpotifyAccountConfig diff --git a/lang/tomahawk_es.ts b/lang/tomahawk_es.ts index 987f2c789..3e128c858 100644 --- a/lang/tomahawk_es.ts +++ b/lang/tomahawk_es.ts @@ -1668,12 +1668,12 @@ connect and stream from you? SpotifyPlaylistUpdater - + Delete in Spotify? ¿Borrar en Spotify? - + Would you like to delete the corresponding Spotify playlist as well? Quieres eliminar la lista de Spotify correspondiente, también? @@ -1981,20 +1981,40 @@ y estaciones basadas en sus gustos personales. Tomahawk::Accounts::SpotifyAccount - + Sync with Spotify Sincronizar con Spotify - + Re-enable syncing with Spotify - + + Create subscribed copy and sync with Spotify + + + + Stop syncing with Spotify Dejar de sincronizar con Spotify + + + Subscribe with Spotify + + + + + Re-enable subscribing with Spotify + + + + + Stop subscribing with Spotify + + Tomahawk::Accounts::SpotifyAccountConfig diff --git a/lang/tomahawk_fr.ts b/lang/tomahawk_fr.ts index fa4a392ac..329f98dab 100644 --- a/lang/tomahawk_fr.ts +++ b/lang/tomahawk_fr.ts @@ -1670,12 +1670,12 @@ de se connecter et streamer de vous? SpotifyPlaylistUpdater - + Delete in Spotify? Supprimer dans Spotify ? - + Would you like to delete the corresponding Spotify playlist as well? Voulez-vous aussi supprimer la liste de lecture correspondante dans Spotify ? @@ -1983,20 +1983,40 @@ et des stations basées sur vos goûts. Tomahawk::Accounts::SpotifyAccount - + Sync with Spotify Synchroniser avec Spotify - + Re-enable syncing with Spotify Réactiver la synchronisation avec Spotify - + + Create subscribed copy and sync with Spotify + + + + Stop syncing with Spotify Stopper la synchronisation avec Spotify + + + Subscribe with Spotify + + + + + Re-enable subscribing with Spotify + + + + + Stop subscribing with Spotify + + Tomahawk::Accounts::SpotifyAccountConfig diff --git a/lang/tomahawk_ja.ts b/lang/tomahawk_ja.ts index d26cccf8b..d0fcdb865 100644 --- a/lang/tomahawk_ja.ts +++ b/lang/tomahawk_ja.ts @@ -1670,12 +1670,12 @@ connect and stream from you? SpotifyPlaylistUpdater - + Delete in Spotify? - + Would you like to delete the corresponding Spotify playlist as well? @@ -1980,20 +1980,40 @@ connect and stream from you? Tomahawk::Accounts::SpotifyAccount - + Sync with Spotify - + Re-enable syncing with Spotify - + + Create subscribed copy and sync with Spotify + + + + Stop syncing with Spotify + + + Subscribe with Spotify + + + + + Re-enable subscribing with Spotify + + + + + Stop subscribing with Spotify + + Tomahawk::Accounts::SpotifyAccountConfig diff --git a/lang/tomahawk_pl.ts b/lang/tomahawk_pl.ts index 0f0c4d3f8..f2a3f0dd3 100644 --- a/lang/tomahawk_pl.ts +++ b/lang/tomahawk_pl.ts @@ -1668,12 +1668,12 @@ connect and stream from you? SpotifyPlaylistUpdater - + Delete in Spotify? - + Would you like to delete the corresponding Spotify playlist as well? @@ -1982,20 +1982,40 @@ indywidualnego profilu gustu. Tomahawk::Accounts::SpotifyAccount - + Sync with Spotify - + Re-enable syncing with Spotify - + + Create subscribed copy and sync with Spotify + + + + Stop syncing with Spotify + + + Subscribe with Spotify + + + + + Re-enable subscribing with Spotify + + + + + Stop subscribing with Spotify + + Tomahawk::Accounts::SpotifyAccountConfig diff --git a/lang/tomahawk_pt_BR.ts b/lang/tomahawk_pt_BR.ts index 8797e59fb..6d1061b2d 100644 --- a/lang/tomahawk_pt_BR.ts +++ b/lang/tomahawk_pt_BR.ts @@ -1670,12 +1670,12 @@ se conecte e faça o stream de você? SpotifyPlaylistUpdater - + Delete in Spotify? Deletar no Spotify? - + Would you like to delete the corresponding Spotify playlist as well? Você também gostaria de deletar a playlist correspondente no Spotify? @@ -1983,20 +1983,40 @@ automáticas baseadas no seu gosto pessoal. Tomahawk::Accounts::SpotifyAccount - + Sync with Spotify Sincronizar com o Spotify - + Re-enable syncing with Spotify Reativar sincronização com Spotify - + + Create subscribed copy and sync with Spotify + + + + Stop syncing with Spotify Parar a sincronização com o Spotify + + + Subscribe with Spotify + + + + + Re-enable subscribing with Spotify + + + + + Stop subscribing with Spotify + + Tomahawk::Accounts::SpotifyAccountConfig diff --git a/lang/tomahawk_ru.ts b/lang/tomahawk_ru.ts index e97095d44..e7aa8aa91 100644 --- a/lang/tomahawk_ru.ts +++ b/lang/tomahawk_ru.ts @@ -1669,12 +1669,12 @@ connect and stream from you? SpotifyPlaylistUpdater - + Delete in Spotify? Удалить в Spotify? - + Would you like to delete the corresponding Spotify playlist as well? @@ -1979,20 +1979,40 @@ connect and stream from you? Tomahawk::Accounts::SpotifyAccount - + Sync with Spotify Синхронизировать с Spotify - + Re-enable syncing with Spotify - + + Create subscribed copy and sync with Spotify + + + + Stop syncing with Spotify Прекратить синхронизацию с Spotify + + + Subscribe with Spotify + + + + + Re-enable subscribing with Spotify + + + + + Stop subscribing with Spotify + + Tomahawk::Accounts::SpotifyAccountConfig diff --git a/lang/tomahawk_sv.ts b/lang/tomahawk_sv.ts index aa5e8ad9d..90fc0e57e 100644 --- a/lang/tomahawk_sv.ts +++ b/lang/tomahawk_sv.ts @@ -1669,12 +1669,12 @@ connect and stream from you? SpotifyPlaylistUpdater - + Delete in Spotify? - + Would you like to delete the corresponding Spotify playlist as well? @@ -1979,20 +1979,40 @@ connect and stream from you? Tomahawk::Accounts::SpotifyAccount - + Sync with Spotify - + Re-enable syncing with Spotify - + + Create subscribed copy and sync with Spotify + + + + Stop syncing with Spotify + + + Subscribe with Spotify + + + + + Re-enable subscribing with Spotify + + + + + Stop subscribing with Spotify + + Tomahawk::Accounts::SpotifyAccountConfig diff --git a/lang/tomahawk_tr.ts b/lang/tomahawk_tr.ts index b24ebeac5..71bd204d9 100644 --- a/lang/tomahawk_tr.ts +++ b/lang/tomahawk_tr.ts @@ -1668,12 +1668,12 @@ connect and stream from you? SpotifyPlaylistUpdater - + Delete in Spotify? - + Would you like to delete the corresponding Spotify playlist as well? @@ -1978,20 +1978,40 @@ connect and stream from you? Tomahawk::Accounts::SpotifyAccount - + Sync with Spotify - + Re-enable syncing with Spotify - + + Create subscribed copy and sync with Spotify + + + + Stop syncing with Spotify + + + Subscribe with Spotify + + + + + Re-enable subscribing with Spotify + + + + + Stop subscribing with Spotify + + Tomahawk::Accounts::SpotifyAccountConfig diff --git a/lang/tomahawk_zh_CN.ts b/lang/tomahawk_zh_CN.ts index bf5e6dee3..25497b337 100644 --- a/lang/tomahawk_zh_CN.ts +++ b/lang/tomahawk_zh_CN.ts @@ -1668,12 +1668,12 @@ connect and stream from you? SpotifyPlaylistUpdater - + Delete in Spotify? - + Would you like to delete the corresponding Spotify playlist as well? @@ -1978,20 +1978,40 @@ connect and stream from you? Tomahawk::Accounts::SpotifyAccount - + Sync with Spotify - + Re-enable syncing with Spotify - + + Create subscribed copy and sync with Spotify + + + + Stop syncing with Spotify + + + Subscribe with Spotify + + + + + Re-enable subscribing with Spotify + + + + + Stop subscribing with Spotify + + Tomahawk::Accounts::SpotifyAccountConfig diff --git a/lang/tomahawk_zh_TW.ts b/lang/tomahawk_zh_TW.ts index a24b6a607..4993a0b6e 100644 --- a/lang/tomahawk_zh_TW.ts +++ b/lang/tomahawk_zh_TW.ts @@ -1668,12 +1668,12 @@ connect and stream from you? SpotifyPlaylistUpdater - + Delete in Spotify? - + Would you like to delete the corresponding Spotify playlist as well? @@ -1978,20 +1978,40 @@ connect and stream from you? Tomahawk::Accounts::SpotifyAccount - + Sync with Spotify - + Re-enable syncing with Spotify - + + Create subscribed copy and sync with Spotify + + + + Stop syncing with Spotify + + + Subscribe with Spotify + + + + + Re-enable subscribing with Spotify + + + + + Stop subscribing with Spotify + + Tomahawk::Accounts::SpotifyAccountConfig From 5be300bd62002bd71566a83afafc6e3b2af9b9ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20Lindstr=C3=B6m?= Date: Mon, 16 Jul 2012 01:18:23 +0200 Subject: [PATCH 33/53] Stylefix --- .../accounts/spotify/SpotifyAccount.cpp | 34 ++++++++++--------- src/libtomahawk/utils/SpotifyParser.cpp | 6 ++-- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/src/libtomahawk/accounts/spotify/SpotifyAccount.cpp b/src/libtomahawk/accounts/spotify/SpotifyAccount.cpp index 2d9c36219..f593377c5 100644 --- a/src/libtomahawk/accounts/spotify/SpotifyAccount.cpp +++ b/src/libtomahawk/accounts/spotify/SpotifyAccount.cpp @@ -446,7 +446,7 @@ SpotifyAccount::aboutToShow( QAction* action, const playlist_ptr& playlist ) { found = true; - if( spotifyUpdater->canSubscribe() ) + if ( spotifyUpdater->canSubscribe() ) canSubscribe = true; isSubscribed = spotifyUpdater->subscribed(); @@ -454,13 +454,13 @@ SpotifyAccount::aboutToShow( QAction* action, const playlist_ptr& playlist ) if ( !spotifyUpdater->canSubscribe() && !spotifyUpdater->sync() ) manuallyDisabled = true; - if( spotifyUpdater->sync() ) + if ( spotifyUpdater->sync() ) sync = true; } } - if( action->data().toString() == "sync" ) + if ( action->data().toString() == "sync" ) { if ( !found ) @@ -476,9 +476,9 @@ SpotifyAccount::aboutToShow( QAction* action, const playlist_ptr& playlist ) // We dont want to sync a subscribeable playlist but if a playlist isnt // collaborative, he will loose his changes on next update, thus, // we create a new copy of it - if( canSubscribe ) + if ( canSubscribe ) action->setText( tr( "Create subscribed copy and sync with Spotify") ); - else if( sync ) + else if ( sync ) action->setText( tr( "Stop syncing with Spotify" ) ); else action->setVisible( false ); @@ -487,9 +487,9 @@ SpotifyAccount::aboutToShow( QAction* action, const playlist_ptr& playlist ) // User can sync or subscribe on playlist. // Sync means creating a new copy of it, subscribe is listening on changes from owner - if( action->data().toString() == "subscribe" ) + if ( action->data().toString() == "subscribe" ) { - if( found && canSubscribe ) + if ( found && canSubscribe ) { if ( canSubscribe && !isSubscribed ) { @@ -499,18 +499,19 @@ SpotifyAccount::aboutToShow( QAction* action, const playlist_ptr& playlist ) { action->setText( tr( "Re-enable subscribing with Spotify" ) ); } - else if( isSubscribed ) + else if ( isSubscribed ) { action->setText( tr( "Stop subscribing with Spotify" ) ); } else { // Hide the action, we dont have this option on the playlist - action->setVisible(false); + action->setVisible( false ); } }else action->setVisible( false ); } + } void @@ -562,7 +563,7 @@ SpotifyAccount::subscribeActionTriggered( bool checked ) // and we will could loose the SpotifyPlaylistInfo, but all we really need is the id if ( !updater->spotifyId().isEmpty() ) { - if( !info ) + if ( !info ) { info = new SpotifyPlaylistInfo( playlist->title() , updater->spotifyId() @@ -823,7 +824,7 @@ SpotifyAccount::resolverMessage( const QString &msgType, const QVariantMap &msg updater->spotifyTracksMoved( tracksList, newStartPos, newRev, oldRev ); } - else if( msgType == "playlistRenamed" ) + else if ( msgType == "playlistRenamed" ) { const QString plid = msg.value( "id" ).toString(); // We should already be syncing this playlist if we get updates for it @@ -843,18 +844,18 @@ SpotifyAccount::resolverMessage( const QString &msgType, const QVariantMap &msg updater->spotifyPlaylistRenamed( title, newRev, oldRev ); } - else if( msgType == "spotifyError" ) + else if ( msgType == "spotifyError" ) { const QString error = msg.value( "msg" ).toString(); - if( error.isEmpty() ) + if ( error.isEmpty() ) return; - if( msg.value( "isDebugMsg" ).toBool() ) + if ( msg.value( "isDebugMsg" ).toBool() ) tDebug( LOGVERBOSE ) << "SpotifyResolverError: " << error; else JobStatusView::instance()->model()->addJob( new ErrorStatusMessage( QString( "Spotify: %1" ).arg( error ) ) ); } - else if( msgType == "userChanged" ) + else if ( msgType == "userChanged" ) { const QString rmsg = msg.value( "msg" ).toString(); clearUser( true ); @@ -1299,7 +1300,7 @@ SpotifyAccount::setSyncForPlaylist( const QString& spotifyPlaylistId, bool sync { foreach ( SpotifyPlaylistInfo* info, m_allSpotifyPlaylists ) { - if( info->plid == spotifyPlaylistId ) + if ( info->plid == spotifyPlaylistId ) info->sync = sync; } @@ -1327,6 +1328,7 @@ SpotifyAccount::createActions() ActionCollection::instance()->addAction( ActionCollection::LocalPlaylists, subscribeAction, this ); subscribeAction->setData( "subscribe" ); m_customActions.append( subscribeAction ); + } diff --git a/src/libtomahawk/utils/SpotifyParser.cpp b/src/libtomahawk/utils/SpotifyParser.cpp index 33a3efdf7..044948c9a 100644 --- a/src/libtomahawk/utils/SpotifyParser.cpp +++ b/src/libtomahawk/utils/SpotifyParser.cpp @@ -312,9 +312,10 @@ SpotifyParser::checkBrowseFinished() m_creator, false, m_tracks ); + connect( m_playlist.data(), SIGNAL( revisionLoaded( Tomahawk::PlaylistRevision ) ), this, SLOT( playlistCreated() ) ); - if( Accounts::SpotifyAccount::instance() != 0 ) + if ( Accounts::SpotifyAccount::instance() != 0 ) { SpotifyPlaylistUpdater* updater = new SpotifyPlaylistUpdater( Accounts::SpotifyAccount::instance(), m_playlist->currentrevision(), m_browseUri, m_playlist ); @@ -322,7 +323,7 @@ SpotifyParser::checkBrowseFinished() QVariantHash creds = Accounts::SpotifyAccount::instance()->credentials(); // If the user isnt dropping a playlist the he owns, its subscribeable - if( !m_browseUri.contains( creds.value( "username" ).toString() ) ) + if ( !m_browseUri.contains( creds.value( "username" ).toString() ) ) updater->setCanSubscribe( true ); updater->setSubscribed( false ); @@ -334,7 +335,6 @@ SpotifyParser::checkBrowseFinished() } return; } - else if ( m_single && !m_tracks.isEmpty() ) emit track( m_tracks.first() ); else if ( !m_single && !m_tracks.isEmpty() ) From e38392f129aa4e148a331d48168c99fe03b421db Mon Sep 17 00:00:00 2001 From: Tomahawk CI Date: Mon, 16 Jul 2012 22:17:47 +0000 Subject: [PATCH 34/53] Automatic merge of Transifex translations --- lang/tomahawk_ja.ts | 218 ++++++++++++++++++++++---------------------- 1 file changed, 109 insertions(+), 109 deletions(-) diff --git a/lang/tomahawk_ja.ts b/lang/tomahawk_ja.ts index d0fcdb865..877b0e267 100644 --- a/lang/tomahawk_ja.ts +++ b/lang/tomahawk_ja.ts @@ -15,7 +15,7 @@ connect and stream from you? Deny Access - + アクセスを拒否 @@ -36,7 +36,7 @@ connect and stream from you? Description goes here - + 内容 @@ -147,12 +147,12 @@ connect and stream from you? Sorry, we could not find any other albums for this artist! - + このアーティストのアルバムは他に見つかりませんでした。 Sorry, we could not find any tracks for this album! - + このアルバムの曲は見つかりませんでした。 @@ -194,7 +194,7 @@ connect and stream from you? Artist - + アーティスト @@ -204,7 +204,7 @@ connect and stream from you? Cover - + カバー @@ -214,12 +214,12 @@ connect and stream from you? Sorry, we could not find any related artists! - + 関連アーティストは見つかりませんでした。 Sorry, we could not find any top hits for this artist! - + このアーティストの大ヒット曲は見つかりませんでした。 @@ -257,7 +257,7 @@ connect and stream from you? Owner - + オーナー @@ -305,17 +305,17 @@ connect and stream from you? Sorry, Tomahawk couldn't find the track '%1' by %2 - + Tomahawkは%2の%1を見つかりませんでした。 Sorry, Tomahawk couldn't find the artist '%1' - + Tomahawkは'%1'と言うアーティストを見つかりませんでした。 Sorry, Tomahawk couldn't find the album '%1' by %2 - + Tomahawkは%2の%1を見つかりませんでした。 @@ -474,12 +474,12 @@ connect and stream from you? &Copy to Clipboard - + クリップボードにコピー Open &Log-file - + ログファイルを開く @@ -487,7 +487,7 @@ connect and stream from you? Filter... - + フィルター... @@ -565,7 +565,7 @@ connect and stream from you? %1 is listening along with you! - + %1さんが一緒に聴いています。 @@ -627,32 +627,32 @@ connect and stream from you? Top Loved Tracks - + 最もLove トラック Sorry, we could not find any loved tracks! - + Love トラックが見つかりませんでした。 The most loved tracks from all your friends - + 友達の最もLove トラック All of your loved tracks - + 自分のLove トラック All of %1's loved tracks - + %1さんのLove トラック Loved Tracks - + Love トラック @@ -660,112 +660,112 @@ connect and stream from you? Form - + フォーム Tags - + タグ Title: - + タイトル: Title... - + タイトル... Artist: - + アーティスト: Artist... - + アーティスト... Album: - + アルバム: Album... - + アルバム... Disc Number: - + ディスク番号: Duration: - + 時間: 00.00 - + 00.00 Year: - + 年: Bitrate: - + ビットレート: File - + ファイル File Name: - + ファイルネーム: File Name... - + ファイルネーム... File Size... - + ファイルサイズ... File size... - + ファイルサイズ... File Size: - + ファイルサイズ: Back - + 前へ Forward - + 次へ - Properties - + - 情報 @@ -878,24 +878,24 @@ connect and stream from you? InfoBar - + インフォメーションバー Caption - + 表題 Description - + 内容 RadioButton - + RadioButton @@ -962,12 +962,12 @@ connect and stream from you? Just a regular old playlist... Give it a name, drag in some tracks, and go! - + 普通のプレイリスト... 名付けて、曲をドラッグ・アンド・ドロップして行こう! Don't know exactly what you want? Give Tomahawk a few pointers and let it build a playlist for you! - + 欲しいのが分かりませんか?Tomahawkに何らかのヒントを与えたら、プレイリストの作成を任せて下さい! @@ -1255,12 +1255,12 @@ connect and stream from you? Delete all Access Control entries? - + 全てのアクセス制御のエントリーを削除しますか? Do you really want to delete all Access Control entries? You will be asked for a decision again for each peer that you connect to. - + 本当に全てのアクセス制御のエントリーを削除しますか?ピア接続に対して、改めて同意を求めます。 @@ -1273,7 +1273,7 @@ connect and stream from you? Popular New Albums From Your Friends - + 友達に人気のある新アルバム @@ -1283,7 +1283,7 @@ connect and stream from you? Most Played Tracks You Don't Have - + あなたの無い最も再生された曲 @@ -1291,47 +1291,47 @@ connect and stream from you? Form - + フォーム Facebook - + Facebook Twitter - + Twitter Cover - + カバー TextLabel - + TextLabel Tweet - + ツイート Listening to "%1" by %2. %3 - + %2の"%1"を聴いています。%3 Listening to "%1" by %2 on "%3". %4 - + %2の"%3"の"%1"を聴いています。%4 %1 characters left - + 残り%1文字 @@ -1354,29 +1354,29 @@ connect and stream from you? Local - + ローカル Top 10 - + トップ10 All available tracks - + 利用可能トラック Show - + 表示 Hide - + 隠す @@ -1384,32 +1384,32 @@ connect and stream from you? Recent Albums - + 最近のアルバム Latest Additions - + 最新追加した項目 Recently Played Tracks - + 最近再生したトラック New Additions - + 新しく追加した項目 My recent activity - + 自分の最近の活動 Recent activity from %1 - + %1の最近の活動 @@ -1423,12 +1423,12 @@ connect and stream from you? Latest Additions - + 最新追加した項目 Recently Played - + 最近聴いたトラック @@ -1438,37 +1438,37 @@ connect and stream from you? Latest additions to your collection - + コレクションの最新追加した項目 Latest additions to %1's collection - + %1のコレクションの最新追加した項目 Sorry, we could not find any recent additions! - + 最近追加した項目が見つかりませんでした。 Recently Played Tracks - + 最近再生したトラック Your recently played tracks - + あなたの最近再生したトラック %1's recently played tracks - + %1の最近再生したトラック Sorry, we could not find any recent plays! - + 最近の再生した項目が見つかりませんでした。 @@ -1481,54 +1481,54 @@ connect and stream from you? &Delete %1 - + %1を削除 Add to my Playlists - + プレイリストに追加する Add to my Automatic Playlists - + 自動プレイリストに追加する Add to my Stations - + ステーションに追加する &Export Playlist - + プレイリストを書き出し playlist - + プレイリスト automatic playlist - + 自動プレイリスト station - + ステーション Delete %1? playlist/station/... - + %1を削除しますか? Would you like to delete the %1 <b>"%2"</b>? e.g. Would you like to delete the playlist named Foobar? - + <b>"%2"</b>と言う%1を削除しますか? @@ -1538,7 +1538,7 @@ connect and stream from you? Playlists (*.xspf) - + プレイリスト (*.xspf) @@ -1546,7 +1546,7 @@ connect and stream from you? Group - + グループ @@ -1561,7 +1561,7 @@ connect and stream from you? Automatic Playlist - + 自動プレイリスト @@ -1571,12 +1571,12 @@ connect and stream from you? Browse - + 閲覧 Search History - + 履歴を検索 @@ -1601,17 +1601,17 @@ connect and stream from you? Charts - + チャート New Releases - + ニューリリース Friends - + 友達 @@ -1624,12 +1624,12 @@ connect and stream from you? Configure your Spotify account - + Spotifyのアカウントを設定 Username or Facebook Email - + ユーザーネームまたはFacebookのメールアドレス @@ -1639,22 +1639,22 @@ connect and stream from you? Right click on any Tomahawk playlist to sync it to Spotify. - + Tomahawkのプレイリストを右クリクすると、Spotifyに同期することができます。 High Quality Streams - + 高音質ストリーム Spotify playlists to keep in sync: - + 同期するSpotifyのプレイリスト: Delete Tomahawk playlist when removing synchronization - + 同期を無効すれば、Tomahawkのプレイリストを削除 @@ -1672,12 +1672,12 @@ connect and stream from you? Delete in Spotify? - + Spotifyにも削除しますか? Would you like to delete the corresponding Spotify playlist as well? - + 同期のSpotifyのプレイリストも削除してもよろしいですか? From 1f0c70e07118c795427aa1fdd69f27189d1ca305 Mon Sep 17 00:00:00 2001 From: Christopher Reichert Date: Mon, 16 Jul 2012 18:30:19 -0500 Subject: [PATCH 35/53] Implement forward/previous buttons in MetadataEditor. --- src/libtomahawk/AlbumPlaylistInterface.cpp | 25 +++++ src/libtomahawk/AlbumPlaylistInterface.h | 2 + src/libtomahawk/PlaylistInterface.h | 3 + .../filemetadata/MetadataEditor.cpp | 101 +++++++++++++++--- src/libtomahawk/filemetadata/MetadataEditor.h | 8 +- .../filemetadata/MetadataEditor.ui | 4 +- 6 files changed, 124 insertions(+), 19 deletions(-) diff --git a/src/libtomahawk/AlbumPlaylistInterface.cpp b/src/libtomahawk/AlbumPlaylistInterface.cpp index 050fcea81..092001a44 100644 --- a/src/libtomahawk/AlbumPlaylistInterface.cpp +++ b/src/libtomahawk/AlbumPlaylistInterface.cpp @@ -92,6 +92,31 @@ AlbumPlaylistInterface::hasNextItem() } +bool +AlbumPlaylistInterface::hasPreviousItem() +{ + int p = m_currentTrack; + p--; + if ( p < 0 || p >= m_queries.count() ) + return false; + + return true; +} + + +bool +AlbumPlaylistInterface::setCurrentTrack( unsigned int albumpos ) +{ + albumpos--; + if ( albumpos < 0 || albumpos >= m_queries.count() ) + return false; + + m_currentTrack = albumpos; + m_currentItem = m_queries.at( albumpos )->results().first(); + return true; +} + + QList< Tomahawk::query_ptr > AlbumPlaylistInterface::tracks() { diff --git a/src/libtomahawk/AlbumPlaylistInterface.h b/src/libtomahawk/AlbumPlaylistInterface.h index f5f005c83..c479b6342 100644 --- a/src/libtomahawk/AlbumPlaylistInterface.h +++ b/src/libtomahawk/AlbumPlaylistInterface.h @@ -47,6 +47,7 @@ public: virtual Tomahawk::result_ptr siblingItem( int itemsAway ); virtual bool hasNextItem(); + virtual bool hasPreviousItem(); virtual Tomahawk::result_ptr currentItem() const; virtual PlaylistModes::RepeatMode repeatMode() const { return PlaylistModes::NoRepeat; } @@ -54,6 +55,7 @@ public: virtual void setRepeatMode( PlaylistModes::RepeatMode ) {} virtual void setShuffled( bool ) {} + virtual bool setCurrentTrack( unsigned int albumpos ); signals: void tracksLoaded( Tomahawk::ModelMode mode, const Tomahawk::collection_ptr& collection ); diff --git a/src/libtomahawk/PlaylistInterface.h b/src/libtomahawk/PlaylistInterface.h index e61b8c60c..2ffcf9eed 100644 --- a/src/libtomahawk/PlaylistInterface.h +++ b/src/libtomahawk/PlaylistInterface.h @@ -47,6 +47,7 @@ public: virtual Tomahawk::result_ptr currentItem() const = 0; virtual Tomahawk::result_ptr previousItem(); virtual bool hasNextItem() { return true; } + virtual bool hasPreviousItem() { return true; } virtual Tomahawk::result_ptr nextItem(); virtual Tomahawk::result_ptr siblingItem( int itemsAway ) = 0; @@ -65,6 +66,8 @@ public: virtual PlaylistModes::LatchMode latchMode() const { return m_latchMode; } virtual void setLatchMode( PlaylistModes::LatchMode latchMode ) { m_latchMode = latchMode; } + virtual bool setCurrentTrack( unsigned int albumpos ) { return false; } + virtual void reset() {} //TODO: Get rid of the next two functions once all playlsitinterfaces are factored out diff --git a/src/libtomahawk/filemetadata/MetadataEditor.cpp b/src/libtomahawk/filemetadata/MetadataEditor.cpp index b881604e6..7611a5737 100644 --- a/src/libtomahawk/filemetadata/MetadataEditor.cpp +++ b/src/libtomahawk/filemetadata/MetadataEditor.cpp @@ -29,40 +29,50 @@ #include "Album.h" #include "Typedefs.h" #include "ScanManager.h" +#include "PlaylistInterface.h" +#include "AlbumPlaylistInterface.h" #include "taglib/fileref.h" #include "filemetadata/taghandlers/tag.h" #include "utils/TomahawkUtils.h" +#include "utils/Closure.h" MetadataEditor::MetadataEditor( const Tomahawk::result_ptr& result, QWidget* parent ) : QDialog( parent ) , ui( new Ui::MetadataEditor ) , m_result( result ) + , m_interface( 0 ) { ui->setupUi( this ); setWindowTitle( QString( result->track() + tr( " - Properties" ) ) ); setAttribute( Qt::WA_DeleteOnClose ); - setTitle( result->track() ); - setArtist( result->artist()->name() ); - setAlbum( result->album()->name() ); - setDiscNumber( result->albumpos() ); - setDuration( result->duration() ); - setYear( result->year() ); - setBitrate( result->bitrate() ); + NewClosure( ui->buttonBox, SIGNAL( accepted() ), + this, SLOT( writeMetadata( bool ) ), true )->setAutoDelete( false ); - QFileInfo fi( QUrl( m_result->url() ).toLocalFile() ); - setFileName( fi.fileName() ); - setFileSize( TomahawkUtils::filesizeToString( fi.size() ) ); - - connect( ui->buttonBox, SIGNAL( accepted() ), SLOT( writeMetadata() ) ); connect( ui->buttonBox, SIGNAL( rejected() ), SLOT( close() ) ); + connect( ui->forwardPushButton, SIGNAL( clicked() ), SLOT( loadNextResult() ) ); + connect( ui->previousPushButton, SIGNAL( clicked() ), SLOT( loadPreviousResult() ) ); + + m_interface = Tomahawk::playlistinterface_ptr( new Tomahawk::AlbumPlaylistInterface( + result->album().data(), + Tomahawk::DatabaseMode, + result->collection() ) ); + connect( m_interface.data(), + SIGNAL( tracksLoaded( Tomahawk::ModelMode, + const Tomahawk::collection_ptr& ) ), + SLOT( enablePushButtons() ) ); + + /* Initiate the interface */ + m_interface->tracks(); + + loadResult( result ); } void -MetadataEditor::writeMetadata() +MetadataEditor::writeMetadata( bool closeDlg ) { QFileInfo fi( QUrl( m_result->url() ).toLocalFile() ); @@ -102,9 +112,68 @@ MetadataEditor::writeMetadata() f.save(); - QStringList files = QStringList( fileName ); - ScanManager::instance()->runFileScan( files ); - close(); + m_editFiles.append( fileName ); + + if ( closeDlg ) { + ScanManager::instance()->runFileScan( m_editFiles ); + close(); + } +} + + +void +MetadataEditor::loadResult( const Tomahawk::result_ptr& result ) +{ + if ( result.isNull() ) + return; + + m_result = result; + setTitle( result->track() ); + setArtist( result->artist()->name() ); + setAlbum( result->album()->name() ); + setDiscNumber( result->albumpos() ); + setDuration( result->duration() ); + setYear( result->year() ); + setBitrate( result->bitrate() ); + + QFileInfo fi( QUrl( m_result->url() ).toLocalFile() ); + setFileName( fi.fileName() ); + setFileSize( TomahawkUtils::filesizeToString( fi.size() ) ); + + enablePushButtons(); +} + + +void MetadataEditor::enablePushButtons() +{ + if ( !m_interface->setCurrentTrack( m_result->albumpos() ) ) + tDebug() << "Error setting current track for MetadataEditor."; + + if ( m_interface->hasNextItem() ) + ui->forwardPushButton->setEnabled( true ); + else + ui->forwardPushButton->setEnabled( false ); + + if ( m_interface->hasPreviousItem() ) + ui->previousPushButton->setEnabled( true ); + else + ui->previousPushButton->setEnabled( false ); +} + + +void +MetadataEditor::loadNextResult() +{ + writeMetadata(); + loadResult( m_interface->nextItem() ); +} + + +void +MetadataEditor::loadPreviousResult() +{ + writeMetadata(); + loadResult( m_interface->previousItem() ); } diff --git a/src/libtomahawk/filemetadata/MetadataEditor.h b/src/libtomahawk/filemetadata/MetadataEditor.h index ccd743b92..641ca0049 100644 --- a/src/libtomahawk/filemetadata/MetadataEditor.h +++ b/src/libtomahawk/filemetadata/MetadataEditor.h @@ -45,9 +45,13 @@ protected: int discnumber() const { return ui->discNumberSpinBox->value(); } int year() const { return ui->yearSpinBox->value(); } int bitrate() const { return ui->bitrateSpinBox->value(); } + void loadResult( const Tomahawk::result_ptr& result ); private slots: - void writeMetadata(); + void writeMetadata( bool closeDlg = false ); + void enablePushButtons(); + void loadNextResult(); + void loadPreviousResult(); /* tag attributes */ void setTitle( const QString& title ); @@ -66,6 +70,8 @@ private: Ui::MetadataEditor* ui; Tomahawk::result_ptr m_result; + Tomahawk::playlistinterface_ptr m_interface; + QStringList m_editFiles; }; #endif // METADATAEDITOR_H diff --git a/src/libtomahawk/filemetadata/MetadataEditor.ui b/src/libtomahawk/filemetadata/MetadataEditor.ui index 1ded5959d..1f40bc41b 100644 --- a/src/libtomahawk/filemetadata/MetadataEditor.ui +++ b/src/libtomahawk/filemetadata/MetadataEditor.ui @@ -227,7 +227,7 @@ - + false @@ -237,7 +237,7 @@ - + false From 0b860abffbe740d91698fec34755f0e871c5616a Mon Sep 17 00:00:00 2001 From: Christopher Reichert Date: Mon, 16 Jul 2012 19:12:09 -0500 Subject: [PATCH 36/53] Add Q_UNUSED to setCurrentTrack in PlaylistInterface. --- src/libtomahawk/PlaylistInterface.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libtomahawk/PlaylistInterface.h b/src/libtomahawk/PlaylistInterface.h index 2ffcf9eed..3fcd8e6d4 100644 --- a/src/libtomahawk/PlaylistInterface.h +++ b/src/libtomahawk/PlaylistInterface.h @@ -66,7 +66,7 @@ public: virtual PlaylistModes::LatchMode latchMode() const { return m_latchMode; } virtual void setLatchMode( PlaylistModes::LatchMode latchMode ) { m_latchMode = latchMode; } - virtual bool setCurrentTrack( unsigned int albumpos ) { return false; } + virtual bool setCurrentTrack( unsigned int albumpos ) { Q_UNUSED( albumpos ); return false; } virtual void reset() {} From 9c0a3496a4365b23cd48112b4403594ab7c6e781 Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Mon, 16 Jul 2012 22:15:45 -0400 Subject: [PATCH 37/53] Minor cleanups and string changes --- .../accounts/spotify/SpotifyAccount.cpp | 246 +++++++++--------- .../accounts/spotify/SpotifyAccount.h | 1 + .../spotify/SpotifyPlaylistUpdater.cpp | 1 - src/libtomahawk/utils/SpotifyParser.cpp | 4 +- 4 files changed, 127 insertions(+), 125 deletions(-) diff --git a/src/libtomahawk/accounts/spotify/SpotifyAccount.cpp b/src/libtomahawk/accounts/spotify/SpotifyAccount.cpp index f593377c5..d62733761 100644 --- a/src/libtomahawk/accounts/spotify/SpotifyAccount.cpp +++ b/src/libtomahawk/accounts/spotify/SpotifyAccount.cpp @@ -63,6 +63,14 @@ static QString s_resolverId = "spotify-unknown"; #endif +namespace { +enum ActionType { + Sync = 0, + Subscribe +}; +} + + Account* SpotifyAccountFactory::createAccount( const QString& accountId ) { @@ -446,12 +454,10 @@ SpotifyAccount::aboutToShow( QAction* action, const playlist_ptr& playlist ) { found = true; - if ( spotifyUpdater->canSubscribe() ) - canSubscribe = true; - + canSubscribe = spotifyUpdater->canSubscribe(); isSubscribed = spotifyUpdater->subscribed(); - if ( !spotifyUpdater->canSubscribe() && !spotifyUpdater->sync() ) + if ( !canSubscribe && !spotifyUpdater->sync() ) manuallyDisabled = true; if ( spotifyUpdater->sync() ) @@ -460,9 +466,10 @@ SpotifyAccount::aboutToShow( QAction* action, const playlist_ptr& playlist ) } } - if ( action->data().toString() == "sync" ) - { + const ActionType actionType = static_cast< ActionType >( action->data().toInt() ); + if ( actionType == Sync ) + { if ( !found ) { action->setText( tr( "Sync with Spotify" ) ); @@ -477,7 +484,7 @@ SpotifyAccount::aboutToShow( QAction* action, const playlist_ptr& playlist ) // collaborative, he will loose his changes on next update, thus, // we create a new copy of it if ( canSubscribe ) - action->setText( tr( "Create subscribed copy and sync with Spotify") ); + action->setText( tr( "Create local copy") ); else if ( sync ) action->setText( tr( "Stop syncing with Spotify" ) ); else @@ -487,128 +494,116 @@ SpotifyAccount::aboutToShow( QAction* action, const playlist_ptr& playlist ) // User can sync or subscribe on playlist. // Sync means creating a new copy of it, subscribe is listening on changes from owner - if ( action->data().toString() == "subscribe" ) + if ( actionType == Subscribe ) { if ( found && canSubscribe ) { - if ( canSubscribe && !isSubscribed ) + if ( !isSubscribed ) { - action->setText( tr( "Subscribe with Spotify" ) ); + action->setText( tr( "Subscribe to playlist changes" ) ); } else if ( manuallyDisabled ) { - action->setText( tr( "Re-enable subscribing with Spotify" ) ); + action->setText( tr( "Re-enable playlist subscription" ) ); } else if ( isSubscribed ) { - action->setText( tr( "Stop subscribing with Spotify" ) ); + action->setText( tr( "Stop subscribing to changes" ) ); } else { // Hide the action, we dont have this option on the playlist action->setVisible( false ); } - }else - action->setVisible( false ); - } - -} - -void -SpotifyAccount::subscribeActionTriggered( bool checked ) -{ - Q_UNUSED( checked ); - QAction* action = qobject_cast< QAction* >( sender() ); - - if ( !action || !m_customActions.contains( action ) ) - return; - - const playlist_ptr playlist = action->property( "payload" ).value< playlist_ptr >(); - if ( playlist.isNull() ) - { - qWarning() << "Got context menu spotify sync action triggered, but invalid playlist payload!"; - Q_ASSERT( false ); - return; - } - - SpotifyPlaylistUpdater* updater = 0; - QList updaters = playlist->updaters(); - foreach ( PlaylistUpdaterInterface* u, updaters ) - { - if ( SpotifyPlaylistUpdater* spotifyUpdater = qobject_cast< SpotifyPlaylistUpdater* >( u ) ) - { - updater = spotifyUpdater; - } - } - - if ( !updater ) - { - qDebug() << "Errr GOT NO UPDATER! uho What to do??"; - JobStatusView::instance()->model()->addJob( new ErrorStatusMessage( QString( "Spotify: Failed to get SpotifyID from playlist" ) ) ); - } - else - { - - SpotifyPlaylistInfo* info = 0; - foreach ( SpotifyPlaylistInfo* ifo, m_allSpotifyPlaylists ) - { - if ( ifo->plid == updater->spotifyId() ) - { - info = ifo; - break; - } - } - - // When we unsubscribe, all playlists is resent - // and we will could loose the SpotifyPlaylistInfo, but all we really need is the id - if ( !updater->spotifyId().isEmpty() ) - { - if ( !info ) - { - info = new SpotifyPlaylistInfo( playlist->title() - , updater->spotifyId() - , updater->spotifyId() - , false - , false - ); - - registerPlaylistInfo( info ); - } - - info->subscribed = !updater->subscribed(); - - QVariantMap msg; - msg[ "_msgtype" ] = "setSubscription"; - msg[ "subscribe" ] = info->subscribed; - msg[ "playlistid" ] = info->plid; - - - sendMessage( msg, this ); - - updater->setSync( !updater->sync() ); - updater->setSubscribed( !updater->subscribed() ); - info->sync = !updater->sync(); - info->subscribed = !updater->subscribed(); - - } else { - qDebug() << "oh no! DONT HAVE ANY INFO NOR UPDATER!!"; + action->setVisible( false ); } - } } + + void -SpotifyAccount::syncActionTriggered( bool checked ) +SpotifyAccount::subscribeActionTriggered( bool ) { - Q_UNUSED( checked ); - QAction* action = qobject_cast< QAction* >( sender() ); + const playlist_ptr playlist = playlistFromAction( qobject_cast< QAction* >( sender() ) ); - if ( !action || !m_customActions.contains( action ) ) + if ( playlist.isNull() ) + { + qWarning() << "Got context menu spotify sync action triggered, but invalid playlist payload!"; + Q_ASSERT( false ); return; + } + + SpotifyPlaylistUpdater* updater = 0; + QList updaters = playlist->updaters(); + foreach ( PlaylistUpdaterInterface* u, updaters ) + { + if ( SpotifyPlaylistUpdater* spotifyUpdater = qobject_cast< SpotifyPlaylistUpdater* >( u ) ) + { + updater = spotifyUpdater; + break; + } + } + + if ( !updater ) + { + tLog() << "No SpotifyPlaylistUpdater in payload slot of triggered action! Uh oh!!"; + return; + } + + SpotifyPlaylistInfo* info = 0; + foreach ( SpotifyPlaylistInfo* ifo, m_allSpotifyPlaylists ) + { + if ( ifo->plid == updater->spotifyId() ) + { + info = ifo; + break; + } + } + + // When we unsubscribe, all playlists is resent + // and we will could loose the SpotifyPlaylistInfo, but all we really need is the id + if ( updater->spotifyId().isEmpty() ) + { + tLog() << "No spotify id in updater, WTF?"; + return; + } + + if ( !info ) + { + info = new SpotifyPlaylistInfo( playlist->title(), + updater->spotifyId(), + updater->spotifyId(), + false, + false + ); + + registerPlaylistInfo( info ); + } + + info->subscribed = !updater->subscribed(); + + QVariantMap msg; + msg[ "_msgtype" ] = "setSubscription"; + msg[ "subscribe" ] = info->subscribed; + msg[ "playlistid" ] = info->plid; + + sendMessage( msg, this ); + + updater->setSync( !updater->sync() ); + updater->setSubscribed( !updater->subscribed() ); + info->sync = !updater->sync(); + info->subscribed = !updater->subscribed(); +} + + +void +SpotifyAccount::syncActionTriggered( bool ) +{ + const playlist_ptr playlist = playlistFromAction( qobject_cast< QAction* >( sender() ) ); - const playlist_ptr playlist = action->property( "payload" ).value< playlist_ptr >(); if ( playlist.isNull() ) { qWarning() << "Got context menu spotify sync action triggered, but invalid playlist payload!"; @@ -626,12 +621,16 @@ SpotifyAccount::syncActionTriggered( bool checked ) } } - if ( !updater ) + if ( !updater || updater->canSubscribe() ) { QVariantMap msg; msg[ "_msgtype" ] = "createPlaylist"; msg[ "sync" ] = true; - msg[ "title" ] = playlist->title(); + + if ( !updater ) + msg[ "title" ] = playlist->title(); + else + msg[ "title" ] = "Copy of " + playlist->title(); QList< query_ptr > queries; foreach ( const plentry_ptr& ple, playlist->entries() ) @@ -639,23 +638,12 @@ SpotifyAccount::syncActionTriggered( bool checked ) QVariantList tracks = SpotifyPlaylistUpdater::queriesToVariant( queries ); msg[ "tracks" ] = tracks; - const QString qid = sendMessage( msg, this, "playlistCreated" ); - m_waitingForCreateReply[ qid ] = playlist; - } - else if ( updater->canSubscribe() ) - { - QVariantMap msg; - msg[ "_msgtype" ] = "createPlaylist"; - msg[ "sync" ] = true; - msg[ "title" ] = "Copy of " + playlist->title(); + QString qid; + if ( !updater ) + qid = sendMessage( msg, this, "playlistCreated" ); + else + qid = sendMessage( msg, this, "playlistCopyCreated" ); - QList< query_ptr > queries; - foreach ( const plentry_ptr& ple, playlist->entries() ) - queries << ple->query(); - QVariantList tracks = SpotifyPlaylistUpdater::queriesToVariant( queries ); - msg[ "tracks" ] = tracks; - - const QString qid = sendMessage( msg, this, "playlistCopyCreated" ); m_waitingForCreateReply[ qid ] = playlist; } else @@ -689,6 +677,18 @@ SpotifyAccount::syncActionTriggered( bool checked ) } +playlist_ptr +SpotifyAccount::playlistFromAction( QAction* action ) const +{ + Q_ASSERT( action ); + + if ( !action || !m_customActions.contains( action ) ) + return playlist_ptr(); + + return action->property( "payload" ).value< playlist_ptr >(); +} + + void SpotifyAccount::resolverMessage( const QString &msgType, const QVariantMap &msg ) { @@ -1161,6 +1161,8 @@ SpotifyAccount::playlistCopyCreated( const QString& msgType, const QVariantMap& SpotifyPlaylistInfo *info = new SpotifyPlaylistInfo( title, id, revid, true, false ); startPlaylistSync( info ); } + + void SpotifyAccount::playlistCreated( const QString& msgType, const QVariantMap& msg, const QVariant& ) { @@ -1319,14 +1321,14 @@ SpotifyAccount::createActions() syncAction->setIcon( QIcon( RESPATH "images/spotify-logo.png" ) ); connect( syncAction, SIGNAL( triggered( bool ) ), this, SLOT( syncActionTriggered( bool ) ) ); ActionCollection::instance()->addAction( ActionCollection::LocalPlaylists, syncAction, this ); - syncAction->setData( QString( "sync" ) ); + syncAction->setData( Sync); m_customActions.append( syncAction ); QAction* subscribeAction = new QAction( 0 ); subscribeAction->setIcon( QIcon( RESPATH "images/spotify-logo.png" ) ); connect( subscribeAction, SIGNAL( triggered( bool ) ), this, SLOT( subscribeActionTriggered( bool ) ) ); ActionCollection::instance()->addAction( ActionCollection::LocalPlaylists, subscribeAction, this ); - subscribeAction->setData( "subscribe" ); + subscribeAction->setData( Subscribe ); m_customActions.append( subscribeAction ); } diff --git a/src/libtomahawk/accounts/spotify/SpotifyAccount.h b/src/libtomahawk/accounts/spotify/SpotifyAccount.h index 14cb239b3..fb7ecacbe 100644 --- a/src/libtomahawk/accounts/spotify/SpotifyAccount.h +++ b/src/libtomahawk/accounts/spotify/SpotifyAccount.h @@ -153,6 +153,7 @@ private: void createActions(); void removeActions(); + playlist_ptr playlistFromAction( QAction* action ) const; static SpotifyAccount* s_instance; diff --git a/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.cpp b/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.cpp index a13a9eeb8..f05ab8563 100644 --- a/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.cpp +++ b/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.cpp @@ -258,7 +258,6 @@ SpotifyPlaylistUpdater::subscribed() const void SpotifyPlaylistUpdater::setCanSubscribe( bool canSubscribe ) { - if ( m_canSubscribe == canSubscribe ) return; diff --git a/src/libtomahawk/utils/SpotifyParser.cpp b/src/libtomahawk/utils/SpotifyParser.cpp index 044948c9a..bab88c7d3 100644 --- a/src/libtomahawk/utils/SpotifyParser.cpp +++ b/src/libtomahawk/utils/SpotifyParser.cpp @@ -315,7 +315,7 @@ SpotifyParser::checkBrowseFinished() connect( m_playlist.data(), SIGNAL( revisionLoaded( Tomahawk::PlaylistRevision ) ), this, SLOT( playlistCreated() ) ); - if ( Accounts::SpotifyAccount::instance() != 0 ) + if ( Accounts::SpotifyAccount::instance() && Accounts::SpotifyAccount::instance()->loggedIn() ) { SpotifyPlaylistUpdater* updater = new SpotifyPlaylistUpdater( Accounts::SpotifyAccount::instance(), m_playlist->currentrevision(), m_browseUri, m_playlist ); @@ -326,7 +326,7 @@ SpotifyParser::checkBrowseFinished() if ( !m_browseUri.contains( creds.value( "username" ).toString() ) ) updater->setCanSubscribe( true ); - updater->setSubscribed( false ); + updater->setSubscribed( true ); updater->setSync( false ); // Just register the infos From a6134533bec05791757d350dcfbd6c75e5d8db6a Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Tue, 17 Jul 2012 10:09:36 -0400 Subject: [PATCH 38/53] Only ask to delete synced non-subscribed playlists --- src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.cpp b/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.cpp index f05ab8563..c5866a08e 100644 --- a/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.cpp +++ b/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.cpp @@ -132,7 +132,7 @@ SpotifyPlaylistUpdater::remove( bool askToDeletePlaylist ) void SpotifyPlaylistUpdater::aboutToDelete() { - if ( m_sync ) + if ( m_sync && !m_subscribed ) { if ( QThread::currentThread() != QApplication::instance()->thread() ) QMetaObject::invokeMethod( const_cast(this), "checkDeleteDialog", Qt::BlockingQueuedConnection ); From ba16ca9a72c21df95c2f50fbeda71c3cff5a4c31 Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Tue, 17 Jul 2012 10:10:00 -0400 Subject: [PATCH 39/53] Ask local resolver for playlist if running and logged in --- src/libtomahawk/utils/SpotifyParser.cpp | 44 +++++++++++++++++++++++++ src/libtomahawk/utils/SpotifyParser.h | 3 ++ 2 files changed, 47 insertions(+) diff --git a/src/libtomahawk/utils/SpotifyParser.cpp b/src/libtomahawk/utils/SpotifyParser.cpp index bab88c7d3..d873f16f1 100644 --- a/src/libtomahawk/utils/SpotifyParser.cpp +++ b/src/libtomahawk/utils/SpotifyParser.cpp @@ -98,12 +98,31 @@ SpotifyParser::lookupSpotifyBrowse( const QString& linkRaw ) { tLog() << "Parsing Spotify Browse URI:" << linkRaw; m_browseUri = linkRaw; + if ( m_browseUri.contains( "open.spotify.com/" ) ) // convert to a URI { m_browseUri.replace( "http://open.spotify.com/", "" ); m_browseUri.replace( "/", ":" ); m_browseUri = "spotify:" + m_browseUri; } + + if ( m_browseUri.contains( "playlist" ) && + Tomahawk::Accounts::SpotifyAccount::instance() != 0 && + Tomahawk::Accounts::SpotifyAccount::instance()->loggedIn() ) + { + // Do a playlist lookup locally + // Running resolver, so do the lookup through that + qDebug() << Q_FUNC_INFO << "Doing playlist lookup through spotify resolver:" << m_browseUri; + QVariantMap message; + message[ "_msgtype" ] = "playlistListing"; + message[ "id" ] = m_browseUri; + + QMetaObject::invokeMethod( Tomahawk::Accounts::SpotifyAccount::instance(), "sendMessage", Qt::QueuedConnection, Q_ARG( QVariantMap, message ), + Q_ARG( QObject*, this ), + Q_ARG( QString, "playlistListingResult" ) ); + + return; + } DropJob::DropType type; @@ -293,6 +312,31 @@ SpotifyParser::spotifyTrackLookupFinished() } +void +SpotifyParser::playlistListingResult( const QString& msgType, const QVariantMap& msg, const QVariant& extraData ) +{ + Q_ASSERT( msgType == "playlistListing" ); + + m_title = msg.value( "name" ).toString(); + m_single = false; + m_creator = msg.value( "creator" ).toString(); + + const QVariantList tracks = msg.value( "tracks" ).toList(); + foreach ( const QVariant& blob, tracks ) + { + QVariantMap trackMap = blob.toMap(); + const query_ptr q = Query::get( trackMap.value( "artist" ).toString(), trackMap.value( "track" ).toString(), trackMap.value( "album" ).toString(), uuid(), false ); + + if ( q.isNull() ) + continue; + + m_tracks << q; + } + + checkBrowseFinished(); +} + + void SpotifyParser::checkBrowseFinished() { diff --git a/src/libtomahawk/utils/SpotifyParser.h b/src/libtomahawk/utils/SpotifyParser.h index 1bde874e3..3675489ca 100644 --- a/src/libtomahawk/utils/SpotifyParser.h +++ b/src/libtomahawk/utils/SpotifyParser.h @@ -60,6 +60,9 @@ public: // the single track signal void setSingleMode( bool single ) { m_single = single; } +public slots: + void playlistListingResult( const QString& msgType, const QVariantMap& msg, const QVariant& extraData ); + signals: void track( const Tomahawk::query_ptr& track ); void tracks( const QList< Tomahawk::query_ptr > tracks ); From cd7efebdf8309d5e003050b00f9a1e063ac6c1a8 Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Tue, 17 Jul 2012 10:10:15 -0400 Subject: [PATCH 40/53] Default to synced + subscribed when dropping a spotify playlist --- src/libtomahawk/utils/SpotifyParser.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libtomahawk/utils/SpotifyParser.cpp b/src/libtomahawk/utils/SpotifyParser.cpp index d873f16f1..02f024a44 100644 --- a/src/libtomahawk/utils/SpotifyParser.cpp +++ b/src/libtomahawk/utils/SpotifyParser.cpp @@ -371,7 +371,7 @@ SpotifyParser::checkBrowseFinished() updater->setCanSubscribe( true ); updater->setSubscribed( true ); - updater->setSync( false ); + updater->setSync( true ); // Just register the infos Accounts::SpotifyAccount::instance()->registerPlaylistInfo( m_title, m_browseUri, m_browseUri, false, false ); From b09206d2b9704c8a420d55cf78493c978a9c4313 Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Tue, 17 Jul 2012 17:08:28 -0400 Subject: [PATCH 41/53] Pointer safety (Oops #20003) --- src/libtomahawk/ContextMenu.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libtomahawk/ContextMenu.cpp b/src/libtomahawk/ContextMenu.cpp index 8092aa00c..b4573d804 100644 --- a/src/libtomahawk/ContextMenu.cpp +++ b/src/libtomahawk/ContextMenu.cpp @@ -336,12 +336,12 @@ ContextMenu::onSocialActionsLoaded() if ( m_queries.isEmpty() || m_queries.first().isNull() ) return; - if ( m_queries.first()->loved() ) + if ( m_loveAction && m_queries.first()->loved() ) { m_loveAction->setText( tr( "Un-&Love" ) ); m_loveAction->setIcon( QIcon( RESPATH "images/not-loved.png" ) ); } - else + else if ( m_loveAction ) { m_loveAction->setText( tr( "&Love" ) ); m_loveAction->setIcon( QIcon( RESPATH "images/loved.png" ) ); From bd635d60772d7a1748b19312f883f56f1b2029f1 Mon Sep 17 00:00:00 2001 From: Tomahawk CI Date: Tue, 17 Jul 2012 22:17:45 +0000 Subject: [PATCH 42/53] Automatic merge of Transifex translations --- lang/tomahawk_ar.ts | 44 ++++++++++++++++++++-------------------- lang/tomahawk_bg.ts | 44 ++++++++++++++++++++-------------------- lang/tomahawk_ca.ts | 44 ++++++++++++++++++++-------------------- lang/tomahawk_de.ts | 44 ++++++++++++++++++++-------------------- lang/tomahawk_en.ts | 46 +++++++++++++++++++++--------------------- lang/tomahawk_es.ts | 44 ++++++++++++++++++++-------------------- lang/tomahawk_fr.ts | 44 ++++++++++++++++++++-------------------- lang/tomahawk_ja.ts | 44 ++++++++++++++++++++-------------------- lang/tomahawk_pl.ts | 44 ++++++++++++++++++++-------------------- lang/tomahawk_pt_BR.ts | 44 ++++++++++++++++++++-------------------- lang/tomahawk_ru.ts | 44 ++++++++++++++++++++-------------------- lang/tomahawk_sv.ts | 44 ++++++++++++++++++++-------------------- lang/tomahawk_tr.ts | 44 ++++++++++++++++++++-------------------- lang/tomahawk_zh_CN.ts | 44 ++++++++++++++++++++-------------------- lang/tomahawk_zh_TW.ts | 44 ++++++++++++++++++++-------------------- 15 files changed, 331 insertions(+), 331 deletions(-) diff --git a/lang/tomahawk_ar.ts b/lang/tomahawk_ar.ts index 19176ba0e..801a3404e 100644 --- a/lang/tomahawk_ar.ts +++ b/lang/tomahawk_ar.ts @@ -763,7 +763,7 @@ connect and stream from you? تقدم - + - Properties - خصائص @@ -1983,40 +1983,40 @@ connect and stream from you? Tomahawk::Accounts::SpotifyAccount - + Sync with Spotify مزامنة مع سبوتيفي (Spotify) - + Re-enable syncing with Spotify إعادة تمكين المزامنة مع سبوتيفي (Spotify) - - Create subscribed copy and sync with Spotify + + Create local copy - + + Subscribe to playlist changes + + + + + Re-enable playlist subscription + + + + + Stop subscribing to changes + + + + Stop syncing with Spotify أوقف المزامنة مع سبوتيفي (Spotify) - - - Subscribe with Spotify - - - - - Re-enable subscribing with Spotify - - - - - Stop subscribing with Spotify - - Tomahawk::Accounts::SpotifyAccountConfig @@ -3030,7 +3030,7 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::SpotifyParser - + Error fetching Spotify information from the network! مشكلة في جلب معلومات "Spotify" من الشبكة! diff --git a/lang/tomahawk_bg.ts b/lang/tomahawk_bg.ts index f94c03f9b..f553180b3 100644 --- a/lang/tomahawk_bg.ts +++ b/lang/tomahawk_bg.ts @@ -765,7 +765,7 @@ Tomahaw създаде доклад относно това и изпращай - + - Properties @@ -1989,40 +1989,40 @@ Tomahaw създаде доклад относно това и изпращай Tomahawk::Accounts::SpotifyAccount - + Sync with Spotify Синхронизирай със Spotify - + Re-enable syncing with Spotify Включи отново синхронизирането със Spotify - - Create subscribed copy and sync with Spotify + + Create local copy - + + Subscribe to playlist changes + + + + + Re-enable playlist subscription + + + + + Stop subscribing to changes + + + + Stop syncing with Spotify Спри синхронизацията със Spotify - - - Subscribe with Spotify - - - - - Re-enable subscribing with Spotify - - - - - Stop subscribing with Spotify - - Tomahawk::Accounts::SpotifyAccountConfig @@ -3037,7 +3037,7 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::SpotifyParser - + Error fetching Spotify information from the network! Грешка при извличане на информация от Spotify diff --git a/lang/tomahawk_ca.ts b/lang/tomahawk_ca.ts index 15bafbd04..80474a3f9 100644 --- a/lang/tomahawk_ca.ts +++ b/lang/tomahawk_ca.ts @@ -762,7 +762,7 @@ connect and stream from you? - + - Properties @@ -1982,40 +1982,40 @@ i emissores de ràdio basades en el vostre gust musical. Tomahawk::Accounts::SpotifyAccount - + Sync with Spotify Sincronitza amb Spotify - + Re-enable syncing with Spotify - - Create subscribed copy and sync with Spotify + + Create local copy - + + Subscribe to playlist changes + + + + + Re-enable playlist subscription + + + + + Stop subscribing to changes + + + + Stop syncing with Spotify Atura la sincronització amb Spotify - - - Subscribe with Spotify - - - - - Re-enable subscribing with Spotify - - - - - Stop subscribing with Spotify - - Tomahawk::Accounts::SpotifyAccountConfig @@ -3029,7 +3029,7 @@ Intenteu ajustar els filtres per reproduir noves cançons. Tomahawk::SpotifyParser - + Error fetching Spotify information from the network! Error en cercar la informació de Spotify a través de la xarxa! diff --git a/lang/tomahawk_de.ts b/lang/tomahawk_de.ts index 771e131b4..32a8fb302 100644 --- a/lang/tomahawk_de.ts +++ b/lang/tomahawk_de.ts @@ -763,7 +763,7 @@ erlauben sich mit dir zu verbinden? Vorwärts - + - Properties - Eigenschaften @@ -1980,40 +1980,40 @@ erlauben sich mit dir zu verbinden? Tomahawk::Accounts::SpotifyAccount - + Sync with Spotify Mit Spotify synchronisieren - + Re-enable syncing with Spotify Synchronisierung mit Spotify re-aktivieren - - Create subscribed copy and sync with Spotify + + Create local copy - + + Subscribe to playlist changes + + + + + Re-enable playlist subscription + + + + + Stop subscribing to changes + + + + Stop syncing with Spotify Synchronisation beenden - - - Subscribe with Spotify - - - - - Re-enable subscribing with Spotify - - - - - Stop subscribing with Spotify - - Tomahawk::Accounts::SpotifyAccountConfig @@ -3025,7 +3025,7 @@ Versuch die Filter anzupassen für neue Lieder. Tomahawk::SpotifyParser - + Error fetching Spotify information from the network! Konnte Spotify-Daten nicht laden! diff --git a/lang/tomahawk_en.ts b/lang/tomahawk_en.ts index 80ea7dd52..5d3a6a4e7 100644 --- a/lang/tomahawk_en.ts +++ b/lang/tomahawk_en.ts @@ -763,7 +763,7 @@ connect and stream from you? Forward - + - Properties - Properties @@ -1983,40 +1983,40 @@ connect and stream from you? Tomahawk::Accounts::SpotifyAccount - + Sync with Spotify Sync with Spotify - + Re-enable syncing with Spotify Re-enable syncing with Spotify - - Create subscribed copy and sync with Spotify - Create subscribed copy and sync with Spotify + + Create local copy + Create local copy - + + Subscribe to playlist changes + Subscribe to playlist changes + + + + Re-enable playlist subscription + Re-enable playlist subscription + + + + Stop subscribing to changes + Stop subscribing to changes + + + Stop syncing with Spotify Stop syncing with Spotify - - - Subscribe with Spotify - Subscribe with Spotify - - - - Re-enable subscribing with Spotify - Re-enable subscribing with Spotify - - - - Stop subscribing with Spotify - Stop subscribing with Spotify - Tomahawk::Accounts::SpotifyAccountConfig @@ -3030,7 +3030,7 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::SpotifyParser - + Error fetching Spotify information from the network! Error fetching Spotify information from the network! diff --git a/lang/tomahawk_es.ts b/lang/tomahawk_es.ts index 3e128c858..ef05d24ea 100644 --- a/lang/tomahawk_es.ts +++ b/lang/tomahawk_es.ts @@ -762,7 +762,7 @@ connect and stream from you? - + - Properties @@ -1981,40 +1981,40 @@ y estaciones basadas en sus gustos personales. Tomahawk::Accounts::SpotifyAccount - + Sync with Spotify Sincronizar con Spotify - + Re-enable syncing with Spotify - - Create subscribed copy and sync with Spotify + + Create local copy - + + Subscribe to playlist changes + + + + + Re-enable playlist subscription + + + + + Stop subscribing to changes + + + + Stop syncing with Spotify Dejar de sincronizar con Spotify - - - Subscribe with Spotify - - - - - Re-enable subscribing with Spotify - - - - - Stop subscribing with Spotify - - Tomahawk::Accounts::SpotifyAccountConfig @@ -3028,7 +3028,7 @@ Intente ajustar los filtros para reproducir nuevas canciones. Tomahawk::SpotifyParser - + Error fetching Spotify information from the network! Error al buscar la información de Spotify en la red! diff --git a/lang/tomahawk_fr.ts b/lang/tomahawk_fr.ts index 329f98dab..06f8fd658 100644 --- a/lang/tomahawk_fr.ts +++ b/lang/tomahawk_fr.ts @@ -763,7 +763,7 @@ de se connecter et streamer de vous? Avancer - + - Properties - Propriétés @@ -1983,40 +1983,40 @@ et des stations basées sur vos goûts. Tomahawk::Accounts::SpotifyAccount - + Sync with Spotify Synchroniser avec Spotify - + Re-enable syncing with Spotify Réactiver la synchronisation avec Spotify - - Create subscribed copy and sync with Spotify + + Create local copy - + + Subscribe to playlist changes + + + + + Re-enable playlist subscription + + + + + Stop subscribing to changes + + + + Stop syncing with Spotify Stopper la synchronisation avec Spotify - - - Subscribe with Spotify - - - - - Re-enable subscribing with Spotify - - - - - Stop subscribing with Spotify - - Tomahawk::Accounts::SpotifyAccountConfig @@ -3030,7 +3030,7 @@ Essayez de changer les filtres pour avoir de nouveaux morceaux à jouer. Tomahawk::SpotifyParser - + Error fetching Spotify information from the network! Échec du chargement des informations Spotify depuis le réseau! diff --git a/lang/tomahawk_ja.ts b/lang/tomahawk_ja.ts index 877b0e267..be1dce2b7 100644 --- a/lang/tomahawk_ja.ts +++ b/lang/tomahawk_ja.ts @@ -763,7 +763,7 @@ connect and stream from you? 次へ - + - Properties - 情報 @@ -1980,40 +1980,40 @@ connect and stream from you? Tomahawk::Accounts::SpotifyAccount - + Sync with Spotify - + Re-enable syncing with Spotify - - Create subscribed copy and sync with Spotify + + Create local copy - + + Subscribe to playlist changes + + + + + Re-enable playlist subscription + + + + + Stop subscribing to changes + + + + Stop syncing with Spotify - - - Subscribe with Spotify - - - - - Re-enable subscribing with Spotify - - - - - Stop subscribing with Spotify - - Tomahawk::Accounts::SpotifyAccountConfig @@ -3020,7 +3020,7 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::SpotifyParser - + Error fetching Spotify information from the network! diff --git a/lang/tomahawk_pl.ts b/lang/tomahawk_pl.ts index f2a3f0dd3..a3f712fe4 100644 --- a/lang/tomahawk_pl.ts +++ b/lang/tomahawk_pl.ts @@ -762,7 +762,7 @@ connect and stream from you? - + - Properties @@ -1982,40 +1982,40 @@ indywidualnego profilu gustu. Tomahawk::Accounts::SpotifyAccount - + Sync with Spotify - + Re-enable syncing with Spotify - - Create subscribed copy and sync with Spotify + + Create local copy - + + Subscribe to playlist changes + + + + + Re-enable playlist subscription + + + + + Stop subscribing to changes + + + + Stop syncing with Spotify - - - Subscribe with Spotify - - - - - Re-enable subscribing with Spotify - - - - - Stop subscribing with Spotify - - Tomahawk::Accounts::SpotifyAccountConfig @@ -3024,7 +3024,7 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::SpotifyParser - + Error fetching Spotify information from the network! diff --git a/lang/tomahawk_pt_BR.ts b/lang/tomahawk_pt_BR.ts index 6d1061b2d..363777d39 100644 --- a/lang/tomahawk_pt_BR.ts +++ b/lang/tomahawk_pt_BR.ts @@ -763,7 +763,7 @@ se conecte e faça o stream de você? Avançar - + - Properties - Propriedades @@ -1983,40 +1983,40 @@ automáticas baseadas no seu gosto pessoal. Tomahawk::Accounts::SpotifyAccount - + Sync with Spotify Sincronizar com o Spotify - + Re-enable syncing with Spotify Reativar sincronização com Spotify - - Create subscribed copy and sync with Spotify + + Create local copy - + + Subscribe to playlist changes + + + + + Re-enable playlist subscription + + + + + Stop subscribing to changes + + + + Stop syncing with Spotify Parar a sincronização com o Spotify - - - Subscribe with Spotify - - - - - Re-enable subscribing with Spotify - - - - - Stop subscribing with Spotify - - Tomahawk::Accounts::SpotifyAccountConfig @@ -3030,7 +3030,7 @@ Tente ajustar os filtros para ouvir um novo conjunto de músicas. Tomahawk::SpotifyParser - + Error fetching Spotify information from the network! Erro ao obter informações do Spotify pela rede! diff --git a/lang/tomahawk_ru.ts b/lang/tomahawk_ru.ts index e7aa8aa91..2c4845ae2 100644 --- a/lang/tomahawk_ru.ts +++ b/lang/tomahawk_ru.ts @@ -762,7 +762,7 @@ connect and stream from you? - + - Properties @@ -1979,40 +1979,40 @@ connect and stream from you? Tomahawk::Accounts::SpotifyAccount - + Sync with Spotify Синхронизировать с Spotify - + Re-enable syncing with Spotify - - Create subscribed copy and sync with Spotify + + Create local copy - + + Subscribe to playlist changes + + + + + Re-enable playlist subscription + + + + + Stop subscribing to changes + + + + Stop syncing with Spotify Прекратить синхронизацию с Spotify - - - Subscribe with Spotify - - - - - Re-enable subscribing with Spotify - - - - - Stop subscribing with Spotify - - Tomahawk::Accounts::SpotifyAccountConfig @@ -3024,7 +3024,7 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::SpotifyParser - + Error fetching Spotify information from the network! Возникла ошибка при получении информации из Spotify! diff --git a/lang/tomahawk_sv.ts b/lang/tomahawk_sv.ts index 90fc0e57e..bba5c941f 100644 --- a/lang/tomahawk_sv.ts +++ b/lang/tomahawk_sv.ts @@ -762,7 +762,7 @@ connect and stream from you? - + - Properties @@ -1979,40 +1979,40 @@ connect and stream from you? Tomahawk::Accounts::SpotifyAccount - + Sync with Spotify - + Re-enable syncing with Spotify - - Create subscribed copy and sync with Spotify + + Create local copy - + + Subscribe to playlist changes + + + + + Re-enable playlist subscription + + + + + Stop subscribing to changes + + + + Stop syncing with Spotify - - - Subscribe with Spotify - - - - - Re-enable subscribing with Spotify - - - - - Stop subscribing with Spotify - - Tomahawk::Accounts::SpotifyAccountConfig @@ -3019,7 +3019,7 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::SpotifyParser - + Error fetching Spotify information from the network! diff --git a/lang/tomahawk_tr.ts b/lang/tomahawk_tr.ts index 71bd204d9..681b39316 100644 --- a/lang/tomahawk_tr.ts +++ b/lang/tomahawk_tr.ts @@ -762,7 +762,7 @@ connect and stream from you? - + - Properties @@ -1978,40 +1978,40 @@ connect and stream from you? Tomahawk::Accounts::SpotifyAccount - + Sync with Spotify - + Re-enable syncing with Spotify - - Create subscribed copy and sync with Spotify + + Create local copy - + + Subscribe to playlist changes + + + + + Re-enable playlist subscription + + + + + Stop subscribing to changes + + + + Stop syncing with Spotify - - - Subscribe with Spotify - - - - - Re-enable subscribing with Spotify - - - - - Stop subscribing with Spotify - - Tomahawk::Accounts::SpotifyAccountConfig @@ -3018,7 +3018,7 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::SpotifyParser - + Error fetching Spotify information from the network! diff --git a/lang/tomahawk_zh_CN.ts b/lang/tomahawk_zh_CN.ts index 25497b337..9faac7e65 100644 --- a/lang/tomahawk_zh_CN.ts +++ b/lang/tomahawk_zh_CN.ts @@ -762,7 +762,7 @@ connect and stream from you? - + - Properties @@ -1978,40 +1978,40 @@ connect and stream from you? Tomahawk::Accounts::SpotifyAccount - + Sync with Spotify - + Re-enable syncing with Spotify - - Create subscribed copy and sync with Spotify + + Create local copy - + + Subscribe to playlist changes + + + + + Re-enable playlist subscription + + + + + Stop subscribing to changes + + + + Stop syncing with Spotify - - - Subscribe with Spotify - - - - - Re-enable subscribing with Spotify - - - - - Stop subscribing with Spotify - - Tomahawk::Accounts::SpotifyAccountConfig @@ -3018,7 +3018,7 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::SpotifyParser - + Error fetching Spotify information from the network! diff --git a/lang/tomahawk_zh_TW.ts b/lang/tomahawk_zh_TW.ts index 4993a0b6e..2c219358a 100644 --- a/lang/tomahawk_zh_TW.ts +++ b/lang/tomahawk_zh_TW.ts @@ -762,7 +762,7 @@ connect and stream from you? - + - Properties @@ -1978,40 +1978,40 @@ connect and stream from you? Tomahawk::Accounts::SpotifyAccount - + Sync with Spotify - + Re-enable syncing with Spotify - - Create subscribed copy and sync with Spotify + + Create local copy - + + Subscribe to playlist changes + + + + + Re-enable playlist subscription + + + + + Stop subscribing to changes + + + + Stop syncing with Spotify - - - Subscribe with Spotify - - - - - Re-enable subscribing with Spotify - - - - - Stop subscribing with Spotify - - Tomahawk::Accounts::SpotifyAccountConfig @@ -3018,7 +3018,7 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::SpotifyParser - + Error fetching Spotify information from the network! From 026b257fef62df01d2ebcb5e0779071de1214b18 Mon Sep 17 00:00:00 2001 From: Alejandro Wainzinger Date: Wed, 18 Jul 2012 08:51:08 +0900 Subject: [PATCH 43/53] An unsigned int will never be less than 0. --- src/libtomahawk/AlbumPlaylistInterface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libtomahawk/AlbumPlaylistInterface.cpp b/src/libtomahawk/AlbumPlaylistInterface.cpp index 092001a44..e8217186e 100644 --- a/src/libtomahawk/AlbumPlaylistInterface.cpp +++ b/src/libtomahawk/AlbumPlaylistInterface.cpp @@ -108,7 +108,7 @@ bool AlbumPlaylistInterface::setCurrentTrack( unsigned int albumpos ) { albumpos--; - if ( albumpos < 0 || albumpos >= m_queries.count() ) + if ( albumpos >= m_queries.count() ) return false; m_currentTrack = albumpos; From 74d6ccd47da49a3fe296406c609f42f63585bfe1 Mon Sep 17 00:00:00 2001 From: Alejandro Wainzinger Date: Wed, 18 Jul 2012 08:59:17 +0900 Subject: [PATCH 44/53] Add default case to switch. --- src/libtomahawk/audio/AudioEngine.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/libtomahawk/audio/AudioEngine.cpp b/src/libtomahawk/audio/AudioEngine.cpp index 3b7d940ea..e8f07c45c 100644 --- a/src/libtomahawk/audio/AudioEngine.cpp +++ b/src/libtomahawk/audio/AudioEngine.cpp @@ -897,6 +897,9 @@ AudioEngine::checkStateQueue() m_mediaObject->pause(); break; } + + default: + break; } } else From 6194517eab9da60508e2e1c15ff020a5f1fa7e6d Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Tue, 17 Jul 2012 18:48:35 -0400 Subject: [PATCH 45/53] Use a QHash to avoid a bunch of loops --- .../accounts/spotify/SpotifyAccount.cpp | 54 +++++++------------ .../accounts/spotify/SpotifyAccount.h | 2 +- 2 files changed, 21 insertions(+), 35 deletions(-) diff --git a/src/libtomahawk/accounts/spotify/SpotifyAccount.cpp b/src/libtomahawk/accounts/spotify/SpotifyAccount.cpp index d62733761..f06a35fde 100644 --- a/src/libtomahawk/accounts/spotify/SpotifyAccount.cpp +++ b/src/libtomahawk/accounts/spotify/SpotifyAccount.cpp @@ -553,16 +553,8 @@ SpotifyAccount::subscribeActionTriggered( bool ) return; } - SpotifyPlaylistInfo* info = 0; - foreach ( SpotifyPlaylistInfo* ifo, m_allSpotifyPlaylists ) - { - if ( ifo->plid == updater->spotifyId() ) - { - info = ifo; - break; - } - } - + SpotifyPlaylistInfo* info = m_allSpotifyPlaylists.value( updater->spotifyId(), 0 ); + // When we unsubscribe, all playlists is resent // and we will could loose the SpotifyPlaylistInfo, but all we really need is the id if ( updater->spotifyId().isEmpty() ) @@ -648,22 +640,14 @@ SpotifyAccount::syncActionTriggered( bool ) } else { - SpotifyPlaylistInfo* info = 0; - foreach ( SpotifyPlaylistInfo* ifo, m_allSpotifyPlaylists ) - { - if ( ifo->plid == updater->spotifyId() ) - { - info = ifo; - break; - } - } + SpotifyPlaylistInfo* info = m_allSpotifyPlaylists.value( updater->spotifyId(), 0 ); Q_ASSERT( info ); if ( info ) info->sync = !updater->sync(); if ( m_configWidget.data() ) - m_configWidget.data()->setPlaylists( m_allSpotifyPlaylists ); + m_configWidget.data()->setPlaylists( m_allSpotifyPlaylists.values() ); if ( !updater->sync() ) { @@ -737,7 +721,7 @@ SpotifyAccount::resolverMessage( const QString &msgType, const QVariantMap &msg else if ( msgType == "allPlaylists" ) { const QVariantList playlists = msg.value( "playlists" ).toList(); - qDeleteAll( m_allSpotifyPlaylists ); + qDeleteAll( m_allSpotifyPlaylists.values() ); m_allSpotifyPlaylists.clear(); foreach ( const QVariant& playlist, playlists ) @@ -755,12 +739,12 @@ SpotifyAccount::resolverMessage( const QString &msgType, const QVariantMap &msg continue; } - m_allSpotifyPlaylists << new SpotifyPlaylistInfo( name, plid, revid, sync, subscribed ); + registerPlaylistInfo( new SpotifyPlaylistInfo( name, plid, revid, sync, subscribed ) ); } if ( !m_configWidget.isNull() ) { - m_configWidget.data()->setPlaylists( m_allSpotifyPlaylists ); + m_configWidget.data()->setPlaylists( m_allSpotifyPlaylists.values() ); } } else if ( msgType == "tracksAdded" ) @@ -936,7 +920,7 @@ SpotifyAccount::clearUser( bool permanentlyDelete ) m_updaters.clear(); - qDeleteAll( m_allSpotifyPlaylists ); + qDeleteAll( m_allSpotifyPlaylists.values() ); m_allSpotifyPlaylists.clear(); m_qidToSlotMap.clear(); @@ -964,7 +948,7 @@ SpotifyAccount::configurationWidget() m_configWidget = QWeakPointer< SpotifyAccountConfig >( new SpotifyAccountConfig( this ) ); connect( m_configWidget.data(), SIGNAL( login( QString,QString ) ), this, SLOT( login( QString,QString ) ) ); connect( m_configWidget.data(), SIGNAL( logout() ), this, SLOT( logout() ) ); - m_configWidget.data()->setPlaylists( m_allSpotifyPlaylists ); + m_configWidget.data()->setPlaylists( m_allSpotifyPlaylists.values() ); } if ( m_spotifyResolver.isNull() || !m_spotifyResolver.data()->running() ) @@ -1021,7 +1005,7 @@ SpotifyAccount::saveConfig() setConfiguration( config ); m_configWidget.data()->saveSettings(); - foreach ( SpotifyPlaylistInfo* pl, m_allSpotifyPlaylists ) + foreach ( SpotifyPlaylistInfo* pl, m_allSpotifyPlaylists.values() ) { // qDebug() << "Checking changed state:" << pl->changed << pl->name << pl->sync; if ( pl->changed ) @@ -1224,14 +1208,16 @@ SpotifyAccount::registerUpdaterForPlaylist( const QString& plId, SpotifyPlaylist void SpotifyAccount::registerPlaylistInfo( const QString& name, const QString& plid, const QString &revid, const bool sync, const bool subscribed ) { - m_allSpotifyPlaylists << new SpotifyPlaylistInfo( name, plid, revid, sync, subscribed ); + m_allSpotifyPlaylists[ plid ] = new SpotifyPlaylistInfo( name, plid, revid, sync, subscribed ); } void SpotifyAccount::registerPlaylistInfo( SpotifyPlaylistInfo* info ) { - m_allSpotifyPlaylists << info; + m_allSpotifyPlaylists[ info->plid ] = info; } + + void SpotifyAccount::unregisterUpdater( const QString& plid ) { @@ -1300,14 +1286,14 @@ SpotifyAccount::loadPlaylists() void SpotifyAccount::setSyncForPlaylist( const QString& spotifyPlaylistId, bool sync ) { - foreach ( SpotifyPlaylistInfo* info, m_allSpotifyPlaylists ) - { - if ( info->plid == spotifyPlaylistId ) - info->sync = sync; - } + SpotifyPlaylistInfo* info = m_allSpotifyPlaylists.value( spotifyPlaylistId, 0 ); + + if ( info ) + info->sync = sync; + if ( !m_configWidget.isNull() ) - m_configWidget.data()->setPlaylists( m_allSpotifyPlaylists ); + m_configWidget.data()->setPlaylists( m_allSpotifyPlaylists.values() ); } diff --git a/src/libtomahawk/accounts/spotify/SpotifyAccount.h b/src/libtomahawk/accounts/spotify/SpotifyAccount.h index fb7ecacbe..39e5d1c0c 100644 --- a/src/libtomahawk/accounts/spotify/SpotifyAccount.h +++ b/src/libtomahawk/accounts/spotify/SpotifyAccount.h @@ -166,7 +166,7 @@ private: QMap m_qidToExtraData; // List of synced spotify playlists in config UI - QList< SpotifyPlaylistInfo* > m_allSpotifyPlaylists; + QHash< QString, SpotifyPlaylistInfo* > m_allSpotifyPlaylists; QHash< QString, SpotifyPlaylistUpdater* > m_updaters; QHash< QString, playlist_ptr > m_waitingForCreateReply; From 4fa77e15c288c4c0fd0ae687e140daf24409132a Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Tue, 17 Jul 2012 19:06:36 -0400 Subject: [PATCH 46/53] Fix some logic in the subscribing, and properly subscribe on initial drop --- .../accounts/spotify/SpotifyAccount.cpp | 98 ++++++++++++------- .../accounts/spotify/SpotifyAccount.h | 4 + src/libtomahawk/utils/SpotifyParser.cpp | 7 +- 3 files changed, 68 insertions(+), 41 deletions(-) diff --git a/src/libtomahawk/accounts/spotify/SpotifyAccount.cpp b/src/libtomahawk/accounts/spotify/SpotifyAccount.cpp index f06a35fde..f330678ea 100644 --- a/src/libtomahawk/accounts/spotify/SpotifyAccount.cpp +++ b/src/libtomahawk/accounts/spotify/SpotifyAccount.cpp @@ -547,47 +547,12 @@ SpotifyAccount::subscribeActionTriggered( bool ) } } + Q_ASSERT( updater ); if ( !updater ) - { - tLog() << "No SpotifyPlaylistUpdater in payload slot of triggered action! Uh oh!!"; return; - } - SpotifyPlaylistInfo* info = m_allSpotifyPlaylists.value( updater->spotifyId(), 0 ); - - // When we unsubscribe, all playlists is resent - // and we will could loose the SpotifyPlaylistInfo, but all we really need is the id - if ( updater->spotifyId().isEmpty() ) - { - tLog() << "No spotify id in updater, WTF?"; - return; - } - - if ( !info ) - { - info = new SpotifyPlaylistInfo( playlist->title(), - updater->spotifyId(), - updater->spotifyId(), - false, - false - ); - - registerPlaylistInfo( info ); - } - - info->subscribed = !updater->subscribed(); - - QVariantMap msg; - msg[ "_msgtype" ] = "setSubscription"; - msg[ "subscribe" ] = info->subscribed; - msg[ "playlistid" ] = info->plid; - - sendMessage( msg, this ); - - updater->setSync( !updater->sync() ); - updater->setSubscribed( !updater->subscribed() ); - info->sync = !updater->sync(); - info->subscribed = !updater->subscribed(); + // Toggle subscription status + setSubscribedForPlaylist( playlist, !updater->subscribed() ); } @@ -661,6 +626,63 @@ SpotifyAccount::syncActionTriggered( bool ) } +void +SpotifyAccount::setSubscribedForPlaylist( const playlist_ptr& playlist, bool subscribed ) +{ + SpotifyPlaylistUpdater* updater = 0; + QList updaters = playlist->updaters(); + foreach ( PlaylistUpdaterInterface* u, updaters ) + { + if ( SpotifyPlaylistUpdater* spotifyUpdater = qobject_cast< SpotifyPlaylistUpdater* >( u ) ) + { + updater = spotifyUpdater; + break; + } + } + + if ( !updater ) + { + tLog() << "No SpotifyPlaylistUpdater in payload slot of triggered action! Uh oh!!"; + return; + } + + SpotifyPlaylistInfo* info = m_allSpotifyPlaylists.value( updater->spotifyId(), 0 ); + + // When we unsubscribe, all playlists is resent + // and we will could loose the SpotifyPlaylistInfo, but all we really need is the id + if ( updater->spotifyId().isEmpty() ) + { + tLog() << "No spotify id in updater, WTF?"; + return; + } + + if ( !info ) + { + info = new SpotifyPlaylistInfo( playlist->title(), + updater->spotifyId(), + updater->spotifyId(), + false, + false + ); + + registerPlaylistInfo( info ); + } + + info->subscribed = subscribed; + info->sync = subscribed; + + QVariantMap msg; + msg[ "_msgtype" ] = "setSubscription"; + msg[ "subscribe" ] = info->subscribed; + msg[ "playlistid" ] = info->plid; + + sendMessage( msg, this ); + + updater->setSync( subscribed ); + updater->setSubscribed( subscribed ); +} + + playlist_ptr SpotifyAccount::playlistFromAction( QAction* action ) const { diff --git a/src/libtomahawk/accounts/spotify/SpotifyAccount.h b/src/libtomahawk/accounts/spotify/SpotifyAccount.h index 39e5d1c0c..c31bcff2d 100644 --- a/src/libtomahawk/accounts/spotify/SpotifyAccount.h +++ b/src/libtomahawk/accounts/spotify/SpotifyAccount.h @@ -36,6 +36,8 @@ class ScriptResolver; namespace Tomahawk { +class SpotifyParser; + namespace InfoSystem { class SpotifyInfoPlugin; @@ -150,6 +152,7 @@ private: void fetchFullPlaylist( SpotifyPlaylistInfo* playlist ); void setSyncForPlaylist( const QString& spotifyPlaylistId, bool sync ); + void setSubscribedForPlaylist( const playlist_ptr& pl, bool subscribed ); void createActions(); void removeActions(); @@ -175,6 +178,7 @@ private: SmartPointerList< QAction > m_customActions; friend class ::SpotifyPlaylistUpdater; + friend class Tomahawk::SpotifyParser; }; } diff --git a/src/libtomahawk/utils/SpotifyParser.cpp b/src/libtomahawk/utils/SpotifyParser.cpp index 02f024a44..877c811e9 100644 --- a/src/libtomahawk/utils/SpotifyParser.cpp +++ b/src/libtomahawk/utils/SpotifyParser.cpp @@ -370,12 +370,13 @@ SpotifyParser::checkBrowseFinished() if ( !m_browseUri.contains( creds.value( "username" ).toString() ) ) updater->setCanSubscribe( true ); - updater->setSubscribed( true ); - updater->setSync( true ); - // Just register the infos Accounts::SpotifyAccount::instance()->registerPlaylistInfo( m_title, m_browseUri, m_browseUri, false, false ); Accounts::SpotifyAccount::instance()->registerUpdaterForPlaylist( m_browseUri, updater ); + + + Accounts::SpotifyAccount::instance()->setSubscribedForPlaylist( m_playlist, true ); + } return; } From ec10d9f7238d38c0a4ff2e0b1c73522a30a5af99 Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Tue, 17 Jul 2012 23:06:15 -0400 Subject: [PATCH 47/53] Unsubscribe when deleting --- src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.cpp b/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.cpp index c5866a08e..fff1c2f3b 100644 --- a/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.cpp +++ b/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.cpp @@ -132,7 +132,11 @@ SpotifyPlaylistUpdater::remove( bool askToDeletePlaylist ) void SpotifyPlaylistUpdater::aboutToDelete() { - if ( m_sync && !m_subscribed ) + if ( m_subscribed ) + { + m_spotify.data()->setSubscribedForPlaylist( playlist(), false ); + } + else if ( m_sync ) { if ( QThread::currentThread() != QApplication::instance()->thread() ) QMetaObject::invokeMethod( const_cast(this), "checkDeleteDialog", Qt::BlockingQueuedConnection ); From 6771d1c7d74cc855df9347c0e78299bb89e301a3 Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Wed, 18 Jul 2012 11:04:42 -0400 Subject: [PATCH 48/53] Pointer safety --- src/web/Api_v1.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/web/Api_v1.cpp b/src/web/Api_v1.cpp index 4f8f78c9f..060ea0e1b 100644 --- a/src/web/Api_v1.cpp +++ b/src/web/Api_v1.cpp @@ -235,6 +235,11 @@ Api_v1::statResult( const QString& clientToken, const QString& name, bool valid { Q_UNUSED( clientToken ) Q_UNUSED( name ) + + Q_ASSERT( m_storedEvent ); + if ( !m_storedEvent ) + return; + QVariantMap m; m.insert( "name", "playdar" ); m.insert( "version", "0.1.1" ); // TODO (needs to be >=0.1.1 for JS to work) From 454944d089cc02e9251c084227c2e3d023a96703 Mon Sep 17 00:00:00 2001 From: Tomahawk CI Date: Wed, 18 Jul 2012 22:17:33 +0000 Subject: [PATCH 49/53] Automatic merge of Transifex translations --- lang/tomahawk_ar.ts | 6 +++--- lang/tomahawk_bg.ts | 6 +++--- lang/tomahawk_ca.ts | 6 +++--- lang/tomahawk_de.ts | 6 +++--- lang/tomahawk_en.ts | 6 +++--- lang/tomahawk_es.ts | 6 +++--- lang/tomahawk_fr.ts | 6 +++--- lang/tomahawk_ja.ts | 6 +++--- lang/tomahawk_pl.ts | 6 +++--- lang/tomahawk_pt_BR.ts | 6 +++--- lang/tomahawk_ru.ts | 6 +++--- lang/tomahawk_sv.ts | 6 +++--- lang/tomahawk_tr.ts | 6 +++--- lang/tomahawk_zh_CN.ts | 6 +++--- lang/tomahawk_zh_TW.ts | 6 +++--- 15 files changed, 45 insertions(+), 45 deletions(-) diff --git a/lang/tomahawk_ar.ts b/lang/tomahawk_ar.ts index 801a3404e..548d1bd66 100644 --- a/lang/tomahawk_ar.ts +++ b/lang/tomahawk_ar.ts @@ -1671,12 +1671,12 @@ connect and stream from you? SpotifyPlaylistUpdater - + Delete in Spotify? أحذف في سبوتيفي (Spotify)؟ - + Would you like to delete the corresponding Spotify playlist as well? هل ترغب في حذف قائمة التشغيل المطابقة على سبوتيفي (Spotify)؟ @@ -2050,7 +2050,7 @@ connect and stream from you? Tomahawk::Accounts::SpotifyAccountFactory - + Play music from and sync your playlists with Spotify Premium إسمع موسيقى و زامن قوائم تشغيلك مع سبوتيفي بريميوم (Spotify Premium) diff --git a/lang/tomahawk_bg.ts b/lang/tomahawk_bg.ts index f553180b3..41646624d 100644 --- a/lang/tomahawk_bg.ts +++ b/lang/tomahawk_bg.ts @@ -1673,12 +1673,12 @@ Tomahaw създаде доклад относно това и изпращай SpotifyPlaylistUpdater - + Delete in Spotify? Изтривам и в Spotify? - + Would you like to delete the corresponding Spotify playlist as well? Желаеш ли да изтриеш и съответните Spotify списъци? @@ -2056,7 +2056,7 @@ Tomahaw създаде доклад относно това и изпращай Tomahawk::Accounts::SpotifyAccountFactory - + Play music from and sync your playlists with Spotify Premium Слушай музика и синхронизирай твоите списъци със Spotify Premium diff --git a/lang/tomahawk_ca.ts b/lang/tomahawk_ca.ts index 80474a3f9..39bdc19ae 100644 --- a/lang/tomahawk_ca.ts +++ b/lang/tomahawk_ca.ts @@ -1669,12 +1669,12 @@ connect and stream from you? SpotifyPlaylistUpdater - + Delete in Spotify? Voleu esborrar-ho de Spotify? - + Would you like to delete the corresponding Spotify playlist as well? Voleu esborrar les llistes de Spotify, també? @@ -2049,7 +2049,7 @@ i emissores de ràdio basades en el vostre gust musical. Tomahawk::Accounts::SpotifyAccountFactory - + Play music from and sync your playlists with Spotify Premium Reprodueix música i sincronitza les llistes de reproducció amb Spotify Premium diff --git a/lang/tomahawk_de.ts b/lang/tomahawk_de.ts index 32a8fb302..eddf0e796 100644 --- a/lang/tomahawk_de.ts +++ b/lang/tomahawk_de.ts @@ -1670,12 +1670,12 @@ erlauben sich mit dir zu verbinden? SpotifyPlaylistUpdater - + Delete in Spotify? Auf Spotify löschen - + Would you like to delete the corresponding Spotify playlist as well? Möchtest du die entsprechende Spotify Playlist auch löschen? @@ -2047,7 +2047,7 @@ erlauben sich mit dir zu verbinden? Tomahawk::Accounts::SpotifyAccountFactory - + Play music from and sync your playlists with Spotify Premium Musik abspielen und Playlisten synchronisieren mit Spotify Premium diff --git a/lang/tomahawk_en.ts b/lang/tomahawk_en.ts index 5d3a6a4e7..730a84a58 100644 --- a/lang/tomahawk_en.ts +++ b/lang/tomahawk_en.ts @@ -1670,12 +1670,12 @@ connect and stream from you? SpotifyPlaylistUpdater - + Delete in Spotify? Delete in Spotify? - + Would you like to delete the corresponding Spotify playlist as well? Would you like to delete the corresponding Spotify playlist as well? @@ -2050,7 +2050,7 @@ connect and stream from you? Tomahawk::Accounts::SpotifyAccountFactory - + Play music from and sync your playlists with Spotify Premium Play music from and sync your playlists with Spotify Premium diff --git a/lang/tomahawk_es.ts b/lang/tomahawk_es.ts index ef05d24ea..1e15f3b45 100644 --- a/lang/tomahawk_es.ts +++ b/lang/tomahawk_es.ts @@ -1668,12 +1668,12 @@ connect and stream from you? SpotifyPlaylistUpdater - + Delete in Spotify? ¿Borrar en Spotify? - + Would you like to delete the corresponding Spotify playlist as well? Quieres eliminar la lista de Spotify correspondiente, también? @@ -2048,7 +2048,7 @@ y estaciones basadas en sus gustos personales. Tomahawk::Accounts::SpotifyAccountFactory - + Play music from and sync your playlists with Spotify Premium Reproduce música de Spotofy Premium y sincroniza las listas de reprodución diff --git a/lang/tomahawk_fr.ts b/lang/tomahawk_fr.ts index 06f8fd658..278c8e8e0 100644 --- a/lang/tomahawk_fr.ts +++ b/lang/tomahawk_fr.ts @@ -1670,12 +1670,12 @@ de se connecter et streamer de vous? SpotifyPlaylistUpdater - + Delete in Spotify? Supprimer dans Spotify ? - + Would you like to delete the corresponding Spotify playlist as well? Voulez-vous aussi supprimer la liste de lecture correspondante dans Spotify ? @@ -2050,7 +2050,7 @@ et des stations basées sur vos goûts. Tomahawk::Accounts::SpotifyAccountFactory - + Play music from and sync your playlists with Spotify Premium Jouer la musique et synchroniser vos listes avec Spotify Premium diff --git a/lang/tomahawk_ja.ts b/lang/tomahawk_ja.ts index be1dce2b7..e662672b0 100644 --- a/lang/tomahawk_ja.ts +++ b/lang/tomahawk_ja.ts @@ -1670,12 +1670,12 @@ connect and stream from you? SpotifyPlaylistUpdater - + Delete in Spotify? Spotifyにも削除しますか? - + Would you like to delete the corresponding Spotify playlist as well? 同期のSpotifyのプレイリストも削除してもよろしいですか? @@ -2047,7 +2047,7 @@ connect and stream from you? Tomahawk::Accounts::SpotifyAccountFactory - + Play music from and sync your playlists with Spotify Premium diff --git a/lang/tomahawk_pl.ts b/lang/tomahawk_pl.ts index a3f712fe4..6184f3d42 100644 --- a/lang/tomahawk_pl.ts +++ b/lang/tomahawk_pl.ts @@ -1668,12 +1668,12 @@ connect and stream from you? SpotifyPlaylistUpdater - + Delete in Spotify? - + Would you like to delete the corresponding Spotify playlist as well? @@ -2049,7 +2049,7 @@ indywidualnego profilu gustu. Tomahawk::Accounts::SpotifyAccountFactory - + Play music from and sync your playlists with Spotify Premium diff --git a/lang/tomahawk_pt_BR.ts b/lang/tomahawk_pt_BR.ts index 363777d39..8be3fe8aa 100644 --- a/lang/tomahawk_pt_BR.ts +++ b/lang/tomahawk_pt_BR.ts @@ -1670,12 +1670,12 @@ se conecte e faça o stream de você? SpotifyPlaylistUpdater - + Delete in Spotify? Deletar no Spotify? - + Would you like to delete the corresponding Spotify playlist as well? Você também gostaria de deletar a playlist correspondente no Spotify? @@ -2050,7 +2050,7 @@ automáticas baseadas no seu gosto pessoal. Tomahawk::Accounts::SpotifyAccountFactory - + Play music from and sync your playlists with Spotify Premium Reproduzir e sincronizar suas playlists com o Spotify Premium diff --git a/lang/tomahawk_ru.ts b/lang/tomahawk_ru.ts index 2c4845ae2..2bd49de0c 100644 --- a/lang/tomahawk_ru.ts +++ b/lang/tomahawk_ru.ts @@ -1669,12 +1669,12 @@ connect and stream from you? SpotifyPlaylistUpdater - + Delete in Spotify? Удалить в Spotify? - + Would you like to delete the corresponding Spotify playlist as well? @@ -2046,7 +2046,7 @@ connect and stream from you? Tomahawk::Accounts::SpotifyAccountFactory - + Play music from and sync your playlists with Spotify Premium diff --git a/lang/tomahawk_sv.ts b/lang/tomahawk_sv.ts index bba5c941f..ad6f19cb3 100644 --- a/lang/tomahawk_sv.ts +++ b/lang/tomahawk_sv.ts @@ -1669,12 +1669,12 @@ connect and stream from you? SpotifyPlaylistUpdater - + Delete in Spotify? - + Would you like to delete the corresponding Spotify playlist as well? @@ -2046,7 +2046,7 @@ connect and stream from you? Tomahawk::Accounts::SpotifyAccountFactory - + Play music from and sync your playlists with Spotify Premium diff --git a/lang/tomahawk_tr.ts b/lang/tomahawk_tr.ts index 681b39316..2243d4b64 100644 --- a/lang/tomahawk_tr.ts +++ b/lang/tomahawk_tr.ts @@ -1668,12 +1668,12 @@ connect and stream from you? SpotifyPlaylistUpdater - + Delete in Spotify? - + Would you like to delete the corresponding Spotify playlist as well? @@ -2045,7 +2045,7 @@ connect and stream from you? Tomahawk::Accounts::SpotifyAccountFactory - + Play music from and sync your playlists with Spotify Premium diff --git a/lang/tomahawk_zh_CN.ts b/lang/tomahawk_zh_CN.ts index 9faac7e65..629cf3e86 100644 --- a/lang/tomahawk_zh_CN.ts +++ b/lang/tomahawk_zh_CN.ts @@ -1668,12 +1668,12 @@ connect and stream from you? SpotifyPlaylistUpdater - + Delete in Spotify? - + Would you like to delete the corresponding Spotify playlist as well? @@ -2045,7 +2045,7 @@ connect and stream from you? Tomahawk::Accounts::SpotifyAccountFactory - + Play music from and sync your playlists with Spotify Premium diff --git a/lang/tomahawk_zh_TW.ts b/lang/tomahawk_zh_TW.ts index 2c219358a..9366a8bbb 100644 --- a/lang/tomahawk_zh_TW.ts +++ b/lang/tomahawk_zh_TW.ts @@ -1668,12 +1668,12 @@ connect and stream from you? SpotifyPlaylistUpdater - + Delete in Spotify? - + Would you like to delete the corresponding Spotify playlist as well? @@ -2045,7 +2045,7 @@ connect and stream from you? Tomahawk::Accounts::SpotifyAccountFactory - + Play music from and sync your playlists with Spotify Premium From 14457750ff365955ba0065010836264e44bb143c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20Lindstr=C3=B6m?= Date: Thu, 19 Jul 2012 00:50:07 +0200 Subject: [PATCH 50/53] Send resulthint when we have it --- .../accounts/spotify/SpotifyPlaylistUpdater.cpp | 5 ++++- src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.h | 2 +- src/libtomahawk/resolvers/ScriptResolver.cpp | 2 ++ src/libtomahawk/utils/SpotifyParser.cpp | 7 +++++++ 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.cpp b/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.cpp index fff1c2f3b..e87530b71 100644 --- a/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.cpp +++ b/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.cpp @@ -1,6 +1,7 @@ /* === This file is part of Tomahawk Player - === * * Copyright 2010-2012, Leo Franchi + * Copyright 2012, Hugo Lindström * * Tomahawk is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -731,8 +732,10 @@ SpotifyPlaylistUpdater::variantToQueries( const QVariantList& list ) continue; if ( trackMap.contains( "id" ) ) + { + q->setResultHint( trackMap.value( "id" ).toString() ); q->setProperty( "annotation", trackMap.value( "id" ) ); - + } queries << q; } diff --git a/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.h b/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.h index c2ae2f5fa..a5f46d358 100644 --- a/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.h +++ b/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.h @@ -1,7 +1,7 @@ /* === This file is part of Tomahawk Player - === * * Copyright 2010-2012, Leo Franchi - * + * Copyright 2012, Hugo Lindström * Tomahawk is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or diff --git a/src/libtomahawk/resolvers/ScriptResolver.cpp b/src/libtomahawk/resolvers/ScriptResolver.cpp index ebfd79672..b1bdbd6e7 100644 --- a/src/libtomahawk/resolvers/ScriptResolver.cpp +++ b/src/libtomahawk/resolvers/ScriptResolver.cpp @@ -341,6 +341,8 @@ ScriptResolver::resolve( const Tomahawk::query_ptr& query ) QVariantMap m; m.insert( "_msgtype", "rq" ); + m.insert( "resultHint", query->resultHint() ); + if ( query->isFullTextQuery() ) { m.insert( "fulltext", query->fullTextQuery() ); diff --git a/src/libtomahawk/utils/SpotifyParser.cpp b/src/libtomahawk/utils/SpotifyParser.cpp index 877c811e9..e80db77ae 100644 --- a/src/libtomahawk/utils/SpotifyParser.cpp +++ b/src/libtomahawk/utils/SpotifyParser.cpp @@ -235,6 +235,9 @@ SpotifyParser::spotifyBrowseFinished() if ( q.isNull() ) continue; + tLog() << "Setting resulthint to " << trackResult.value( "trackuri" ); + q->setResultHint( trackResult.value("trackuri").toString() ); + m_tracks << q; } } @@ -298,7 +301,11 @@ SpotifyParser::spotifyTrackLookupFinished() Tomahawk::query_ptr q = Tomahawk::Query::get( artist, title, album, uuid(), m_trackMode ); if ( !q.isNull() ) + { + tLog() << "Setting resulthint to " << t.value( "trackuri" ); + q->setResultHint( t.value("trackuri").toString() ); m_tracks << q; + } } else { From 3f9046d61d465dcb380bedc3176f639194611ce0 Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Wed, 18 Jul 2012 17:17:09 -0400 Subject: [PATCH 51/53] Make sure to call spotifyaccount in main thread --- .../spotify/SpotifyPlaylistUpdater.cpp | 20 ++++++++++--------- .../accounts/spotify/SpotifyPlaylistUpdater.h | 3 +-- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.cpp b/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.cpp index e87530b71..e2c4ab252 100644 --- a/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.cpp +++ b/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.cpp @@ -133,16 +133,18 @@ SpotifyPlaylistUpdater::remove( bool askToDeletePlaylist ) void SpotifyPlaylistUpdater::aboutToDelete() { - if ( m_subscribed ) + if ( QThread::currentThread() != QApplication::instance()->thread() ) + QMetaObject::invokeMethod( const_cast(this), "aboutToDelete", Qt::BlockingQueuedConnection ); + else { - m_spotify.data()->setSubscribedForPlaylist( playlist(), false ); - } - else if ( m_sync ) - { - if ( QThread::currentThread() != QApplication::instance()->thread() ) - QMetaObject::invokeMethod( const_cast(this), "checkDeleteDialog", Qt::BlockingQueuedConnection ); - else - checkDeleteDialog(); + if ( m_subscribed ) + { + m_spotify.data()->setSubscribedForPlaylist( playlist(), false ); + } + else if ( m_sync ) + { + checkDeleteDialog(); + } } } diff --git a/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.h b/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.h index a5f46d358..095e76379 100644 --- a/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.h +++ b/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.h @@ -72,9 +72,8 @@ public slots: void tomahawkTracksMoved( const QList& ,int ); void tomahawkPlaylistRenamed( const QString&, const QString& ); -protected: void aboutToDelete(); - + private slots: // SpotifyResolver message handlers, all take msgtype, msg as argument void onTracksInsertedReturn( const QString& msgType, const QVariantMap& msg, const QVariant& extraData ); From f4f5750cd40c1a2f72fbcc4a0af478ea19ad6f38 Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Thu, 19 Jul 2012 08:53:44 -0400 Subject: [PATCH 52/53] Minor cleanup --- src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.h | 1 + src/libtomahawk/resolvers/ScriptResolver.cpp | 5 +++-- src/libtomahawk/utils/SpotifyParser.cpp | 6 +++--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.h b/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.h index 095e76379..b5de8e4b9 100644 --- a/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.h +++ b/src/libtomahawk/accounts/spotify/SpotifyPlaylistUpdater.h @@ -2,6 +2,7 @@ * * Copyright 2010-2012, Leo Franchi * Copyright 2012, Hugo Lindström + * * Tomahawk is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or diff --git a/src/libtomahawk/resolvers/ScriptResolver.cpp b/src/libtomahawk/resolvers/ScriptResolver.cpp index b1bdbd6e7..b5d5742cc 100644 --- a/src/libtomahawk/resolvers/ScriptResolver.cpp +++ b/src/libtomahawk/resolvers/ScriptResolver.cpp @@ -341,8 +341,6 @@ ScriptResolver::resolve( const Tomahawk::query_ptr& query ) QVariantMap m; m.insert( "_msgtype", "rq" ); - m.insert( "resultHint", query->resultHint() ); - if ( query->isFullTextQuery() ) { m.insert( "fulltext", query->fullTextQuery() ); @@ -355,6 +353,9 @@ ScriptResolver::resolve( const Tomahawk::query_ptr& query ) m.insert( "artist", query->artist() ); m.insert( "track", query->track() ); m.insert( "qid", query->id() ); + + if ( !query->resultHint().isEmpty() ) + m.insert( "resultHint", query->resultHint() ); } const QByteArray msg = m_serializer.serialize( QVariant( m ) ); diff --git a/src/libtomahawk/utils/SpotifyParser.cpp b/src/libtomahawk/utils/SpotifyParser.cpp index e80db77ae..d312934c2 100644 --- a/src/libtomahawk/utils/SpotifyParser.cpp +++ b/src/libtomahawk/utils/SpotifyParser.cpp @@ -236,7 +236,7 @@ SpotifyParser::spotifyBrowseFinished() continue; tLog() << "Setting resulthint to " << trackResult.value( "trackuri" ); - q->setResultHint( trackResult.value("trackuri").toString() ); + q->setResultHint( trackResult.value( "trackuri" ).toString() ); m_tracks << q; } @@ -302,8 +302,8 @@ SpotifyParser::spotifyTrackLookupFinished() Tomahawk::query_ptr q = Tomahawk::Query::get( artist, title, album, uuid(), m_trackMode ); if ( !q.isNull() ) { - tLog() << "Setting resulthint to " << t.value( "trackuri" ); - q->setResultHint( t.value("trackuri").toString() ); + q->setResultHint( t.value( "trackuri" ).toString() ); + m_tracks << q; } } From 7bb1eeb128c8137aed59698a786f60e5fa41c2e6 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Thu, 19 Jul 2012 19:15:47 +0200 Subject: [PATCH 53/53] * Added code-signing to OS X build scripts. --- admin/mac/build-release-osx.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/admin/mac/build-release-osx.sh b/admin/mac/build-release-osx.sh index 66cf4d648..5413399dc 100755 --- a/admin/mac/build-release-osx.sh +++ b/admin/mac/build-release-osx.sh @@ -45,6 +45,9 @@ VERSION=$1 header "Creating DMG" cd .. + header "Signing bundle" + codesign -s "Developer ID Application: Leonardo Franchi" -f -v ./Tomahawk.app + $ROOT/../admin/mac/create-dmg.sh Tomahawk.app mv Tomahawk.dmg Tomahawk-$VERSION.dmg