diff --git a/src/libtomahawk/Result.cpp b/src/libtomahawk/Result.cpp index de9e12be8..c863bd380 100644 --- a/src/libtomahawk/Result.cpp +++ b/src/libtomahawk/Result.cpp @@ -35,14 +35,15 @@ using namespace Tomahawk; -static QHash< QString, QWeakPointer< Result > > s_results; +static QHash< QString, result_wptr > s_results; static QMutex s_mutex; typedef QMap< QString, QPixmap > SourceIconCache; Q_GLOBAL_STATIC( SourceIconCache, sourceIconCache ); static QMutex s_sourceIconMutex; -inline QString sourceCacheKey( Resolver* resolver, const QSize& size, TomahawkUtils::ImageMode style ) +inline QString +sourceCacheKey( Resolver* resolver, const QSize& size, TomahawkUtils::ImageMode style ) { QString str; QTextStream stream( &str ); @@ -78,12 +79,9 @@ Result::isCached( const QString& url ) Result::Result( const QString& url ) : QObject() , m_url( url ) - , m_duration( 0 ) , m_bitrate( 0 ) , m_size( 0 ) - , m_albumpos( 0 ) , m_modtime( 0 ) - , m_discnumber( 0 ) , m_year( 0 ) , m_score( 0 ) , m_trackId( 0 ) @@ -95,6 +93,7 @@ Result::Result( const QString& url ) Result::~Result() { + tDebug( LOGVERBOSE ) << Q_FUNC_INFO << toString(); } @@ -112,6 +111,13 @@ Result::deleteLater() } +bool +Result::isValid() const +{ + return m_track && !m_track->artist().isEmpty() && !m_track->track().isEmpty(); +} + + void Result::onResolverRemoved( Tomahawk::Resolver* resolver ) { @@ -123,27 +129,6 @@ Result::onResolverRemoved( Tomahawk::Resolver* resolver ) } -artist_ptr -Result::artist() const -{ - return m_artist; -} - - -artist_ptr -Result::composer() const -{ - return m_composer; -} - - -album_ptr -Result::album() const -{ - return m_album; -} - - collection_ptr Result::collection() const { @@ -185,25 +170,39 @@ Result::isOnline() const } +bool +Result::playable() const +{ + if ( collection() ) + { + return collection()->source()->isOnline(); + } + else + { + return score() > 0.0; + } +} + + QVariant Result::toVariant() const { QVariantMap m; - m.insert( "artist", artist()->name() ); - m.insert( "album", album()->name() ); - m.insert( "track", track() ); + m.insert( "artist", m_track->artist() ); + m.insert( "album", m_track->album() ); + m.insert( "track", m_track->track() ); m.insert( "source", friendlySource() ); m.insert( "mimetype", mimetype() ); m.insert( "size", size() ); m.insert( "bitrate", bitrate() ); - m.insert( "duration", duration() ); + m.insert( "duration", m_track->duration() ); m.insert( "score", score() ); m.insert( "sid", id() ); - m.insert( "discnumber", discnumber() ); - m.insert( "albumpos", albumpos() ); + m.insert( "discnumber", m_track->discnumber() ); + m.insert( "albumpos", m_track->albumpos() ); - if ( !composer().isNull() ) - m.insert( "composer", composer()->name() ); + if ( !m_track->composer().isEmpty() ) + m.insert( "composer", m_track->composer() ); return m; } @@ -215,9 +214,9 @@ Result::toString() const return QString( "Result(%1, score: %2) %3 - %4%5 (%6)" ) .arg( id() ) .arg( score() ) - .arg( artist().isNull() ? QString() : artist()->name() ) - .arg( track() ) - .arg( album().isNull() || album()->name().isEmpty() ? "" : QString( " on %1" ).arg( album()->name() ) ) + .arg( track()->artist() ) + .arg( track()->track() ) + .arg( track()->album().isEmpty() ? "" : QString( " on %1" ).arg( track()->album() ) ) .arg( url() ); } @@ -227,25 +226,21 @@ Result::toQuery() { if ( m_query.isNull() ) { - m_query = Tomahawk::Query::get( artist()->name(), track(), album()->name() ); - - if ( m_query.isNull() ) + query_ptr query = Tomahawk::Query::get( m_track ); + if ( !query ) return query_ptr(); - m_query->setAlbumPos( albumpos() ); - m_query->setDiscNumber( discnumber() ); - m_query->setDuration( duration() ); - if ( !composer().isNull() ) - m_query->setComposer( composer()->name() ); + m_query = query->weakRef(); QList rl; rl << Result::get( m_url ); - m_query->addResults( rl ); - m_query->setResolveFinished( true ); + query->addResults( rl ); + query->setResolveFinished( true ); + return query; } - return m_query; + return m_query.toStrongRef(); } @@ -273,27 +268,6 @@ Result::onOffline() } -void -Result::setArtist( const Tomahawk::artist_ptr& artist ) -{ - m_artist = artist; -} - - -void -Result::setComposer( const Tomahawk::artist_ptr &composer ) -{ - m_composer = composer; -} - - -void -Result::setAlbum( const Tomahawk::album_ptr& album ) -{ - m_album = album; -} - - void Result::setCollection( const Tomahawk::collection_ptr& collection ) { @@ -391,6 +365,13 @@ Result::setResolvedBy( Tomahawk::Resolver* resolver ) void Result::doneEditing() { - m_query.clear(); +// m_query.clear(); emit updated(); } + + +track_ptr +Result::track() const +{ + return m_track; +} diff --git a/src/libtomahawk/Result.h b/src/libtomahawk/Result.h index f230a9b9b..45587f592 100644 --- a/src/libtomahawk/Result.h +++ b/src/libtomahawk/Result.h @@ -27,6 +27,7 @@ #include #include "utils/TomahawkUtils.h" +#include "Track.h" #include "Typedefs.h" #include "DllMacro.h" @@ -57,6 +58,8 @@ public: static bool isCached( const QString& url ); virtual ~Result(); + bool isValid() const; + QVariant toVariant() const; QString toString() const; Tomahawk::query_ptr toQuery(); @@ -67,12 +70,9 @@ public: float score() const; RID id() const; bool isOnline() const; + bool playable() const; collection_ptr collection() const; - Tomahawk::artist_ptr artist() const; - Tomahawk::album_ptr album() const; - Tomahawk::artist_ptr composer() const; - QString track() const { return m_track; } QString url() const { return m_url; } QString mimetype() const { return m_mimetype; } QString friendlySource() const; @@ -81,13 +81,10 @@ public: QPixmap sourceIcon( TomahawkUtils::ImageMode style, const QSize& desiredSize = QSize() ) const; - unsigned int duration() const { return m_duration; } unsigned int bitrate() const { return m_bitrate; } unsigned int size() const { return m_size; } - unsigned int albumpos() const { return m_albumpos; } unsigned int modificationTime() const { return m_modtime; } int year() const { return m_year; } - unsigned int discnumber() const { return m_discnumber; } void setScore( float score ) { m_score = score; } void setTrackId( unsigned int id ) { m_trackId = id; } @@ -97,18 +94,13 @@ public: void setFriendlySource( const QString& s ) { m_friendlySource = s; } void setPurchaseUrl( const QString& u ) { m_purchaseUrl = u; } void setLinkUrl( const QString& u ) { m_linkUrl = u; } - void setArtist( const Tomahawk::artist_ptr& artist ); - void setAlbum( const Tomahawk::album_ptr& album ); - void setComposer( const Tomahawk::artist_ptr& composer ); - void setTrack( const QString& track ) { m_track = track; } void setMimetype( const QString& mimetype ) { m_mimetype = mimetype; } - void setDuration( unsigned int duration ) { m_duration = duration; } void setBitrate( unsigned int bitrate ) { m_bitrate = bitrate; } void setSize( unsigned int size ) { m_size = size; } - void setAlbumPos( unsigned int albumpos ) { m_albumpos = albumpos; } void setModificationTime( unsigned int modtime ) { m_modtime = modtime; } void setYear( unsigned int year ) { m_year = year; } - void setDiscNumber( unsigned int discnumber ) { m_discnumber = discnumber; } + + void setTrack( const track_ptr& track ) { m_track = track; } QVariantMap attributes() const { return m_attributes; } void setAttributes( const QVariantMap& map ) { m_attributes = map; updateAttributes(); } @@ -116,6 +108,8 @@ public: unsigned int trackId() const { return m_trackId; } unsigned int fileId() const { return m_fileId; } + track_ptr track() const; + public slots: void deleteLater(); @@ -140,30 +134,25 @@ private: mutable RID m_rid; collection_ptr m_collection; - Tomahawk::query_ptr m_query; QPointer< Tomahawk::Resolver > m_resolvedBy; - Tomahawk::artist_ptr m_artist; - Tomahawk::album_ptr m_album; - Tomahawk::artist_ptr m_composer; - QString m_track; QString m_url; QString m_purchaseUrl; QString m_linkUrl; QString m_mimetype; QString m_friendlySource; - unsigned int m_duration; unsigned int m_bitrate; unsigned int m_size; - unsigned int m_albumpos; unsigned int m_modtime; - unsigned int m_discnumber; int m_year; float m_score; QVariantMap m_attributes; unsigned int m_trackId, m_fileId; + + track_ptr m_track; + query_wptr m_query; }; } //ns