kio
downloader.cpp
Go to the documentation of this file.00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 #include <cstdlib>
00022 #include <cstring>
00023 
00024 #include <qtextcodec.h>
00025 
00026 #include <kcharsets.h>
00027 #include <kglobal.h>
00028 #include <klocale.h>
00029 #include <kio/job.h>
00030 
00031 #include "downloader.moc"
00032 
00033 namespace KPAC
00034 {
00035     Downloader::Downloader( QObject* parent )
00036         : QObject( parent )
00037     {
00038     }
00039 
00040     void Downloader::download( const KURL& url )
00041     {
00042         m_data.resize( 0 );
00043         m_script = QString::null;
00044         m_scriptURL = url;
00045 
00046         KIO::TransferJob* job = KIO::get( url, false, false );
00047         connect( job, SIGNAL( data( KIO::Job*, const QByteArray& ) ),
00048                  SLOT( data( KIO::Job*, const QByteArray& ) ) );
00049         connect( job, SIGNAL( result( KIO::Job* ) ), SLOT( result( KIO::Job* ) ) );
00050     }
00051 
00052     void Downloader::failed()
00053     {
00054         emit result( false );
00055     }
00056 
00057     void Downloader::setError( const QString& error )
00058     {
00059         m_error = error;
00060     }
00061 
00062     void Downloader::data( KIO::Job*, const QByteArray& data )
00063     {
00064         unsigned offset = m_data.size();
00065         m_data.resize( offset + data.size() );
00066         std::memcpy( m_data.data() + offset, data.data(), data.size() );
00067     }
00068 
00069     void Downloader::result( KIO::Job* job )
00070     {
00071         if ( !job->error() && !static_cast< KIO::TransferJob* >( job )->isErrorPage() )
00072         {
00073             bool dummy;
00074             m_script = KGlobal::charsets()->codecForName(
00075                 job->queryMetaData( "charset" ), dummy )->toUnicode( m_data );
00076             emit result( true );
00077         }
00078         else
00079         {
00080             if ( job->error() )
00081                 setError( i18n( "Could not download the proxy configuration script:\n%1" )
00082                               .arg( job->errorString() ) );
00083             else setError( i18n( "Could not download the proxy configuration script" ) ); 
00084             failed();
00085         }
00086     }
00087 }
00088 
00089