29
29
***************************************************************************/
31
31
#include "kiojobwrapper.h"
36
#include <QtCore/QEvent>
37
#include <QtGui/QApplication>
38
#include <QtGui/QTextDocument>
34
41
#include <kio/global.h>
35
42
#include <kio/jobclasses.h>
36
43
#include <kio/directorysizejob.h>
37
44
#include <kio/jobuidelegate.h>
38
45
#include <kio/job.h>
39
#include <qapplication.h>
41
46
#include <klocale.h>
42
48
#include "virtualcopyjob.h"
43
#include <QTextDocument>
45
class JobStartEvent : public QEvent {
51
class JobStartEvent : public QEvent
47
JobStartEvent( KIOJobWrapper * wrapperIn ) : QEvent( QEvent::User ),
48
m_wrapper( wrapperIn ) {}
49
virtual ~JobStartEvent() { if( m_wrapper->m_delete ) delete m_wrapper; }
51
KIOJobWrapper * wrapper() { return m_wrapper; }
54
JobStartEvent(KIOJobWrapper * wrapperIn) : QEvent(QEvent::User),
55
m_wrapper(wrapperIn) {}
56
virtual ~JobStartEvent() {
57
if (m_wrapper->m_delete) delete m_wrapper;
60
KIOJobWrapper * wrapper() {
53
KIOJobWrapper * m_wrapper;
64
KIOJobWrapper * m_wrapper;
56
67
KrJobStarter * KrJobStarter::m_self = 0;
58
bool KrJobStarter::event( QEvent * e ) {
59
if( e->type() == QEvent::User ) {
60
JobStartEvent *je = (JobStartEvent *)e;
61
je->wrapper()->createJob();
64
return QObject::event( e );
67
KIOJobWrapper::KIOJobWrapper( KIOJobWrapperType type, KUrl &url ) : QObject( 0 ),
68
m_autoErrorHandling( false ), m_delete( true ), m_started( false ),
69
m_suspended( false ) {
70
moveToThread(QApplication::instance()->thread());
75
KIOJobWrapper::KIOJobWrapper( KIOJobWrapperType type, KUrl &url, void * userData ) : QObject( 0 ),
76
m_autoErrorHandling( false ), m_delete( true ), m_started( false ),
77
m_suspended( false ) {
78
moveToThread(QApplication::instance()->thread());
81
m_userData = userData;
84
KIOJobWrapper::KIOJobWrapper( KIOJobWrapperType type, KUrl &url, KUrl::List &list,
85
int pmode, bool showp ) : QObject( 0 ),
86
m_autoErrorHandling( false ), m_delete( true ), m_started( false ),
87
m_suspended( false ) {
88
moveToThread(QApplication::instance()->thread());
93
m_showProgress = showp;
96
KIOJobWrapper::~KIOJobWrapper() {
99
void KIOJobWrapper::createJob() {
103
job = KIO::stat( m_url );
106
job = KIO::directorySize( m_url );
111
VirtualCopyJob * vcj = (VirtualCopyJob *)m_userData;
117
job = PreservingCopyJob::createCopyJob( (PreserveMode)m_pmode, m_urlList, m_url, KIO::CopyJob::Copy, false, m_showProgress );
120
job = PreservingCopyJob::createCopyJob( (PreserveMode)m_pmode, m_urlList, m_url, KIO::CopyJob::Move, false, m_showProgress );
123
fprintf( stderr, "Internal error: invalid job!\n" );
129
connect( job, SIGNAL( destroyed() ), this, SLOT( deleteLater() ) );
130
for( int i=0; i != m_signals.count(); i++ )
131
if( !m_receivers[ i ].isNull() )
132
connect( job, m_signals[ i ], m_receivers[ i ], m_methods[ i ] );
134
if( m_autoErrorHandling && job->ui() )
135
job->ui()->setAutoErrorHandlingEnabled( true );
141
KIOJobWrapper * KIOJobWrapper::stat( KUrl &url ) {
142
return new KIOJobWrapper( Stat, url );
145
KIOJobWrapper * KIOJobWrapper::directorySize( KUrl &url ) {
146
return new KIOJobWrapper( DirectorySize, url );
149
KIOJobWrapper * KIOJobWrapper::copy( int pmode, KUrl::List &list, KUrl &url, bool showProgress ) {
150
return new KIOJobWrapper( Copy, url, list, pmode, showProgress );
153
KIOJobWrapper * KIOJobWrapper::move( int pmode, KUrl::List &list, KUrl &url, bool showProgress ) {
154
return new KIOJobWrapper( Move, url, list, pmode, showProgress );
157
KIOJobWrapper * KIOJobWrapper::virtualCopy( const QStringList *names, vfs * vfs, KUrl& dest,
158
const KUrl& baseURL, int pmode, bool showProgressInfo ) {
159
return new KIOJobWrapper( VirtualCopy, dest,
160
new VirtualCopyJob( names, vfs, dest, baseURL, (PreserveMode)pmode, KIO::CopyJob::Copy, showProgressInfo, false ) );
163
KIOJobWrapper * KIOJobWrapper::virtualMove( const QStringList *names, vfs * vfs, KUrl& dest,
164
const KUrl& baseURL, int pmode, bool showProgressInfo ) {
165
return new KIOJobWrapper( VirtualMove, dest,
166
new VirtualCopyJob( names, vfs, dest, baseURL, (PreserveMode)pmode, KIO::CopyJob::Move, showProgressInfo, false ) );
169
void KIOJobWrapper::start() {
171
KrJobStarter *self = KrJobStarter::self();
172
QApplication::postEvent( self, new JobStartEvent( this ) );
175
void KIOJobWrapper::connectTo( const char * signal, const QObject * receiver, const char * method ) {
176
m_signals.append( signal );
177
m_receivers.append( (QObject *)receiver );
178
m_methods.append( method );
181
QString KIOJobWrapper::typeStr() {
185
return i18n( "Status" );
187
return i18n( "Directory Size" );
190
return i18n( "Copy" );
193
return i18n( "Move" );
195
return i18n( "Unknown" );
199
void KIOJobWrapper::suspend() {
205
void KIOJobWrapper::resume() {
211
void KIOJobWrapper::abort() {
216
QString KIOJobWrapper::toolTip() {
217
QString tip = "<qt><div align=\"center\">";
218
tip += "<h3>" + Qt::escape( typeStr() ) + "</h3>";
219
tip += "<table frame=\"box\" border=\"1\"><tbody>";
220
tip += "<tr><td>" + Qt::escape( i18n( "Target" ) ) + "</td><td>" + Qt::escape( url().prettyUrl() ) + "</td></tr>";
221
tip += "<tr><td>" + Qt::escape( i18n( "Source" ) ) + "</td><td>";
222
foreach( KUrl urlIn, urlList() ) {
223
tip += "<li>" + Qt::escape( urlIn.prettyUrl() ) + "</li>";
226
tip += "</tbody></table>";
227
tip += "</div></qt>";
69
bool KrJobStarter::event(QEvent * e)
71
if (e->type() == QEvent::User) {
72
JobStartEvent *je = (JobStartEvent *)e;
73
je->wrapper()->createJob();
76
return QObject::event(e);
79
KIOJobWrapper::KIOJobWrapper(KIOJobWrapperType type, const KUrl &url) : QObject(0),
80
m_autoErrorHandling(false), m_delete(true), m_started(false),
83
moveToThread(QApplication::instance()->thread());
88
KIOJobWrapper::KIOJobWrapper(KIOJobWrapperType type, const KUrl &url, void * userData) : QObject(0),
89
m_autoErrorHandling(false), m_delete(true), m_started(false),
92
moveToThread(QApplication::instance()->thread());
95
m_userData = userData;
98
KIOJobWrapper::KIOJobWrapper(KIOJobWrapperType type, const KUrl &url, const KUrl::List &list,
99
int pmode, bool showp) : QObject(0),
100
m_autoErrorHandling(false), m_delete(true), m_started(false),
103
moveToThread(QApplication::instance()->thread());
108
m_showProgress = showp;
111
KIOJobWrapper::KIOJobWrapper(KIOJobWrapperType type, const KUrl &url, const KUrl &dest, const QStringList &names,
112
bool showp, const QString &atype, const QMap<QString, QString> &packProps) : QObject(0),
113
m_urlList(), m_autoErrorHandling(false), m_delete(true), m_started(false),
118
m_archiveSourceBase = url;
119
foreach(const QString &name , names) {
121
srcUrl.addPath(name);
124
m_archiveFileNames = names;
125
m_showProgress = showp;
126
m_archiveType = atype;
127
m_archiveProperties = packProps;
130
KIOJobWrapper::~KIOJobWrapper()
134
void KIOJobWrapper::createJob()
139
job = KIO::stat(m_url);
142
job = KIO::directorySize(m_url);
146
VirtualCopyJob * vcj = (VirtualCopyJob *)m_userData;
152
job = PreservingCopyJob::createCopyJob((PreserveMode)m_pmode, m_urlList, m_url, KIO::CopyJob::Copy, false, m_showProgress);
155
job = PreservingCopyJob::createCopyJob((PreserveMode)m_pmode, m_urlList, m_url, KIO::CopyJob::Move, false, m_showProgress);
158
job = PackJob::createPacker(m_archiveSourceBase, m_url, m_archiveFileNames, m_archiveType, m_archiveProperties);
161
job = UnpackJob::createUnpacker(m_archiveSourceBase, m_url, m_archiveFileNames);
164
fprintf(stderr, "Internal error: invalid job!\n");
170
connect(job, SIGNAL(destroyed()), this, SLOT(deleteLater()));
171
for (int i = 0; i != m_signals.count(); i++)
172
if (!m_receivers[ i ].isNull())
173
connect(job, m_signals[ i ], m_receivers[ i ], m_methods[ i ]);
175
if (m_autoErrorHandling && job->ui())
176
job->ui()->setAutoErrorHandlingEnabled(true);
182
KIOJobWrapper * KIOJobWrapper::stat(KUrl &url)
184
return new KIOJobWrapper(Stat, url);
187
KIOJobWrapper * KIOJobWrapper::directorySize(KUrl &url)
189
return new KIOJobWrapper(DirectorySize, url);
192
KIOJobWrapper * KIOJobWrapper::copy(int pmode, KUrl::List &list, KUrl &url, bool showProgress)
194
return new KIOJobWrapper(Copy, url, list, pmode, showProgress);
197
KIOJobWrapper * KIOJobWrapper::move(int pmode, KUrl::List &list, KUrl &url, bool showProgress)
199
return new KIOJobWrapper(Move, url, list, pmode, showProgress);
202
KIOJobWrapper * KIOJobWrapper::virtualCopy(const QStringList *names, vfs * vfs, KUrl& dest,
203
const KUrl& baseURL, int pmode, bool showProgressInfo)
205
return new KIOJobWrapper(VirtualCopy, dest,
206
new VirtualCopyJob(names, vfs, dest, baseURL, (PreserveMode)pmode, KIO::CopyJob::Copy, showProgressInfo, false));
209
KIOJobWrapper * KIOJobWrapper::virtualMove(const QStringList *names, vfs * vfs, KUrl& dest,
210
const KUrl& baseURL, int pmode, bool showProgressInfo)
212
return new KIOJobWrapper(VirtualMove, dest,
213
new VirtualCopyJob(names, vfs, dest, baseURL, (PreserveMode)pmode, KIO::CopyJob::Move, showProgressInfo, false));
216
KIOJobWrapper * KIOJobWrapper::pack(const KUrl &srcUrl, const KUrl &destUrl, const QStringList & fileNames,
217
const QString &type, const QMap<QString, QString> &packProps, bool showProgressInfo)
219
return new KIOJobWrapper(Pack, srcUrl, destUrl, fileNames, showProgressInfo, type, packProps);
222
KIOJobWrapper * KIOJobWrapper::unpack(const KUrl &srcUrl, const KUrl &destUrl, const QStringList & fileNames,
223
bool showProgressInfo)
225
return new KIOJobWrapper(Unpack, srcUrl, destUrl, fileNames, showProgressInfo, QString(), QMap<QString, QString> ());
228
void KIOJobWrapper::start()
231
KrJobStarter *self = KrJobStarter::self();
232
QApplication::postEvent(self, new JobStartEvent(this));
235
void KIOJobWrapper::connectTo(const char * signal, const QObject * receiver, const char * method)
237
m_signals.append(signal);
238
m_receivers.append((QObject *)receiver);
239
m_methods.append(method);
242
QString KIOJobWrapper::typeStr()
246
return i18n("Status");
248
return i18n("Directory Size");
258
return i18n("Unpack");
260
return i18n("Unknown");
264
void KIOJobWrapper::suspend()
271
void KIOJobWrapper::resume()
278
void KIOJobWrapper::abort()
284
QString KIOJobWrapper::toolTip()
286
QString tip = "<qt><div align=\"center\">";
287
tip += "<h3>" + Qt::escape(typeStr()) + "</h3>";
288
tip += "<table frame=\"box\" border=\"1\"><tbody>";
289
tip += "<tr><td>" + Qt::escape(i18n("Target")) + "</td><td>" + Qt::escape(url().prettyUrl()) + "</td></tr>";
290
tip += "<tr><td>" + Qt::escape(i18n("Source")) + "</td><td>";
291
foreach(const KUrl &urlIn, urlList()) {
292
tip += "<li>" + Qt::escape(urlIn.prettyUrl()) + "</li>";
295
tip += "</tbody></table>";
296
tip += "</div></qt>";