blokkalimagefetcher.cpp
00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 #include "blokkalimagefetcher.h"
00021 #include "blokkalimagefetcher.moc"
00022 
00023 #include <kio/job.h>
00024 #include <kdebug.h>
00025 
00026 #include <iostream>
00027 
00028 class Blokkal::ImageFetcher::Private
00029 {
00030 public:
00031         Private( void ) :
00032         autoDelete( TRUE )
00033         {}
00034 
00035         bool autoDelete;
00036 
00037         KJob * job;
00038         QByteArray buffer;
00039         QString url;
00040 };
00041 
00042 Blokkal::ImageFetcher::ImageFetcher( const QString & imageUrl, QObject * parent ):
00043 QObject( parent ),
00044 d( new Private() )
00045 {
00046         d->url = imageUrl;
00047         d->job = KIO::get( imageUrl,
00048                            KIO::Reload, 
00049                            KIO::HideProgressInfo 
00050                          );
00051 
00052         connect( d->job, SIGNAL( data( KIO::Job *, const QByteArray & ) ), SLOT( bufferData( KIO::Job*, const QByteArray & ) ) );
00053         connect( d->job, SIGNAL( result( KJob * ) ), SLOT( emitImage( KJob * ) ) );
00054 }
00055 
00056 Blokkal::ImageFetcher::~ImageFetcher( void )
00057 {
00058         if( d->job ) {
00059                 d->job->kill();
00060         }
00061 
00062         delete d;
00063 }
00064 
00065 void Blokkal::ImageFetcher::bufferData( KIO::Job * job, const QByteArray & data )
00066 {
00067         if( data.size() > 0 && job == d->job ) {
00068                 d->buffer.append( data );
00069         }
00070 }
00071 
00072 void Blokkal::ImageFetcher::emitImage( KJob * job )
00073 {
00074         if( job == d->job ) {
00075                 QImage image = QImage::fromData( d->buffer );
00076 
00077                 emit imageReceived( image, d->url );
00078         
00079                 d->job = 0;
00080                 if( isAutoDelete( ) ) {
00081                         deleteLater();
00082                 }
00083         }
00084 }
00085 
00086 bool Blokkal::ImageFetcher::isAutoDelete( void )
00087 {
00088         return d->autoDelete;
00089 }
00090 
00091 void Blokkal::ImageFetcher::setAutoDelete( bool enable )
00092 {
00093         d->autoDelete = enable;
00094 }