void ScrobblerAdapter::copyTrackMetadata( lastfm::MutableTrack &to, const Meta::TrackPtr &track ) { to.setTitle( track->name() ); QString artistOrComposer; Meta::ComposerPtr composer = track->composer(); if( m_config->scrobbleComposer() && composer ) artistOrComposer = composer->name(); Meta::ArtistPtr artist = track->artist(); if( artistOrComposer.isEmpty() && artist ) artistOrComposer = artist->name(); to.setArtist( artistOrComposer ); Meta::AlbumPtr album = track->album(); Meta::ArtistPtr albumArtist; if( album ) { to.setAlbum( album->name() ); albumArtist = album->hasAlbumArtist() ? album->albumArtist() : Meta::ArtistPtr(); } if( albumArtist ) to.setAlbumArtist( albumArtist->name() ); to.setDuration( track->length() / 1000 ); if( track->trackNumber() >= 0 ) to.setTrackNumber( track->trackNumber() ); lastfm::Track::Source source = lastfm::Track::Player; if( track->type() == "stream/lastfm" ) source = lastfm::Track::LastFmRadio; else if( track->type().startsWith( "stream" ) ) source = lastfm::Track::NonPersonalisedBroadcast; else if( track->collection() && track->collection()->collectionId() != "localCollection" ) source = lastfm::Track::MediaDevice; to.setSource( source ); }
void ITunesImporterWorker::readTrackElement() { QString title, artist, album, url; int year = -1, bpm = -1, playcount = -1, rating = -1; QDateTime lastplayed; while( !( isEndElement() && name() == "dict" ) ) { readNext(); QString text = readElementText(); if( name() == "key" && text == "Name" ) { readNext(); // skip past the </key> and to the data tag QString text = readElementText(); title = text; } else if( name() == "key" && text == "Artist" ) { readNext(); // skip past the </key> and to the data tag artist = readElementText(); } else if( isStartElement() && name() == "key" && text == "Album" ) { readNext(); // skip past the </key> and to the data tag album = readElementText(); } else if( name() == "key" && text == "Year" ) { readNext(); // skip past the </key> and to the data tag year = readElementText().toInt(); } else if( name() == "key" && text == "BPM" ) { readNext(); // skip past the </key> and to the data tag bpm = readElementText().toInt(); } else if( name() == "key" && text == "Play Count" ) { readNext(); // skip past the </key> and to the data tag playcount = readElementText().toInt(); } else if( name() == "key" && text == "Rating" ) { readNext(); // skip past the </key> and to the data tag rating = readElementText().toInt() / 10; // itunes rates 0-100 } else if( name() == "key" && text == "Play Date" ) { readNext(); // skip past the </key> and to the data tag lastplayed = QDateTime::fromTime_t(readElementText().toInt()); } else if( name() == "key" && text == "Location" ) { readNext(); // skip past the </key> and to the data tag url = readElementText(); } } //split the file://localhost/path/to/track to just file:///path/to/track if( url.indexOf( "file://localhost" ) == 0 ) url = url.remove( 7, 9 ); debug() << "got track info:" << title << artist << album << year << bpm << url; Meta::TrackPtr track = CollectionManager::instance()->trackForUrl( KUrl( url ) ); if( track ) { QScopedPointer<Capabilities::StatisticsCapability> ec( track->create<Capabilities::StatisticsCapability>() ); if( ec ) { ec->beginStatisticsUpdate(); if( rating != -1 ) ec->setRating( rating ); if( lastplayed.isValid() ) ec->setLastPlayed( lastplayed ); if( playcount != -1 ) ec->setPlayCount( playcount ); ec->endStatisticsUpdate(); if( !track->inCollection() ) { m_tracksForInsert.insert( track, track->playableUrl().url() ); debug() << " inserting track:" << track->playableUrl(); } else { Collections::Collection* collection = track->collection(); if (collection) debug() << "track in collection (" << collection->location()->prettyLocation() << "):" << track->playableUrl(); } emit trackAdded( track ); } } }