28 #include <sys/types.h> 41 #include <QtCore/QTimer> 42 #include <QtCore/QFile> 66 #define MAX_READ_BUF_SIZE (64 * 1024) // 64 KB at a time seems reasonable... 74 #define REPORT_TIMEOUT 200 108 SLOT(slotSpeed(
KJob*,ulong)));
110 if (
ui() && job->
ui()) {
127 qMakePair(
i18nc(
"The source of a file operation",
"Source"), src.
pathOrUrl()),
128 qMakePair(
i18nc(
"The destination of a file operation",
"Destination"), dest.
pathOrUrl()));
134 qMakePair(
i18nc(
"The source of a file operation",
"Source"), src.
pathOrUrl()),
135 qMakePair(
i18nc(
"The destination of a file operation",
"Destination"), dest.
pathOrUrl()));
141 qMakePair(
i18n(
"Directory"),
dir.pathOrUrl()));
159 qMakePair(
i18nc(
"The source of a file operation",
"Source"), url.
pathOrUrl()));
165 qMakePair(
i18n(
"Device"), dev),
166 qMakePair(
i18n(
"Mountpoint"), point));
172 qMakePair(
i18n(
"Mountpoint"), point));
210 q_func()->emitSpeed( speed );
215 #ifndef KDE_NO_DEPRECATED 238 Q_ASSERT(d->m_parentJob == 0L);
240 d->m_parentJob = job;
245 return d_func()->m_parentJob;
250 return d_func()->m_incomingMetaData;
255 return d_func()->m_incomingMetaData.value(key, QString());
261 d->m_outgoingMetaData = _metaData;
266 d_func()->m_outgoingMetaData.insert(key, value);
273 for(;it != values.end(); ++it)
274 d->m_outgoingMetaData.insert(it.key(), it.value());
281 for(;it != values.end(); ++it)
283 if ( !d->m_outgoingMetaData.contains( it.key() ) )
284 d->m_outgoingMetaData.insert( it.key(), it.value() );
289 return d_func()->m_outgoingMetaData;
295 d_func()->simpleJobInit();
301 if (!
m_url.isValid())
305 QTimer::singleShot(0, q, SLOT(slotFinished()) );
320 kWarning(7007) <<
this <<
"This is overkill.";
329 d->m_slave->suspend();
337 d->m_slave->resume();
343 return d_func()->m_url;
349 Q_ASSERT( d->m_slave );
355 Q_ASSERT(!d->m_slave);
366 return d_func()->m_redirectionHandlingEnabled;
372 d->m_redirectionHandlingEnabled = handle;
379 if (d->m_schedSerial) {
380 kDebug(7007) <<
"Killing job" <<
this <<
"in destructor!" << kBacktrace();
396 q->connect( slave, SIGNAL(
error(
int,QString)),
397 SLOT(slotError(
int,QString)) );
399 q->connect( slave, SIGNAL(warning(QString)),
400 SLOT(slotWarning(QString)) );
402 q->connect( slave, SIGNAL(infoMessage(QString)),
405 q->connect( slave, SIGNAL(connected()),
408 q->connect( slave, SIGNAL(finished()),
409 SLOT(slotFinished()) );
419 q->connect( slave, SIGNAL(speed(ulong)),
423 if (
ui() &&
ui()->window())
428 if (
ui() &&
ui()->userTimestamp())
487 QDataStream str( d->m_packedArgs );
518 emit q_func()->infoMessage( q_func(), msg );
523 emit q_func()->connected( q_func() );
545 q_func()->emitSpeed( speed );
555 m_url = *redirectionUrl;
556 redirectionUrl->clear();
563 const QString& buttonYes,
const QString& buttonNo,
564 const QString& iconYes,
const QString& iconNo,
565 const QString& dontAskAgainName,
572 iconYes, iconNo, dontAskAgainName, sslMetaData);
574 kWarning(7007) <<
"JobUiDelegate not set! Returing -1";
581 QMapIterator<QString,QString> it (_metaData);
582 while (it.hasNext()) {
584 if (it.key().startsWith(QLatin1String(
"{internal~"), Qt::CaseInsensitive))
585 d->m_internalMetaData.insert(it.key(), it.value());
587 d->m_incomingMetaData.insert(it.key(), it.value());
593 if (!d->m_internalMetaData.isEmpty()) {
600 Q_UNUSED(redirectionURL);
608 MkdirJobPrivate(
const KUrl& url,
int command,
const QByteArray &packedArgs)
611 KUrl m_redirectionURL;
612 void slotRedirection(
const KUrl &url);
624 static inline MkdirJob *
newJob(
const KUrl& url,
int command,
const QByteArray &packedArgs)
626 MkdirJob *job =
new MkdirJob(*
new MkdirJobPrivate(url, command, packedArgs));
644 q->connect( slave, SIGNAL(redirection(
KUrl)),
645 SLOT(slotRedirection(
KUrl)) );
651 void MkdirJobPrivate::slotRedirection(
const KUrl &url)
657 kWarning(7007) <<
"Redirection from" << m_url <<
"to" << url <<
"REJECTED!";
659 q->setErrorText( url.pathOrUrl() );
662 m_redirectionURL = url;
664 emit q->redirection(q, m_redirectionURL);
671 if ( !d->m_redirectionURL.isEmpty() && d->m_redirectionURL.isValid() )
677 if ( d->m_redirectionHandlingEnabled )
681 QDataStream istream( d->m_packedArgs );
682 istream >> dummyUrl >> permissions;
684 d->m_packedArgs.truncate(0);
685 QDataStream stream( &d->m_packedArgs, QIODevice::WriteOnly );
686 stream << d->m_redirectionURL << permissions;
688 d->restartAfterRedirection(&d->m_redirectionURL);
751 SimpleJob *
KIO::mount(
bool ro,
const QByteArray& fstype,
const QString& dev,
const QString& point, JobFlags flags )
753 KIO_ARGS << int(1) << qint8( ro ? 1 : 0 )
754 << QString::fromLatin1(fstype) << dev << point;
779 inline StatJobPrivate(
const KUrl& url,
int command,
const QByteArray &packedArgs)
784 KUrl m_redirectionURL;
788 void slotRedirection(
const KUrl &url);
800 static inline StatJob *
newJob(
const KUrl& url,
int command,
const QByteArray &packedArgs,
803 StatJob *job =
new StatJob(*
new StatJobPrivate(url, command, packedArgs));
822 #ifndef KDE_NO_DEPRECATED 825 d_func()->m_bSource = source;
836 d_func()->m_details = details;
841 return d_func()->m_statResult;
846 if (!
url().isLocalFile()) {
847 const UDSEntry& udsEntry = d_func()->m_statResult;
858 m_outgoingMetaData.insert(
"statSide", m_bSource ?
"source" :
"dest" );
863 q->connect( slave, SIGNAL(redirection(
KUrl)),
864 SLOT(slotRedirection(
KUrl)) );
869 void StatJobPrivate::slotStatEntry(
const KIO::UDSEntry & entry )
872 m_statResult = entry;
876 void StatJobPrivate::slotRedirection(
const KUrl &url)
879 kDebug(7007) << m_url <<
"->" << url;
882 kWarning(7007) <<
"Redirection from " << m_url <<
" to " << url <<
" REJECTED!";
884 q->setErrorText( url.pathOrUrl() );
887 m_redirectionURL = url;
889 emit q->redirection(q, m_redirectionURL);
896 if ( !d->m_redirectionURL.isEmpty() && d->m_redirectionURL.isValid() )
902 if ( d->m_redirectionHandlingEnabled )
904 d->m_packedArgs.truncate(0);
905 QDataStream stream( &d->m_packedArgs, QIODevice::WriteOnly );
906 stream << d->m_redirectionURL;
908 d->restartAfterRedirection(&d->m_redirectionURL);
934 QTimer::singleShot(0, job, SLOT(slotFinished()));
940 #ifndef KDE_NO_DEPRECATED 966 KIO_ARGS << (int)2 << url << no_cache << qlonglong(expireDate);
991 if (d->m_command ==
CMD_GET && !d->m_isMimetypeEmitted) {
992 kWarning(7007) <<
"mimeType() not emitted when sending first data!; job URL =" 993 << d->m_url <<
"data size =" << _data.size();
996 d->m_isMimetypeEmitted =
true;
998 if (d->m_redirectionURL.isEmpty() || !d->m_redirectionURL.isValid() ||
error()) {
999 emit
data(
this, _data);
1015 kWarning(7007) <<
"Redirection from " << d->m_url <<
" to " <<
url <<
" REJECTED!";
1022 if (d->m_redirectionList.count(
url) > 5)
1024 kDebug(7007) <<
"CYCLIC REDIRECTION!";
1030 d->m_redirectionURL =
url;
1031 d->m_redirectionList.append(
url);
1032 QString sslInUse =
queryMetaData(QLatin1String(
"ssl_in_use"));
1033 if (!sslInUse.isNull()) {
1034 addMetaData(QLatin1String(
"ssl_was_in_use"), sslInUse);
1036 addMetaData(QLatin1String(
"ssl_was_in_use"), QLatin1String(
"FALSE"));
1047 kDebug(7007) << d->m_url;
1048 if (!d->m_redirectionURL.isEmpty() && d->m_redirectionURL.isValid()) {
1054 if (d->m_redirectionHandlingEnabled) {
1059 const QString redirectToGet =
queryMetaData(QLatin1String(
"redirect-to-get"));
1060 if (redirectToGet == QLatin1String(
"true")) {
1062 d->m_outgoingMetaData.remove(QLatin1String(
"CustomHTTPMethod"));
1063 d->m_outgoingMetaData.remove(QLatin1String(
"content-type"));
1065 d->staticData.truncate(0);
1066 d->m_incomingMetaData.clear();
1069 d->m_internalSuspended =
false;
1071 switch( d->m_command ) {
1075 d->m_packedArgs.truncate(0);
1076 QDataStream stream( &d->m_packedArgs, QIODevice::WriteOnly );
1077 stream << d->m_redirectionURL;
1082 qint8 iOverwrite, iResume;
1084 QDataStream istream( d->m_packedArgs );
1085 istream >> dummyUrl >> iOverwrite >> iResume >> permissions;
1086 d->m_packedArgs.truncate(0);
1087 QDataStream stream( &d->m_packedArgs, QIODevice::WriteOnly );
1088 stream << d->m_redirectionURL << iOverwrite << iResume << permissions;
1093 QDataStream istream( d->m_packedArgs );
1094 istream >> specialcmd;
1095 if (specialcmd == 1) {
1096 d->m_packedArgs.truncate(0);
1097 QDataStream stream(&d->m_packedArgs, QIODevice::WriteOnly);
1098 Q_ASSERT(d->m_outgoingDataSource);
1099 d->m_outgoingDataSource->reset();
1100 stream << specialcmd << d->m_redirectionURL << d->m_outgoingDataSource->size();
1105 d->restartAfterRedirection(&d->m_redirectionURL);
1119 d->m_extraFlags &= ~
JobPrivate::EF_TransferJobAsync;
1127 d->m_slave->send(
MSG_DATA, dataForSlave );
1135 d->m_extraFlags &= ~
JobPrivate::EF_TransferJobNeedData;
1138 #ifndef KDE_NO_DEPRECATED 1145 d->m_extraFlags &= ~
JobPrivate::EF_TransferJobDataSent;
1149 #ifndef KDE_NO_DEPRECATED 1158 return d_func()->m_mimetype;
1165 QByteArray dataForSlave;
1169 if (!d->staticData.isEmpty())
1171 dataForSlave = d->staticData;
1172 d->staticData.clear();
1176 emit
dataReq(
this, dataForSlave);
1182 static const int max_size = 14 * 1024 * 1024;
1183 if (dataForSlave.size() > max_size)
1185 kDebug(7007) <<
"send " << dataForSlave.size() / 1024 / 1024 <<
"MB of data in TransferJob::dataReq. This needs to be splitted, which requires a copy. Fix the application.\n";
1186 d->staticData = QByteArray(dataForSlave.data() + max_size , dataForSlave.size() - max_size);
1187 dataForSlave.truncate(max_size);
1195 d->internalSuspend();
1196 d->m_subJob->d_func()->internalResume();
1203 d->m_mimetype = type;
1204 if (d->m_command ==
CMD_GET && d->m_isMimetypeEmitted) {
1205 kWarning(7007) <<
"mimetype() emitted again, or after sending first data!; job URL =" 1208 d->m_isMimetypeEmitted =
true;
1232 if ( d->m_internalSuspended )
1233 d->internalSuspend();
1239 return d_func()->m_errorPage;
1247 q->connect( slave, SIGNAL(data(QByteArray)),
1248 SLOT(slotData(QByteArray)) );
1251 q->connect( slave, SIGNAL(dataReq()),
1254 q->connect( slave, SIGNAL(dataReq()),
1255 SLOT(slotDataReq()) );
1257 q->connect( slave, SIGNAL(redirection(
KUrl)),
1258 SLOT(slotRedirection(
KUrl)) );
1260 q->connect( slave, SIGNAL(mimeType(QString)),
1261 SLOT(slotMimetype(QString)) );
1263 q->connect( slave, SIGNAL(errorPage()),
1266 q->connect( slave, SIGNAL(needSubUrlData()),
1299 m_subJob->d_func()->internalSuspend();
1318 emit q->canResume(q, offset);
1325 QByteArray dataForSlave;
1332 if (dataForSlave.isEmpty())
1334 emit q->dataReq(q, dataForSlave);
1339 q->sendAsyncData(dataForSlave);
1345 m_subJob->d_func()->internalResume();
1353 Q_ASSERT(job == d->m_subJob);
1357 if (!
error() && job == d->m_subJob)
1360 d->internalResume();
1366 addMetaData(
"modified", mtime.toString( Qt::ISODate ) );
1374 QByteArray(), flags);
1383 StoredTransferJobPrivate(
const KUrl& url,
int command,
1384 const QByteArray &packedArgs,
1385 const QByteArray &_staticData)
1389 StoredTransferJobPrivate(
const KUrl& url,
int command,
1390 const QByteArray &packedArgs,
1399 void slotStoredData(
KIO::Job *job,
const QByteArray &data );
1400 void slotStoredDataReq(
KIO::Job *job, QByteArray &data );
1405 const QByteArray &packedArgs,
1406 const QByteArray &staticData, JobFlags flags)
1409 *
new StoredTransferJobPrivate(url, command, packedArgs, staticData));
1417 const QByteArray &packedArgs,
1421 *
new StoredTransferJobPrivate(url, command, packedArgs, ioDevice));
1434 PostErrorJob(
int _error,
const QString& url,
const QByteArray &packedArgs,
const QByteArray &postData)
1441 PostErrorJob(
int _error,
const QString& url,
const QByteArray &packedArgs,
QIODevice* ioDevice)
1455 static const int bad_ports[] = {
1517 if (url.port() != 80)
1519 const int port = url.port();
1520 for (
int cnt=0; bad_ports[cnt] && bad_ports[cnt] <= port; ++cnt)
1521 if (port == bad_ports[cnt])
1530 static bool override_loaded =
false;
1532 if( !override_loaded ) {
1536 override_loaded =
true;
1539 it != overriden_ports->constEnd();
1541 if( overriden_ports->contains( url.port())) {
1565 PostErrorJob * job =
new PostErrorJob(_error, url.
pathOrUrl(), packedArgs, ioDevice);
1585 PostErrorJob * job =
new PostErrorJob(_error, url.
pathOrUrl(), packedArgs, postData);
1599 QBuffer* device =
new QBuffer;
1600 device->setData(postData);
1601 device->open(QIODevice::ReadOnly);
1603 device->setParent(job);
1609 bool redirection =
false;
1611 if (_url.
path().isEmpty())
1625 size = ((ioDevice && !ioDevice->isSequential()) ? ioDevice->size() : -1);
1628 KIO_ARGS << (int)1 << _url << size;
1632 QTimer::singleShot(0, job, SLOT(slotPostRedirection()));
1642 QByteArray(), flags);
1649 if (_url.
path().isEmpty())
1659 KIO_ARGS << (int)1 << _url << static_cast<qint64>(postData.size());
1667 if (_url.
path().isEmpty())
1680 size = ((ioDevice && !ioDevice->isSequential()) ? ioDevice->size() : -1);
1683 KIO_ARGS << (int)1 << _url << size;
1694 kDebug(7007) <<
"TransferJob::slotPostRedirection(" <<
m_url <<
")";
1696 emit q->redirection(q,
m_url);
1712 SLOT(slotStoredData(
KIO::Job*,QByteArray)) );
1714 SLOT(slotStoredDataReq(
KIO::Job*,QByteArray&)) );
1724 Q_ASSERT( d->m_data.isNull() );
1725 Q_ASSERT( d->m_uploadOffset == 0 );
1732 return d_func()->m_data;
1735 void StoredTransferJobPrivate::slotStoredData(
KIO::Job *,
const QByteArray &data )
1738 if ( data.size() == 0 )
1740 unsigned int oldSize = m_data.size();
1741 m_data.resize( oldSize + data.size() );
1742 memcpy( m_data.data() + oldSize, data.data(), data.size() );
1745 void StoredTransferJobPrivate::slotStoredDataReq(
KIO::Job *, QByteArray &data )
1749 const int MAX_CHUNK_SIZE = 64*1024;
1750 int remainingBytes = m_data.size() - m_uploadOffset;
1751 if( remainingBytes > MAX_CHUNK_SIZE ) {
1753 data = QByteArray( m_data.data() + m_uploadOffset, MAX_CHUNK_SIZE );
1754 m_uploadOffset += MAX_CHUNK_SIZE;
1759 data = QByteArray( m_data.data() + m_uploadOffset, remainingBytes );
1760 m_data = QByteArray();
1790 MimetypeJobPrivate(
const KUrl& url,
int command,
const QByteArray &packedArgs)
1827 kDebug(7007) <<
"It is in fact a directory!";
1828 d->m_mimetype = QString::fromLatin1(
"inode/directory");
1833 if ( !d->m_redirectionURL.isEmpty() && d->m_redirectionURL.isValid() && !
error() )
1839 if (d->m_redirectionHandlingEnabled)
1841 d->staticData.truncate(0);
1842 d->m_internalSuspended =
false;
1843 d->m_packedArgs.truncate(0);
1844 QDataStream stream( &d->m_packedArgs, QIODevice::WriteOnly );
1845 stream << d->m_redirectionURL;
1847 d->restartAfterRedirection(&d->m_redirectionURL);
1867 DirectCopyJobPrivate(
const KUrl& url,
int command,
const QByteArray &packedArgs)
1911 FileCopyJobPrivate(
const KUrl& src,
const KUrl& dest,
int permissions,
1912 bool move, JobFlags flags)
1913 : m_sourceSize(
filesize_t(-1)), m_src(src), m_dest(dest), m_moveJob(0), m_copyJob(0), m_delJob(0),
1914 m_chmodJob(0), m_getJob(0), m_putJob(0), m_permissions(permissions),
1915 m_move(
move), m_mustChmod(0), m_flags(flags)
1919 QDateTime m_modificationTime;
1922 QByteArray m_buffer;
1932 bool m_resumeAnswerSent:1;
1936 void startBestCopyMethod();
1937 void startCopyJob();
1938 void startCopyJob(
const KUrl &slave_url);
1939 void startRenameJob(
const KUrl &slave_url);
1940 void startDataPump();
1944 void slotData(
KIO::Job *,
const QByteArray &data);
1945 void slotDataReq(
KIO::Job *, QByteArray &data);
1946 void slotMimetype(
KIO::Job*,
const QString& type );
1952 void slotProcessedSize(
KJob *job, qulonglong size );
1958 void slotTotalSize(
KJob *job, qulonglong size );
1964 void slotPercent(
KJob *job,
unsigned long pct );
1979 *
new FileCopyJobPrivate(src, dest, permissions,
move, flags));
1980 job->setProperty(
"destUrl", dest.
url());
1999 QTimer::singleShot(0,
this, SLOT(slotStart()));
2002 void FileCopyJobPrivate::slotStart()
2014 (m_src.host() == m_dest.host()) &&
2015 (m_src.port() == m_dest.port()) &&
2020 startRenameJob(m_src);
2025 startRenameJob(m_dest);
2030 startRenameJob(m_src);
2035 startBestCopyMethod();
2038 void FileCopyJobPrivate::startBestCopyMethod()
2041 (m_src.host() == m_dest.host()) &&
2042 (m_src.port() == m_dest.port()) &&
2051 startCopyJob(m_dest);
2056 startCopyJob(m_src);
2071 d->m_sourceSize = size;
2079 d->m_modificationTime = mtime;
2084 return d_func()->m_src;
2089 return d_func()->m_dest;
2092 void FileCopyJobPrivate::startCopyJob()
2094 startCopyJob(m_src);
2097 void FileCopyJobPrivate::startCopyJob(
const KUrl &slave_url)
2103 if (m_modificationTime.isValid()) {
2104 m_copyJob->
addMetaData(
"modified", m_modificationTime.toString( Qt::ISODate ) );
2106 q->addSubjob( m_copyJob );
2107 connectSubjob( m_copyJob );
2112 void FileCopyJobPrivate::startRenameJob(
const KUrl &slave_url)
2118 if (m_modificationTime.isValid()) {
2119 m_moveJob->
addMetaData(
"modified", m_modificationTime.toString( Qt::ISODate ) );
2121 q->addSubjob( m_moveJob );
2122 connectSubjob( m_moveJob );
2125 void FileCopyJobPrivate::connectSubjob(
SimpleJob * job )
2128 q->connect( job, SIGNAL(totalSize(
KJob*,qulonglong)),
2129 SLOT(slotTotalSize(
KJob*,qulonglong)) );
2131 q->connect( job, SIGNAL(processedSize(
KJob*,qulonglong)),
2132 SLOT(slotProcessedSize(
KJob*,qulonglong)) );
2134 q->connect( job, SIGNAL(percent(
KJob*,ulong)),
2135 SLOT(slotPercent(
KJob*,ulong)) );
2143 d->m_moveJob->suspend();
2146 d->m_copyJob->suspend();
2149 d->m_getJob->suspend();
2152 d->m_putJob->suspend();
2162 d->m_moveJob->resume();
2165 d->m_copyJob->resume();
2168 d->m_getJob->resume();
2171 d->m_putJob->resume();
2177 void FileCopyJobPrivate::slotProcessedSize(
KJob *, qulonglong size )
2183 void FileCopyJobPrivate::slotTotalSize(
KJob*, qulonglong size )
2192 void FileCopyJobPrivate::slotPercent(
KJob*,
unsigned long pct )
2195 if ( pct > q->percent() ) {
2196 q->setPercent( pct );
2200 void FileCopyJobPrivate::startDataPump()
2205 m_canResume =
false;
2206 m_resumeAnswerSent =
false;
2210 if ( m_modificationTime.isValid() ) {
2218 q->connect( m_putJob, SIGNAL(dataReq(
KIO::Job*,QByteArray&)),
2219 SLOT(slotDataReq(
KIO::Job*,QByteArray&)));
2220 q->addSubjob( m_putJob );
2226 if ( job == m_putJob || job == m_copyJob )
2238 res = ui()->askFileRename(
2239 job,
i18n(
"File Already Exists"),
2243 m_sourceSize, offset );
2250 if ( job == m_putJob ) {
2252 q->removeSubjob(m_putJob);
2256 q->removeSubjob(m_copyJob);
2265 m_resumeAnswerSent =
true;
2267 if ( job == m_putJob )
2272 m_getJob->
addMetaData(
"AllowCompressedPage",
"false" );
2289 m_putJob->d_func()->internalSuspend();
2291 connectSubjob( m_getJob );
2292 m_getJob->d_func()->internalResume();
2294 q->connect( m_getJob, SIGNAL(data(
KIO::Job*,QByteArray)),
2295 SLOT(slotData(
KIO::Job*,QByteArray)) );
2297 SLOT(slotMimetype(
KIO::Job*,QString)) );
2304 else if ( job == m_getJob )
2313 kWarning(7007) <<
"unknown job=" << job
2314 <<
"m_getJob=" << m_getJob <<
"m_putJob=" << m_putJob;
2317 void FileCopyJobPrivate::slotData(
KIO::Job * ,
const QByteArray &data)
2321 if (!m_putJob)
return;
2322 m_getJob->d_func()->internalSuspend();
2323 m_putJob->d_func()->internalResume();
2328 if (!m_resumeAnswerSent)
2330 m_resumeAnswerSent =
true;
2336 void FileCopyJobPrivate::slotDataReq(
KIO::Job * , QByteArray &data)
2340 if (!m_resumeAnswerSent && !m_getJob) {
2343 q->setErrorText(
"'Put' job did not send canResume or 'Get' job did not send data!" );
2345 q->removeSubjob(m_putJob);
2352 m_getJob->d_func()->internalResume();
2353 m_putJob->d_func()->internalSuspend();
2356 m_buffer = QByteArray();
2359 void FileCopyJobPrivate::slotMimetype(
KIO::Job*,
const QString& type )
2362 emit q->mimetype( q, type );
2376 d->startBestCopyMethod();
2385 else if (job == d->m_getJob)
2394 else if (job == d->m_putJob)
2412 if (d->m_permissions != -1)
2414 d->m_chmodJob =
chmod(d->m_dest, d->m_permissions);
2416 d->m_mustChmod =
false;
2419 if (job == d->m_moveJob)
2424 if (job == d->m_copyJob)
2434 if (job == d->m_getJob)
2439 d->m_putJob->d_func()->internalResume();
2442 if (job == d->m_putJob)
2450 d->m_getJob->d_func()->internalResume();
2459 if (job == d->m_delJob)
2464 if (job == d->m_chmodJob)
2476 return FileCopyJobPrivate::newJob(src, dest, permissions,
false, flags);
2482 FileCopyJob* job = FileCopyJobPrivate::newJob(src, dest, permissions,
true, flags);
2500 ListJobPrivate(
const KUrl& url,
bool _recursive,
2501 const QString &prefix,
const QString &displayPrefix,
2502 bool _includeHidden)
2504 recursive(_recursive), includeHidden(_includeHidden),
2505 m_prefix(
prefix), m_displayPrefix(displayPrefix), m_processedEntries(0)
2510 QString m_displayPrefix;
2511 unsigned long m_processedEntries;
2512 KUrl m_redirectionURL;
2523 void slotRedirection(
const KUrl &url );
2530 const QString &prefix,
const QString &displayPrefix,
2533 ListJob *job =
new ListJob(*
new ListJobPrivate(u, _recursive, prefix, displayPrefix, _includeHidden));
2540 const QString &prefix,
const QString &displayPrefix,
2541 bool _includeHidden)
2543 return new ListJob(*
new ListJobPrivate(u, _recursive, prefix, displayPrefix, _includeHidden));
2553 QDataStream stream( &d->m_packedArgs, QIODevice::WriteOnly );
2565 m_processedEntries +=
list.count();
2566 slotProcessedSize( m_processedEntries );
2569 UDSEntryList::ConstIterator it =
list.begin();
2570 const UDSEntryList::ConstIterator
end =
list.end();
2572 for (; it !=
end; ++it) {
2586 Q_ASSERT(!fileName.isEmpty());
2591 const QString filename = itemURL.
fileName();
2593 if (displayName.isEmpty())
2594 displayName = filename;
2596 if (filename !=
".." && filename !=
"." && (includeHidden || filename[0] !=
'.')) {
2599 m_prefix + filename +
'/',
2600 m_displayPrefix + displayName +
'/',
2616 if (m_prefix.isNull() && includeHidden) {
2617 emit q->entries(q,
list);
2622 UDSEntryList::const_iterator it =
list.begin();
2623 const UDSEntryList::const_iterator
end =
list.end();
2624 for (; it !=
end; ++it) {
2630 if (displayName.isEmpty())
2631 displayName = filename;
2634 if ( (m_prefix.isNull() || (filename !=
".." && filename !=
".") )
2635 && (includeHidden || (filename[0] !=
'.') ) )
2640 newlist.append(newone);
2644 emit q->entries(q, newlist);
2652 emit q->entries(q,
list);
2659 emit q->subError(q, subJob);
2671 emit
subError(
this, static_cast<KIO::ListJob*>(job));
2678 void ListJobPrivate::slotRedirection(
const KUrl & url )
2683 kWarning(7007) <<
"ListJob: Redirection from " << m_url <<
" to " << url <<
" REJECTED!";
2686 m_redirectionURL = url;
2687 emit q->redirection( q, m_redirectionURL );
2698 QString proto = ptr->
property(
"X-KDE-LocalProtocol").toString();
2700 d->m_redirectionURL = d->m_url;
2701 d->m_redirectionURL.setProtocol( proto );
2708 if ( !d->m_redirectionURL.isEmpty() && d->m_redirectionURL.isValid() && !
error() ) {
2714 if ( d->m_redirectionHandlingEnabled ) {
2715 d->m_packedArgs.truncate(0);
2716 QDataStream stream( &d->m_packedArgs, QIODevice::WriteOnly );
2717 stream << d->m_redirectionURL;
2719 d->restartAfterRedirection(&d->m_redirectionURL);
2751 d->m_extraFlags &= ~
JobPrivate::EF_ListJobUnrestricted;
2758 !(m_extraFlags & EF_ListJobUnrestricted))
2761 q->setErrorText( m_url.url() );
2762 QTimer::singleShot(0, q, SLOT(slotFinished()) );
2769 q->connect( slave, SIGNAL(redirection(
KUrl)),
2770 SLOT(slotRedirection(
KUrl)) );
2777 return d_func()->m_redirectionURL;
2785 MultiGetJobPrivate(
const KUrl& url)
2790 GetRequest(
long _id,
const KUrl &_url,
const MetaData &_metaData)
2791 : id(_id), url(_url), metaData(_metaData) { }
2796 inline bool operator==(
const GetRequest& req )
const 2797 {
return req.id == id; }
2799 typedef QLinkedList<GetRequest> RequestQueue;
2801 RequestQueue m_waitQueue;
2802 RequestQueue m_activeQueue;
2803 GetRequest m_currentEntry;
2804 bool b_multiGetActive;
2814 bool findCurrentEntry();
2815 void flushQueue(QLinkedList<GetRequest> &queue);
2839 MultiGetJobPrivate::GetRequest entry(
id,
url,
metaData);
2841 d->m_waitQueue.append(entry);
2844 void MultiGetJobPrivate::flushQueue(RequestQueue &queue)
2848 RequestQueue::iterator wqit = m_waitQueue.begin();
2849 const RequestQueue::iterator wqend = m_waitQueue.end();
2850 while ( wqit != wqend )
2852 const GetRequest& entry = *wqit;
2853 if ((m_url.protocol() == entry.url.protocol()) &&
2854 (m_url.host() == entry.url.host()) &&
2855 (m_url.port() == entry.url.port()) &&
2856 (m_url.user() == entry.url.user()))
2858 queue.append( entry );
2859 wqit = m_waitQueue.erase( wqit );
2867 KIO_ARGS << (qint32) queue.count();
2868 RequestQueue::const_iterator qit = queue.begin();
2869 const RequestQueue::const_iterator qend = queue.end();
2870 for( ; qit != qend; ++qit )
2872 stream << (*qit).url << (*qit).metaData;
2874 m_packedArgs = packedArgs;
2876 m_outgoingMetaData.clear();
2882 GetRequest entry = m_waitQueue.takeFirst();
2883 m_activeQueue.append(entry);
2887 if (!entry.url.protocol().startsWith(QLatin1String(
"http")))
2891 m_packedArgs = packedArgs;
2892 m_outgoingMetaData = entry.metaData;
2894 b_multiGetActive =
false;
2898 flushQueue(m_activeQueue);
2899 b_multiGetActive =
true;
2905 bool MultiGetJobPrivate::findCurrentEntry()
2907 if (b_multiGetActive)
2909 long id = m_incomingMetaData[
"request-id"].toLong();
2910 RequestQueue::const_iterator qit = m_activeQueue.begin();
2911 const RequestQueue::const_iterator qend = m_activeQueue.end();
2912 for( ; qit != qend; ++qit )
2914 if ((*qit).id ==
id)
2916 m_currentEntry = *qit;
2920 m_currentEntry.id = 0;
2925 if ( m_activeQueue.isEmpty() )
2927 m_currentEntry = m_activeQueue.first();
2935 if (!d->findCurrentEntry())
return;
2938 kWarning(7007) <<
"MultiGetJob: Redirection from " << d->m_currentEntry.url <<
" to " <<
url <<
" REJECTED!";
2941 d->m_redirectionURL =
url;
2942 get(d->m_currentEntry.id, d->m_redirectionURL, d->m_currentEntry.metaData);
2949 if (!d->findCurrentEntry())
return;
2950 if (d->m_redirectionURL.isEmpty())
2953 emit
result(d->m_currentEntry.id);
2955 d->m_redirectionURL =
KUrl();
2957 d->m_incomingMetaData.clear();
2958 d->m_activeQueue.removeAll(d->m_currentEntry);
2959 if (d->m_activeQueue.count() == 0)
2961 if (d->m_waitQueue.count() == 0)
2973 d->m_url = d->m_waitQueue.first().url;
2984 if(d->m_redirectionURL.isEmpty() || !d->m_redirectionURL.isValid() ||
error())
2985 emit
data(d->m_currentEntry.id, _data);
2991 if (d->b_multiGetActive)
2993 MultiGetJobPrivate::RequestQueue newQueue;
2994 d->flushQueue(newQueue);
2995 if (!newQueue.isEmpty())
2997 d->m_activeQueue += newQueue;
2998 d->m_slave->send( d->m_command, d->m_packedArgs );
3001 if (!d->findCurrentEntry())
return;
3002 emit
mimetype(d->m_currentEntry.id, _mimetype);
3008 job->
get(
id, url, metaData);
3014 SpecialJobPrivate(
const KUrl& url,
int command,
3015 const QByteArray &packedArgs,
3016 const QByteArray &_staticData)
3033 d->m_packedArgs =
data;
3038 return d_func()->m_packedArgs;
3043 CacheInfo::CacheInfo(
const KUrl &url)
3048 QString CacheInfo::cachedFileName()
3050 const QChar separator =
'_';
3052 QString CEF = m_url.
path();
3054 int p = CEF.find(
'/');
3059 p = CEF.find(
'/', p);
3062 QString host = m_url.host().toLower();
3063 CEF = host + CEF +
'_';
3066 if (
dir[
dir.length()-1] !=
'/')
3069 int l = m_url.host().length();
3070 for(
int i = 0; i < l; i++)
3072 if (host[i].isLetter() && (host[i] !=
'w'))
3078 if (
dir[
dir.length()-1] ==
'/')
3081 unsigned long hash = 0x00000000;
3082 QString u = m_url.
url().toLatin1();
3083 for(
int i = u.length(); i--;)
3085 hash = (hash * 12211 + u[i]) % 2147483563;
3089 hashString.sprintf(
"%08lx", hash);
3091 CEF = CEF + hashString;
3093 CEF =
dir +
'/' + CEF;
3098 QFile *CacheInfo::cachedFile()
3101 const char *mode = (readWrite ?
"rb+" :
"rb");
3103 const char *mode = (readWrite ?
"r+" :
"r");
3114 if (ok && (!fgets(buffer, 400, fs)))
3120 time_t currentDate = time(0);
3123 if (ok && (!fgets(buffer, 400, fs)))
3127 int l = strlen(buffer);
3130 if (m_.url.url() != buffer)
3137 if (ok && (!fgets(buffer, 400, fs)))
3141 date = (time_t) strtoul(buffer, 0, 10);
3142 if (m_maxCacheAge && (difftime(currentDate, date) > m_maxCacheAge))
3144 m_bMustRevalidate =
true;
3145 m_expireDate = currentDate;
3150 m_cacheExpireDateOffset = KDE_ftell(fs);
3151 if (ok && (!fgets(buffer, 400, fs)))
3157 date = (time_t) strtoul(buffer, 0, 10);
3159 if (!date || difftime(currentDate, date) >= 0)
3160 m_bMustRevalidate =
true;
3161 m_expireDate = date;
3166 if (ok && (!fgets(buffer, 400, fs)))
3170 m_etag = QString(buffer).trimmed();
3174 if (ok && (!fgets(buffer, 400, fs)))
3178 m_lastModified = QString(buffer).trimmed();
3186 unlink( QFile::encodeName(CEF) );
3191 void CacheInfo::flush()
3193 cachedFile().remove();
3196 void CacheInfo::touch()
3200 void CacheInfo::setExpireDate(
int);
3201 void CacheInfo::setExpireTimeout(
int);
3204 int CacheInfo::creationDate();
3205 int CacheInfo::expireDate();
3206 int CacheInfo::expireTimeout();
3209 #include "jobclasses.moc" 3210 #include "job_p.moc" virtual void setWindow(QWidget *window)
Associate this job with a window given by window.
An alternative URL (If different from the caption).
static void removeSlaveOnHold()
Removes any slave that might have been put on hold.
void mergeMetaData(const QMap< QString, QString > &values)
Add key/value pairs to the meta data that is sent to the slave.
void internalResume()
Flow control.
void setDetails(short int details)
Selects the level of details we want.
QString i18n(const char *text)
bool kill(KillVerbosity verbosity=Quietly)
QString stringValue(uint field) const
static Slave * jobSlave(SimpleJob *job)
void showErrorDialog(QWidget *parent=0)
Display a dialog box to inform the user of the error given by this job.
When set, automatically overwrite the destination if it exists already.
SimpleJob * unmount(const QString &point, JobFlags flags=DefaultFlags)
Unmount filesystem.
virtual bool addSubjob(KJob *job)
static void emitUnmounting(KIO::Job *, const QString &point)
static void doJob(SimpleJob *job)
Register job with the scheduler.
qulonglong filesize_t
64-bit file size
virtual void slotRedirection(const KUrl &url)
TransferJob * put(const KUrl &url, int permissions, JobFlags flags=DefaultFlags)
Put (a.k.a.
SimpleJob * special(const KUrl &url, const QByteArray &data, JobFlags flags=DefaultFlags)
Execute any command that is specific to one slave (protocol).
void data(long id, const QByteArray &data)
Data from the slave has arrived.
virtual void resume()
Resumes the operation of the attached kioslave.
static void emitFileRenamed(const QString &src, const QString &dst)
void slotPostRedirection()
MetaData metaData() const
Get meta data received from the slave.
static void removeOnHold()
Discard suspended slave.
StoredTransferJob(StoredTransferJobPrivate &dd)
void addMetaData(const QString &key, const QString &value)
Add key/value pair to the meta data that is sent to the slave.
bool reportDataSent() const
Returns whether the job reports the amount of data that has been sent (true), or whether the job repo...
void setCapabilities(Capabilities capabilities)
void get(long id, const KUrl &url, const MetaData &metaData)
Get an additional file.
void permanentRedirection(KIO::Job *job, const KUrl &fromUrl, const KUrl &toUrl)
Signals a permanent redirection.
void setMetaData(const KIO::MetaData &metaData)
Set meta data to be sent to the slave, replacing existing meta data.
void slotNeedSubUrlData()
void setUiDelegate(KJobUiDelegate *delegate)
void slotConnected()
Called on a slave's connected signal.
void slotSpeed(unsigned long speed)
Forward signal from the slave.
Universal Directory Service.
static void setJobPriority(SimpleJob *job, int priority)
Changes the priority of job; jobs of the same priority run in the order in which they were created...
QVariant property(const QString &name) const
virtual void slotFinished()
A namespace for KIO globals.
static bool isKnownProtocol(const KUrl &url)
void redirection(KIO::Job *job, const KUrl &url)
Signals a redirection.
A ListJob is allows you to get the get the content of a directory.
void insert(uint field, const QString &value)
insert field with numeric value
SimpleJob(SimpleJobPrivate &dd)
Creates a new simple job.
MimetypeJob * mimetype(const KUrl &url, JobFlags flags=DefaultFlags)
Find mimetype for one file or directory.
void slotSpeed(KJob *job, unsigned long speed)
void slotProcessedSize(KIO::filesize_t data_size)
Forward signal from the slave.
Hide progress information dialog, i.e.
StoredTransferJob is a TransferJob (for downloading or uploading data) that also stores a QByteArray ...
bool doSuspend()
Suspend this job.
void setError(int errorCode)
virtual bool suspended()
Tells whether the kioslave is suspended.
void setSide(StatSide side)
A stat() can have two meanings.
SimpleJob * mkdir(const KUrl &url, int permissions=-1)
Creates a single directory.
TransferJob * get(const KUrl &url, LoadType reload=NoReload, JobFlags flags=DefaultFlags)
Get (a.k.a.
void slotError(int, const QString &)
virtual void start(KIO::Slave *slave)
static QDebug kError(bool cond, int area=KDE_DEFAULT_DEBUG_AREA)
void subError(KIO::ListJob *job, KIO::ListJob *subJob)
This signal is emitted when a sub-directory could not be listed.
virtual void slotResult(KJob *job)
Called whenever a subjob finishes.
StatJob * stat(const KUrl &url, JobFlags flags=DefaultFlags)
Find all details for one file or directory.
SimpleJob * file_delete(const KUrl &src, JobFlags flags=DefaultFlags)
Delete a single file.
void setSourceSize(KIO::filesize_t size)
If you know the size of the source file, call this method to inform this job.
KConfigGroup group(const QByteArray &group)
static void emitStating(KIO::Job *, const KUrl &url)
bool doResume()
Resume this job.
MultiGetJob * multi_get(long id, const KUrl &url, const MetaData &metaData)
Creates a new multiple get job.
FileCopyJob(FileCopyJobPrivate &dd)
virtual void slotMetaData(const KIO::MetaData &_metaData)
A KIO job that retrieves information about a file or directory.
FileCopyJob * file_move(const KUrl &src, const KUrl &dest, int permissions=-1, JobFlags flags=DefaultFlags)
Move a single file.
virtual void slotFinished()
A local file path if the ioslave display files sitting on the local filesystem (but in another hierar...
QByteArray arguments() const
Returns the QByteArray data that will be sent (or has been sent) to the ioslave.
QString errorString() const
Converts an error code and a non-i18n error message into an error message in the current language...
static SimpleJob * newJob(const KUrl &url, int command, const QByteArray &packedArgs, JobFlags flags=HideProgressInfo)
virtual bool removeSubjob(KJob *job)
Mark a sub job as being done.
int requestMessageBox(MessageBoxType type, const QString &text, const QString &caption, const QString &buttonYes, const QString &buttonNo, const QString &iconYes=QString(), const QString &iconNo=QString(), const QString &dontAskAgainName=QString(), const KIO::MetaData &sslMetaData=KIO::MetaData())
This function allows for the delegation user prompts from the ioslaves.
virtual bool doKill()
Abort job.
StatJob * mostLocalUrl(const KUrl &url, JobFlags flags=DefaultFlags)
Tries to map a local URL for the given URL, using a KIO job.
void slotSubUrlData(KIO::Job *, const QByteArray &)
void setData(const QByteArray &arr)
Set data to be uploaded.
A class that sends a special command to an ioslave.
QString pathOrUrl() const
static QDebug kDebug(bool cond, int area=KDE_DEFAULT_DEBUG_AREA)
QString queryMetaData(const QString &key)
Query meta data received from the slave.
void internalSuspend()
Flow control.
void permanentRedirection(KIO::Job *job, const KUrl &fromUrl, const KUrl &toUrl)
Signals a permanent redirection.
static int isUrlPortBad(const KUrl &url)
void setTotalSize(KIO::filesize_t bytes)
Set the total size of data that we are going to send in a put job.
virtual void slotMimetype(const QString &mimetype)
static bool canRenameToFile(const KUrl &url)
Returns whether the protocol can rename (i.e.
static void emitFilesAdded(const QString &directory)
static void updateInternalMetaData(SimpleJob *job)
Updates the internal metadata from job.
static void emitMounting(KIO::Job *, const QString &dev, const QString &point)
static TransferJob * newJob(const KUrl &url, int command, const QByteArray &packedArgs, const QByteArray &_staticData, JobFlags flags)
virtual bool addSubjob(KJob *job)
Add a job that has to be finished before a result is emitted.
void setUnrestricted(bool unrestricted)
Do not apply any KIOSK restrictions to this job.
virtual void showErrorMessage()
QString i18nc(const char *ctxt, const char *text)
void setPath(const QString &path)
#define MAX_READ_BUF_SIZE
virtual bool doResume()
Resume this job.
virtual void slotData(const QByteArray &data)
SimpleJob * mount(bool ro, const QByteArray &fstype, const QString &dev, const QString &point, JobFlags flags=DefaultFlags)
Mount filesystem.
ListJob * listDir(const KUrl &url, JobFlags flags=DefaultFlags, bool includeHidden=true)
List the contents of url, which is assumed to be a directory.
QPointer< QIODevice > m_outgoingDataSource
void updateUserTimestamp(unsigned long time)
DirectCopyJob(const KUrl &url, const QByteArray &packedArgs)
void redirection(KIO::Job *job, const KUrl &url)
Signals a redirection.
void setErrorText(const QString &errorText)
void processedAmount(KJob *job, KJob::Unit unit, qulonglong amount)
static void jobFinished(KIO::SimpleJob *job, KIO::Slave *slave)
Called when a job is done.
void addPath(const QString &txt)
virtual void slotFinished()
void speed(KJob *job, unsigned long speed)
void description(KJob *job, const QString &title, const QPair< QString, QString > &field1=qMakePair(QString(), QString()), const QPair< QString, QString > &field2=qMakePair(QString(), QString()))
void permanentRedirection(KIO::Job *job, const KUrl &fromUrl, const KUrl &toUrl)
Signals a permanent redirection.
static SimpleJob * newJobNoUi(const KUrl &url, int command, const QByteArray &packedArgs)
SimpleJob * chown(const KUrl &url, const QString &owner, const QString &group)
Changes ownership and group of a file or directory.
const UDSEntry & statResult() const
Result of the stat operation.
FileCopyJob * file_copy(const KUrl &src, const KUrl &dest, int permissions=-1, JobFlags flags=DefaultFlags)
Copy a single file.
void setModificationTime(const QDateTime &mtime)
Sets the modification time of the file.
void sendAsyncData(const QByteArray &data)
Provide data to the job when async data is enabled.
When set, automatically append to the destination file if it exists already.
SimpleJob * rename(const KUrl &src, const KUrl &dest, JobFlags flags=DefaultFlags)
Rename a file or directory.
static void emitCreatingDir(KIO::Job *, const KUrl &dir)
TransferJob(TransferJobPrivate &dd)
void setProcessedAmount(Unit unit, qulonglong amount)
bool isInteractive() const
Returns whether the user should be asked about things when the job is unsure, like whether to overwri...
void setRedirectionHandlingEnabled(bool handle)
Set handle to false to prevent the internal handling of redirections.
bool contains(uint field) const
check existence of a field
A UI delegate tuned to be used with KIO Jobs.
bool authorizeUrlAction(const QString &action, const KUrl &baseUrl, const KUrl &destUrl)
KIO::JobUiDelegate * ui() const
virtual void slotFinished()
virtual void slotResult(KJob *job)
MetaData m_outgoingMetaData
virtual void slotDataReq()
static KIO::PostErrorJob * precheckHttpPost(const KUrl &url, QIODevice *ioDevice, JobFlags flags)
QString directory(const DirectoryOptions &options=IgnoreTrailingSlash) const
void slotTotalSize(KIO::filesize_t data_size)
Forward signal from the slave Can also be called by the parent job, when it knows the size...
virtual void slotData(const QByteArray &data)
virtual bool doResume()
Reimplemented for internal reasons.
static void cancelJob(SimpleJob *job)
Stop the execution of a job.
static bool isSlaveOnHoldFor(const KUrl &url)
Returns true if there is a slave on hold for url.
KJobTrackerInterface * getJobTracker()
virtual void start(KIO::Slave *slave)
SimpleJob * rmdir(const KUrl &url)
Removes a single directory.
virtual void send(int cmd, const QByteArray &arr=QByteArray())
Sends the given command to the kioslave.
static bool canCopyFromFile(const KUrl &url)
Returns whether the protocol can copy files/objects directly from the filesystem itself.
RenameDialog_Mode
M_OVERWRITE: We have an existing dest, show details about it and offer to overwrite it...
KUrl srcUrl() const
Returns the source URL.
virtual bool doSuspend()
Suspend this job.
const KShortcut & reload()
void sendResumeAnswer(bool resume)
void setModificationTime(const QDateTime &mtime)
Sets the modification time of the file to be created (by KIO::put) Note that some kioslaves might ign...
virtual void slotMetaData(const KIO::MetaData &_metaData)
StoredTransferJob * storedGet(const KUrl &url, LoadType reload=NoReload, JobFlags flags=DefaultFlags)
Get (a.k.a.
KJobUiDelegate * uiDelegate() const
virtual void slotMetaData(const KIO::MetaData &_metaData)
MetaData from the slave is received.
virtual void slotFinished()
CopyJob * move(const KUrl &src, const KUrl &dest, JobFlags flags=DefaultFlags)
Moves a file or directory src to the given destination dest.
SimpleJob * symlink(const QString &target, const KUrl &dest, JobFlags flags=DefaultFlags)
Create or move a symlink.
static void putSlaveOnHold(KIO::SimpleJob *job, const KUrl &url)
Puts a slave on notice.
MetaData outgoingMetaData() const
void setArguments(const QByteArray &data)
Sets the QByteArray that is passed to SlaveBase::special() on the ioslave.
ChmodJob * chmod(const KFileItemList &lstItems, int permissions, int mask, const QString &newOwner, const QString &newGroup, bool recursive, JobFlags flags=DefaultFlags)
Creates a job that changes permissions/ownership on several files or directories, optionally recursiv...
static void emitTransferring(KIO::Job *, const KUrl &url)
virtual bool doResume()
Resume this job.
static bool canCopyToFile(const KUrl &url)
Returns whether the protocol can copy files/objects directly to the filesystem itself.
virtual void slotResult(KJob *job)
Called when m_subJob finishes.
static void emitDeleting(KIO::Job *, const KUrl &url)
void canResume(KIO::Job *job, KIO::filesize_t offset)
const KUrl & url() const
Returns the SimpleJob's URL.
KUrl mostLocalUrl() const
most local URL Call this in the slot connected to result, and only after making sure no error happene...
virtual void slotDataReqFromDevice()
virtual void slotWarning(const QString &)
SimpleJob * http_update_cache(const KUrl &url, bool no_cache, time_t expireDate)
HTTP cache update.
virtual void suspend()
Suspends the operation of the attached kioslave.
SimpleJob * setModificationTime(const KUrl &url, const QDateTime &mtime)
Changes the modification time on a file or directory.
static ClipboardUpdater * create(Job *job, Mode mode)
Returns an instance of clipboard updater if QApplication::type() does not return a tty...
StoredTransferJob * storedPut(const QByteArray &arr, const KUrl &url, int permissions, JobFlags flags=DefaultFlags)
Put (a.k.a.
virtual void slotFinished()
Called when the slave marks the job as finished.
MultiGetJob(MultiGetJobPrivate &dd)
bool isRedirectionHandlingEnabled() const
Returns true when redirections are handled internally, the default.
static void update(const KUrl &srcUrl, const KUrl &destUrl)
Convenience function that allows renaming of a single url in the clipboard.
virtual bool doKill()
Abort this job.
virtual bool doSuspend()
Suspend this job.
void warning(KJob *job, const QString &plain, const QString &rich=QString())
void data(KIO::Job *job, const QByteArray &data)
Data from the slave has arrived.
void setParentJob(Job *parentJob)
Set the parent Job.
static SimpleJobPrivate * get(KIO::SimpleJob *job)
int requestMessageBox(int type, const QString &text, const QString &caption, const QString &buttonYes, const QString &buttonNo, const QString &iconYes=QString(), const QString &iconNo=QString(), const QString &dontAskAgainName=QString(), const KIO::MetaData &sslMetaData=KIO::MetaData())
Request the ui delegate to show a message box.
void slotCanResume(KIO::filesize_t offset)
static QString cacheDir()
The directory which contains the cache files.
TransferJob * http_post(const KUrl &url, const QByteArray &postData, JobFlags flags=DefaultFlags)
HTTP POST (for form data).
void setReportDataSent(bool enabled)
When enabled, the job reports the amount of data that has been sent, instead of the amount of data th...
Job * parentJob() const
Returns the parent job, if there is one.
QString dir(const QString &fileClass)
Returns the most recently used directory accociated with this file-class.
T readEntry(const QString &key, const T &aDefault) const
TransferJob * http_delete(const KUrl &url, JobFlags flags=DefaultFlags)
HTTP DELETE.
void _k_slotSlaveInfoMessage(const QString &s)
Called on a slave's info message.
ListJob(ListJobPrivate &dd)
MkdirJob(MkdirJobPrivate &dd)
The FileCopyJob copies data from one place to another.
StatJob(StatJobPrivate &dd)
static Ptr findByUrl(const KUrl &url, mode_t mode=0, bool is_local_file=false, bool fast_mode=false, int *accuracy=0)
void dataReq(KIO::Job *job, QByteArray &data)
Request for data.
Validate cached entry with remote site if expired.
static bool autoResume()
Returns true if partial downloads should be automatically resumed.
MessageBoxType
Message box types.
ListJob * listRecursive(const KUrl &url, JobFlags flags=DefaultFlags, bool includeHidden=true)
The same as the previous method, but recurses subdirectories.
void storeSSLSessionFromJob(const KUrl &m_redirectionURL)
Filename - as displayed in directory listings etc.
void setTotalAmount(Unit unit, qulonglong amount)
bool isErrorPage() const
Checks whether we got an error page.
RenameDialog_Result
The result of open_RenameDialog().
The base class for all jobs.
A MimetypeJob is a TransferJob that allows you to get the mime type of an URL.
static void emitMoving(KIO::Job *, const KUrl &src, const KUrl &dest)
virtual void slotMimetype(const QString &mimetype)
void permanentRedirection(KIO::Job *job, const KUrl &fromUrl, const KUrl &toUrl)
Signals a permanent redirection.
KUrl destUrl() const
Returns the destination URL.
virtual void slotRedirection(const KUrl &url)
static QDebug kWarning(bool cond, int area=KDE_DEFAULT_DEBUG_AREA)
QByteArray data() const
Get hold of the downloaded data.
If set, contains the label to display instead of the 'real name' in UDS_NAME.
virtual void putOnHold()
Abort job.
QString url(AdjustPathOption trailing=LeaveTrailingSlash) const
virtual void slotFinished()
void setAsyncDataEnabled(bool enabled)
Enable the async data mode.
FILE * fopen(const QString &pathname, const char *mode)
void setOffset(KIO::filesize_t offset)
SpecialJob(const KUrl &url, const QByteArray &data=QByteArray())
Creates a KIO::SpecialJob.
void result(long id)
File transfer completed.
virtual void registerJob(KJob *job)
The transfer job pumps data into and/or out of a Slave.
QString errorText() const
const QList< KJob *> & subjobs() const
The MultiGetJob is a TransferJob that allows you to get several files from a single server...
void setJob(KIO::SimpleJob *job)
JobUiDelegate * ui() const
Retrieves the UI delegate of this job.
virtual void slotMetaData(const KIO::MetaData &_metaData)
void restartAfterRedirection(KUrl *redirectionUrl)
Called by subclasses to restart the job after a redirection was signalled.
MimetypeJob(MimetypeJobPrivate &dd)
QString fileName(const DirectoryOptions &options=IgnoreTrailingSlash) const
A KIO job that creates a directory.
static bool canRenameFromFile(const KUrl &url)
Returns whether the protocol can rename (i.e.
int operator==(KSSLCertificate &x, KSSLCertificate &y)
StoredTransferJob * storedHttpPost(const QByteArray &arr, const KUrl &url, JobFlags flags=DefaultFlags)
HTTP POST (a.k.a.
void slotCanResume(KIO::filesize_t offset)
QString path(AdjustPathOption trailing=LeaveTrailingSlash) const
const KUrl & redirectionUrl() const
Returns the ListJob's redirection URL.
QString mimetype() const
Call this in the slot connected to result, and only after making sure no error happened.
QString number(KIO::filesize_t size)
Converts a size to a string representation Not unlike QString::number(...)
virtual void slotResult(KJob *job)
QStringList list(const QString &fileClass)
Returns a list of directories associated with this file-class.
virtual bool removeSubjob(KJob *job)
static void emitCopying(KIO::Job *, const KUrl &src, const KUrl &dest)
static void emitFileMoved(const QString &src, const QString &dst)
A simple job (one url and one command).