TrackList ArtistMatcher::match( Collections::MemoryCollection *memColl ) { if( !m_artist || !memColl ) return TrackList(); if( !memColl->artistMap().contains( m_artist->name() ) ) return TrackList(); ArtistPtr artist = memColl->artistMap().value( m_artist->name() ); TrackList matchingTracks; switch( m_queryMode ) { case Collections::QueryMaker::AlbumOrTrackArtists: case Collections::QueryMaker::AlbumArtists: foreach( AlbumPtr album, memColl->albumMap().values() ) if( album->albumArtist() == artist ) matchingTracks.append( album->tracks() ); if( m_queryMode != Collections::QueryMaker::AlbumOrTrackArtists ) break; case Collections::QueryMaker::TrackArtists: matchingTracks.append( artist->tracks() ); } if( isLast() || matchingTracks.isEmpty() ) return matchingTracks; else return next()->match( matchingTracks ); }
void JamendoInfoParser::getInfo(ArtistPtr artist) { DEBUG_BLOCK JamendoArtist * jamendoArtist = dynamic_cast<JamendoArtist *> ( artist.data() ); if ( jamendoArtist == 0) return; QString description = jamendoArtist->description(); if ( description.isEmpty() ) description = i18n( "No description available..." ); QString infoHtml = "<HTML><HEAD><META HTTP-EQUIV=\"Content-Type\" " "CONTENT=\"text/html; charset=utf-8\"></HEAD><BODY>"; infoHtml += "<div align=\"center\">"; infoHtml += i18n( "Artist" ) + "<br><br>"; infoHtml += "<strong>"; infoHtml += jamendoArtist->prettyName(); infoHtml += "</strong><br><br><em>"; if ( !jamendoArtist->photoURL().isEmpty() ) infoHtml += "<img src=\"" + jamendoArtist->photoURL() + "\" align=\"middle\" border=\"1\"><br><br>"; infoHtml += description; infoHtml += "<br><br>" + i18n( "From Jamendo.com" ) + "</div>"; infoHtml += "</BODY></HTML>"; emit( info( infoHtml ) ); }
AlbumPtr ServiceSqlRegistry::getAlbum( const QStringList &rowData ) { int id = rowData[0].toInt(); QMutexLocker locker( &m_albumMutex ); if( m_albumMap.contains( id ) ) return m_albumMap.value( id ); else { int index = 0; QStringList testString = rowData.mid( index, m_metaFactory->getAlbumSqlRowCount() ); AlbumPtr albumPtr = m_metaFactory->createAlbum( rowData.mid(index, m_metaFactory->getAlbumSqlRowCount() ) ); m_albumMap.insert( id, albumPtr ); index += m_metaFactory->getAlbumSqlRowCount(); ServiceAlbum* album = static_cast<ServiceAlbum *> ( albumPtr.data() ); ArtistPtr artistPtr; // we need to set the artist for this album if ( m_artistMap.contains( album->artistId() ) ) artistPtr = m_artistMap.value( album->artistId() ); else { QStringList subRows = rowData.mid(index, m_metaFactory->getArtistSqlRowCount() ); artistPtr = m_metaFactory->createArtist( subRows ); } index += m_metaFactory->getArtistSqlRowCount(); ServiceArtist * artist = static_cast<ServiceArtist *> ( artistPtr.data() ); album->setAlbumArtist( artistPtr ); m_artistMap.insert( artist->id(), artistPtr ); return albumPtr; } }
void MagnatuneInfoParser::getInfo(ArtistPtr artist) { showLoading( i18n( "Loading artist info..." ) ); MagnatuneArtist * magnatuneArtist = dynamic_cast<MagnatuneArtist *>( artist.data() ); if ( magnatuneArtist == 0) return; debug() << "MagnatuneInfoParser: getInfo about artist"; // first get the entire artist html page /* QString tempFile; QString orgHtml;*/ m_infoDownloadJob = KIO::storedGet( magnatuneArtist->magnatuneUrl(), KIO::Reload, KIO::HideProgressInfo ); Amarok::Components::logger()->newProgressOperation( m_infoDownloadJob, i18n( "Fetching %1 Artist Info", magnatuneArtist->prettyName() ) ); connect( m_infoDownloadJob, SIGNAL(result(KJob *)), SLOT( artistInfoDownloadComplete( KJob*) ) ); }
TrackPtr ServiceSqlRegistry::getTrack( const QStringList &rowData ) { //test if rowData is the correct length int correctLength = m_metaFactory->getTrackSqlRowCount() + m_metaFactory->getAlbumSqlRowCount() + m_metaFactory->getArtistSqlRowCount() + m_metaFactory->getGenreSqlRowCount(); if ( rowData.size() != correctLength ) return Meta::TrackPtr(); int id = rowData[0].toInt(); QMutexLocker locker( &m_trackMutex ); if( m_trackMap.contains( id ) ) { return m_trackMap.value( id ); } else { int index = 0; TrackPtr trackPtr = m_metaFactory->createTrack( rowData.mid(index, m_metaFactory->getTrackSqlRowCount() ) ); index += m_metaFactory->getTrackSqlRowCount(); ServiceTrack * track = static_cast<ServiceTrack *> ( trackPtr.data() ); AlbumPtr albumPtr; if ( m_albumMap.contains( track->albumId() ) ) albumPtr = m_albumMap.value( track->albumId() ); else albumPtr = getAlbum( rowData.mid( index, rowData.count() -1 ) ); index += m_metaFactory->getAlbumSqlRowCount(); ServiceAlbum * album = static_cast<ServiceAlbum *> ( albumPtr.data() ); album->addTrack( trackPtr ); track->setAlbumPtr( albumPtr ); m_albumMap.insert( track->albumId(), albumPtr ); ArtistPtr artistPtr; if ( m_artistMap.contains( track->artistId() ) ) artistPtr = m_artistMap.value( track->artistId() ); else { QStringList subRows = rowData.mid(index, m_metaFactory->getArtistSqlRowCount() ); artistPtr = m_metaFactory->createArtist( subRows ); } index += m_metaFactory->getArtistSqlRowCount(); ServiceArtist * artist = static_cast<ServiceArtist *> ( artistPtr.data() ); artist->addTrack( trackPtr ); track->setArtist( artistPtr ); m_artistMap.insert( track->artistId(), artistPtr ); GenrePtr genrePtr; int genreId = rowData[index].toInt(); if( m_genreMap.contains( genreId ) ) genrePtr = m_genreMap.value( genreId ); else genrePtr = m_metaFactory->createGenre( rowData.mid(index, m_metaFactory->getGenreSqlRowCount() ) ); ServiceGenre * genre = dynamic_cast<ServiceGenre *> ( genrePtr.data() ); Q_ASSERT( genre ); if( genre ) genre->addTrack( trackPtr ); track->setGenre( genrePtr ); m_genreMap.insert( genreId, genrePtr ); m_trackMap.insert( id, trackPtr ); return trackPtr; } }
void ScriptableServiceInfoParser::getInfo( ArtistPtr artist ) { ScriptableServiceArtist * serviceArtist = dynamic_cast< ScriptableServiceArtist * >( artist.data() ); if (serviceArtist == 0) return; emit( info( serviceArtist->description() ) ); if ( serviceArtist->description().isEmpty() ) { showLoading( i18n( "Loading info..." ) ); ScriptManager::instance()->ServiceScriptRequestInfo( m_serviceName, serviceArtist->level(), serviceArtist->callbackString() ); } //FIXME: when out of string freeze, add a "fething info" comment instead of just useing blank info }