• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • tdeio/tdeio
 

tdeio/tdeio

  • tdeio
  • tdeio
forwardingslavebase.cpp
1/* This file is part of the KDE project
2 Copyright (c) 2004 Kevin Ottens <ervin ipsquad net>
3
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public
6 License as published by the Free Software Foundation; either
7 version 2 of the License, or (at your option) any later version.
8
9 This library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Library General Public License for more details.
13
14 You should have received a copy of the GNU Library General Public License
15 along with this library; see the file COPYING.LIB. If not, write to
16 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 Boston, MA 02110-1301, USA.
18*/
19
20#include <kdebug.h>
21#include <tdeio/job.h>
22#include <kmimetype.h>
23#include <kprotocolinfo.h>
24
25#include <tqapplication.h>
26#include <tqeventloop.h>
27
28#include "forwardingslavebase.h"
29
30namespace TDEIO
31{
32
33class ForwardingSlaveBasePrivate
34{
35};
36
37ForwardingSlaveBase::ForwardingSlaveBase(const TQCString &protocol,
38 const TQCString &poolSocket,
39 const TQCString &appSocket)
40 : TQObject(), SlaveBase(protocol, poolSocket, appSocket)
41{
42}
43
44ForwardingSlaveBase::~ForwardingSlaveBase()
45{
46}
47
48bool ForwardingSlaveBase::internalRewriteURL(const KURL &url, KURL &newURL)
49{
50 bool result = true;
51
52 if ( url.protocol().ascii()==mProtocol )
53 {
54 result = rewriteURL(url, newURL);
55 }
56 else
57 {
58 newURL = url;
59 }
60
61 m_processedURL = newURL;
62 m_requestedURL = url;
63 return result;
64}
65
66void ForwardingSlaveBase::prepareUDSEntry(TDEIO::UDSEntry &entry,
67 bool listing) const
68{
69 kdDebug() << "ForwardingSlaveBase::prepareUDSEntry: listing=="
70 << listing << endl;
71
72 TQString name;
73 KURL url;
74
75 TDEIO::UDSEntry::iterator it = entry.begin();
76 TDEIO::UDSEntry::iterator end = entry.end();
77
78 for(; it!=end; ++it)
79 {
80 KURL new_url = m_requestedURL;
81
82 switch( (*it).m_uds )
83 {
84 case TDEIO::UDS_NAME:
85 name = (*it).m_str;
86 kdDebug() << "Name = " << name << endl;
87 break;
88 case TDEIO::UDS_URL:
89 url = (*it).m_str;
90 if (listing)
91 {
92 new_url.addPath(url.fileName());
93 }
94 (*it).m_str = new_url.url();
95 kdDebug() << "URL = " << url << endl;
96 kdDebug() << "New URL = " << (*it).m_str << endl;
97 break;
98 }
99 }
100
101 if ( m_processedURL.isLocalFile() )
102 {
103 KURL new_url = m_processedURL;
104 if (listing)
105 {
106 new_url.addPath( name );
107 }
108
109 TDEIO::UDSAtom atom;
110 atom.m_uds = TDEIO::UDS_LOCAL_PATH;
111 atom.m_long = 0;
112 atom.m_str = new_url.path();
113 entry.append(atom);
114 }
115}
116
117void ForwardingSlaveBase::get(const KURL &url)
118{
119 kdDebug() << "ForwardingSlaveBase::get: " << url << endl;
120
121 KURL new_url;
122 if ( internalRewriteURL(url, new_url) )
123 {
124 TDEIO::TransferJob *job = TDEIO::get(new_url, false, false);
125 connectTransferJob(job);
126
127 tqApp->eventLoop()->enterLoop();
128 }
129}
130
131void ForwardingSlaveBase::put(const KURL &url, int permissions,
132 bool overwrite, bool resume )
133{
134 kdDebug() << "ForwardingSlaveBase::put: " << url << endl;
135
136 KURL new_url;
137 if ( internalRewriteURL(url, new_url) )
138 {
139 TDEIO::TransferJob *job = TDEIO::put(new_url, permissions, overwrite,
140 resume, false);
141 connectTransferJob(job);
142
143 tqApp->eventLoop()->enterLoop();
144 }
145}
146
147void ForwardingSlaveBase::stat(const KURL &url)
148{
149 kdDebug() << "ForwardingSlaveBase::stat: " << url << endl;
150
151 KURL new_url;
152 if ( internalRewriteURL(url, new_url) )
153 {
154 TDEIO::SimpleJob *job = TDEIO::stat(new_url, false);
155 connectSimpleJob(job);
156
157 tqApp->eventLoop()->enterLoop();
158 }
159}
160
161void ForwardingSlaveBase::mimetype(const KURL &url)
162{
163 kdDebug() << "ForwardingSlaveBase::mimetype: " << url << endl;
164
165 KURL new_url;
166 if ( internalRewriteURL(url, new_url) )
167 {
168 TDEIO::TransferJob *job = TDEIO::mimetype(new_url, false);
169 connectTransferJob(job);
170
171 tqApp->eventLoop()->enterLoop();
172 }
173}
174
175void ForwardingSlaveBase::listDir(const KURL &url)
176{
177 kdDebug() << "ForwardingSlaveBase::listDir: " << url << endl;
178
179 KURL new_url;
180 if ( internalRewriteURL(url, new_url) )
181 {
182 TDEIO::ListJob *job = TDEIO::listDir(new_url, false);
183 connectListJob(job);
184
185 tqApp->eventLoop()->enterLoop();
186 }
187}
188
189void ForwardingSlaveBase::mkdir(const KURL &url, int permissions)
190{
191 kdDebug() << "ForwardingSlaveBase::mkdir: " << url << endl;
192
193 KURL new_url;
194 if ( internalRewriteURL(url, new_url) )
195 {
196 TDEIO::SimpleJob *job = TDEIO::mkdir(new_url, permissions);
197 connectSimpleJob(job);
198
199 tqApp->eventLoop()->enterLoop();
200 }
201}
202
203void ForwardingSlaveBase::rename(const KURL &src, const KURL &dest,
204 bool overwrite)
205{
206 kdDebug() << "ForwardingSlaveBase::rename: " << src << ", " << dest << endl;
207
208 KURL new_src, new_dest;
209 if ( internalRewriteURL(src, new_src) && internalRewriteURL(dest, new_dest) )
210 {
211 TDEIO::Job *job = TDEIO::rename(new_src, new_dest, overwrite);
212 connectJob(job);
213
214 tqApp->eventLoop()->enterLoop();
215 }
216}
217
218void ForwardingSlaveBase::symlink(const TQString &target, const KURL &dest,
219 bool overwrite)
220{
221 kdDebug() << "ForwardingSlaveBase::symlink: " << target << ", " << dest << endl;
222
223 KURL new_dest;
224 if ( internalRewriteURL(dest, new_dest) )
225 {
226 TDEIO::SimpleJob *job = TDEIO::symlink(target, new_dest, overwrite, false);
227 connectSimpleJob(job);
228
229 tqApp->eventLoop()->enterLoop();
230 }
231}
232
233void ForwardingSlaveBase::chmod(const KURL &url, int permissions)
234{
235 kdDebug() << "ForwardingSlaveBase::chmod: " << url << endl;
236
237 KURL new_url;
238 if ( internalRewriteURL(url, new_url) )
239 {
240 TDEIO::SimpleJob *job = TDEIO::chmod(new_url, permissions);
241 connectSimpleJob(job);
242
243 tqApp->eventLoop()->enterLoop();
244 }
245}
246
247void ForwardingSlaveBase::copy(const KURL &src, const KURL &dest,
248 int permissions, bool overwrite)
249{
250 kdDebug() << "ForwardingSlaveBase::copy: " << src << ", " << dest << endl;
251
252 KURL new_src, new_dest;
253 if ( internalRewriteURL(src, new_src) && internalRewriteURL(dest, new_dest) )
254 {
255 TDEIO::Job *job = TDEIO::file_copy(new_src, new_dest, permissions,
256 overwrite, false);
257 connectJob(job);
258
259 tqApp->eventLoop()->enterLoop();
260 }
261}
262
263void ForwardingSlaveBase::del(const KURL &url, bool isfile)
264{
265 kdDebug() << "ForwardingSlaveBase::del: " << url << endl;
266
267 KURL new_url;
268 if ( internalRewriteURL(url, new_url) )
269 {
270 if (isfile)
271 {
272 TDEIO::DeleteJob *job = TDEIO::del(new_url, false, false);
273 connectJob(job);
274 }
275 else
276 {
277 TDEIO::SimpleJob *job = TDEIO::rmdir(new_url);
278 connectSimpleJob(job);
279 }
280
281 tqApp->eventLoop()->enterLoop();
282 }
283}
284
285void ForwardingSlaveBase::localURL(const KURL& remoteURL)
286{
287 kdDebug() << "ForwardingSlaveBase::localURL: " << remoteURL << endl;
288
289 KURL new_url;
290 if ( internalRewriteURL(remoteURL, new_url) )
291 {
292 TDEIO::LocalURLJob *job = TDEIO::localURL(new_url);
293 connectLocalURLJob(job);
294
295 tqApp->eventLoop()->enterLoop();
296 }
297 else
298 {
299 // Let the slave base emit the required signals
300 SlaveBase::localURL(remoteURL);
301 }
302}
303
305
306void ForwardingSlaveBase::connectJob(TDEIO::Job *job)
307{
308 // We will forward the warning message, no need to let the job
309 // display it itself
310 job->setInteractive(false);
311
312 // Forward metadata (e.g. modification time for put())
313 job->setMetaData( allMetaData() );
314#if 0 // debug code
315 kdDebug() << k_funcinfo << "transferring metadata:" << endl;
316 const MetaData md = allMetaData();
317 for ( MetaData::const_iterator it = md.begin(); it != md.end(); ++it )
318 kdDebug() << it.key() << " = " << it.data() << endl;
319#endif
320
321 connect( job, TQ_SIGNAL( result(TDEIO::Job *) ),
322 this, TQ_SLOT( slotResult(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 &) ) );
327 connect( job, TQ_SIGNAL( totalSize(TDEIO::Job *, TDEIO::filesize_t) ),
328 this, TQ_SLOT( slotTotalSize(TDEIO::Job *, TDEIO::filesize_t) ) );
329 connect( job, TQ_SIGNAL( processedSize(TDEIO::Job *, TDEIO::filesize_t) ),
330 this, TQ_SLOT( slotProcessedSize(TDEIO::Job *, TDEIO::filesize_t) ) );
331 connect( job, TQ_SIGNAL( speed(TDEIO::Job *, unsigned long) ),
332 this, TQ_SLOT( slotSpeed(TDEIO::Job *, unsigned long) ) );
333}
334
335void ForwardingSlaveBase::connectSimpleJob(TDEIO::SimpleJob *job)
336{
337 connectJob(job);
338 connect( job, TQ_SIGNAL( redirection(TDEIO::Job *, const KURL &) ),
339 this, TQ_SLOT( slotRedirection(TDEIO::Job *, const KURL &) ) );
340}
341
342void ForwardingSlaveBase::connectListJob(TDEIO::ListJob *job)
343{
344 connectSimpleJob(job);
345 connect( job, TQ_SIGNAL( entries(TDEIO::Job *, const TDEIO::UDSEntryList &) ),
346 this, TQ_SLOT( slotEntries(TDEIO::Job *, const TDEIO::UDSEntryList &) ) );
347}
348
349void ForwardingSlaveBase::connectTransferJob(TDEIO::TransferJob *job)
350{
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 &) ) );
356 connect( job, TQ_SIGNAL( mimetype(TDEIO::Job *, const TQString &) ),
357 this, TQ_SLOT( slotMimetype(TDEIO::Job *, const TQString &) ) );
358 connect( job, TQ_SIGNAL( canResume(TDEIO::Job *, TDEIO::filesize_t) ),
359 this, TQ_SLOT( slotCanResume(TDEIO::Job *, TDEIO::filesize_t) ) );
360}
361
362void ForwardingSlaveBase::connectLocalURLJob(TDEIO::LocalURLJob *job)
363{
364 connectJob(job);
365 connect( job, TQ_SIGNAL( localURL(TDEIO::LocalURLJob *, const KURL&, bool) ),
366 this, TQ_SLOT( slotLocalURL(TDEIO::LocalURLJob *, const KURL&, bool) ) );
367}
368
370
371void ForwardingSlaveBase::slotResult(TDEIO::Job *job)
372{
373 if ( job->error() != 0)
374 {
375 error( job->error(), job->errorText() );
376 }
377 else
378 {
379 TDEIO::StatJob *stat_job = dynamic_cast<TDEIO::StatJob *>(job);
380 if ( stat_job!=0L )
381 {
382 TDEIO::UDSEntry entry = stat_job->statResult();
383 prepareUDSEntry(entry);
384 statEntry( entry );
385 }
386 finished();
387 }
388
389 tqApp->eventLoop()->exitLoop();
390}
391
392void ForwardingSlaveBase::slotWarning(TDEIO::Job* /*job*/, const TQString &msg)
393{
394 warning(msg);
395}
396
397void ForwardingSlaveBase::slotInfoMessage(TDEIO::Job* /*job*/, const TQString &msg)
398{
399 infoMessage(msg);
400}
401
402void ForwardingSlaveBase::slotTotalSize(TDEIO::Job* /*job*/, TDEIO::filesize_t size)
403{
404 totalSize(size);
405}
406
407void ForwardingSlaveBase::slotProcessedSize(TDEIO::Job* /*job*/, TDEIO::filesize_t size)
408{
409 processedSize(size);
410}
411
412void ForwardingSlaveBase::slotSpeed(TDEIO::Job* /*job*/, unsigned long bytesPerSecond)
413{
414 speed(bytesPerSecond);
415}
416
417void ForwardingSlaveBase::slotRedirection(TDEIO::Job *job, const KURL &url)
418{
419 redirection(url);
420
421 // We've been redirected stop everything.
422 job->kill( true );
423 finished();
424
425 tqApp->eventLoop()->exitLoop();
426}
427
428void ForwardingSlaveBase::slotEntries(TDEIO::Job* /*job*/,
429 const TDEIO::UDSEntryList &entries)
430{
431 TDEIO::UDSEntryList final_entries = entries;
432
433 TDEIO::UDSEntryList::iterator it = final_entries.begin();
434 TDEIO::UDSEntryList::iterator end = final_entries.end();
435
436 for(; it!=end; ++it)
437 {
438 prepareUDSEntry(*it, true);
439 }
440
441 listEntries( final_entries );
442}
443
444void ForwardingSlaveBase::slotData(TDEIO::Job* /*job*/, const TQByteArray &d)
445{
446 data(d);
447}
448
449void ForwardingSlaveBase::slotDataReq(TDEIO::Job* /*job*/, TQByteArray &data)
450{
451 dataReq();
452 readData(data);
453}
454
455void ForwardingSlaveBase::slotMimetype (TDEIO::Job* /*job*/, const TQString &type)
456{
457 mimeType(type);
458}
459
460void ForwardingSlaveBase::slotCanResume (TDEIO::Job* /*job*/, TDEIO::filesize_t offset)
461{
462 canResume(offset);
463}
464
465void ForwardingSlaveBase::slotLocalURL(TDEIO::LocalURLJob *, const KURL& url, bool)
466{
467 SlaveBase::localURL(url);
468}
469
470}
471
472#include "forwardingslavebase.moc"
473
TDEIO::DeleteJob
A more complex Job to delete files and directories.
Definition jobclasses.h:1762
TDEIO::Job
The base class for all jobs.
Definition jobclasses.h:67
TDEIO::Job::errorText
const TQString & errorText() const
Returns the error text if there has been an error.
Definition jobclasses.h:110
TDEIO::Job::kill
virtual void kill(bool quietly=true)
Abort this job.
Definition job.cpp:260
TDEIO::Job::error
int error() const
Returns the error code, if there has been an error.
Definition jobclasses.h:94
TDEIO::Job::setInteractive
void setInteractive(bool enable)
Enable or disable the message display from the job.
Definition job.cpp:371
TDEIO::Job::setMetaData
void setMetaData(const TDEIO::MetaData &metaData)
Definition job.cpp:429
TDEIO::ListJob
A ListJob is allows you to get the get the content of a directory.
Definition jobclasses.h:1391
TDEIO::LocalURLJob
A TDEIO job that finds a local URL.
Definition jobclasses.h:1865
TDEIO::MetaData
MetaData is a simple map of key/value strings.
Definition global.h:516
TDEIO::SimpleJob
A simple job (one url and one command).
Definition jobclasses.h:527
TDEIO::StatJob
A TDEIO job that retrieves information about a file or directory.
Definition jobclasses.h:687
TDEIO::StatJob::statResult
const UDSEntry & statResult() const
Definition jobclasses.h:726
TDEIO::TransferJob
The transfer job pumps data into and/or out of a Slave.
Definition jobclasses.h:874
TDEIO
A namespace for TDEIO globals.
Definition authinfo.h:29
TDEIO::chmod
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...
Definition chmodjob.cpp:230
TDEIO::symlink
TDEIO_EXPORT SimpleJob * symlink(const TQString &target, const KURL &dest, bool overwrite, bool showProgressInfo=true)
Create or move a symlink.
Definition job.cpp:808
TDEIO::file_copy
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.
Definition job.cpp:2027
TDEIO::del
TDEIO_EXPORT DeleteJob * del(const KURL &src, bool shred=false, bool showProgressInfo=true)
Delete a file or directory.
Definition job.cpp:4450
TDEIO::localURL
TDEIO_EXPORT LocalURLJob * localURL(const KURL &remoteUrl)
Retrieve local URL if available.
Definition job.cpp:870
TDEIO::mimetype
TDEIO_EXPORT MimetypeJob * mimetype(const KURL &url, bool showProgressInfo=true)
Find mimetype for one file or directory.
Definition job.cpp:1573
TDEIO::mkdir
TDEIO_EXPORT SimpleJob * mkdir(const KURL &url, int permissions=-1)
Creates a single directory.
Definition job.cpp:780
TDEIO::UDS_URL
@ UDS_URL
An alternative URL (If different from the caption)
Definition global.h:371
TDEIO::UDS_NAME
@ UDS_NAME
Filename - as displayed in directory listings etc.
Definition global.h:335
TDEIO::UDS_LOCAL_PATH
@ UDS_LOCAL_PATH
A local file path if the ioslave display files sitting on the local filesystem (but in another hierar...
Definition global.h:338
TDEIO::UDSEntry
TQValueList< UDSAtom > UDSEntry
An entry is the list of atoms containing all the information for a file or URL.
Definition global.h:507
TDEIO::put
TDEIO_EXPORT TransferJob * put(const KURL &url, int permissions, bool overwrite, bool resume, bool showProgressInfo=true)
Put (a.k.a.
Definition job.cpp:1444
TDEIO::rename
TDEIO_EXPORT SimpleJob * rename(const KURL &src, const KURL &dest, bool overwrite)
Rename a file or directory.
Definition job.cpp:801
TDEIO::listDir
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.
Definition job.cpp:2216
TDEIO::get
TDEIO_EXPORT TransferJob * get(const KURL &url, bool reload=false, bool showProgressInfo=true)
Get (a.k.a.
Definition job.cpp:1284
TDEIO::filesize_t
TQ_ULLONG filesize_t
64-bit file size
Definition global.h:39
TDEIO::stat
TDEIO_EXPORT StatJob * stat(const KURL &url, bool showProgressInfo=true)
Find all details for one file or directory.
Definition job.cpp:950
TDEIO::rmdir
TDEIO_EXPORT SimpleJob * rmdir(const KURL &url)
Removes a single directory.
Definition job.cpp:787

tdeio/tdeio

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

tdeio/tdeio

Skip menu "tdeio/tdeio"
  • arts
  • dcop
  • dnssd
  • interfaces
  •   kspeech
  •     interface
  •     library
  •   tdetexteditor
  • kate
  • kded
  • kdoctools
  • kimgio
  • kjs
  • libtdemid
  • libtdescreensaver
  • tdeabc
  • tdecmshell
  • tdecore
  • tdefx
  • tdehtml
  • tdeinit
  • tdeio
  •   bookmarks
  •   httpfilter
  •   kpasswdserver
  •   kssl
  •   tdefile
  •   tdeio
  •   tdeioexec
  • tdeioslave
  •   http
  • tdemdi
  •   tdemdi
  • tdenewstuff
  • tdeparts
  • tdeprint
  • tderandr
  • tderesources
  • tdespell2
  • tdesu
  • tdeui
  • tdeunittest
  • tdeutils
  • tdewallet
Generated for tdeio/tdeio by doxygen 1.9.8
This website is maintained by Timothy Pearson.