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()));
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())
304 q->setErrorText( m_url.url() );
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)),
399 q->connect( slave, SIGNAL(
warning(QString)),
403 SLOT(_k_slotSlaveInfoMessage(QString)) );
406 SLOT(slotConnected()));
408 q->connect( slave, SIGNAL(
finished()),
411 if ((m_extraFlags & EF_TransferJobDataSent) == 0)
419 q->connect( slave, SIGNAL(
speed(ulong)),
420 SLOT(slotSpeed(ulong)) );
423 if (
ui() &&
ui()->window())
425 m_outgoingMetaData.insert(
"window-id",
QString::number((qptrdiff)
ui()->window()->winId()));
428 if (
ui() &&
ui()->userTimestamp())
430 m_outgoingMetaData.insert(
"user-timestamp",
QString::number(
ui()->userTimestamp()));
435 m_outgoingMetaData.insert(
"no-auth-prompt",
"true");
438 if (!m_outgoingMetaData.isEmpty())
444 if (!m_subUrl.isEmpty())
450 slave->
send( m_command, m_packedArgs );
460 q->disconnect(m_slave);
487 QDataStream str( d->m_packedArgs );
513 emit
warning(
this, errorText );
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();
557 if ((m_extraFlags & EF_KillCalled) == 0) {
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));
641 void MkdirJobPrivate::start(
Slave *slave)
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);
701 return MkdirJobPrivate::newJob(url,
CMD_MKDIR, packedArgs);
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));
807 emitStating(job, url);
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;
855 void StatJobPrivate::start(
Slave *slave)
858 m_outgoingMetaData.insert(
"statSide", m_bSource ?
"source" :
"dest" );
864 SLOT(slotRedirection(
KUrl)) );
869 void StatJobPrivate::slotStatEntry(
const KIO::UDSEntry & entry )
872 m_statResult = entry;
876 void StatJobPrivate::slotRedirection(
const KUrl &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);
940 #ifndef KDE_NO_DEPRECATED 945 StatJob * job = StatJobPrivate::newJob(url,
CMD_STAT, packedArgs, flags);
956 StatJob * job = StatJobPrivate::newJob(url,
CMD_STAT, packedArgs, flags);
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;
1215 m_internalSuspended =
true;
1222 m_internalSuspended =
false;
1232 if ( d->m_internalSuspended )
1233 d->internalSuspend();
1239 return d_func()->m_errorPage;
1247 q->connect( slave, SIGNAL(
data(QByteArray)),
1250 if (m_outgoingDataSource)
1251 q->connect( slave, SIGNAL(
dataReq()),
1252 SLOT(slotDataReqFromDevice()) );
1254 q->connect( slave, SIGNAL(
dataReq()),
1260 q->connect( slave, SIGNAL(mimeType(QString)),
1263 q->connect( slave, SIGNAL(errorPage()),
1264 SLOT(slotErrorPage()) );
1266 q->connect( slave, SIGNAL(needSubUrlData()),
1267 SLOT(slotNeedSubUrlData()) );
1274 m_mimetype =
"unknown";
1280 if (m_internalSuspended)
1290 q->connect(m_subJob, SIGNAL(
data(
KIO::Job*,QByteArray)),
1291 SLOT(slotSubUrlData(
KIO::Job*,QByteArray)));
1292 q->addSubjob(m_subJob);
1299 m_subJob->d_func()->internalSuspend();
1318 emit q->canResume(q, offset);
1325 QByteArray dataForSlave;
1329 if (m_outgoingDataSource)
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);
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());
1660 job = StoredTransferJobPrivate::newJob(_url,
CMD_SPECIAL, packedArgs, postData, flags );
1667 if (_url.
path().isEmpty())
1680 size = ((ioDevice && !ioDevice->isSequential()) ? ioDevice->size() : -1);
1683 KIO_ARGS << (int)1 << _url << size;
1684 job = StoredTransferJobPrivate::newJob(_url,
CMD_SPECIAL, packedArgs, ioDevice, flags );
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)
1796 static inline MimetypeJob *newJob(
const KUrl& url,
int command,
const QByteArray &packedArgs,
1803 emitStating(job, url);
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);
1859 return MimetypeJobPrivate::newJob(url,
CMD_MIMETYPE, packedArgs, flags);
1867 DirectCopyJobPrivate(
const KUrl& url,
int command,
const QByteArray &packedArgs)
1892 void DirectCopyJobPrivate::start(
Slave* slave )
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 );
1974 static inline FileCopyJob* newJob(
const KUrl& src,
const KUrl& dest,
int permissions,
bool move,
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()
2013 if ((m_src.protocol() == m_dest.protocol()) &&
2014 (m_src.host() == m_dest.host()) &&
2015 (m_src.port() == m_dest.port()) &&
2016 (m_src.user() == m_dest.user()) &&
2017 (m_src.pass() == m_dest.pass()) &&
2018 !m_src.hasSubUrl() && !m_dest.hasSubUrl())
2020 startRenameJob(m_src);
2025 startRenameJob(m_dest);
2030 startRenameJob(m_src);
2035 startBestCopyMethod();
2038 void FileCopyJobPrivate::startBestCopyMethod()
2040 if ((m_src.protocol() == m_dest.protocol()) &&
2041 (m_src.host() == m_dest.host()) &&
2042 (m_src.port() == m_dest.port()) &&
2043 (m_src.user() == m_dest.user()) &&
2044 (m_src.pass() == m_dest.pass()) &&
2045 !m_src.hasSubUrl() && !m_dest.hasSubUrl())
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 )
2129 SLOT(slotTotalSize(
KJob*,qulonglong)) );
2132 SLOT(slotProcessedSize(
KJob*,qulonglong)) );
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() ) {
2211 m_putJob->setModificationTime( m_modificationTime );
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 )
2239 job,
i18n(
"File Already Exists"),
2243 m_sourceSize, offset );
2246 if ( res ==
R_OVERWRITE || (m_flags & Overwrite) )
2250 if ( job == m_putJob ) {
2252 q->removeSubjob(m_putJob);
2256 q->removeSubjob(m_copyJob);
2265 m_resumeAnswerSent =
true;
2267 if ( job == m_putJob )
2271 m_getJob->addMetaData(
"errorPage",
"false" );
2272 m_getJob->addMetaData(
"AllowCompressedPage",
"false" );
2275 m_getJob->setTotalAmount(
KJob::Bytes, m_sourceSize);
2281 m_getJob->addMetaData(
"resume",
KIO::number(offset) );
2289 m_putJob->d_func()->internalSuspend();
2290 q->addSubjob( m_getJob );
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 );
2528 static inline ListJob *newJob(
const KUrl& u,
bool _recursive,
2529 const QString &prefix,
const QString &displayPrefix,
2532 ListJob *job =
new ListJob(*
new ListJobPrivate(u, _recursive, prefix, displayPrefix, _includeHidden));
2538 static inline ListJob *newJobNoUi(
const KUrl& u,
bool _recursive,
2539 const QString &prefix,
const QString &displayPrefix,
2540 bool _includeHidden)
2542 return new ListJob(*
new ListJobPrivate(u, _recursive, prefix, displayPrefix, _includeHidden));
2552 QDataStream stream( &d->m_packedArgs, QIODevice::WriteOnly );
2564 m_processedEntries += list.count();
2565 slotProcessedSize( m_processedEntries );
2568 UDSEntryList::ConstIterator it = list.begin();
2569 const UDSEntryList::ConstIterator
end = list.end();
2571 for (; it != end; ++it) {
2585 Q_ASSERT(!fileName.isEmpty());
2590 const QString filename = itemURL.
fileName();
2592 if (displayName.isEmpty())
2593 displayName = filename;
2595 if (filename !=
".." && filename !=
"." && (includeHidden || filename[0] !=
'.')) {
2596 ListJob *job = ListJobPrivate::newJobNoUi(itemURL,
2598 m_prefix + filename +
'/',
2599 m_displayPrefix + displayName +
'/',
2613 if (m_prefix.isNull() && includeHidden) {
2614 emit q->entries(q, list);
2619 UDSEntryList::const_iterator it = list.begin();
2620 const UDSEntryList::const_iterator
end = list.end();
2621 for (; it != end; ++it) {
2627 if (displayName.isEmpty())
2628 displayName = filename;
2631 if ( (m_prefix.isNull() || (filename !=
".." && filename !=
".") )
2632 && (includeHidden || (filename[0] !=
'.') ) )
2637 newlist.append(newone);
2641 emit q->entries(q, newlist);
2649 emit q->entries(q, list);
2659 emit
subError(
this, static_cast<KIO::ListJob*>(job));
2666 void ListJobPrivate::slotRedirection(
const KUrl & url )
2671 kWarning(7007) <<
"ListJob: Redirection from " << m_url <<
" to " << url <<
" REJECTED!";
2674 m_redirectionURL =
url;
2675 emit q->redirection( q, m_redirectionURL );
2686 QString proto = ptr->
property(
"X-KDE-LocalProtocol").toString();
2688 d->m_redirectionURL = d->m_url;
2689 d->m_redirectionURL.setProtocol( proto );
2696 if ( !d->m_redirectionURL.isEmpty() && d->m_redirectionURL.isValid() && !
error() ) {
2702 if ( d->m_redirectionHandlingEnabled ) {
2703 d->m_packedArgs.truncate(0);
2704 QDataStream stream( &d->m_packedArgs, QIODevice::WriteOnly );
2705 stream << d->m_redirectionURL;
2707 d->restartAfterRedirection(&d->m_redirectionURL);
2725 return ListJobPrivate::newJob(url,
false, QString(), QString(), includeHidden, flags);
2730 return ListJobPrivate::newJob(url,
true, QString(), QString(), includeHidden, flags);
2739 d->m_extraFlags &= ~
JobPrivate::EF_ListJobUnrestricted;
2742 void ListJobPrivate::start(
Slave *slave)
2746 !(m_extraFlags & EF_ListJobUnrestricted))
2749 q->setErrorText( m_url.url() );
2758 SLOT(slotRedirection(
KUrl)) );
2765 return d_func()->m_redirectionURL;
2773 MultiGetJobPrivate(
const KUrl& url)
2778 GetRequest(
long _id,
const KUrl &_url,
const MetaData &_metaData)
2784 inline bool operator==(
const GetRequest& req )
const 2785 {
return req.id == id; }
2787 typedef QLinkedList<GetRequest> RequestQueue;
2789 RequestQueue m_waitQueue;
2790 RequestQueue m_activeQueue;
2791 GetRequest m_currentEntry;
2792 bool b_multiGetActive;
2802 bool findCurrentEntry();
2803 void flushQueue(QLinkedList<GetRequest> &queue);
2827 MultiGetJobPrivate::GetRequest entry(
id, url, metaData);
2829 d->m_waitQueue.append(entry);
2832 void MultiGetJobPrivate::flushQueue(RequestQueue &queue)
2836 RequestQueue::iterator wqit = m_waitQueue.begin();
2837 const RequestQueue::iterator wqend = m_waitQueue.end();
2838 while ( wqit != wqend )
2840 const GetRequest& entry = *wqit;
2841 if ((m_url.protocol() == entry.url.protocol()) &&
2842 (m_url.host() == entry.url.host()) &&
2843 (m_url.port() == entry.url.port()) &&
2844 (m_url.user() == entry.url.user()))
2846 queue.append( entry );
2847 wqit = m_waitQueue.erase( wqit );
2855 KIO_ARGS << (qint32) queue.count();
2856 RequestQueue::const_iterator qit = queue.begin();
2857 const RequestQueue::const_iterator qend = queue.end();
2858 for( ; qit != qend; ++qit )
2860 stream << (*qit).url << (*qit).metaData;
2862 m_packedArgs = packedArgs;
2864 m_outgoingMetaData.clear();
2867 void MultiGetJobPrivate::start(
Slave *slave)
2870 GetRequest entry = m_waitQueue.takeFirst();
2871 m_activeQueue.append(entry);
2875 if (!entry.url.protocol().startsWith(QLatin1String(
"http")))
2879 m_packedArgs = packedArgs;
2880 m_outgoingMetaData = entry.metaData;
2882 b_multiGetActive =
false;
2886 flushQueue(m_activeQueue);
2887 b_multiGetActive =
true;
2893 bool MultiGetJobPrivate::findCurrentEntry()
2895 if (b_multiGetActive)
2897 long id = m_incomingMetaData[
"request-id"].toLong();
2898 RequestQueue::const_iterator qit = m_activeQueue.begin();
2899 const RequestQueue::const_iterator qend = m_activeQueue.end();
2900 for( ; qit != qend; ++qit )
2902 if ((*qit).id ==
id)
2904 m_currentEntry = *qit;
2908 m_currentEntry.id = 0;
2913 if ( m_activeQueue.isEmpty() )
2915 m_currentEntry = m_activeQueue.first();
2923 if (!d->findCurrentEntry())
return;
2926 kWarning(7007) <<
"MultiGetJob: Redirection from " << d->m_currentEntry.url <<
" to " << url <<
" REJECTED!";
2929 d->m_redirectionURL =
url;
2930 get(d->m_currentEntry.id, d->m_redirectionURL, d->m_currentEntry.metaData);
2937 if (!d->findCurrentEntry())
return;
2938 if (d->m_redirectionURL.isEmpty())
2941 emit
result(d->m_currentEntry.id);
2943 d->m_redirectionURL =
KUrl();
2945 d->m_incomingMetaData.clear();
2946 d->m_activeQueue.removeAll(d->m_currentEntry);
2947 if (d->m_activeQueue.count() == 0)
2949 if (d->m_waitQueue.count() == 0)
2961 d->m_url = d->m_waitQueue.first().url;
2972 if(d->m_redirectionURL.isEmpty() || !d->m_redirectionURL.isValid() ||
error())
2973 emit
data(d->m_currentEntry.id, _data);
2979 if (d->b_multiGetActive)
2981 MultiGetJobPrivate::RequestQueue newQueue;
2982 d->flushQueue(newQueue);
2983 if (!newQueue.isEmpty())
2985 d->m_activeQueue += newQueue;
2986 d->m_slave->send( d->m_command, d->m_packedArgs );
2989 if (!d->findCurrentEntry())
return;
2990 emit
mimetype(d->m_currentEntry.id, _mimetype);
2995 MultiGetJob * job = MultiGetJobPrivate::newJob(url);
2996 job->
get(
id, url, metaData);
3002 SpecialJobPrivate(
const KUrl& url,
int command,
3003 const QByteArray &packedArgs,
3004 const QByteArray &_staticData)
3021 d->m_packedArgs =
data;
3026 return d_func()->m_packedArgs;
3031 CacheInfo::CacheInfo(
const KUrl &url)
3036 QString CacheInfo::cachedFileName()
3038 const QChar separator =
'_';
3040 QString CEF = m_url.
path();
3042 int p = CEF.find(
'/');
3047 p = CEF.find(
'/', p);
3050 QString host = m_url.host().toLower();
3051 CEF = host + CEF +
'_';
3054 if (dir[dir.length()-1] !=
'/')
3057 int l = m_url.host().length();
3058 for(
int i = 0; i < l; i++)
3060 if (host[i].isLetter() && (host[i] !=
'w'))
3066 if (dir[dir.length()-1] ==
'/')
3069 unsigned long hash = 0x00000000;
3070 QString u = m_url.url().toLatin1();
3071 for(
int i = u.length(); i--;)
3073 hash = (hash * 12211 + u[i]) % 2147483563;
3077 hashString.sprintf(
"%08lx", hash);
3079 CEF = CEF + hashString;
3081 CEF = dir +
'/' + CEF;
3086 QFile *CacheInfo::cachedFile()
3089 const char *mode = (readWrite ?
"rb+" :
"rb");
3091 const char *mode = (readWrite ?
"r+" :
"r");
3102 if (ok && (!fgets(buffer, 400, fs)))
3108 time_t currentDate = time(0);
3111 if (ok && (!fgets(buffer, 400, fs)))
3115 int l = strlen(buffer);
3118 if (m_.url.url() != buffer)
3125 if (ok && (!fgets(buffer, 400, fs)))
3129 date = (time_t) strtoul(buffer, 0, 10);
3130 if (m_maxCacheAge && (difftime(currentDate, date) > m_maxCacheAge))
3132 m_bMustRevalidate =
true;
3133 m_expireDate = currentDate;
3138 m_cacheExpireDateOffset = KDE_ftell(fs);
3139 if (ok && (!fgets(buffer, 400, fs)))
3145 date = (time_t) strtoul(buffer, 0, 10);
3147 if (!date || difftime(currentDate, date) >= 0)
3148 m_bMustRevalidate =
true;
3149 m_expireDate = date;
3154 if (ok && (!fgets(buffer, 400, fs)))
3158 m_etag = QString(buffer).trimmed();
3162 if (ok && (!fgets(buffer, 400, fs)))
3166 m_lastModified = QString(buffer).trimmed();
3174 unlink( QFile::encodeName(CEF) );
3179 void CacheInfo::flush()
3181 cachedFile().remove();
3184 void CacheInfo::touch()
3188 void CacheInfo::setExpireDate(
int);
3189 void CacheInfo::setExpireTimeout(
int);
3192 int CacheInfo::creationDate();
3193 int CacheInfo::expireDate();
3194 int CacheInfo::expireTimeout();
3197 #include "jobclasses.moc" 3198 #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...
void entries(KIO::Job *job, const KIO::UDSEntryList &list)
This signal emits the entry found by the job while listing.
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)
void canResume(KIO::Job *job, KIO::filesize_t offset)
#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.
void connected(KIO::Job *job)
Emitted when the slave successfully connected to the host.
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.
unsigned long percent() const
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)
void totalSize(KJob *job, qulonglong size)
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)
virtual void slotFinished()
virtual void slotResult(KJob *job)
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.
virtual RenameDialog_Result askFileRename(KJob *job, const QString &caption, const QString &src, const QString &dest, KIO::RenameDialog_Mode mode, QString &newDest, KIO::filesize_t sizeSrc=KIO::filesize_t(-1), KIO::filesize_t sizeDest=KIO::filesize_t(-1), time_t ctimeSrc=time_t(-1), time_t ctimeDest=time_t(-1), time_t mtimeSrc=time_t(-1), time_t mtimeDest=time_t(-1))
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.
void processedSize(KJob *job, qulonglong size)
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
void redirection(KIO::Job *job, const KUrl &url)
Signals a redirection.
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.
void suspended(KJob *job)
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.
void infoMessage(KJob *job, const QString &plain, const QString &rich=QString())
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.
void mimetype(KIO::Job *job, const QString &type)
Mimetype determined during a file copy.
int operator==(KSSLCertificate &x, KSSLCertificate &y)
StoredTransferJob * storedHttpPost(const QByteArray &arr, const KUrl &url, JobFlags flags=DefaultFlags)
HTTP POST (a.k.a.
void redirection(KIO::Job *job, const KUrl &url)
Signals a redirection.
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).