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

tdeio/tdeio

forwardingslavebase.cpp

00001 /* This file is part of the KDE project
00002    Copyright (c) 2004 Kevin Ottens <ervin ipsquad net>
00003 
00004    This library is free software; you can redistribute it and/or
00005    modify it under the terms of the GNU Library General Public
00006    License as published by the Free Software Foundation; either
00007    version 2 of the License, or (at your option) any later version.
00008 
00009    This library is distributed in the hope that it will be useful,
00010    but WITHOUT ANY WARRANTY; without even the implied warranty of
00011    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012    Library General Public License for more details.
00013 
00014    You should have received a copy of the GNU Library General Public License
00015    along with this library; see the file COPYING.LIB.  If not, write to
00016    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00017    Boston, MA 02110-1301, USA.
00018 */
00019 
00020 #include <kdebug.h>
00021 #include <tdeio/job.h>
00022 #include <kmimetype.h>
00023 #include <kprotocolinfo.h>
00024 
00025 #include <tqapplication.h>
00026 #include <tqeventloop.h>
00027 
00028 #include "forwardingslavebase.h"
00029 
00030 namespace TDEIO
00031 {
00032 
00033 class ForwardingSlaveBasePrivate
00034 {
00035 };
00036 
00037 ForwardingSlaveBase::ForwardingSlaveBase(const TQCString &protocol,
00038                                          const TQCString &poolSocket,
00039                                          const TQCString &appSocket)
00040     : TQObject(), SlaveBase(protocol, poolSocket, appSocket)
00041 {
00042 }
00043 
00044 ForwardingSlaveBase::~ForwardingSlaveBase()
00045 {
00046 }
00047 
00048 bool ForwardingSlaveBase::internalRewriteURL(const KURL &url, KURL &newURL)
00049 {
00050     bool result = true;
00051 
00052     if ( url.protocol().ascii()==mProtocol )
00053     {
00054         result = rewriteURL(url, newURL);
00055     }
00056     else
00057     {
00058         newURL = url;
00059     }
00060 
00061     m_processedURL = newURL;
00062     m_requestedURL = url;
00063     return result;
00064 }
00065 
00066 void ForwardingSlaveBase::prepareUDSEntry(TDEIO::UDSEntry &entry,
00067                                           bool listing) const
00068 {
00069     kdDebug() << "ForwardingSlaveBase::prepareUDSEntry: listing=="
00070               << listing << endl;
00071 
00072     TQString name;
00073     KURL url;
00074 
00075     TDEIO::UDSEntry::iterator it = entry.begin();
00076     TDEIO::UDSEntry::iterator end = entry.end();
00077 
00078     for(; it!=end; ++it)
00079     {
00080         KURL new_url = m_requestedURL;
00081 
00082         switch( (*it).m_uds )
00083         {
00084         case TDEIO::UDS_NAME:
00085             name = (*it).m_str;
00086             kdDebug() << "Name = " << name << endl;
00087         break;
00088         case TDEIO::UDS_URL:
00089             url = (*it).m_str;
00090         if (listing)
00091             {
00092                 new_url.addPath(url.fileName());
00093             }
00094             (*it).m_str = new_url.url();
00095             kdDebug() << "URL = " << url << endl;
00096             kdDebug() << "New URL = " << (*it).m_str << endl;
00097             break;
00098         }
00099     }
00100 
00101     if ( m_processedURL.isLocalFile() )
00102     {
00103         KURL new_url = m_processedURL;
00104         if (listing)
00105         {
00106             new_url.addPath( name );
00107         }
00108 
00109         TDEIO::UDSAtom atom;
00110         atom.m_uds = TDEIO::UDS_LOCAL_PATH;
00111         atom.m_long = 0;
00112         atom.m_str = new_url.path();
00113         entry.append(atom);
00114     }
00115 }
00116 
00117 void ForwardingSlaveBase::get(const KURL &url)
00118 {
00119     kdDebug() << "ForwardingSlaveBase::get: " << url << endl;
00120 
00121     KURL new_url;
00122     if ( internalRewriteURL(url, new_url) )
00123     {
00124         TDEIO::TransferJob *job = TDEIO::get(new_url, false, false);
00125         connectTransferJob(job);
00126 
00127         tqApp->eventLoop()->enterLoop();
00128     }
00129 }
00130 
00131 void ForwardingSlaveBase::put(const KURL &url, int permissions,
00132                               bool overwrite, bool resume )
00133 {
00134     kdDebug() << "ForwardingSlaveBase::put: " << url << endl;
00135 
00136     KURL new_url;
00137     if ( internalRewriteURL(url, new_url) )
00138     {
00139         TDEIO::TransferJob *job = TDEIO::put(new_url, permissions, overwrite,
00140                                          resume, false);
00141         connectTransferJob(job);
00142 
00143         tqApp->eventLoop()->enterLoop();
00144     }
00145 }
00146 
00147 void ForwardingSlaveBase::stat(const KURL &url)
00148 {
00149     kdDebug() << "ForwardingSlaveBase::stat: " << url << endl;
00150 
00151     KURL new_url;
00152     if ( internalRewriteURL(url, new_url) )
00153     {
00154         TDEIO::SimpleJob *job = TDEIO::stat(new_url, false);
00155         connectSimpleJob(job);
00156 
00157         tqApp->eventLoop()->enterLoop();
00158     }
00159 }
00160 
00161 void ForwardingSlaveBase::mimetype(const KURL &url)
00162 {
00163     kdDebug() << "ForwardingSlaveBase::mimetype: " << url << endl;
00164 
00165     KURL new_url;
00166     if ( internalRewriteURL(url, new_url) )
00167     {
00168         TDEIO::TransferJob *job = TDEIO::mimetype(new_url, false);
00169         connectTransferJob(job);
00170 
00171         tqApp->eventLoop()->enterLoop();
00172     }
00173 }
00174 
00175 void ForwardingSlaveBase::listDir(const KURL &url)
00176 {
00177     kdDebug() << "ForwardingSlaveBase::listDir: " << url << endl;
00178 
00179     KURL new_url;
00180     if ( internalRewriteURL(url, new_url) )
00181     {
00182         TDEIO::ListJob *job = TDEIO::listDir(new_url, false);
00183         connectListJob(job);
00184 
00185         tqApp->eventLoop()->enterLoop();
00186     }
00187 }
00188 
00189 void ForwardingSlaveBase::mkdir(const KURL &url, int permissions)
00190 {
00191     kdDebug() << "ForwardingSlaveBase::mkdir: " << url << endl;
00192 
00193     KURL new_url;
00194     if ( internalRewriteURL(url, new_url) )
00195     {
00196         TDEIO::SimpleJob *job = TDEIO::mkdir(new_url, permissions);
00197         connectSimpleJob(job);
00198 
00199         tqApp->eventLoop()->enterLoop();
00200     }
00201 }
00202 
00203 void ForwardingSlaveBase::rename(const KURL &src, const KURL &dest,
00204                                  bool overwrite)
00205 {
00206     kdDebug() << "ForwardingSlaveBase::rename: " << src << ", " << dest << endl;
00207 
00208     KURL new_src, new_dest;
00209     if ( internalRewriteURL(src, new_src) && internalRewriteURL(dest, new_dest) )
00210     {
00211         TDEIO::Job *job = TDEIO::rename(new_src, new_dest, overwrite);
00212         connectJob(job);
00213 
00214         tqApp->eventLoop()->enterLoop();
00215     }
00216 }
00217 
00218 void ForwardingSlaveBase::symlink(const TQString &target, const KURL &dest,
00219                                   bool overwrite)
00220 {
00221     kdDebug() << "ForwardingSlaveBase::symlink: " << target << ", " << dest << endl;
00222 
00223     KURL new_dest;
00224     if ( internalRewriteURL(dest, new_dest) )
00225     {
00226         TDEIO::SimpleJob *job = TDEIO::symlink(target, new_dest, overwrite, false);
00227         connectSimpleJob(job);
00228 
00229         tqApp->eventLoop()->enterLoop();
00230     }
00231 }
00232 
00233 void ForwardingSlaveBase::chmod(const KURL &url, int permissions)
00234 {
00235     kdDebug() << "ForwardingSlaveBase::chmod: " << url << endl;
00236 
00237     KURL new_url;
00238     if ( internalRewriteURL(url, new_url) )
00239     {
00240         TDEIO::SimpleJob *job = TDEIO::chmod(new_url, permissions);
00241         connectSimpleJob(job);
00242 
00243         tqApp->eventLoop()->enterLoop();
00244     }
00245 }
00246 
00247 void ForwardingSlaveBase::copy(const KURL &src, const KURL &dest,
00248                                int permissions, bool overwrite)
00249 {
00250     kdDebug() << "ForwardingSlaveBase::copy: " << src << ", " << dest << endl;
00251 
00252     KURL new_src, new_dest;
00253     if ( internalRewriteURL(src, new_src) && internalRewriteURL(dest, new_dest) )
00254     {
00255         TDEIO::Job *job = TDEIO::file_copy(new_src, new_dest, permissions,
00256                                        overwrite, false);
00257         connectJob(job);
00258 
00259         tqApp->eventLoop()->enterLoop();
00260     }
00261 }
00262 
00263 void ForwardingSlaveBase::del(const KURL &url, bool isfile)
00264 {
00265     kdDebug() << "ForwardingSlaveBase::del: " << url << endl;
00266 
00267     KURL new_url;
00268     if ( internalRewriteURL(url, new_url) )
00269     {
00270         if (isfile)
00271         {
00272             TDEIO::DeleteJob *job = TDEIO::del(new_url, false, false);
00273             connectJob(job);
00274         }
00275         else
00276         {
00277             TDEIO::SimpleJob *job = TDEIO::rmdir(new_url);
00278             connectSimpleJob(job);
00279         }
00280 
00281         tqApp->eventLoop()->enterLoop();
00282     }
00283 }
00284 
00285 void ForwardingSlaveBase::localURL(const KURL& remoteURL)
00286 {
00287     kdDebug() << "ForwardingSlaveBase::localURL: " << remoteURL << endl;
00288 
00289     KURL new_url;
00290     if ( internalRewriteURL(remoteURL, new_url) )
00291     {
00292         TDEIO::LocalURLJob *job = TDEIO::localURL(new_url);
00293         connectLocalURLJob(job);
00294 
00295         tqApp->eventLoop()->enterLoop();
00296     }
00297     else
00298     {
00299         // Let the slave base emit the required signals
00300         SlaveBase::localURL(remoteURL);
00301     }
00302 }
00303 
00305 
00306 void ForwardingSlaveBase::connectJob(TDEIO::Job *job)
00307 {
00308     // We will forward the warning message, no need to let the job
00309     // display it itself
00310     job->setInteractive(false);
00311 
00312     // Forward metadata (e.g. modification time for put())
00313     job->setMetaData( allMetaData() );
00314 #if 0 // debug code
00315     kdDebug() << k_funcinfo << "transferring metadata:" << endl;
00316     const MetaData md = allMetaData();
00317     for ( MetaData::const_iterator it = md.begin(); it != md.end(); ++it )
00318         kdDebug() << it.key() << " = " << it.data() << endl;
00319 #endif
00320 
00321     connect( job, TQT_SIGNAL( result(TDEIO::Job *) ),
00322              this, TQT_SLOT( slotResult(TDEIO::Job *) ) );
00323     connect( job, TQT_SIGNAL( warning(TDEIO::Job *, const TQString &) ),
00324              this, TQT_SLOT( slotWarning(TDEIO::Job *, const TQString &) ) );
00325     connect( job, TQT_SIGNAL( infoMessage(TDEIO::Job *, const TQString &) ),
00326              this, TQT_SLOT( slotInfoMessage(TDEIO::Job *, const TQString &) ) );
00327     connect( job, TQT_SIGNAL( totalSize(TDEIO::Job *, TDEIO::filesize_t) ),
00328              this, TQT_SLOT( slotTotalSize(TDEIO::Job *, TDEIO::filesize_t) ) );
00329     connect( job, TQT_SIGNAL( processedSize(TDEIO::Job *, TDEIO::filesize_t) ),
00330              this, TQT_SLOT( slotProcessedSize(TDEIO::Job *, TDEIO::filesize_t) ) );
00331     connect( job, TQT_SIGNAL( speed(TDEIO::Job *, unsigned long) ),
00332              this, TQT_SLOT( slotSpeed(TDEIO::Job *, unsigned long) ) );
00333 }
00334 
00335 void ForwardingSlaveBase::connectSimpleJob(TDEIO::SimpleJob *job)
00336 {
00337     connectJob(job);
00338     connect( job, TQT_SIGNAL( redirection(TDEIO::Job *, const KURL &) ),
00339              this, TQT_SLOT( slotRedirection(TDEIO::Job *, const KURL &) ) );
00340 }
00341 
00342 void ForwardingSlaveBase::connectListJob(TDEIO::ListJob *job)
00343 {
00344     connectSimpleJob(job);
00345     connect( job, TQT_SIGNAL( entries(TDEIO::Job *, const TDEIO::UDSEntryList &) ),
00346              this, TQT_SLOT( slotEntries(TDEIO::Job *, const TDEIO::UDSEntryList &) ) );
00347 }
00348 
00349 void ForwardingSlaveBase::connectTransferJob(TDEIO::TransferJob *job)
00350 {
00351     connectSimpleJob(job);
00352     connect( job, TQT_SIGNAL( data(TDEIO::Job *, const TQByteArray &) ),
00353              this, TQT_SLOT( slotData(TDEIO::Job *, const TQByteArray &) ) );
00354     connect( job, TQT_SIGNAL( dataReq(TDEIO::Job *, TQByteArray &) ),
00355              this, TQT_SLOT( slotDataReq(TDEIO::Job *, TQByteArray &) ) );
00356     connect( job, TQT_SIGNAL( mimetype(TDEIO::Job *, const TQString &) ),
00357              this, TQT_SLOT( slotMimetype(TDEIO::Job *, const TQString &) ) );
00358     connect( job, TQT_SIGNAL( canResume(TDEIO::Job *, TDEIO::filesize_t) ),
00359              this, TQT_SLOT( slotCanResume(TDEIO::Job *, TDEIO::filesize_t) ) );
00360 }
00361 
00362 void ForwardingSlaveBase::connectLocalURLJob(TDEIO::LocalURLJob *job)
00363 {
00364     connectJob(job);
00365     connect( job, TQT_SIGNAL( localURL(TDEIO::LocalURLJob *, const KURL&, bool) ),
00366              this, TQT_SLOT( slotLocalURL(TDEIO::LocalURLJob *, const KURL&, bool) ) );
00367 }
00368 
00370 
00371 void ForwardingSlaveBase::slotResult(TDEIO::Job *job)
00372 {
00373     if ( job->error() != 0)
00374     {
00375         error( job->error(), job->errorText() );
00376     }
00377     else
00378     {
00379         TDEIO::StatJob *stat_job = dynamic_cast<TDEIO::StatJob *>(job);
00380         if ( stat_job!=0L )
00381         {
00382             TDEIO::UDSEntry entry = stat_job->statResult();
00383         prepareUDSEntry(entry);
00384             statEntry( entry );
00385         }
00386         finished();
00387     }
00388 
00389     tqApp->eventLoop()->exitLoop();
00390 }
00391 
00392 void ForwardingSlaveBase::slotWarning(TDEIO::Job* /*job*/, const TQString &msg)
00393 {
00394     warning(msg);
00395 }
00396 
00397 void ForwardingSlaveBase::slotInfoMessage(TDEIO::Job* /*job*/, const TQString &msg)
00398 {
00399     infoMessage(msg);
00400 }
00401 
00402 void ForwardingSlaveBase::slotTotalSize(TDEIO::Job* /*job*/, TDEIO::filesize_t size)
00403 {
00404     totalSize(size);
00405 }
00406 
00407 void ForwardingSlaveBase::slotProcessedSize(TDEIO::Job* /*job*/, TDEIO::filesize_t size)
00408 {
00409     processedSize(size);
00410 }
00411 
00412 void ForwardingSlaveBase::slotSpeed(TDEIO::Job* /*job*/, unsigned long bytesPerSecond)
00413 {
00414     speed(bytesPerSecond);
00415 }
00416 
00417 void ForwardingSlaveBase::slotRedirection(TDEIO::Job *job, const KURL &url)
00418 {
00419     redirection(url);
00420 
00421     // We've been redirected stop everything.
00422     job->kill( true );
00423     finished();
00424 
00425     tqApp->eventLoop()->exitLoop();
00426 }
00427 
00428 void ForwardingSlaveBase::slotEntries(TDEIO::Job* /*job*/,
00429                                       const TDEIO::UDSEntryList &entries)
00430 {
00431     TDEIO::UDSEntryList final_entries = entries;
00432 
00433     TDEIO::UDSEntryList::iterator it = final_entries.begin();
00434     TDEIO::UDSEntryList::iterator end = final_entries.end();
00435 
00436     for(; it!=end; ++it)
00437     {
00438         prepareUDSEntry(*it, true);
00439     }
00440 
00441     listEntries( final_entries );
00442 }
00443 
00444 void ForwardingSlaveBase::slotData(TDEIO::Job* /*job*/, const TQByteArray &d)
00445 {
00446     data(d);
00447 }
00448 
00449 void ForwardingSlaveBase::slotDataReq(TDEIO::Job* /*job*/, TQByteArray &data)
00450 {
00451     dataReq();
00452     readData(data);
00453 }
00454 
00455 void ForwardingSlaveBase::slotMimetype (TDEIO::Job* /*job*/, const TQString &type)
00456 {
00457     mimeType(type);
00458 }
00459 
00460 void ForwardingSlaveBase::slotCanResume (TDEIO::Job* /*job*/, TDEIO::filesize_t offset)
00461 {
00462     canResume(offset);
00463 }
00464 
00465 void ForwardingSlaveBase::slotLocalURL(TDEIO::LocalURLJob *, const KURL& url, bool)
00466 {
00467     SlaveBase::localURL(url);
00468 }
00469 
00470 }
00471 
00472 #include "forwardingslavebase.moc"
00473 

tdeio/tdeio

Skip menu "tdeio/tdeio"
  • Main Page
  • Modules
  • 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.7.1
This website is maintained by Timothy Pearson.