diff --git a/src/libtomahawk/database/databasecommand_logplayback.cpp b/src/libtomahawk/database/databasecommand_logplayback.cpp index 8022227d6..d33723ff2 100644 --- a/src/libtomahawk/database/databasecommand_logplayback.cpp +++ b/src/libtomahawk/database/databasecommand_logplayback.cpp @@ -26,14 +26,16 @@ #include "network/servent.h" #include "utils/logger.h" +#define STARTED_THRESHOLD 600 // Don't advertise tracks older than X seconds as currently playing +#define FINISHED_THRESHOLD 10 // Don't store tracks played less than X seconds in the playback log +#define SUBMISSION_THRESHOLD 20 // Don't broadcast playback logs when a track was played less than X seconds + using namespace Tomahawk; void DatabaseCommand_LogPlayback::postCommitHook() { - qDebug() << Q_FUNC_INFO; - connect( this, SIGNAL( trackPlaying( Tomahawk::query_ptr ) ), source().data(), SLOT( onPlaybackStarted( Tomahawk::query_ptr ) ), Qt::QueuedConnection ); connect( this, SIGNAL( trackPlayed( Tomahawk::query_ptr ) ), @@ -53,13 +55,11 @@ DatabaseCommand_LogPlayback::postCommitHook() if ( m_action == Finished ) { - tDebug( LOGEXTRA ) << Q_FUNC_INFO << " logging finished from source " << source().data()->id(); emit trackPlayed( q ); } // if the play time is more than 10 minutes in the past, ignore - else if ( m_action == Started && QDateTime::fromTime_t( playtime() ).secsTo( QDateTime::currentDateTime() ) < 600 ) + else if ( m_action == Started && QDateTime::fromTime_t( playtime() ).secsTo( QDateTime::currentDateTime() ) < STARTED_THRESHOLD ) { - tDebug( LOGEXTRA ) << Q_FUNC_INFO << " logging started from source " << source().data()->id(); emit trackPlaying( q ); } @@ -73,12 +73,11 @@ DatabaseCommand_LogPlayback::postCommitHook() void DatabaseCommand_LogPlayback::exec( DatabaseImpl* dbi ) { - qDebug() << Q_FUNC_INFO; Q_ASSERT( !source().isNull() ); if ( m_action != Finished ) return; - if ( m_secsPlayed < 10 ) + if ( m_secsPlayed < FINISHED_THRESHOLD ) return; TomahawkSqlQuery query = dbi->newquery(); @@ -86,9 +85,7 @@ DatabaseCommand_LogPlayback::exec( DatabaseImpl* dbi ) "VALUES (?, ?, ?, ?)" ); QVariant srcid = source()->isLocal() ? QVariant( QVariant::Int ) : source()->id(); - qDebug() << "Logging playback of" << m_artist << "-" << m_track << "for source" << srcid; - query.bindValue( 0, srcid ); bool autoCreate = true; @@ -113,7 +110,7 @@ bool DatabaseCommand_LogPlayback::localOnly() const { if ( m_action == Finished ) - return m_secsPlayed < 20; + return m_secsPlayed < SUBMISSION_THRESHOLD; return false; } diff --git a/src/libtomahawk/source.cpp b/src/libtomahawk/source.cpp index 4e51f62af..c016a5e8d 100644 --- a/src/libtomahawk/source.cpp +++ b/src/libtomahawk/source.cpp @@ -42,6 +42,7 @@ Source::Source( int id, const QString& username ) , m_online( false ) , m_username( username ) , m_id( id ) + , m_state( DBSyncConnection::UNKNOWN ) , m_cc( 0 ) , m_avatar( 0 ) , m_fancyAvatar( 0 ) @@ -256,6 +257,7 @@ Source::onStateChanged( DBSyncConnection::State newstate, DBSyncConnection::Stat msg = QString(); } + m_state = newstate; m_textStatus = msg; emit stateChanged(); } @@ -301,6 +303,7 @@ Source::onPlaybackFinished( const Tomahawk::query_ptr& query ) m_currentTrackTimer.start(); } + void Source::trackTimerFired() { @@ -309,6 +312,7 @@ Source::trackTimerFired() emit stateChanged(); } + void Source::reportSocialAttributesChanged( DatabaseCommand_SocialAction* action ) { diff --git a/src/libtomahawk/source.h b/src/libtomahawk/source.h index 1e60f7fb7..84a4ad571 100644 --- a/src/libtomahawk/source.h +++ b/src/libtomahawk/source.h @@ -77,6 +77,7 @@ public: Tomahawk::query_ptr currentTrack() const { return m_currentTrack; } QString textStatus() const { return m_textStatus; } + DBSyncConnection::State state() const { return m_state; } Tomahawk::playlistinterface_ptr getPlaylistInterface(); @@ -133,6 +134,7 @@ private: Tomahawk::query_ptr m_currentTrack; QString m_textStatus; + DBSyncConnection::State m_state; QTimer m_currentTrackTimer; ControlConnection* m_cc; diff --git a/src/libtomahawk/widgets/welcomewidget.cpp b/src/libtomahawk/widgets/welcomewidget.cpp index 8bb342503..c218f9489 100644 --- a/src/libtomahawk/widgets/welcomewidget.cpp +++ b/src/libtomahawk/widgets/welcomewidget.cpp @@ -148,7 +148,35 @@ WelcomeWidget::checkQueries() void WelcomeWidget::onPlaybackFinished( const Tomahawk::query_ptr& query ) { - m_tracksModel->insert( 0, query ); + int count = m_tracksModel->trackCount(); + int playtime = query->playedBy().second; + + if ( count ) + { + TrackModelItem* oldestItem = m_tracksModel->itemFromIndex( m_tracksModel->index( count - 1, 0, QModelIndex() ) ); + if ( oldestItem->query()->playedBy().second >= playtime ) + return; + + TrackModelItem* youngestItem = m_tracksModel->itemFromIndex( m_tracksModel->index( 0, 0, QModelIndex() ) ); + if ( youngestItem->query()->playedBy().second <= playtime ) + m_tracksModel->insert( 0, query ); + else + { + for ( int i = 0; i < count - 1; i++ ) + { + TrackModelItem* item1 = m_tracksModel->itemFromIndex( m_tracksModel->index( i, 0, QModelIndex() ) ); + TrackModelItem* item2 = m_tracksModel->itemFromIndex( m_tracksModel->index( i + 1, 0, QModelIndex() ) ); + + if ( item1->query()->playedBy().second >= playtime && item2->query()->playedBy().second <= playtime ) + { + m_tracksModel->insert( i + 1, query ); + break; + } + } + } + } + else + m_tracksModel->insert( 0, query ); if ( m_tracksModel->trackCount() > HISTORY_TRACK_ITEMS ) m_tracksModel->remove( HISTORY_TRACK_ITEMS ); @@ -162,8 +190,6 @@ WelcomeWidget::onPlaybackFinished( const Tomahawk::query_ptr& query ) void WelcomeWidget::onPlaylistActivated( const QModelIndex& item ) { - qDebug() << Q_FUNC_INFO; - Tomahawk::playlist_ptr pl = item.data( RecentlyPlayedPlaylistsModel::PlaylistRole ).value< Tomahawk::playlist_ptr >(); if( Tomahawk::dynplaylist_ptr dynplaylist = pl.dynamicCast< Tomahawk::DynamicPlaylist >() ) ViewManager::instance()->show( dynplaylist ); diff --git a/src/sourcetree/sourcedelegate.cpp b/src/sourcetree/sourcedelegate.cpp index bc8ec48ad..992e7f8c9 100644 --- a/src/sourcetree/sourcedelegate.cpp +++ b/src/sourcetree/sourcedelegate.cpp @@ -396,7 +396,8 @@ SourceDelegate::editorEvent ( QEvent* event, QAbstractItemModel* model, const QS if ( r.contains( ev->pos() ) ) gpi->removeFromList(); - } else if ( type == SourcesModel::Collection ) + } + else if ( type == SourcesModel::Collection ) { CollectionItem* colItem = qobject_cast< CollectionItem* >( index.data( SourcesModel::SourceTreeItemRole ).value< SourceTreeItem* >() ); Q_ASSERT( colItem );