21 #include <tdeio/job.h>
22 #include <kmimetype.h>
23 #include <kprotocolinfo.h>
25 #include <tqapplication.h>
26 #include <tqeventloop.h>
28 #include "forwardingslavebase.h"
33 class ForwardingSlaveBasePrivate
37 ForwardingSlaveBase::ForwardingSlaveBase(
const TQCString &protocol,
38 const TQCString &poolSocket,
39 const TQCString &appSocket)
40 : TQObject(), SlaveBase(protocol, poolSocket, appSocket)
44 ForwardingSlaveBase::~ForwardingSlaveBase()
48 bool ForwardingSlaveBase::internalRewriteURL(
const KURL &url, KURL &newURL)
52 if ( url.protocol().ascii()==mProtocol )
54 result = rewriteURL(url, newURL);
61 m_processedURL = newURL;
69 kdDebug() <<
"ForwardingSlaveBase::prepareUDSEntry: listing=="
75 TDEIO::UDSEntry::iterator it = entry.begin();
76 TDEIO::UDSEntry::iterator end = entry.end();
80 KURL new_url = m_requestedURL;
86 kdDebug() <<
"Name = " << name << endl;
92 new_url.addPath(url.fileName());
94 (*it).m_str = new_url.url();
95 kdDebug() <<
"URL = " << url << endl;
96 kdDebug() <<
"New URL = " << (*it).m_str << endl;
101 if ( m_processedURL.isLocalFile() )
103 KURL new_url = m_processedURL;
106 new_url.addPath( name );
112 atom.m_str = new_url.path();
117 void ForwardingSlaveBase::get(
const KURL &url)
119 kdDebug() <<
"ForwardingSlaveBase::get: " << url << endl;
122 if ( internalRewriteURL(url, new_url) )
125 connectTransferJob(job);
127 tqApp->eventLoop()->enterLoop();
131 void ForwardingSlaveBase::put(
const KURL &url,
int permissions,
132 bool overwrite,
bool resume )
134 kdDebug() <<
"ForwardingSlaveBase::put: " << url << endl;
137 if ( internalRewriteURL(url, new_url) )
141 connectTransferJob(job);
143 tqApp->eventLoop()->enterLoop();
147 void ForwardingSlaveBase::stat(
const KURL &url)
149 kdDebug() <<
"ForwardingSlaveBase::stat: " << url << endl;
152 if ( internalRewriteURL(url, new_url) )
155 connectSimpleJob(job);
157 tqApp->eventLoop()->enterLoop();
161 void ForwardingSlaveBase::mimetype(
const KURL &url)
163 kdDebug() <<
"ForwardingSlaveBase::mimetype: " << url << endl;
166 if ( internalRewriteURL(url, new_url) )
169 connectTransferJob(job);
171 tqApp->eventLoop()->enterLoop();
175 void ForwardingSlaveBase::listDir(
const KURL &url)
177 kdDebug() <<
"ForwardingSlaveBase::listDir: " << url << endl;
180 if ( internalRewriteURL(url, new_url) )
185 tqApp->eventLoop()->enterLoop();
189 void ForwardingSlaveBase::mkdir(
const KURL &url,
int permissions)
191 kdDebug() <<
"ForwardingSlaveBase::mkdir: " << url << endl;
194 if ( internalRewriteURL(url, new_url) )
197 connectSimpleJob(job);
199 tqApp->eventLoop()->enterLoop();
203 void ForwardingSlaveBase::rename(
const KURL &src,
const KURL &dest,
206 kdDebug() <<
"ForwardingSlaveBase::rename: " << src <<
", " << dest << endl;
208 KURL new_src, new_dest;
209 if ( internalRewriteURL(src, new_src) && internalRewriteURL(dest, new_dest) )
214 tqApp->eventLoop()->enterLoop();
218 void ForwardingSlaveBase::symlink(
const TQString &target,
const KURL &dest,
221 kdDebug() <<
"ForwardingSlaveBase::symlink: " << target <<
", " << dest << endl;
224 if ( internalRewriteURL(dest, new_dest) )
227 connectSimpleJob(job);
229 tqApp->eventLoop()->enterLoop();
233 void ForwardingSlaveBase::chmod(
const KURL &url,
int permissions)
235 kdDebug() <<
"ForwardingSlaveBase::chmod: " << url << endl;
238 if ( internalRewriteURL(url, new_url) )
241 connectSimpleJob(job);
243 tqApp->eventLoop()->enterLoop();
247 void ForwardingSlaveBase::copy(
const KURL &src,
const KURL &dest,
248 int permissions,
bool overwrite)
250 kdDebug() <<
"ForwardingSlaveBase::copy: " << src <<
", " << dest << endl;
252 KURL new_src, new_dest;
253 if ( internalRewriteURL(src, new_src) && internalRewriteURL(dest, new_dest) )
259 tqApp->eventLoop()->enterLoop();
263 void ForwardingSlaveBase::del(
const KURL &url,
bool isfile)
265 kdDebug() <<
"ForwardingSlaveBase::del: " << url << endl;
268 if ( internalRewriteURL(url, new_url) )
278 connectSimpleJob(job);
281 tqApp->eventLoop()->enterLoop();
285 void ForwardingSlaveBase::localURL(
const KURL& remoteURL)
287 kdDebug() <<
"ForwardingSlaveBase::localURL: " << remoteURL << endl;
290 if ( internalRewriteURL(remoteURL, new_url) )
293 connectLocalURLJob(job);
295 tqApp->eventLoop()->enterLoop();
300 SlaveBase::localURL(remoteURL);
306 void ForwardingSlaveBase::connectJob(
TDEIO::Job *job)
315 kdDebug() << k_funcinfo <<
"transferring metadata:" << endl;
317 for ( MetaData::const_iterator it = md.begin(); it != md.end(); ++it )
318 kdDebug() << it.key() <<
" = " << it.data() << endl;
321 connect( job, TQ_SIGNAL( result(
TDEIO::Job *) ),
323 connect( job, TQ_SIGNAL( warning(
TDEIO::Job *,
const TQString &) ),
324 this, TQ_SLOT( slotWarning(
TDEIO::Job *,
const TQString &) ) );
325 connect( job, TQ_SIGNAL( infoMessage(
TDEIO::Job *,
const TQString &) ),
326 this, TQ_SLOT( slotInfoMessage(
TDEIO::Job *,
const TQString &) ) );
331 connect( job, TQ_SIGNAL( speed(
TDEIO::Job *,
unsigned long) ),
332 this, TQ_SLOT( slotSpeed(
TDEIO::Job *,
unsigned long) ) );
338 connect( job, TQ_SIGNAL( redirection(
TDEIO::Job *,
const KURL &) ),
339 this, TQ_SLOT( slotRedirection(
TDEIO::Job *,
const KURL &) ) );
344 connectSimpleJob(job);
345 connect( job, TQ_SIGNAL( entries(
TDEIO::Job *,
const TDEIO::UDSEntryList &) ),
346 this, TQ_SLOT( slotEntries(
TDEIO::Job *,
const TDEIO::UDSEntryList &) ) );
351 connectSimpleJob(job);
352 connect( job, TQ_SIGNAL( data(
TDEIO::Job *,
const TQByteArray &) ),
353 this, TQ_SLOT( slotData(
TDEIO::Job *,
const TQByteArray &) ) );
354 connect( job, TQ_SIGNAL( dataReq(
TDEIO::Job *, TQByteArray &) ),
355 this, TQ_SLOT( slotDataReq(
TDEIO::Job *, TQByteArray &) ) );
357 this, TQ_SLOT( slotMimetype(
TDEIO::Job *,
const TQString &) ) );
371 void ForwardingSlaveBase::slotResult(
TDEIO::Job *job)
373 if ( job->
error() != 0)
383 prepareUDSEntry(entry);
389 tqApp->eventLoop()->exitLoop();
392 void ForwardingSlaveBase::slotWarning(
TDEIO::Job* ,
const TQString &msg)
397 void ForwardingSlaveBase::slotInfoMessage(
TDEIO::Job* ,
const TQString &msg)
412 void ForwardingSlaveBase::slotSpeed(
TDEIO::Job* ,
unsigned long bytesPerSecond)
414 speed(bytesPerSecond);
417 void ForwardingSlaveBase::slotRedirection(
TDEIO::Job *job,
const KURL &url)
425 tqApp->eventLoop()->exitLoop();
428 void ForwardingSlaveBase::slotEntries(
TDEIO::Job* ,
429 const TDEIO::UDSEntryList &entries)
431 TDEIO::UDSEntryList final_entries = entries;
433 TDEIO::UDSEntryList::iterator it = final_entries.begin();
434 TDEIO::UDSEntryList::iterator end = final_entries.end();
438 prepareUDSEntry(*it,
true);
441 listEntries( final_entries );
444 void ForwardingSlaveBase::slotData(
TDEIO::Job* ,
const TQByteArray &d)
449 void ForwardingSlaveBase::slotDataReq(
TDEIO::Job* , TQByteArray &data)
455 void ForwardingSlaveBase::slotMimetype (
TDEIO::Job* ,
const TQString &type)
467 SlaveBase::localURL(url);
472 #include "forwardingslavebase.moc"
A more complex Job to delete files and directories.
The base class for all jobs.
const TQString & errorText() const
Returns the error text if there has been an error.
virtual void kill(bool quietly=true)
Abort this job.
int error() const
Returns the error code, if there has been an error.
void setInteractive(bool enable)
Enable or disable the message display from the job.
void setMetaData(const TDEIO::MetaData &metaData)
A ListJob is allows you to get the get the content of a directory.
A TDEIO job that finds a local URL.
A simple job (one url and one command).
A TDEIO job that retrieves information about a file or directory.
const UDSEntry & statResult() const
The transfer job pumps data into and/or out of a Slave.
A namespace for TDEIO globals.
TDEIO_EXPORT ChmodJob * chmod(const KFileItemList &lstItems, int permissions, int mask, TQString newOwner, TQString newGroup, bool recursive, bool showProgressInfo=true)
Creates a job that changes permissions/ownership on several files or directories, optionally recursiv...
TDEIO_EXPORT SimpleJob * symlink(const TQString &target, const KURL &dest, bool overwrite, bool showProgressInfo=true)
Create or move a symlink.
TDEIO_EXPORT FileCopyJob * file_copy(const KURL &src, const KURL &dest, int permissions=-1, bool overwrite=false, bool resume=false, bool showProgressInfo=true)
Copy a single file.
TDEIO_EXPORT DeleteJob * del(const KURL &src, bool shred=false, bool showProgressInfo=true)
Delete a file or directory.
TDEIO_EXPORT LocalURLJob * localURL(const KURL &remoteUrl)
Retrieve local URL if available.
TDEIO_EXPORT MimetypeJob * mimetype(const KURL &url, bool showProgressInfo=true)
Find mimetype for one file or directory.
TDEIO_EXPORT SimpleJob * mkdir(const KURL &url, int permissions=-1)
Creates a single directory.
@ UDS_URL
An alternative URL (If different from the caption)
@ UDS_NAME
Filename - as displayed in directory listings etc.
@ UDS_LOCAL_PATH
A local file path if the ioslave display files sitting on the local filesystem (but in another hierar...
TQValueList< UDSAtom > UDSEntry
An entry is the list of atoms containing all the information for a file or URL.
TDEIO_EXPORT TransferJob * put(const KURL &url, int permissions, bool overwrite, bool resume, bool showProgressInfo=true)
Put (a.k.a.
TDEIO_EXPORT SimpleJob * rename(const KURL &src, const KURL &dest, bool overwrite)
Rename a file or directory.
TDEIO_EXPORT ListJob * listDir(const KURL &url, bool showProgressInfo=true, bool includeHidden=true)
List the contents of url, which is assumed to be a directory.
TDEIO_EXPORT TransferJob * get(const KURL &url, bool reload=false, bool showProgressInfo=true)
Get (a.k.a.
TQ_ULLONG filesize_t
64-bit file size
TDEIO_EXPORT StatJob * stat(const KURL &url, bool showProgressInfo=true)
Find all details for one file or directory.
TDEIO_EXPORT SimpleJob * rmdir(const KURL &url)
Removes a single directory.