• Skip to content
  • Skip to link menu
  • KDE API Reference
  • kdelibs-4.14.38 API Reference
  • KDE Home
  • Contact Us
 

KIO

  • kio
  • kio
job_p.h
Go to the documentation of this file.
1/* This file is part of the KDE libraries
2 Copyright (C) 2000 Stephan Kulow <coolo@kde.org>
3 2000-2009 David Faure <faure@kde.org>
4 Waldo Bastian <bastian@kde.org>
5 Copyright (C) 2007 Thiago Macieira <thiago@kde.org>
6 Copyright (C) 2013 Dawit Alemayehu <adawit@kde.org>
7
8 This library is free software; you can redistribute it and/or
9 modify it under the terms of the GNU Library General Public
10 License as published by the Free Software Foundation; either
11 version 2 of the License, or (at your option) any later version.
12
13 This library is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Library General Public License for more details.
17
18 You should have received a copy of the GNU Library General Public License
19 along with this library; see the file COPYING.LIB. If not, write to
20 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21 Boston, MA 02110-1301, USA.
22*/
23
24#ifndef KIO_JOB_P_H
25#define KIO_JOB_P_H
26
27#include "job.h"
28#include "kcompositejob_p.h"
29#include "jobuidelegate.h"
30#include "kjobtrackerinterface.h"
31
32#include <QPointer>
33
34#define KIO_ARGS QByteArray packedArgs; QDataStream stream( &packedArgs, QIODevice::WriteOnly ); stream
35
36namespace KIO {
37 class Slave;
38
39 class JobPrivate: public KCompositeJobPrivate
40 {
41 public:
42 JobPrivate()
43 : m_parentJob( 0L ), m_extraFlags(0)
44 {}
45
50 enum { EF_TransferJobAsync = (1 << 0),
51 EF_TransferJobNeedData = (1 << 1),
52 EF_TransferJobDataSent = (1 << 2),
53 EF_ListJobUnrestricted = (1 << 3),
54 EF_KillCalled = (1 << 4) };
55
56 // Maybe we could use the QObject parent/child mechanism instead
57 // (requires a new ctor, and moving the ctor code to some init()).
58 Job* m_parentJob;
59 int m_extraFlags;
60 MetaData m_incomingMetaData;
61 MetaData m_internalMetaData;
62 MetaData m_outgoingMetaData;
63
64 inline KIO::JobUiDelegate *ui() const
65 { return static_cast<KIO::JobUiDelegate *>(uiDelegate); }
66
67 void slotSpeed( KJob *job, unsigned long speed );
68
69 static void emitMoving(KIO::Job*, const KUrl &src, const KUrl &dest);
70 static void emitCopying(KIO::Job*, const KUrl &src, const KUrl &dest);
71 static void emitCreatingDir(KIO::Job*, const KUrl &dir);
72 static void emitDeleting(KIO::Job*, const KUrl &url);
73 static void emitStating(KIO::Job*, const KUrl &url);
74 static void emitTransferring(KIO::Job*, const KUrl &url);
75 static void emitMounting(KIO::Job*, const QString &dev, const QString &point);
76 static void emitUnmounting(KIO::Job*, const QString &point);
77
78 Q_DECLARE_PUBLIC(Job)
79 };
80
81 class SimpleJobPrivate: public JobPrivate
82 {
83 public:
90 SimpleJobPrivate(const KUrl& url, int command, const QByteArray &packedArgs)
91 : m_slave(0), m_packedArgs(packedArgs), m_url(url), m_command(command),
92 m_checkOnHold(false), m_schedSerial(0), m_redirectionHandlingEnabled(true)
93 {
94 if (m_url.hasSubUrl())
95 {
96 KUrl::List list = KUrl::split(m_url);
97 list.removeLast();
98 m_subUrl = KUrl::join(list);
99 //kDebug(7007) << "New URL = " << m_url.url();
100 //kDebug(7007) << "Sub URL = " << m_subUrl.url();
101 }
102 }
103
104 Slave * m_slave;
105 QByteArray m_packedArgs;
106 KUrl m_url;
107 KUrl m_subUrl;
108 int m_command;
109
110 // for use in KIO::Scheduler
111 //
112 // There are two kinds of protocol:
113 // (1) The protocol of the url
114 // (2) The actual protocol that the io-slave uses.
115 //
116 // These two often match, but not necessarily. Most notably, they don't
117 // match when doing ftp via a proxy.
118 // In that case (1) is ftp, but (2) is http.
119 //
120 // JobData::protocol stores (2) while Job::url().protocol() returns (1).
121 // The ProtocolInfoDict is indexed with (2).
122 //
123 // We schedule slaves based on (2) but tell the slave about (1) via
124 // Slave::setProtocol().
125 QString m_protocol;
126 QStringList m_proxyList;
127 bool m_checkOnHold;
128 int m_schedSerial;
129 bool m_redirectionHandlingEnabled;
130
131 void simpleJobInit();
132
137 void slotConnected();
143 void slotProcessedSize( KIO::filesize_t data_size );
149 void slotSpeed( unsigned long speed );
155 void slotTotalSize( KIO::filesize_t data_size );
156
162 void _k_slotSlaveInfoMessage( const QString &s );
163
169 virtual void start( KIO::Slave *slave );
170
175 void slaveDone();
176
182 void restartAfterRedirection(KUrl *redirectionUrl);
183
188 int requestMessageBox(int type, const QString& text,
189 const QString& caption,
190 const QString& buttonYes,
191 const QString& buttonNo,
192 const QString& iconYes = QString(),
193 const QString& iconNo = QString(),
194 const QString& dontAskAgainName = QString(),
195 const KIO::MetaData& sslMetaData = KIO::MetaData());
196
197 Q_DECLARE_PUBLIC(SimpleJob)
198
199 static inline SimpleJobPrivate *get(KIO::SimpleJob *job)
200 { return job->d_func(); }
201 static inline SimpleJob *newJobNoUi(const KUrl& url, int command, const QByteArray &packedArgs)
202 {
203 SimpleJob *job = new SimpleJob(*new SimpleJobPrivate(url, command, packedArgs));
204 return job;
205 }
206 static inline SimpleJob *newJob(const KUrl& url, int command, const QByteArray &packedArgs,
207 JobFlags flags = HideProgressInfo )
208 {
209 SimpleJob *job = new SimpleJob(*new SimpleJobPrivate(url, command, packedArgs));
210 job->setUiDelegate(new JobUiDelegate);
211 if (!(flags & HideProgressInfo))
212 KIO::getJobTracker()->registerJob(job);
213 return job;
214 }
215 };
216
217 class MkdirJobPrivate;
222 class KIO_EXPORT MkdirJob : public SimpleJob {
223
224 Q_OBJECT
225
226 public:
227 ~MkdirJob();
228
229 Q_SIGNALS:
237 void redirection( KIO::Job *job, const KUrl &url );
238
246 void permanentRedirection( KIO::Job *job, const KUrl &fromUrl, const KUrl &toUrl );
247
248 protected Q_SLOTS:
249 virtual void slotFinished();
250
251 public:
252 MkdirJob(MkdirJobPrivate &dd);
253
254 private:
255 Q_PRIVATE_SLOT(d_func(), void slotRedirection( const KUrl &url))
256 Q_DECLARE_PRIVATE(MkdirJob)
257 };
258
259 class TransferJobPrivate: public SimpleJobPrivate
260 {
261 public:
262 inline TransferJobPrivate(const KUrl& url, int command, const QByteArray &packedArgs,
263 const QByteArray &_staticData)
264 : SimpleJobPrivate(url, command, packedArgs),
265 m_internalSuspended(false), m_errorPage(false),
266 staticData(_staticData), m_isMimetypeEmitted(false), m_subJob(0)
267 { }
268
269 inline TransferJobPrivate(const KUrl& url, int command, const QByteArray &packedArgs,
270 QIODevice* ioDevice)
271 : SimpleJobPrivate(url, command, packedArgs),
272 m_internalSuspended(false), m_errorPage(false),
273 m_isMimetypeEmitted(false), m_subJob(0),
274 m_outgoingDataSource(ioDevice)
275 { }
276
277 bool m_internalSuspended;
278 bool m_errorPage;
279 QByteArray staticData;
280 KUrl m_redirectionURL;
281 KUrl::List m_redirectionList;
282 QString m_mimetype;
283 bool m_isMimetypeEmitted;
284 TransferJob *m_subJob;
285 QPointer<QIODevice> m_outgoingDataSource;
286
290 void internalSuspend();
294 void internalResume();
301 virtual void start( KIO::Slave *slave );
308 virtual void slotDataReqFromDevice();
309
310 void slotErrorPage();
311 void slotCanResume( KIO::filesize_t offset );
312 void slotPostRedirection();
313 void slotNeedSubUrlData();
314 void slotSubUrlData(KIO::Job*, const QByteArray &);
315
316 Q_DECLARE_PUBLIC(TransferJob)
317 static inline TransferJob *newJob(const KUrl& url, int command,
318 const QByteArray &packedArgs,
319 const QByteArray &_staticData,
320 JobFlags flags)
321 {
322 TransferJob *job = new TransferJob(*new TransferJobPrivate(url, command, packedArgs, _staticData));
323 job->setUiDelegate(new JobUiDelegate);
324 if (!(flags & HideProgressInfo))
325 KIO::getJobTracker()->registerJob(job);
326 return job;
327 }
328
329 static inline TransferJob *newJob(const KUrl& url, int command,
330 const QByteArray &packedArgs,
331 QIODevice* ioDevice,
332 JobFlags flags)
333 {
334 TransferJob *job = new TransferJob(*new TransferJobPrivate(url, command, packedArgs, ioDevice));
335 job->setUiDelegate(new JobUiDelegate);
336 if (!(flags & HideProgressInfo))
337 KIO::getJobTracker()->registerJob(job);
338 return job;
339 }
340 };
341
342 class DirectCopyJobPrivate;
347 class DirectCopyJob : public SimpleJob
348 {
349 Q_OBJECT
350
351 public:
352 DirectCopyJob(const KUrl &url, const QByteArray &packedArgs);
353 ~DirectCopyJob();
354
355 public Q_SLOTS:
356 void slotCanResume( KIO::filesize_t offset );
357
358 Q_SIGNALS:
364 void canResume( KIO::Job *job, KIO::filesize_t offset );
365
366 private:
367 Q_DECLARE_PRIVATE(DirectCopyJob)
368 };
369}
370
371#endif
KCompositeJobPrivate
KIO::DirectCopyJob
Definition: job_p.h:348
KIO::DirectCopyJob::~DirectCopyJob
~DirectCopyJob()
Definition: job.cpp:1888
KIO::DirectCopyJob::canResume
void canResume(KIO::Job *job, KIO::filesize_t offset)
KIO::DirectCopyJob::slotCanResume
void slotCanResume(KIO::filesize_t offset)
Definition: job.cpp:1900
KIO::JobPrivate
Definition: job_p.h:40
KIO::JobPrivate::emitUnmounting
static void emitUnmounting(KIO::Job *, const QString &point)
Definition: job.cpp:169
KIO::JobPrivate::emitTransferring
static void emitTransferring(KIO::Job *, const KUrl &url)
Definition: job.cpp:156
KIO::JobPrivate::EF_TransferJobDataSent
@ EF_TransferJobDataSent
Definition: job_p.h:52
KIO::JobPrivate::EF_KillCalled
@ EF_KillCalled
Definition: job_p.h:54
KIO::JobPrivate::EF_TransferJobNeedData
@ EF_TransferJobNeedData
Definition: job_p.h:51
KIO::JobPrivate::EF_TransferJobAsync
@ EF_TransferJobAsync
Definition: job_p.h:50
KIO::JobPrivate::EF_ListJobUnrestricted
@ EF_ListJobUnrestricted
Definition: job_p.h:53
KIO::JobPrivate::ui
KIO::JobUiDelegate * ui() const
Definition: job_p.h:64
KIO::JobPrivate::emitMoving
static void emitMoving(KIO::Job *, const KUrl &src, const KUrl &dest)
Definition: job.cpp:124
KIO::JobPrivate::emitDeleting
static void emitDeleting(KIO::Job *, const KUrl &url)
Definition: job.cpp:144
KIO::JobPrivate::slotSpeed
void slotSpeed(KJob *job, unsigned long speed)
Definition: job.cpp:207
KIO::JobPrivate::m_extraFlags
int m_extraFlags
Definition: job_p.h:59
KIO::JobPrivate::m_parentJob
Job * m_parentJob
Definition: job_p.h:58
KIO::JobPrivate::emitCreatingDir
static void emitCreatingDir(KIO::Job *, const KUrl &dir)
Definition: job.cpp:138
KIO::JobPrivate::emitCopying
static void emitCopying(KIO::Job *, const KUrl &src, const KUrl &dest)
Definition: job.cpp:131
KIO::JobPrivate::m_outgoingMetaData
MetaData m_outgoingMetaData
Definition: job_p.h:62
KIO::JobPrivate::emitStating
static void emitStating(KIO::Job *, const KUrl &url)
Definition: job.cpp:150
KIO::JobPrivate::emitMounting
static void emitMounting(KIO::Job *, const QString &dev, const QString &point)
Definition: job.cpp:162
KIO::JobPrivate::JobPrivate
JobPrivate()
Definition: job_p.h:42
KIO::JobPrivate::m_internalMetaData
MetaData m_internalMetaData
Definition: job_p.h:61
KIO::JobPrivate::m_incomingMetaData
MetaData m_incomingMetaData
Definition: job_p.h:60
KIO::JobUiDelegate
A UI delegate tuned to be used with KIO Jobs.
Definition: jobuidelegate.h:40
KIO::Job
The base class for all jobs.
Definition: jobclasses.h:94
KIO::MetaData
MetaData is a simple map of key/value strings.
Definition: global.h:397
KIO::MkdirJob
A KIO job that creates a directory.
Definition: job_p.h:222
KIO::MkdirJob::permanentRedirection
void permanentRedirection(KIO::Job *job, const KUrl &fromUrl, const KUrl &toUrl)
Signals a permanent redirection.
KIO::MkdirJob::redirection
void redirection(KIO::Job *job, const KUrl &url)
Signals a redirection.
KIO::SimpleJobPrivate
Definition: job_p.h:82
KIO::SimpleJobPrivate::_k_slotSlaveInfoMessage
void _k_slotSlaveInfoMessage(const QString &s)
Called on a slave's info message.
Definition: job.cpp:516
KIO::SimpleJobPrivate::m_slave
Slave * m_slave
Definition: job_p.h:104
KIO::SimpleJobPrivate::m_protocol
QString m_protocol
Definition: job_p.h:125
KIO::SimpleJobPrivate::get
static SimpleJobPrivate * get(KIO::SimpleJob *job)
Definition: job_p.h:199
KIO::SimpleJobPrivate::SimpleJobPrivate
SimpleJobPrivate(const KUrl &url, int command, const QByteArray &packedArgs)
Creates a new simple job.
Definition: job_p.h:90
KIO::SimpleJobPrivate::requestMessageBox
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.
Definition: job.cpp:562
KIO::SimpleJobPrivate::restartAfterRedirection
void restartAfterRedirection(KUrl *redirectionUrl)
Called by subclasses to restart the job after a redirection was signalled.
Definition: job.cpp:548
KIO::SimpleJobPrivate::simpleJobInit
void simpleJobInit()
Definition: job.cpp:298
KIO::SimpleJobPrivate::m_url
KUrl m_url
Definition: job_p.h:106
KIO::SimpleJobPrivate::m_redirectionHandlingEnabled
bool m_redirectionHandlingEnabled
Definition: job_p.h:129
KIO::SimpleJobPrivate::m_command
int m_command
Definition: job_p.h:108
KIO::SimpleJobPrivate::m_proxyList
QStringList m_proxyList
Definition: job_p.h:126
KIO::SimpleJobPrivate::slotConnected
void slotConnected()
Called on a slave's connected signal.
Definition: job.cpp:521
KIO::SimpleJobPrivate::slotSpeed
void slotSpeed(unsigned long speed)
Forward signal from the slave.
Definition: job.cpp:542
KIO::SimpleJobPrivate::slaveDone
void slaveDone()
Definition: job.cpp:453
KIO::SimpleJobPrivate::m_packedArgs
QByteArray m_packedArgs
Definition: job_p.h:105
KIO::SimpleJobPrivate::slotProcessedSize
void slotProcessedSize(KIO::filesize_t data_size)
Forward signal from the slave.
Definition: job.cpp:535
KIO::SimpleJobPrivate::newJobNoUi
static SimpleJob * newJobNoUi(const KUrl &url, int command, const QByteArray &packedArgs)
Definition: job_p.h:201
KIO::SimpleJobPrivate::m_checkOnHold
bool m_checkOnHold
Definition: job_p.h:127
KIO::SimpleJobPrivate::start
virtual void start(KIO::Slave *slave)
Definition: job.cpp:385
KIO::SimpleJobPrivate::newJob
static SimpleJob * newJob(const KUrl &url, int command, const QByteArray &packedArgs, JobFlags flags=HideProgressInfo)
Definition: job_p.h:206
KIO::SimpleJobPrivate::m_subUrl
KUrl m_subUrl
Definition: job_p.h:107
KIO::SimpleJobPrivate::m_schedSerial
int m_schedSerial
Definition: job_p.h:128
KIO::SimpleJobPrivate::slotTotalSize
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.
Definition: job.cpp:526
KIO::SimpleJob
A simple job (one url and one command).
Definition: jobclasses.h:322
KIO::SimpleJob::url
const KUrl & url() const
Returns the SimpleJob's URL.
Definition: job.cpp:341
KIO::Slave
Definition: slave.h:49
KIO::TransferJobPrivate
Definition: job_p.h:260
KIO::TransferJobPrivate::m_isMimetypeEmitted
bool m_isMimetypeEmitted
Definition: job_p.h:283
KIO::TransferJobPrivate::slotSubUrlData
void slotSubUrlData(KIO::Job *, const QByteArray &)
Definition: job.cpp:1295
KIO::TransferJobPrivate::slotErrorPage
void slotErrorPage()
Definition: job.cpp:1310
KIO::TransferJobPrivate::internalResume
void internalResume()
Flow control.
Definition: job.cpp:1220
KIO::TransferJobPrivate::staticData
QByteArray staticData
Definition: job_p.h:279
KIO::TransferJobPrivate::m_internalSuspended
bool m_internalSuspended
Definition: job_p.h:277
KIO::TransferJobPrivate::newJob
static TransferJob * newJob(const KUrl &url, int command, const QByteArray &packedArgs, QIODevice *ioDevice, JobFlags flags)
Definition: job_p.h:329
KIO::TransferJobPrivate::slotCanResume
void slotCanResume(KIO::filesize_t offset)
Definition: job.cpp:1315
KIO::TransferJobPrivate::TransferJobPrivate
TransferJobPrivate(const KUrl &url, int command, const QByteArray &packedArgs, const QByteArray &_staticData)
Definition: job_p.h:262
KIO::TransferJobPrivate::newJob
static TransferJob * newJob(const KUrl &url, int command, const QByteArray &packedArgs, const QByteArray &_staticData, JobFlags flags)
Definition: job_p.h:317
KIO::TransferJobPrivate::slotDataReqFromDevice
virtual void slotDataReqFromDevice()
Definition: job.cpp:1321
KIO::TransferJobPrivate::m_redirectionURL
KUrl m_redirectionURL
Definition: job_p.h:280
KIO::TransferJobPrivate::m_subJob
TransferJob * m_subJob
Definition: job_p.h:284
KIO::TransferJobPrivate::slotPostRedirection
void slotPostRedirection()
Definition: job.cpp:1691
KIO::TransferJobPrivate::m_redirectionList
KUrl::List m_redirectionList
Definition: job_p.h:281
KIO::TransferJobPrivate::internalSuspend
void internalSuspend()
Flow control.
Definition: job.cpp:1213
KIO::TransferJobPrivate::start
virtual void start(KIO::Slave *slave)
Definition: job.cpp:1242
KIO::TransferJobPrivate::m_outgoingDataSource
QPointer< QIODevice > m_outgoingDataSource
Definition: job_p.h:285
KIO::TransferJobPrivate::slotNeedSubUrlData
void slotNeedSubUrlData()
Definition: job.cpp:1284
KIO::TransferJobPrivate::m_mimetype
QString m_mimetype
Definition: job_p.h:282
KIO::TransferJobPrivate::m_errorPage
bool m_errorPage
Definition: job_p.h:278
KIO::TransferJobPrivate::TransferJobPrivate
TransferJobPrivate(const KUrl &url, int command, const QByteArray &packedArgs, QIODevice *ioDevice)
Definition: job_p.h:269
KIO::TransferJob
The transfer job pumps data into and/or out of a Slave.
Definition: jobclasses.h:555
KJobPrivate::uiDelegate
KJobUiDelegate * uiDelegate
KJobTrackerInterface::registerJob
virtual void registerJob(KJob *job)
KJob
KJob::setUiDelegate
void setUiDelegate(KJobUiDelegate *delegate)
KUrl::List
KUrl
KUrl::split
static List split(const KUrl &_url)
KUrl::hasSubUrl
bool hasSubUrl() const
KUrl::join
static KUrl join(const List &_list)
QIODevice
job.h
jobuidelegate.h
kcompositejob_p.h
kjobtrackerinterface.h
KIO
A namespace for KIO globals.
Definition: kbookmarkmenu.h:55
KIO::HideProgressInfo
@ HideProgressInfo
Hide progress information dialog, i.e.
Definition: jobclasses.h:51
KIO::filesize_t
qulonglong filesize_t
64-bit file size
Definition: global.h:57
KIO::getJobTracker
KJobTrackerInterface * getJobTracker()
Definition: global.cpp:1246
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Mon Feb 20 2023 00:00:00 by doxygen 1.9.6 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

KIO

Skip menu "KIO"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdelibs-4.14.38 API Reference

Skip menu "kdelibs-4.14.38 API Reference"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDEWebKit
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • kio
  • KIOSlave
  • KJS
  •   KJS-API
  •   WTF
  • kjsembed
  • KNewStuff
  • KParts
  • KPty
  • Kross
  • KUnitConversion
  • KUtils
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver
Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal