예제 #1
0
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();
    
//    qDebug() << "trying to load entries:" << m_revguid;
    QString prevrev;
    QJson::Parser parser; bool ok;
    
    if( query_entries.next() )
    {
        // entries should be a list of strings:
        QVariant v = parser.parse( 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 );
        //qDebug() << sql;
        
        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();
            e->setResultHint( query.value( 8 ).toString() );
            
            Tomahawk::query_ptr q = Tomahawk::Query::get( query.value( 2 ).toString(), query.value( 1 ).toString(), query.value( 3 ).toString() );
            q->setResultHint( query.value( 8 ).toString() );
            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 );
        }
        
        QVariant v = parser.parse( 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;
}