KIO
jobclasses.h
Go to the documentation of this file.
00001 // -*- c++ -*- 00002 /* This file is part of the KDE libraries 00003 Copyright (C) 2000 Stephan Kulow <coolo@kde.org> 00004 2000-2009 David Faure <faure@kde.org> 00005 00006 This library is free software; you can redistribute it and/or 00007 modify it under the terms of the GNU Library General Public 00008 License as published by the Free Software Foundation; either 00009 version 2 of the License, or (at your option) any later version. 00010 00011 This library is distributed in the hope that it will be useful, 00012 but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 Library General Public License for more details. 00015 00016 You should have received a copy of the GNU Library General Public License 00017 along with this library; see the file COPYING.LIB. If not, write to 00018 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 00019 Boston, MA 02110-1301, USA. 00020 */ 00021 00022 #ifndef KIO_JOBCLASSES_H 00023 #define KIO_JOBCLASSES_H 00024 00025 #include <QtCore/QObject> 00026 #include <QtCore/QLinkedList> 00027 #include <QtCore/QStringList> 00028 00029 #include <kurl.h> 00030 #include <kio/global.h> 00031 #include <kio/udsentry.h> 00032 00033 #include <kcompositejob.h> 00034 00035 00036 namespace KIO { 00037 00043 enum JobFlag { 00047 DefaultFlags = 0, 00048 00052 HideProgressInfo = 1, 00053 00061 Resume = 2, 00062 00068 Overwrite = 4 00069 }; 00070 Q_DECLARE_FLAGS(JobFlags, JobFlag) 00071 Q_DECLARE_OPERATORS_FOR_FLAGS(JobFlags) 00072 00073 class JobUiDelegate; 00074 00075 class JobPrivate; 00095 class KIO_EXPORT Job : public KCompositeJob { 00096 Q_OBJECT 00097 00098 protected: 00099 Job(); 00100 Job(JobPrivate &dd); 00101 00102 public: 00103 virtual ~Job(); 00104 void start() {} // Since KIO autostarts its jobs 00105 00113 JobUiDelegate *ui() const; 00114 00115 protected: 00121 virtual bool doKill(); 00122 00127 virtual bool doSuspend(); 00128 00133 virtual bool doResume(); 00134 00135 public: 00153 QString errorString() const; 00154 00165 QStringList detailedErrorStrings(const KUrl *reqUrl = 0L, 00166 int method = -1) const; 00167 00178 #ifndef KDE_NO_DEPRECATED 00179 KDE_DEPRECATED void showErrorDialog( QWidget *parent = 0 ); 00180 #endif 00181 00189 bool isInteractive() const; 00190 00200 void setParentJob( Job* parentJob ); 00201 00207 Job* parentJob() const; 00208 00216 void setMetaData( const KIO::MetaData &metaData); 00217 00225 void addMetaData(const QString &key, const QString &value); 00226 00234 void addMetaData(const QMap<QString,QString> &values); 00235 00243 void mergeMetaData(const QMap<QString,QString> &values); 00244 00248 MetaData outgoingMetaData() const; 00249 00255 MetaData metaData() const; 00256 00264 QString queryMetaData(const QString &key); 00265 00266 protected: 00267 00268 Q_SIGNALS: 00276 void canceled( KJob *job ); 00277 00284 void connected( KIO::Job *job ); 00285 00286 protected: 00294 virtual bool addSubjob( KJob *job ); 00295 00303 virtual bool removeSubjob( KJob *job ); 00304 00305 private: 00312 Q_PRIVATE_SLOT(d_func(), void slotSpeed( KJob *job, unsigned long speed )) 00313 Q_DECLARE_PRIVATE(Job) 00314 }; 00315 00316 class SimpleJobPrivate; 00323 class KIO_EXPORT SimpleJob : public KIO::Job { 00324 Q_OBJECT 00325 00326 public: 00327 ~SimpleJob(); 00328 00329 protected: 00334 virtual bool doSuspend(); 00335 00340 virtual bool doResume(); 00341 00346 virtual bool doKill(); 00347 00348 public: 00353 const KUrl& url() const; 00354 00359 virtual void putOnHold(); 00360 00364 static void removeOnHold(); 00365 00371 bool isRedirectionHandlingEnabled() const; 00372 00381 void setRedirectionHandlingEnabled(bool handle); 00382 00383 public Q_SLOTS: 00389 void slotError( int , const QString & ); 00390 00391 protected Q_SLOTS: 00396 virtual void slotFinished( ); 00397 00402 virtual void slotWarning( const QString & ); 00403 00409 virtual void slotMetaData( const KIO::MetaData &_metaData); 00410 00411 protected: 00412 /* 00413 * Allow jobs that inherit SimpleJob and are aware 00414 * of redirections to store the SSL session used. 00415 * Retrieval is handled by SimpleJob::start 00416 * @param m_redirectionURL Reference to redirection URL, 00417 * used instead of m_url if not empty 00418 */ 00419 void storeSSLSessionFromJob(const KUrl &m_redirectionURL); 00420 00425 SimpleJob(SimpleJobPrivate &dd); 00426 private: 00427 Q_PRIVATE_SLOT(d_func(), void slotConnected()) 00428 Q_PRIVATE_SLOT(d_func(), void slotProcessedSize( KIO::filesize_t data_size )) 00429 Q_PRIVATE_SLOT(d_func(), void slotSpeed( unsigned long speed )) 00430 Q_PRIVATE_SLOT(d_func(), void slotTotalSize( KIO::filesize_t data_size )) 00431 Q_PRIVATE_SLOT(d_func(), void _k_slotSlaveInfoMessage(const QString&)) 00432 00433 Q_DECLARE_PRIVATE(SimpleJob) 00434 }; 00435 00436 class StatJobPrivate; 00441 class KIO_EXPORT StatJob : public SimpleJob { 00442 00443 Q_OBJECT 00444 00445 public: 00446 enum StatSide { 00447 SourceSide, 00448 DestinationSide 00449 }; 00450 00451 ~StatJob(); 00452 00460 void setSide(StatSide side); 00461 00469 #ifndef KDE_NO_DEPRECATED 00470 KDE_DEPRECATED void setSide( bool source ); 00471 #endif 00472 00482 void setDetails( short int details ); 00483 00490 const UDSEntry & statResult() const; 00491 00515 KUrl mostLocalUrl() const; 00516 00517 Q_SIGNALS: 00525 void redirection( KIO::Job *job, const KUrl &url ); 00526 00534 void permanentRedirection( KIO::Job *job, const KUrl &fromUrl, const KUrl &toUrl ); 00535 00536 protected Q_SLOTS: 00537 virtual void slotFinished(); 00538 virtual void slotMetaData( const KIO::MetaData &_metaData); 00539 protected: 00540 StatJob(StatJobPrivate &dd); 00541 00542 private: 00543 Q_PRIVATE_SLOT(d_func(), void slotStatEntry( const KIO::UDSEntry & entry )) 00544 Q_PRIVATE_SLOT(d_func(), void slotRedirection( const KUrl &url)) 00545 Q_DECLARE_PRIVATE(StatJob) 00546 }; 00547 00548 class FileCopyJobPrivate; 00549 class TransferJobPrivate; 00556 class KIO_EXPORT TransferJob : public SimpleJob { 00557 Q_OBJECT 00558 00559 public: 00560 ~TransferJob(); 00561 00566 void setModificationTime( const QDateTime& mtime ); 00567 00575 bool isErrorPage() const; 00576 00583 void setAsyncDataEnabled(bool enabled); 00584 00590 void sendAsyncData(const QByteArray &data); 00591 00600 #ifndef KDE_NO_DEPRECATED 00601 KDE_DEPRECATED void setReportDataSent(bool enabled); 00602 #endif 00603 00611 #ifndef KDE_NO_DEPRECATED 00612 KDE_DEPRECATED bool reportDataSent() const; 00613 #endif 00614 00620 QString mimetype() const; 00621 00627 void setTotalSize(KIO::filesize_t bytes); 00628 00629 protected: 00634 virtual void slotResult( KJob *job ); 00635 00639 virtual bool doResume(); 00640 00641 Q_SIGNALS: 00651 void data( KIO::Job *job, const QByteArray &data ); 00652 00664 void dataReq( KIO::Job *job, QByteArray &data ); 00665 00673 void redirection( KIO::Job *job, const KUrl &url ); 00674 00682 void permanentRedirection( KIO::Job *job, const KUrl &fromUrl, const KUrl &toUrl ); 00683 00689 void mimetype( KIO::Job *job, const QString &type ); 00690 00698 void canResume( KIO::Job *job, KIO::filesize_t offset ); 00699 00700 00701 protected Q_SLOTS: 00702 virtual void slotRedirection( const KUrl &url); 00703 virtual void slotFinished(); 00704 virtual void slotData( const QByteArray &data); 00705 virtual void slotDataReq(); 00706 virtual void slotMimetype( const QString &mimetype ); 00707 virtual void slotMetaData( const KIO::MetaData &_metaData); 00708 00709 protected: 00710 TransferJob(TransferJobPrivate &dd); 00711 private: 00712 Q_PRIVATE_SLOT(d_func(), void slotErrorPage()) 00713 Q_PRIVATE_SLOT(d_func(), void slotCanResume( KIO::filesize_t offset )) 00714 Q_PRIVATE_SLOT(d_func(), void slotPostRedirection()) 00715 Q_PRIVATE_SLOT(d_func(), void slotNeedSubUrlData()) 00716 Q_PRIVATE_SLOT(d_func(), void slotSubUrlData(KIO::Job*, const QByteArray &)) 00717 Q_DECLARE_PRIVATE(TransferJob) 00718 00719 // A FileCopyJob may control one or more TransferJobs 00720 friend class FileCopyJob; 00721 friend class FileCopyJobPrivate; 00722 }; 00723 00724 class StoredTransferJobPrivate; 00743 class KIO_EXPORT StoredTransferJob : public KIO::TransferJob { 00744 Q_OBJECT 00745 00746 public: 00747 ~StoredTransferJob(); 00748 00754 void setData( const QByteArray& arr ); 00755 00760 QByteArray data() const; 00761 00762 protected: 00763 StoredTransferJob(StoredTransferJobPrivate &dd); 00764 private: 00765 Q_PRIVATE_SLOT(d_func(), void slotStoredData( KIO::Job *job, const QByteArray &data )) 00766 Q_PRIVATE_SLOT(d_func(), void slotStoredDataReq( KIO::Job *job, QByteArray &data )) 00767 00768 Q_DECLARE_PRIVATE(StoredTransferJob) 00769 }; 00770 00771 class MultiGetJobPrivate; 00778 class KIO_EXPORT MultiGetJob : public TransferJob { 00779 Q_OBJECT 00780 00781 public: 00782 virtual ~MultiGetJob(); 00783 00791 void get(long id, const KUrl &url, const MetaData &metaData); 00792 00793 Q_SIGNALS: 00800 void data( long id, const QByteArray &data); 00801 00807 void mimetype( long id, const QString &type ); 00808 00816 void result( long id); 00817 00818 protected Q_SLOTS: 00819 virtual void slotRedirection( const KUrl &url); 00820 virtual void slotFinished(); 00821 virtual void slotData( const QByteArray &data); 00822 virtual void slotMimetype( const QString &mimetype ); 00823 00824 protected: 00825 MultiGetJob(MultiGetJobPrivate &dd); 00826 private: 00827 Q_DECLARE_PRIVATE(MultiGetJob) 00828 }; 00829 00830 class MimetypeJobPrivate; 00837 class KIO_EXPORT MimetypeJob : public TransferJob { 00838 Q_OBJECT 00839 00840 public: 00841 ~MimetypeJob(); 00842 00843 protected Q_SLOTS: 00844 virtual void slotFinished( ); 00845 protected: 00846 MimetypeJob(MimetypeJobPrivate &dd); 00847 private: 00848 Q_DECLARE_PRIVATE(MimetypeJob) 00849 }; 00850 00856 class KIO_EXPORT FileCopyJob : public Job { 00857 Q_OBJECT 00858 00859 public: 00860 ~FileCopyJob(); 00866 void setSourceSize(KIO::filesize_t size); 00867 00875 void setModificationTime( const QDateTime& mtime ); 00876 00881 KUrl srcUrl() const; 00882 00887 KUrl destUrl() const; 00888 00889 bool doSuspend(); 00890 bool doResume(); 00891 00892 Q_SIGNALS: 00903 void mimetype( KIO::Job *job, const QString &type ); 00904 00905 protected Q_SLOTS: 00910 virtual void slotResult( KJob *job ); 00911 00912 protected: 00913 FileCopyJob(FileCopyJobPrivate &dd); 00914 00915 private: 00916 Q_PRIVATE_SLOT(d_func(), void slotStart()) 00917 Q_PRIVATE_SLOT(d_func(), void slotData( KIO::Job *, const QByteArray &data)) 00918 Q_PRIVATE_SLOT(d_func(), void slotDataReq( KIO::Job *, QByteArray &data)) 00919 Q_PRIVATE_SLOT(d_func(), void slotMimetype( KIO::Job*, const QString& type )) 00920 Q_PRIVATE_SLOT(d_func(), void slotProcessedSize( KJob *job, qulonglong size )) 00921 Q_PRIVATE_SLOT(d_func(), void slotTotalSize( KJob *job, qulonglong size )) 00922 Q_PRIVATE_SLOT(d_func(), void slotPercent( KJob *job, unsigned long pct )) 00923 Q_PRIVATE_SLOT(d_func(), void slotCanResume( KIO::Job *job, KIO::filesize_t offset )) 00924 00925 Q_DECLARE_PRIVATE(FileCopyJob) 00926 }; 00927 00928 class ListJobPrivate; 00936 class KIO_EXPORT ListJob : public SimpleJob { 00937 Q_OBJECT 00938 00939 public: 00940 ~ListJob(); 00941 00947 const KUrl& redirectionUrl() const; 00948 00952 void setUnrestricted(bool unrestricted); 00953 00954 Q_SIGNALS: 00964 void entries( KIO::Job *job, const KIO::UDSEntryList& list); // TODO KDE5: use KIO::ListJob* argument to avoid casting 00965 00973 void redirection( KIO::Job *job, const KUrl &url ); 00974 00982 void permanentRedirection( KIO::Job *job, const KUrl &fromUrl, const KUrl &toUrl ); 00983 00984 protected Q_SLOTS: 00985 virtual void slotFinished( ); 00986 virtual void slotMetaData( const KIO::MetaData &_metaData); 00987 virtual void slotResult( KJob *job ); 00988 00989 protected: 00990 ListJob(ListJobPrivate &dd); 00991 00992 private: 00993 Q_PRIVATE_SLOT(d_func(), void slotListEntries( const KIO::UDSEntryList& list )) 00994 Q_PRIVATE_SLOT(d_func(), void slotRedirection( const KUrl &url )) 00995 Q_PRIVATE_SLOT(d_func(), void gotEntries( KIO::Job * subjob, const KIO::UDSEntryList& list )) 00996 Q_DECLARE_PRIVATE(ListJob) 00997 }; 00998 00999 class SpecialJobPrivate; 01011 class KIO_EXPORT SpecialJob : public TransferJob 01012 { 01013 Q_OBJECT 01014 public: 01021 explicit SpecialJob(const KUrl &url, const QByteArray &data = QByteArray()); 01022 01027 void setArguments(const QByteArray &data); 01028 01033 QByteArray arguments() const; 01034 01035 public: 01036 ~SpecialJob(); 01037 01038 private: 01039 Q_DECLARE_PRIVATE(SpecialJob) 01040 }; 01041 } 01042 01043 #endif
KDE 4.6 API Reference