All pastes #772814 Raw Edit

Unnamed

public text v1 · immutable
·published 2007-11-14 02:16 UTC
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( pageRequestFinished( 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"