⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 contextbrowser.cpp

📁 Amarok是一款在LINUX或其他类UNIX操作系统中运行的音频播放器软件。 经过两年开发后
💻 CPP
📖 第 1 页 / 共 5 页
字号:
{    QueryBuilder qb;    qb.clear(); //Song count    qb.addReturnFunctionValue( QueryBuilder::funcCount, QueryBuilder::tabSong, QueryBuilder::valURL );    qb.setOptions( QueryBuilder::optRemoveDuplicates );    QStringList a = qb.run();    QString songCount = a[0];    qb.clear(); //Artist count    //qb.addReturnFunctionValue( QueryBuilder::funcCount, QueryBuilder::tabArtist, QueryBuilder::valID );    //qb.setOptions( QueryBuilder::optRemoveDuplicates );    //a = qb.run();    //QString artistCount = a[0];    qb.setOptions( QueryBuilder::optRemoveDuplicates );    qb.addReturnValue( QueryBuilder::tabSong, QueryBuilder::valArtistID );    //I can't get the correct value w/o suing a subquery, and querybuilder doesn't support those    QString artistCount = QString::number( qb.run().count() );    qb.clear(); //Album count    //qb.addReturnFunctionValue( QueryBuilder::funcCount, QueryBuilder::tabAlbum, QueryBuilder::valID );    //qb.setOptions( QueryBuilder::optRemoveDuplicates );    //a = qb.run();    //QString albumCount = a[0];    qb.setOptions( QueryBuilder::optRemoveDuplicates );    qb.addReturnValue( QueryBuilder::tabSong, QueryBuilder::valAlbumID );    QString albumCount = QString::number( qb.run().count() );    qb.clear(); //Genre count    //qb.addReturnFunctionValue( QueryBuilder::funcCount, QueryBuilder::tabGenre, QueryBuilder::valID );    //qb.setOptions( QueryBuilder::optRemoveDuplicates );    //a = qb.run();    //QString genreCount = a[0];    qb.setOptions( QueryBuilder::optRemoveDuplicates );    qb.addReturnValue( QueryBuilder::tabSong, QueryBuilder::valGenreID );    QString genreCount = QString::number( qb.run().count() );    qb.clear(); //Total Playtime    qb.addReturnFunctionValue( QueryBuilder::funcSum, QueryBuilder::tabSong, QueryBuilder::valLength );    a = qb.run();    QString playTime = MetaBundle::fuzzyTime( a[0].toInt() );    m_HTMLSource.append(            QStringx(                "<div id='introduction_box' class='box'>\n"                "<div id='introduction_box-header-title' class='box-header'>\n"                "<span id='introduction_box-header-title' class='box-header-title'>\n"                + i18n( "No Track Playing" ) +                "</span>\n"                "</div>\n"                "<table id='current_box-table' class='box-body' width='100%' cellpadding='0' cellspacing='0'>\n"                "<tr>\n"                "<td id='current_box-largecover-td'>\n"                "<a href='%1'><img id='current_box-largecover-image' src='%2' title='Amarok'></a>\n"                "</td>\n"                "<td id='current_box-information-td' align='right'>\n"                "<span>%3</span><br />\n"                "<span>%4</span><br />\n"                "<span>%5</span><br />\n"                "<span>%6</span><br />\n"                "<span>%7</span><br />\n"                "</td>\n"                "</tr>\n"                "</table>\n"                "</div>\n" )            .args( QStringList()                    << escapeHTMLAttr( "externalurl://amarok.kde.org" )                    << escapeHTMLAttr( m_amarokIconPath )                    << i18n( "1 Track",  "%n Tracks",  songCount.toInt() )                    << i18n( "1 Artist", "%n Artists", artistCount.toInt() )                    << i18n( "1 Album",  "%n Albums",  albumCount.toInt() )                    << i18n( "1 Genre",  "%n Genres",  genreCount.toInt() )                    << i18n( "%1 Play-time" ).arg ( playTime ) ) );    m_shownAlbums = showHomeByAlbums();    m_HTMLSource.append(            "</div></body></html>\n");}voidCurrentTrackJob::constructHTMLAlbums( const QStringList &reqResult, QString &htmlCode, const QString &stID ){    // This function create the html code used to display a list of albums. Each album    // is a 'toggleable' block.    // Parameter stID is used to differentiate same albums in different album list. So if this function    // is called multiple time in the same HTML code, stID must be different.    for ( uint i = 0; i < reqResult.count(); i += 4 )    {        QueryBuilder qb;        qb.clear();        qb.addReturnValue( QueryBuilder::tabSong, QueryBuilder::valTitle );        qb.addReturnValue( QueryBuilder::tabSong, QueryBuilder::valURL );        qb.addReturnValue( QueryBuilder::tabSong, QueryBuilder::valTrack );        qb.addReturnValue( QueryBuilder::tabYear, QueryBuilder::valName );        qb.addReturnValue( QueryBuilder::tabSong, QueryBuilder::valLength );        qb.addReturnValue( QueryBuilder::tabArtist, QueryBuilder::valName );        qb.addReturnValue( QueryBuilder::tabArtist, QueryBuilder::valID );        qb.addReturnValue( QueryBuilder::tabSong, QueryBuilder::valDiscNumber );        qb.addMatch( QueryBuilder::tabSong, QueryBuilder::valAlbumID, reqResult[i+1] );        qb.addMatch( QueryBuilder::tabSong, QueryBuilder::valArtistID, reqResult[i+3] );        qb.sortBy( QueryBuilder::tabSong, QueryBuilder::valDiscNumber );        qb.sortBy( QueryBuilder::tabSong, QueryBuilder::valTrack );        qb.sortBy( QueryBuilder::tabSong, QueryBuilder::valTitle );        qb.setOptions( QueryBuilder::optNoCompilations ); // samplers __need__ to be handled differently        QStringList albumValues = qb.run();        QString albumYear;        if ( !albumValues.isEmpty() )        {            albumYear = albumValues[ 3 ];            for ( uint j = 0; j < albumValues.count(); j += qb.countReturnValues())                if ( albumValues[j + 3] != albumYear || albumYear == "0" )                {                    albumYear = QString::null;                    break;                }        }        uint i_albumLength = 0;        for ( uint j = 0; j < albumValues.count(); j += qb.countReturnValues() )            i_albumLength += QString(albumValues[j + 4]).toInt();        QString albumLength = ( i_albumLength==0 ? i18n( "Unknown" ) : MetaBundle::prettyTime( i_albumLength, true ) );        htmlCode.append( QStringx (                    "<tr class='" + QString( (i % 4) ? "box-row-alt" : "box-row" ) + "'>\n"                    "<td>\n"                    "<div class='album-header' onClick=\"toggleBlock('IDA%1')\">\n"                    "<table width='100%' border='0' cellspacing='0' cellpadding='0'>\n"                    "<tr>\n")                .args( QStringList()                    << stID + reqResult[i+1] ));        QString albumName = escapeHTML( reqResult[ i ].isEmpty() ? i18n( "Unknown album" ) : reqResult[ i ] );        QString artistName = albumValues[5].isEmpty() ? i18n( "Unknown artist" ) : albumValues[5];        QString albumImage = ContextBrowser::getEncodedImage( CollectionDB::instance()->albumImage( albumValues[5], reqResult[ i ], true, 50 ) );        QString albumImageTitleAttr = albumImageTooltip( albumImage, 50 );        // Album image        htmlCode.append( QStringx (                    "<td width='1'>\n"                    "<a href='fetchcover:%1 @@@ %2'>\n"                    "<img class='album-image' align='left' vspace='2' hspace='2' title='%3' src='%4'/>\n"                    "</a>\n"                    "</td>\n"                    "<td valign='middle' align='left'>\n"                    "<a href='artist:%5'>\n"                    "<span class='album-title'>%6</span>\n"                    "</a>\n"                    "<span class='song-separator'> - </span>\n"                    "<a href='album:%7 @@@ %8'>\n"                    "<span class='album-title'>%9</span>\n"                    "</a>\n" )                .args( QStringList()                    << escapeHTMLAttr( albumValues[5] ) // artist name                    << escapeHTMLAttr( reqResult[ i ].isEmpty() ? i18n( "Unknown" ) : reqResult[ i ] ) // album.name                    << albumImageTitleAttr                    << escapeHTMLAttr( albumImage )                    << escapeHTMLAttr( artistName )                    << escapeHTML( artistName )                    << albumValues[6]                    << reqResult[ i + 1 ] //album.id                    << albumName ) );        // Tracks number, year and length        htmlCode.append( QStringx (                    "<span class='album-info'>%1</span> "                    "<br />\n"                    "<span class='album-year'>%2</span>\n"                    "<span class='album-length'>%3</span>\n"                    "</td>\n")                .args( QStringList()                    << i18n( "Single", "%n Tracks",  albumValues.count() / qb.countReturnValues() )                    << albumYear                    << albumLength) );        // Begining of the 'toggleable div' that contains the songs        htmlCode.append( QStringx (                    "</tr>\n"                    "</table>\n"                    "</div>\n"                    "<div class='album-body' style='display:%1;' id='IDA%2'>\n" )                .args( QStringList()                    << "none" /* shows it if it's the current track album */                    << stID + reqResult[ i + 1 ] ) );        QString discNumber;        if ( !albumValues.isEmpty() )        {            for ( uint j = 0; j < albumValues.count(); j += qb.countReturnValues() )            {                QString newDiscNumber = albumValues[ j + 7 ].stripWhiteSpace();                if( discNumber != newDiscNumber && newDiscNumber.toInt() > 0)                {                    discNumber = newDiscNumber;                    htmlCode.append( QStringx (                                "<div class='disc-separator'>\n"                                "<a href=\"albumdisc: %1 @@@ %2 @@@ %3\">\n"                                "%4"                                "</a>\n"                                "</div>\n" )                            .args( QStringList()                                << albumValues[6]                                << reqResult[ i + 1 ] //album.id                                << escapeHTMLAttr( discNumber )                                << i18n( "Disc %1" ).arg( discNumber ) ) );                }                QString track = albumValues[j + 2].stripWhiteSpace();                if( track.length() > 0 )                {                    if( track.length() == 1 )                        track.prepend( "0" );                    track = "<span class='album-song-trackno'>\n" + track + "&nbsp;</span>\n";                }                QString length;                if( albumValues[j + 4] != "0" )                    length = "<span class='album-song-time'>(" + MetaBundle::prettyTime( QString(albumValues[j + 4]).toInt(), true ) + ")</span>\n";                htmlCode.append(                        "<div class='album-song'>\n"                        "<a href=\"file:" + escapeHTMLAttr( albumValues[j + 1] ) + "\">\n"                        + track +                        "<span class='album-song-title'>\n" + escapeHTML( albumValues[j] ) + "</span>&nbsp;"                        + length +                        "</a>\n"                        "</div>\n" );            }        }        htmlCode.append(                "</div>\n"                "</td>\n"                "</tr>\n" );    }}// return list of albums shownQStringListCurrentTrackJob::showHomeByAlbums(){    QueryBuilder qb;    m_HTMLSource.append( "<table width='100%' cellpadding='0' cellspacing='0' border='0'><tr>\n" );    // <Fresh Podcasts Information>    if( ContextBrowser::instance()->m_showFreshPodcasts )    {        qb.clear();        qb.addReturnValue( QueryBuilder::tabPodcastEpisodes, QueryBuilder::valParent );        qb.addFilter( QueryBuilder::tabPodcastEpisodes, QueryBuilder::valIsNew, CollectionDB::instance()->boolT(), QueryBuilder::modeNormal, true );        qb.sortBy( QueryBuilder::tabPodcastEpisodes, QueryBuilder::valID, true );        qb.setOptions( QueryBuilder::optRemoveDuplicates );        qb.setLimit( 0, 5 );        QStringList channels = qb.run();        if( channels.count() > 0 )        {            m_HTMLSource.append(                    "<td valign='top'><div id='least_box' class='box'>\n"                    "<div id='least_box-header' class='box-header'>\n"                    "<span id='least_box-header-title' class='box-header-title'>\n"                    + i18n( "Fresh Podcast Episodes" ) +                    "</span>\n"                    "</div>\n"                    "<table id='least_box-body' class='box-body' width='100%' cellpadding='0' cellspacing='0'>\n" );            uint i = 0;            for( QStringList::iterator it = channels.begin();                    it != channels.end();                    it++ )            {                PodcastChannelBundle pcb;                if( !CollectionDB::instance()->getPodcastChannelBundle( *it, &pcb ) )                    continue;                QValueList<PodcastEpisodeBundle> episodes = CollectionDB::instance()->getPodcastEpisodes( *it, true /* only new */, 1 );                if( !episodes.isEmpty() )                {                    PodcastEpisodeBundle &ep = *episodes.begin();                    QString date;                    ep.dateTime().isNull() ?                            date = ep.date() :                            date = ep.dateTime().toString();                    QString image = CollectionDB::instance()->podcastImage( pcb.imageURL().url(), true, 50 );                    QString imageAttr = escapeHTMLAttr( i18n( "Click to go to podcast website: %1." ).arg( pcb.link().prettyURL() ) );                    m_HTMLSource.append( QStringx (                                "<tr class='" + QString( (i % 2) ? "box-row-alt" : "box-row" ) + "'>\n"                                "<td>\n"                                "<div class='album-header' onClick=\"toggleBlock('IDP%1')\">\n"                                "<table width='100%' border='0' cellspacing='0' cellpadding='0'>\n"                                "<tr>\n"                                "<td width='1'>\n"                                "<a href='%2'>\n"                                "<img class='album-image' align='left' vspace='2' hspace='2' title='%3' src='%4' />\n"                                "</a>\n"                                "</td>\n"                                "<td valign='middle' align='left'>\n"                                "<span class='album-info'>%5</span> \n"                                "<a href='%6'><span class='album-title'>%7</span></a>\n"                                "<br />\n"                                "<span class='album-year'>%8</span>\n"                                "</td>\n"                                "</tr>\n"                                "</table>\n"                                "</div>\n"                                "<div cla

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -