#include #include #include #include #include #include #include "malvadosprovider.h" class MalvadosProvider::Private { public: Private( MalvadosProvider *parent, const QDate &date ) : mParent( parent ), mDate( date ) { mHttp = new QHttp( "malvados.com.br", 80, mParent ); connect( mHttp, SIGNAL( done( bool ) ), mParent, SLOT( pageRequestFinished1( bool ) ) ); } void pageRequestFinished1( bool ); void pageRequestFinished2( bool ); void imageRequestFinished( bool ); void parsePage(); MalvadosProvider *mParent; QByteArray mPage; QDate mDate; QImage mImage; QHttp *mHttp; QHttp *mHttp2; QHttp *mImageHttp; }; void MalvadosProvider::Private::pageRequestFinished2( bool err ){ if ( err ) { emit mParent->error( mParent ); return; } const QString pattern( "readAll() ); int pos = exp.indexIn( data ) + pattern.length(); const QString sub = data.mid( pos, data.indexOf( '.', pos ) - pos ); QUrl url( QString( "http://www.malvados.com.br/tirinha%1.gif" ).arg( sub ) ); mImageHttp = new QHttp( "malvados.com.br", 80, mParent ); mImageHttp->setHost( url.host() ); mImageHttp->get( url.path() ); mParent->connect( mImageHttp, SIGNAL( done( bool ) ), mParent, SLOT( imageRequestFinished( bool ) ) ); } void MalvadosProvider::Private::pageRequestFinished1( bool err ) { if ( err ) { emit mParent->error( mParent ); return; } const QString pattern( "readAll() ); int pos = exp.indexIn( data ) + pattern.length(); const QString sub = data.mid( pos, data.indexOf( '.', pos ) - pos ); mHttp2 = new QHttp( QString( "malvados.com.br/index%1.html" ).arg( sub ), 80, mParent ); connect( mHttp, SIGNAL( done( bool ) ), mParent, SLOT( pageRequestFinished2( bool ) ) ); } void MalvadosProvider::Private::imageRequestFinished( bool error ) { if ( error ) { emit mParent->error( mParent ); return; } QByteArray data = mImageHttp->readAll(); mImage = QImage::fromData( data ); emit mParent->finished( mParent ); } MalvadosProvider::MalvadosProvider( const QDate &date, QObject *parent ) : ComicProvider( parent ), d( new Private( this, date ) ) { QUrl url( QString( "http://www.malvados.com.br" ) ); QHttpRequestHeader header( "GET", url.path() ); header.setValue( "User-Agent", "Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.6 (like Gecko)" ); header.setValue( "Accept", "text/html, image/jpeg, image/png, text/*, image/*, */*" ); header.setValue( "Accept-Encoding", "deflate" ); header.setValue( "Accept-Charset", "iso-8859-15, utf-8;q=0.5, *;q=0.5" ); header.setValue( "Accept-Language", "en" ); header.setValue( "Host", "malvados.com.br" ); header.setValue( "Connection", "Keep-Alive" ); d->mHttp->setHost( url.host() ); d->mHttp->request( header ); } MalvadosProvider::~MalvadosProvider() { delete d; } QImage MalvadosProvider::image() const { return d->mImage; } QString MalvadosProvider::identifier() const { return QString( "malvados:%1" ).arg( d->mDate.toString( Qt::ISODate ) ); } #include "malvadosprovider.moc"