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