refreshimages.cpp

来自「Amarok是一款在LINUX或其他类UNIX操作系统中运行的音频播放器软件。 」· C++ 代码 · 共 164 行

CPP
164
字号
// (c) 2005 Ian Monroe <ian@monroe.nu>// See COPYING file for licensing information.#define DEBUG_PREFIX "RefreshImages"#include "amarok.h"#include "collectiondb.h"#include "debug.h"#include "refreshimages.h"#include "statusbar.h"#include <qdom.h>#include <qimage.h>#include <qmap.h>#include <qobject.h>#include <qstringlist.h>#include <qvaluelist.h>#include <qvariant.h>#include <kio/job.h>#include <kio/jobclasses.h>#include <kio/scheduler.h>#include <klocale.h>RefreshImages::RefreshImages(){    //"SELECT asin, locale, filename FROM amazon WHERE refetchdate > %1 ;"    const QStringList staleImages = CollectionDB::instance()->staleImages();    QStringList::ConstIterator it = staleImages.begin();    QStringList::ConstIterator end = staleImages.end();    while( it != end )    {        QString asin=*it;        it++;        QString locale = *it;        it++;        QString md5sum = *it;        if ( asin.isEmpty() || locale.isEmpty() || md5sum.isEmpty() )        {            //somehow we have entries without ASIN            if ( !md5sum.isEmpty() ) //I've never seen this, just to be sure                CollectionDB::instance()->removeInvalidAmazonInfo(md5sum);            it++;            if ( it==end )                deleteLater();            continue;        }        QString url =            QString("http://webservices.amazon.%1/onca/xml?Service=AWSECommerceService&SubscriptionId=%2&Operation=ItemLookup&ItemId=%3&ResponseGroup=Small,Images")             .arg(localeToTLD(locale))             .arg("0RQSQ0B8CRY7VX2VF3G2") //Ian Monroe             .arg(asin);        debug() << url << endl;        KIO::TransferJob* job = KIO::storedGet( url, false, false );        KIO::Scheduler::scheduleJob( job );        //Amarok::StatusBar::instance()->newProgressOperation( job );        job->setName( md5sum.ascii() );        it++; //iterate to the next set        m_jobInfo[md5sum] = JobInfo( asin, locale, it == end );        connect( job, SIGNAL( result( KIO::Job* ) ), SLOT( finishedXmlFetch( KIO::Job* ) ) );    }}voidRefreshImages::finishedXmlFetch( KIO::Job* xmlJob ) //SLOT{    if ( xmlJob->error() )    {        Amarok::StatusBar::instance()->shortMessage( i18n( "There was an error communicating with Amazon." ) );        if ( m_jobInfo[ xmlJob->name() ].m_last )            deleteLater();        return;    }    KIO::StoredTransferJob* const storedJob = static_cast<KIO::StoredTransferJob*>( xmlJob );    const QString xml = QString::fromUtf8( storedJob->data().data(), storedJob->data().size() );    QDomDocument doc;    if ( !doc.setContent( xml ) )      return;    QStringList imageSizes;    imageSizes << "LargeImage" << "MediumImage" << "SmallImage";    QString imageUrl;    foreach( imageSizes )    {        QDomNode imageNode = doc.documentElement()            .namedItem( "Items" )            .namedItem( "Item" )            .namedItem( *it );        if ( !imageNode.isNull() )        {            imageUrl = imageNode.namedItem( "URL" ).firstChild().toText().data();            if( !imageUrl.isEmpty() )                break;        }    }    debug() << imageUrl << endl;    KURL testUrl( imageUrl );    if( !testUrl.isValid() ) //KIO crashs on empty strings!!!    {        //Amazon sometimes takes down covers        CollectionDB::instance()->removeInvalidAmazonInfo(xmlJob->name());        return;    }    KIO::TransferJob* imageJob = KIO::storedGet( imageUrl, false, false );    KIO::Scheduler::scheduleJob(imageJob);    //Amarok::StatusBar::instance()->newProgressOperation( imageJob );    imageJob->setName(xmlJob->name());    //get the URL of the detail page    m_jobInfo[xmlJob->name()].m_detailUrl = doc.documentElement()       .namedItem( "Items" )       .namedItem( "Item" )       .namedItem( "DetailPageURL" ).firstChild().toText().data();    connect( imageJob, SIGNAL( result(KIO::Job*) ), SLOT( finishedImageFetch(KIO::Job*) ) );}void RefreshImages::finishedImageFetch(KIO::Job* imageJob){   if( imageJob->error() ) {        Amarok::StatusBar::instance()->shortMessage(i18n("There was an error communicating with Amazon."));        if(m_jobInfo[imageJob->name()].m_last)            deleteLater();        return;    }    QImage img;    img.loadFromData(static_cast<KIO::StoredTransferJob*>(imageJob)->data());    img.setText( "amazon-url", 0, m_jobInfo[imageJob->name()].m_detailUrl);    img.save( Amarok::saveLocation("albumcovers/large/") + imageJob->name(), "PNG");    CollectionDB::instance()->newAmazonReloadDate( m_jobInfo[imageJob->name()].m_asin        , m_jobInfo[imageJob->name()].m_locale        , imageJob->name());    if(m_jobInfo[imageJob->name()].m_last)        deleteLater();}QString RefreshImages::localeToTLD(const QString& locale){    if(locale=="us")        return "com";    else if(locale=="jp")        return "co.jp";    else if(locale=="uk")        return "co.uk";    else        return locale;}#include "refreshimages.moc"

⌨️ 快捷键说明

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