32 #include <QtCore/QCharRef>
33 #include <QtGui/QApplication>
34 #include <QtCore/QFile>
35 #include <QtCore/QMetaClassInfo>
36 #include <QtCore/QTextIStream>
52 class NetAccessPrivate
84 NetAccess::NetAccess() :
85 d( new NetAccessPrivate )
89 NetAccess::~NetAccess()
110 if (target.isEmpty())
113 tmpFile.setAutoRemove(
false);
115 target = tmpFile.fileName();
124 return kioNet.filecopyInternal( u, dest, -1,
KIO::Overwrite, window,
false );
129 if (target.isEmpty())
141 return kioNet.filecopyInternal( s, target, -1,
KIO::Overwrite, window,
false );
151 #ifndef KDE_NO_DEPRECATED
178 srcList.append( src );
185 return kioNet.dircopyInternal( srcList, target, window,
false );
188 #ifndef KDE_NO_DEPRECATED
192 srcList.append( src );
194 return kioNet.dircopyInternal( srcList, target, window,
true );
198 #ifndef KDE_NO_DEPRECATED
202 return kioNet.dircopyInternal( srcList, target, window,
true );
206 #ifndef KDE_NO_DEPRECATED
212 return kioNet.statInternal( url, 0 ,
222 return kioNet.statInternal( url, 0 , side, window );
228 bool ret = kioNet.statInternal( url, 2 ,
SourceSide, window );
230 entry = kioNet.d->m_entry;
242 if (!
stat(url, entry, window))
248 if ( !path.isEmpty() )
261 return kioNet.delInternal( url, window );
267 return kioNet.mkdirInternal( url, permissions, window );
273 return kioNet.fish_executeInternal( url, command, window );
284 const bool ok = kioNet.synchronousRunInternal(job, window, data, finalURL, metaData);
294 return kioNet.mimetypeInternal( url, window );
313 unlink(QFile::encodeName(name));
318 bool NetAccess::filecopyInternal(
const KUrl& src,
const KUrl& target,
int permissions,
326 : KIO::
file_copy( src, target, permissions, flags );
328 connect( job, SIGNAL(result(
KJob*)),
329 this, SLOT(slotResult(
KJob*)) );
335 bool NetAccess::dircopyInternal(
const KUrl::List& src,
const KUrl& target,
342 : KIO::
copy( src, target );
344 connect( job, SIGNAL(result(
KJob*)),
345 this, SLOT(slotResult(
KJob*)) );
351 bool NetAccess::statInternal(
const KUrl & url,
int details, StatSide side,
360 connect( job, SIGNAL(result(
KJob*)),
361 this, SLOT(slotResult(
KJob*)) );
366 bool NetAccess::delInternal(
const KUrl & url,
QWidget* window )
371 connect( job, SIGNAL(result(
KJob*)),
372 this, SLOT(slotResult(
KJob*)) );
377 bool NetAccess::mkdirInternal(
const KUrl & url,
int permissions,
383 connect( job, SIGNAL(result(
KJob*)),
384 this, SLOT(slotResult(
KJob*)) );
392 d->m_mimetype = QLatin1String(
"unknown");
395 connect( job, SIGNAL(result(
KJob*)),
396 this, SLOT(slotResult(
KJob*)) );
400 return d->m_mimetype;
405 d->m_mimetype = type;
410 QString target, remoteTempFileName, resultData;
419 remoteTempFileName = tmpFile.fileName();
422 int pos = remoteTempFileName.lastIndexOf(
'/');
423 remoteTempFileName =
"/tmp/fishexec_" + remoteTempFileName.mid(pos + 1);
424 tempPathUrl.
setPath( remoteTempFileName );
426 QByteArray packedArgs;
427 QDataStream stream( &packedArgs, QIODevice::WriteOnly );
429 stream << int(
'X') << tempPathUrl << command;
433 connect( job, SIGNAL(result(
KJob*)),
434 this, SLOT(slotResult(
KJob*)) );
440 QFile resultFile( target );
442 if (resultFile.open( QIODevice::ReadOnly ))
444 QTextStream ts( &resultFile );
445 resultData = ts.readAll();
453 resultData =
i18n(
"ERROR: Unknown protocol '%1'", url.
protocol() );
458 bool NetAccess::synchronousRunInternal(
Job* job,
QWidget* window, QByteArray* data,
463 d->m_metaData = metaData;
464 if ( d->m_metaData ) {
473 d->m_url = sj->
url();
477 connect( job, SIGNAL(result(
KJob*)),
478 this, SLOT(slotResult(
KJob*)) );
480 const QMetaObject* meta = job->metaObject();
482 static const char dataSignal[] =
"data(KIO::Job*,QByteArray)";
483 if ( meta->indexOfSignal( dataSignal ) != -1 ) {
484 connect( job, SIGNAL(data(
KIO::Job*,QByteArray)),
485 this, SLOT(slotData(
KIO::Job*,QByteArray)) );
488 static const char redirSignal[] =
"redirection(KIO::Job*,KUrl)";
489 if ( meta->indexOfSignal( redirSignal ) != -1 ) {
497 *finalURL = d->m_url;
504 void NetAccess::enter_loop()
506 QEventLoop eventLoop;
508 &eventLoop, SLOT(
quit()));
509 eventLoop.exec(QEventLoop::ExcludeUserInputEvents);
512 void NetAccess::slotResult(
KJob * job )
515 d->bJobOK = !job->error();
527 if ( kioJob && d->m_metaData )
528 *d->m_metaData = kioJob->
metaData();
533 void NetAccess::slotData(
KIO::Job*,
const QByteArray& data )
535 if ( data.isEmpty() )
538 unsigned offset = d->m_data.size();
539 d->m_data.resize( offset + data.size() );
540 std::memcpy( d->m_data.data() + offset, data.data(), data.size() );
543 void NetAccess::slotRedirection(
KIO::Job*,
const KUrl& url )
548 #include "netaccess.moc"