void M3uLoader::getTags( const QFileInfo& info ) { QByteArray fileName = QFile::encodeName( info.canonicalFilePath() ); const char *encodedName = fileName.constData(); TagLib::FileRef f( encodedName ); if( f.isNull() ) return; TagLib::Tag *tag = f.tag(); if( !tag ) return; QString artist = TStringToQString( tag->artist() ).trimmed(); QString album = TStringToQString( tag->album() ).trimmed(); QString track = TStringToQString( tag->title() ).trimmed(); if ( artist.isEmpty() || track.isEmpty() ) { qDebug() << "Error parsing" << info.fileName(); return; } else { qDebug() << Q_FUNC_INFO << artist << track << album; Tomahawk::query_ptr q = Tomahawk::Query::get( artist, track, album, uuid(), !m_createNewPlaylist ); if ( !q.isNull() ) { q->setResultHint( "file://" + info.absoluteFilePath() ); q->setSaveHTTPResultHint( true ); qDebug() << "Adding resulthint" << q->resultHint(); m_tracks << q; } } }
void DatabaseCommand_LoadPlaylistEntries::generateEntries( DatabaseImpl* dbi ) { TomahawkSqlQuery query_entries = dbi->newquery(); query_entries.prepare( "SELECT entries, playlist, author, timestamp, previous_revision " "FROM playlist_revision " "WHERE guid = :guid" ); query_entries.bindValue( ":guid", m_revguid ); query_entries.exec(); tLog( LOGVERBOSE ) << "trying to load playlist entries for guid:" << m_revguid; QString prevrev; bool ok; if ( query_entries.next() ) { if ( !query_entries.value( 0 ).isNull() ) { // entries should be a list of strings: QVariant v = TomahawkUtils::parseJson( query_entries.value( 0 ).toByteArray(), &ok ); Q_ASSERT( ok && v.type() == QVariant::List ); //TODO m_guids = v.toStringList(); QString inclause = QString( "('%1')" ).arg( m_guids.join( "', '" ) ); TomahawkSqlQuery query = dbi->newquery(); QString sql = QString( "SELECT guid, trackname, artistname, albumname, annotation, " "duration, addedon, addedby, result_hint " "FROM playlist_item " "WHERE guid IN %1" ).arg( inclause ); query.exec( sql ); while ( query.next() ) { plentry_ptr e( new PlaylistEntry ); e->setGuid( query.value( 0 ).toString() ); e->setAnnotation( query.value( 4 ).toString() ); e->setDuration( query.value( 5 ).toUInt() ); e->setLastmodified( 0 ); // TODO e->lastmodified = query.value( 6 ).toInt(); const QString resultHint = query.value( 8 ).toString(); e->setResultHint( resultHint ); Tomahawk::query_ptr q = Tomahawk::Query::get( query.value( 2 ).toString(), query.value( 1 ).toString(), query.value( 3 ).toString() ); if ( q.isNull() ) continue; q->setResultHint( resultHint ); if ( resultHint.startsWith( "http" ) ) q->setSaveHTTPResultHint( true ); q->setProperty( "annotation", e->annotation() ); e->setQuery( q ); m_entrymap.insert( e->guid(), e ); } } prevrev = query_entries.value( 4 ).toString(); } else { // qDebug() << "Playlist has no current revision data"; } if ( prevrev.length() ) { TomahawkSqlQuery query_entries_old = dbi->newquery(); query_entries_old.prepare( "SELECT entries, " "(SELECT currentrevision = ? FROM playlist WHERE guid = ?) " "FROM playlist_revision " "WHERE guid = ?" ); query_entries_old.addBindValue( m_revguid ); query_entries_old.addBindValue( query_entries.value( 1 ).toString() ); query_entries_old.addBindValue( prevrev ); query_entries_old.exec(); if ( !query_entries_old.next() ) { return; Q_ASSERT( false ); } if ( !query_entries_old.value( 0 ).isNull() ) { QVariant v = TomahawkUtils::parseJson( query_entries_old.value( 0 ).toByteArray(), &ok ); Q_ASSERT( ok && v.type() == QVariant::List ); //TODO m_oldentries = v.toStringList(); } m_islatest = query_entries_old.value( 1 ).toBool(); } // qDebug() << Q_FUNC_INFO << "entrymap:" << m_entrymap; }