00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
#ifndef __kio_jobclasses_h__
00023
#define __kio_jobclasses_h__
00024
00025
#include <kurl.h>
00026
#include <kdemacros.h>
00027
00028
#include <qobject.h>
00029
#include <qptrlist.h>
00030
#include <qstring.h>
00031
#include <qstringlist.h>
00032
#include <qguardedptr.h>
00033
00034
#include <sys/types.h>
00035
#include <sys/stat.h>
00036
00037
#include <kio/global.h>
00038
00039
class Observer;
00040
class QTimer;
00041
00042
namespace KIO {
00043
00044
class Slave;
00045
class SlaveInterface;
00046
00047
00068 class Job :
public QObject {
00069 Q_OBJECT
00070
00071
protected:
00072
Job(
bool showProgressInfo );
00073
00074
public:
00075
virtual ~
Job();
00076
00087
virtual void kill(
bool quietly =
true );
00088
00095 int error()
const {
return m_error; }
00096
00101 int progressId()
const {
return m_progressId; }
00102
00111 const QString &
errorText()
const {
return m_errorText; }
00112
00130
QString errorString() const;
00131
00142
QStringList detailedErrorStrings(const
KURL *reqUrl = 0L,
00143
int method = -1) const;
00144
00153
void showErrorDialog(
QWidget * parent = 0L );
00154
00170
void setAutoErrorHandlingEnabled(
bool enable,
QWidget *parentWidget = 0 );
00171
00178
bool isAutoErrorHandlingEnabled() const;
00179
00185
void setWindow(
QWidget *window);
00186
00192
QWidget *window() const;
00193
00204
void setParentJob(
Job* parentJob );
00205
00212
Job* parentJob() const;
00213
00221
void setMetaData( const KIO::
MetaData &metaData);
00222
00230
void addMetaData(const
QString &key, const
QString &value);
00231
00239
void addMetaData(const
QMap<
QString,QString> &values);
00240
00248
void mergeMetaData(const
QMap<QString,QString> &values);
00249
00253
MetaData outgoingMetaData() const;
00254
00260
MetaData metaData() const;
00261
00269 QString queryMetaData(const QString &key);
00270
00276 KIO::filesize_t getProcessedSize();
00277
00278 signals:
00284
void result( KIO::
Job *job );
00285
00293
void canceled( KIO::
Job *job );
00294
00301
void infoMessage( KIO::
Job *job, const QString & msg );
00302
00303
00310
void connected( KIO::
Job *job );
00311
00320
void percent( KIO::
Job *job,
unsigned long percent );
00321
00328
void totalSize( KIO::
Job *job, KIO::filesize_t size );
00329
00336
void processedSize( KIO::
Job *job, KIO::filesize_t size );
00337
00343
void speed( KIO::
Job *job,
unsigned long bytes_per_second );
00344
00345 protected slots:
00354 virtual
void slotResult( KIO::
Job *job );
00355
00362
void slotSpeed( KIO::
Job *job,
unsigned long bytes_per_second );
00369
void slotInfoMessage( KIO::
Job *job, const QString &msg );
00370
00374
void slotSpeedTimeout();
00375
00376 protected:
00386 virtual
void addSubjob(
Job *job,
bool inheritMetaData=true );
00387
00396 virtual
void removeSubjob(
Job *job );
00397
00406
void emitPercent( KIO::filesize_t processedSize, KIO::filesize_t totalSize );
00407
00414
void emitSpeed(
unsigned long bytes_per_second );
00415
00420
void emitResult();
00421
00426
void setProcessedSize(KIO::filesize_t size);
00427
00433 enum { EF_TransferJobAsync = (1 << 0),
00434 EF_TransferJobNeedData = (1 << 1),
00435 EF_TransferJobDataSent = (1 << 2),
00436 EF_ListJobUnrestricted = (1 << 3) };
00437
int &extraFlags();
00438
00439
QPtrList<Job> subjobs;
00440
int m_error;
00441
QString m_errorText;
00442
unsigned long m_percent;
00443
int m_progressId;
00444
QTimer *m_speedTimer;
00445
QGuardedPtr<QWidget> m_window;
00446
MetaData m_outgoingMetaData;
00447
MetaData m_incomingMetaData;
00448
protected:
00449
virtual void virtual_hook(
int id,
void* data );
00450
private:
00451
class JobPrivate;
00452 JobPrivate *d;
00453 };
00454
00461 class SimpleJob :
public KIO::
Job {
00462 Q_OBJECT
00463
00464
public:
00473
SimpleJob(
const KURL&
url,
int command,
const QByteArray &packedArgs,
00474
bool showProgressInfo);
00475
00476 ~
SimpleJob();
00477
00482 const KURL&
url()
const {
return m_url; }
00483
00491
virtual void kill(
bool quietly =
true );
00492
00497
virtual void putOnHold();
00498
00502
static void removeOnHold();
00503
00509
virtual void start( Slave *slave );
00510
00515
void slaveDone();
00516
00521 Slave *slave()
const {
return m_slave; }
00522
00526
int command()
const {
return m_command; }
00527
00528
public slots:
00534
void slotTotalSize( KIO::filesize_t data_size );
00535
00536
protected slots:
00541
virtual void slotFinished( );
00542
00547
void slotWarning(
const QString & );
00548
00554
void slotInfoMessage(
const QString &s );
00555
00560
void slotConnected();
00561
00567
void slotProcessedSize( KIO::filesize_t data_size );
00573
void slotSpeed(
unsigned long bytes_per_second );
00574
00580
virtual void slotMetaData(
const KIO::MetaData &_metaData);
00581
00582
public slots:
00588
virtual void slotError(
int ,
const QString & );
00589
00590
protected slots:
00594
void slotNeedProgressId();
00595
00596
protected:
00597 Slave * m_slave;
00598
QByteArray m_packedArgs;
00599
KURL m_url;
00600
KURL m_subUrl;
00601
int m_command;
00602 KIO::filesize_t m_totalSize;
00603
protected:
00604
virtual void virtual_hook(
int id,
void* data );
00605
00606
00607
00608
00609
00610
00611
00612
void storeSSLSessionFromJob(
const KURL &m_redirectionURL);
00613
private:
00614
class SimpleJobPrivate* d;
00615 };
00616
00621 class StatJob :
public SimpleJob {
00622
00623 Q_OBJECT
00624
00625
public:
00633
StatJob(
const KURL& url,
int command,
const QByteArray &packedArgs,
bool showProgressInfo);
00634
00642 void setSide(
bool source ) { m_bSource = source; }
00643
00653 void setDetails(
short int details ) { m_details = details; }
00654
00660 const UDSEntry &
statResult()
const {
return m_statResult; }
00661
00668
virtual void start( Slave *slave );
00669
00670 signals:
00678
void redirection(
KIO::Job *job,
const KURL &url );
00679
00688
void permanentRedirection(
KIO::Job *job,
const KURL &fromUrl,
const KURL &toUrl );
00689
00690
protected slots:
00691
void slotStatEntry(
const KIO::UDSEntry & entry );
00692
void slotRedirection(
const KURL &url);
00693
virtual void slotFinished();
00694
virtual void slotMetaData(
const KIO::MetaData &_metaData);
00695
00696
protected:
00697
UDSEntry m_statResult;
00698
KURL m_redirectionURL;
00699
bool m_bSource;
00700
short int m_details;
00701
protected:
00702
virtual void virtual_hook(
int id,
void* data );
00703
private:
00704
class StatJobPrivate;
00705 StatJobPrivate *d;
00706 };
00707
00714 class TransferJob :
public SimpleJob {
00715 Q_OBJECT
00716
00717
public:
00727
TransferJob(
const KURL& url,
int command,
00728
const QByteArray &packedArgs,
00729
const QByteArray &_staticData,
00730
bool showProgressInfo);
00731
00738
virtual void start(Slave *slave);
00739
00744
virtual void slotResult(
KIO::Job *job );
00745
00749
void suspend();
00750
00754
void resume();
00755
00760 bool isSuspended()
const {
return m_suspended; }
00761
00762
00770 bool isErrorPage()
const {
return m_errorPage; }
00771
00779
void setAsyncDataEnabled(
bool enabled);
00780
00787
void sendAsyncData(
const QByteArray &data);
00788
00796
void setReportDataSent(
bool enabled);
00797
00804
bool reportDataSent();
00805
00806 signals:
00816
void data(
KIO::Job *job,
const QByteArray &data );
00817
00829
void dataReq(
KIO::Job *job,
QByteArray &data );
00830
00838
void redirection(
KIO::Job *job,
const KURL &url );
00839
00848
void permanentRedirection(
KIO::Job *job,
const KURL &fromUrl,
const KURL &toUrl );
00849
00855
void mimetype(
KIO::Job *job,
const QString &type );
00856
00864
void canResume(
KIO::Job *job, KIO::filesize_t offset );
00865
00866
00867
protected slots:
00868
virtual void slotRedirection(
const KURL &url);
00869
virtual void slotFinished();
00870
virtual void slotData(
const QByteArray &data);
00871
virtual void slotDataReq();
00872
virtual void slotMimetype(
const QString &mimetype );
00873
virtual void slotNeedSubURLData();
00874
virtual void slotSubURLData(
KIO::Job*,
const QByteArray &);
00875
virtual void slotMetaData(
const KIO::MetaData &_metaData);
00876
void slotErrorPage();
00877
void slotCanResume( KIO::filesize_t offset );
00878
void slotPostRedirection();
00879
00880
protected:
00881
bool m_suspended;
00882
bool m_errorPage;
00883
QByteArray staticData;
00884
KURL m_redirectionURL;
00885
KURL::List m_redirectionList;
00886
QString m_mimetype;
00887
TransferJob *m_subJob;
00888
protected:
00889
virtual void virtual_hook(
int id,
void* data );
00890
private:
00891
class TransferJobPrivate *d;
00892 };
00893
00900 class MultiGetJob :
public TransferJob {
00901 Q_OBJECT
00902
00903
public:
00911
MultiGetJob(
const KURL& url,
bool showProgressInfo);
00912
00919
virtual void start(Slave *slave);
00920
00928
void get(
long id,
const KURL &url,
const MetaData &metaData);
00929
00930 signals:
00937
void data(
long id,
const QByteArray &data);
00938
00944
void mimetype(
long id,
const QString &type );
00945
00953
void result(
long id);
00954
00955
protected slots:
00956
virtual void slotRedirection(
const KURL &url);
00957
virtual void slotFinished();
00958
virtual void slotData(
const QByteArray &data);
00959
virtual void slotMimetype(
const QString &
mimetype );
00960
private:
00961
struct GetRequest {
00962
public:
00963 GetRequest(
long _id,
const KURL &_url,
const MetaData &_metaData)
00964 : id(_id),
url(_url),
metaData(_metaData) { }
00965
long id;
00966
KURL url;
00967
MetaData metaData;
00968 };
00969
bool findCurrentEntry();
00970
void flushQueue(
QPtrList<GetRequest> &queue);
00971
00972
QPtrList<GetRequest> m_waitQueue;
00973
QPtrList<GetRequest> m_activeQueue;
00974
bool b_multiGetActive;
00975 GetRequest *m_currentEntry;
00976
protected:
00977
virtual void virtual_hook(
int id,
void* data );
00978
private:
00979
class MultiGetJobPrivate* d;
00980 };
00981
00988 class MimetypeJob :
public TransferJob {
00989 Q_OBJECT
00990
00991
public:
01000
MimetypeJob(
const KURL& url,
int command,
const QByteArray &packedArgs,
bool showProgressInfo);
01001
01007 QString mimetype()
const {
return m_mimetype; }
01008
01015
virtual void start( Slave *slave );
01016
01017
protected slots:
01018
virtual void slotFinished( );
01019
protected:
01020
virtual void virtual_hook(
int id,
void* data );
01021
private:
01022
class MimetypeJobPrivate* d;
01023 };
01024
01030 class FileCopyJob :
public Job {
01031 Q_OBJECT
01032
01033
public:
01045
FileCopyJob(
const KURL& src,
const KURL& dest,
int permissions,
01046
bool move,
bool overwrite,
bool resume,
bool showProgressInfo);
01047
01048 ~
FileCopyJob();
01055
void setSourceSize64(KIO::filesize_t size);
01056
01060
void setSourceSize( off_t size ) KDE_DEPRECATED;
01061
01066 KURL srcURL()
const {
return m_src; }
01067
01072 KURL destURL()
const {
return m_dest; }
01073
01074
public slots:
01075
void slotStart();
01076
void slotData(
KIO::Job *,
const QByteArray &data);
01077
void slotDataReq(
KIO::Job *,
QByteArray &data);
01078
01079
protected slots:
01084
virtual void slotResult(
KIO::Job *job );
01085
01091
void slotProcessedSize(
KIO::Job *job, KIO::filesize_t size );
01097
void slotTotalSize(
KIO::Job *job, KIO::filesize_t size );
01103
void slotPercent(
KIO::Job *job,
unsigned long pct );
01109
void slotCanResume(
KIO::Job *job, KIO::filesize_t offset );
01110
01111
protected:
01112
void startCopyJob();
01113
void startCopyJob(
const KURL &slave_url);
01114
void startDataPump();
01115
void connectSubjob(
SimpleJob * job );
01116
01117
KURL m_src;
01118
KURL m_dest;
01119
int m_permissions;
01120
bool m_move:1;
01121
bool m_overwrite:1;
01122
bool m_resume:1;
01123
bool m_canResume:1;
01124
bool m_resumeAnswerSent:1;
01125
QByteArray m_buffer;
01126
SimpleJob *m_moveJob;
01127
SimpleJob *m_copyJob;
01128
TransferJob *m_getJob;
01129
TransferJob *m_putJob;
01130 KIO::filesize_t m_totalSize;
01131
protected:
01132
virtual void virtual_hook(
int id,
void* data );
01133
private:
01134
class FileCopyJobPrivate;
01135 FileCopyJobPrivate* d;
01136 };
01137
01145 class ListJob :
public SimpleJob {
01146 Q_OBJECT
01147
01148
public:
01159
ListJob(
const KURL& url,
bool showProgressInfo,
01160
bool recursive =
false,
QString prefix = QString::null,
01161
bool includeHidden =
true);
01162
01169
virtual void start( Slave *slave );
01170
01175
void setUnrestricted(
bool unrestricted);
01176
01177 signals:
01187
void entries(
KIO::Job *job,
const KIO::UDSEntryList& list);
01188
01196
void redirection(
KIO::Job *job,
const KURL &url );
01197
01206
void permanentRedirection(
KIO::Job *job,
const KURL &fromUrl,
const KURL &toUrl );
01207
01208
protected slots:
01209
virtual void slotFinished( );
01210
virtual void slotMetaData(
const KIO::MetaData &_metaData);
01211
virtual void slotResult(
KIO::Job *job );
01212
void slotListEntries(
const KIO::UDSEntryList& list );
01213
void slotRedirection(
const KURL &url );
01214
void gotEntries(
KIO::Job * subjob,
const KIO::UDSEntryList& list );
01215
01216
private:
01217
bool recursive;
01218
bool includeHidden;
01219
QString prefix;
01220
unsigned long m_processedEntries;
01221
KURL m_redirectionURL;
01222
protected:
01223
virtual void virtual_hook(
int id,
void* data );
01224
private:
01225
class ListJobPrivate* d;
01226 };
01227
01228
struct CopyInfo
01229 {
01230
KURL uSource;
01231
KURL uDest;
01232
QString linkDest;
01233
int permissions;
01234
01235 time_t ctime;
01236 time_t mtime;
01237 KIO::filesize_t size;
01238 };
01239
01252 class CopyJob :
public Job {
01253 Q_OBJECT
01254
01255
public:
01259 enum CopyMode{ Copy, Move, Link };
01260
01278
CopyJob(
const KURL::List& src,
const KURL& dest, CopyMode mode,
bool asMethod,
bool showProgressInfo );
01279
01280
virtual ~
CopyJob();
01281
01286 KURL::List srcURLs()
const {
return m_srcList; }
01287
01292 KURL destURL()
const {
return m_dest; }
01293
01304
void setDefaultPermissions(
bool b );
01305
01306 signals:
01307
01313
void totalFiles(
KIO::Job *job,
unsigned long files );
01319
void totalDirs(
KIO::Job *job,
unsigned long dirs );
01320
01328
void aboutToCreate(
KIO::Job *job,
const QValueList<KIO::CopyInfo> &files);
01329
01335
void processedFiles(
KIO::Job *job,
unsigned long files );
01341
void processedDirs(
KIO::Job *job,
unsigned long dirs );
01342
01350
void copying(
KIO::Job *job,
const KURL& from,
const KURL& to );
01358
void linking(
KIO::Job *job,
const QString& target,
const KURL& to );
01366
void moving(
KIO::Job *job,
const KURL& from,
const KURL& to );
01372
void creatingDir(
KIO::Job *job,
const KURL& dir );
01379
void renamed(
KIO::Job *job,
const KURL& from,
const KURL& to );
01380
01393
void copyingDone(
KIO::Job *job,
const KURL &from,
const KURL &to,
bool directory,
bool renamed );
01403
void copyingLinkDone(
KIO::Job *job,
const KURL &from,
const QString& target,
const KURL& to );
01404
01405
protected:
01406
void statCurrentSrc();
01407
void statNextSrc();
01408
01409
01410
void slotResultStating(
KIO::Job * job );
01411
void startListing(
const KURL & src );
01412
void slotResultCreatingDirs(
KIO::Job * job );
01413
void slotResultConflictCreatingDirs(
KIO::Job * job );
01414
void createNextDir();
01415
void slotResultCopyingFiles(
KIO::Job * job );
01416
void slotResultConflictCopyingFiles(
KIO::Job * job );
01417
void copyNextFile();
01418
void slotResultDeletingDirs(
KIO::Job * job );
01419
void deleteNextDir();
01420
void skip(
const KURL & sourceURL );
01421
01422
protected slots:
01423
void slotStart();
01424
void slotEntries(
KIO::Job*,
const KIO::UDSEntryList& list );
01425
virtual void slotResult(
KIO::Job *job );
01429
void slotProcessedSize(
KIO::Job*, KIO::filesize_t data_size );
01434
void slotTotalSize(
KIO::Job*, KIO::filesize_t size );
01435
01436
void slotReport();
01437
private:
01438 CopyMode m_mode;
01439
bool m_asMethod;
01440
enum DestinationState { DEST_NOT_STATED, DEST_IS_DIR, DEST_IS_FILE, DEST_DOESNT_EXIST };
01441 DestinationState destinationState;
01442
enum { STATE_STATING, STATE_RENAMING, STATE_LISTING, STATE_CREATING_DIRS,
01443 STATE_CONFLICT_CREATING_DIRS, STATE_COPYING_FILES, STATE_CONFLICT_COPYING_FILES,
01444 STATE_DELETING_DIRS } state;
01445 KIO::filesize_t m_totalSize;
01446 KIO::filesize_t m_processedSize;
01447 KIO::filesize_t m_fileProcessedSize;
01448
int m_processedFiles;
01449
int m_processedDirs;
01450
QValueList<CopyInfo> files;
01451
QValueList<CopyInfo> dirs;
01452
KURL::List dirsToRemove;
01453
KURL::List m_srcList;
01454
KURL::List::Iterator m_currentStatSrc;
01455
bool m_bCurrentSrcIsDir;
01456
bool m_bCurrentOperationIsLink;
01457
bool m_bSingleFileCopy;
01458
bool m_bOnlyRenames;
01459
KURL m_dest;
01460
KURL m_currentDest;
01461
01462
QStringList m_skipList;
01463
QStringList m_overwriteList;
01464
bool m_bAutoSkip;
01465
bool m_bOverwriteAll;
01466
int m_conflictError;
01467
01468
QTimer *m_reportTimer;
01469
01470
KURL m_currentSrcURL;
01471
KURL m_currentDestURL;
01472
protected:
01473
virtual void virtual_hook(
int id,
void* data );
01474
private:
01475
class CopyJobPrivate;
01476 CopyJobPrivate* d;
01477
friend class CopyJobPrivate;
01478 };
01479
01486 class DeleteJob :
public Job {
01487 Q_OBJECT
01488
01489
public:
01499
DeleteJob(
const KURL::List& src,
bool shred,
bool showProgressInfo );
01500
01505 KURL::List urls()
const {
return m_srcList; }
01506
01507 signals:
01508
01514
void totalFiles(
KIO::Job *job,
unsigned long files );
01520
void totalDirs(
KIO::Job *job,
unsigned long dirs );
01521
01527
void processedFiles(
KIO::Job *job,
unsigned long files );
01533
void processedDirs(
KIO::Job *job,
unsigned long dirs );
01534
01541
void deleting(
KIO::Job *job,
const KURL& file );
01542
01543
protected slots:
01544
void slotStart();
01545
void slotEntries(
KIO::Job*,
const KIO::UDSEntryList& list );
01546
virtual void slotResult(
KIO::Job *job );
01547
01551
void slotProcessedSize(
KIO::Job*, KIO::filesize_t data_size );
01552
void slotReport();
01553
01554
private:
01555
void statNextSrc();
01556
void deleteNextFile();
01557
void deleteNextDir();
01558
01559
private:
01560
enum { STATE_STATING, STATE_LISTING,
01561 STATE_DELETING_FILES, STATE_DELETING_DIRS } state;
01562 KIO::filesize_t m_totalSize;
01563 KIO::filesize_t m_processedSize;
01564 KIO::filesize_t m_fileProcessedSize;
01565
int m_processedFiles;
01566
int m_processedDirs;
01567
int m_totalFilesDirs;
01568
KURL m_currentURL;
01569
KURL::List files;
01570
KURL::List symlinks;
01571
KURL::List dirs;
01572
KURL::List m_srcList;
01573 KURL::List::Iterator m_currentStat;
01574
QStringList m_parentDirs;
01575
bool m_shred;
01576
QTimer *m_reportTimer;
01577
protected:
01579
virtual void virtual_hook(
int id,
void* data );
01580
private:
01581
class DeleteJobPrivate* d;
01582 };
01583
01584 }
01585
01586
#endif