rendered paste body#include <QtCore/QDate>
#include <QtCore/QRegExp>
#include <QtCore/QUrl>
#include <QtGui/QImage>
#include <QtNetwork/QHttp>
#include <QtNetwork/QHttpRequestHeader>
#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( "<img src=\"tirinha" );
const QRegExp exp( pattern );
const QString data = QString::fromUtf8( mHttp->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( "<frame name=\"mainFrame\" src=\"index " );
const QRegExp exp( pattern );
const QString data = QString::fromUtf8( mHttp->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"