void KryptoniteJobCoverDiscogs::parseListHtml( const QByteArray &data ) { emit message( tr( "Parsing discogs search reply" ), data ); QRegExp imgRe( ".*<img[^>]*class=[^>]*search_result_image[^>]*src=\"([^\"]*)\".*" ); QRegExp linkRe( ".*<a[^>]*class=[^>]*search_result_title[^>]*href=\"([^\"]*)\".*" ); QString s( QString::fromUtf8(data.constData()) ); QStringList l( s.split("\n", QString::SkipEmptyParts) ); QUrl imgUrl; QUrl linkUrl; foreach( s, l ) { if( s.contains( imgRe ) ) { imgUrl.setUrl( QString(s).replace( imgRe, "\\1" ) ); } if( s.contains( linkRe ) ) { linkUrl.setUrl( QString(s).replace( linkRe, "http://www.discogs.com\\1" ) ); } if( !imgUrl.isEmpty() && !linkUrl.isEmpty() ) { emit requestDownload( this, SIGNAL(imageFound(QByteArray,QVariant)), imgUrl, QVariant( linkUrl ) ); imgUrl.clear(); linkUrl.clear(); } } }
MainWidget::MainWidget( QWidget *parent ) : QSplitter( Qt::Horizontal, parent ) , mpKryptonite( new Kryptonite() ) , mpAmazonDE( new KryptoniteJobCoverAmazonDE( mpKryptonite ) ) , mpDiscogs( new KryptoniteJobCoverDiscogs( mpKryptonite ) ) , mpLayout( new QGridLayout( this ) ) , mpFileSysTree( new QTreeView( this ) ) , mpFileSysModel( new QFileSystemModel( this ) ) , mpLineEdit( new QLineEdit( this ) ) , mpFollowPartyman( new QCheckBox( tr("Follow Partyman"), this ) ) , mpCopyBuffer( new QPushButton( tr("Copy debug buffer to clipboard"), this ) ) , mpImage( new DropImageWidget( this ) ) , mpInfo( new QListWidget( this ) ) , mpSignalMapper( new QSignalMapper( this ) ) , mDataMap() , mCacheMap() , mDebugData() { mpKryptonite->setObjectName( "Downloader"); mpAmazonDE->setObjectName( "Amazon" ); mpDiscogs->setObjectName( "Discogs" ); mpFileSysTree->setObjectName( "FileSysTree" ); mpFileSysModel->setObjectName( "FileSysModel" ); mpLineEdit->setObjectName( "LineInput" ); mpFollowPartyman->setObjectName( "FollowPartyman" ); mpFollowPartyman->setChecked( true ); mpCopyBuffer->setObjectName( "CopyBuffer" ); mpImage->setObjectName( "Image" ); mpInfo->setObjectName( "Info" ); QThread *t = new QThread(); connect( qApp, SIGNAL(aboutToQuit()), t, SLOT(quit()) ); ProxyWidget::setProxy( mpKryptonite->networkAccessManager() ); mpKryptonite->moveToThread( t ); mpAmazonDE->moveToThread( t ); mpDiscogs->moveToThread( t ); t->setObjectName( "DownloadThread" ); t->start(); QWidget *w = 0; mpFileSysTree->setModel( mpFileSysModel ); mpFileSysModel->setRootPath( "/" ); mpFileSysModel->setFilter( QDir::NoDotAndDotDot | QDir::AllDirs ); const QString current( Settings::value( Settings::RubberbandmanRootDirectory ) ); QModelIndex qmi( mpFileSysModel->index( current ) ); if( qmi.isValid() ) { mpFileSysTree->setRootIndex( qmi ); mpFileSysTree->setCurrentIndex( mpFileSysModel->index( current ) ); } mpFileSysTree->header()->hide(); mpFileSysTree->setColumnHidden( 1, true ); mpFileSysTree->setColumnHidden( 2, true ); mpFileSysTree->setColumnHidden( 3, true ); QSplitter *s = new QSplitter( Qt::Vertical, this ); w = new QWidget( this ); QVBoxLayout *v = new QVBoxLayout( w ); v->addWidget( mpFileSysTree ); v->addWidget( mpLineEdit ); QHBoxLayout *h = new QHBoxLayout(); v->addLayout( h ); h->addWidget( mpFollowPartyman ); h->addWidget( mpCopyBuffer ); s->addWidget( w ); w = new QWidget( this ); w->setLayout( mpLayout ); s->addWidget( w ); addWidget( s ); w = new QWidget( this ); v = new QVBoxLayout( w ); v->addWidget( mpImage ); v->addWidget( mpInfo ); addWidget( w ); v->setStretch( 0, 1 ); Satellite *satellite = Satellite::get(); connect( mpImage, SIGNAL(droppedUrl(QUrl)), this, SLOT(saveImage(QUrl)) ); connect( mpCopyBuffer, SIGNAL(clicked()), this, SLOT(debugBufferToClipboard()) ); connect( mpLineEdit, SIGNAL(returnPressed()), this, SLOT(requestFromLine()) ); connect( mpFileSysTree, SIGNAL(clicked(QModelIndex)), this, SLOT(entryClicked(QModelIndex)) ); connect( mpSignalMapper, SIGNAL(mapped(QWidget*)), this, SLOT(saveImage(QWidget*)) ); connect( this, SIGNAL(requestSearch(QString)), mpDiscogs, SLOT(requestList(QString)) ); connect( mpDiscogs, SIGNAL(imageFound(QByteArray,QVariant)), this, SLOT(addThumbnail(QByteArray,QVariant)) ); connect( mpDiscogs, SIGNAL(imageDownloaded(QByteArray,QVariant)), this, SLOT(showImage(QByteArray,QVariant)) ); connect( mpDiscogs, SIGNAL(message(QString,QByteArray)), this, SLOT(message(QString,QByteArray)) ); connect( this, SIGNAL(requestSearch(QString)), mpAmazonDE, SLOT(requestList(QString)) ); connect( mpAmazonDE, SIGNAL(imageFound(QByteArray,QVariant)), this, SLOT(addThumbnail(QByteArray,QVariant)) ); connect( mpAmazonDE, SIGNAL(imageDownloaded(QByteArray,QVariant)), this, SLOT(showImage(QByteArray,QVariant)) ); connect( mpAmazonDE, SIGNAL(message(QString,QByteArray)), this, SLOT(message(QString,QByteArray)) ); connect( satellite, SIGNAL(received(QByteArray)), this, SLOT(handleSatelliteMessage(QByteArray)) ); QList<int> sizes; sizes << 30 << 300; s->setSizes( sizes ); }