• Skip to content
  • Skip to link menu
KDE 3.5 API Reference
  • KDE API Reference
  • API Reference
  • Sitemap
  • Contact Us
 

KDECore

kprotocolinfo_kdecore.cpp

Go to the documentation of this file.
00001 /* This file is part of the KDE libraries
00002    Copyright (C) 1999 Torben Weis <weis@kde.org>
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 version 2 as published by the Free Software Foundation.
00007 
00008    This library is distributed in the hope that it will be useful,
00009    but WITHOUT ANY WARRANTY; without even the implied warranty of
00010    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00011    Library General Public License for more details.
00012 
00013    You should have received a copy of the GNU Library General Public License
00014    along with this library; see the file COPYING.LIB.  If not, write to
00015    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00016    Boston, MA 02110-1301, USA.
00017 */
00018 
00019 #ifdef MAKE_KDECORE_LIB //needed for proper linkage (win32)
00020 #undef KIO_EXPORT
00021 #define KIO_EXPORT KDE_EXPORT
00022 #endif
00023 
00024 #define KPROTOCOLINFO_KDECORE
00025 #include "kprotocolinfo.h"
00026 #include "kprotocolinfofactory.h"
00027 
00028 #include <kstandarddirs.h>
00029 #include <kglobal.h>
00030 #include <kapplication.h>
00031 #include <kdebug.h>
00032 #include <ksimpleconfig.h>
00033 #include <kconfig.h>
00034 #include <kstringhandler.h>
00035 
00036 class KProtocolInfo::KProtocolInfoPrivate
00037 {
00038 public:
00039   QString docPath;
00040   QString protClass;
00041   KProtocolInfo::ExtraFieldList extraFields;
00042   bool showPreviews;
00043   bool canRenameFromFile;
00044   bool canRenameToFile;
00045   bool canDeleteRecursive;
00046   bool fileNameUsedForCopying; // true if using UDS_NAME, false if using KURL::fileName() [default]
00047   KURL::URIMode uriMode;
00048   QStringList capabilities;
00049   QString proxyProtocol;
00050 };
00051 
00052 //
00053 // Internal functions:
00054 //
00055 KProtocolInfo::KProtocolInfo(const QString &path)
00056  : KSycocaEntry(path)
00057 {
00058   d = new KProtocolInfoPrivate;
00059   QString fullPath = locate("services", path);
00060 
00061   KSimpleConfig config( fullPath, true );
00062   config.setGroup( "Protocol" );
00063 
00064   m_name = config.readEntry( "protocol" );
00065   m_exec = config.readPathEntry( "exec" );
00066   m_isSourceProtocol = config.readBoolEntry( "source", true );
00067   m_isHelperProtocol = config.readBoolEntry( "helper", false );
00068   m_supportsReading = config.readBoolEntry( "reading", false );
00069   m_supportsWriting = config.readBoolEntry( "writing", false );
00070   m_supportsMakeDir = config.readBoolEntry( "makedir", false );
00071   m_supportsDeleting = config.readBoolEntry( "deleting", false );
00072   m_supportsLinking = config.readBoolEntry( "linking", false );
00073   m_supportsMoving = config.readBoolEntry( "moving", false );
00074   m_canCopyFromFile = config.readBoolEntry( "copyFromFile", false );
00075   m_canCopyToFile = config.readBoolEntry( "copyToFile", false );
00076   d->canRenameFromFile = config.readBoolEntry( "renameFromFile", false );
00077   d->canRenameToFile = config.readBoolEntry( "renameToFile", false );
00078   d->canDeleteRecursive = config.readBoolEntry( "deleteRecursive", false );
00079   d->fileNameUsedForCopying = config.readEntry( "fileNameUsedForCopying", "FromURL" ) == "Name";
00080 
00081   m_listing = config.readListEntry( "listing" );
00082   // Many .protocol files say "Listing=false" when they really mean "Listing=" (i.e. unsupported)
00083   if ( m_listing.count() == 1 && m_listing.first() == "false" )
00084     m_listing.clear();
00085   m_supportsListing = ( m_listing.count() > 0 );
00086   m_defaultMimetype = config.readEntry( "defaultMimetype" );
00087   m_determineMimetypeFromExtension = config.readBoolEntry( "determineMimetypeFromExtension", true );
00088   m_icon = config.readEntry( "Icon", "unknown" );
00089   m_config = config.readEntry( "config", m_name );
00090   m_maxSlaves = config.readNumEntry( "maxInstances", 1);
00091 
00092   QString tmp = config.readEntry( "input" );
00093   if ( tmp == "filesystem" )
00094     m_inputType = KProtocolInfo::T_FILESYSTEM;
00095   else if ( tmp == "stream" )
00096     m_inputType = KProtocolInfo::T_STREAM;
00097   else
00098     m_inputType = KProtocolInfo::T_NONE;
00099 
00100   tmp = config.readEntry( "output" );
00101   if ( tmp == "filesystem" )
00102     m_outputType = KProtocolInfo::T_FILESYSTEM;
00103   else if ( tmp == "stream" )
00104     m_outputType = KProtocolInfo::T_STREAM;
00105   else
00106     m_outputType = KProtocolInfo::T_NONE;
00107 
00108   d->docPath = config.readPathEntry( "DocPath" );
00109   d->protClass = config.readEntry( "Class" ).lower();
00110   if (d->protClass[0] != ':')
00111      d->protClass.prepend(':');
00112 
00113   QStringList extraNames = config.readListEntry( "ExtraNames" );
00114   QStringList extraTypes = config.readListEntry( "ExtraTypes" );
00115   QStringList::Iterator it = extraNames.begin();
00116   QStringList::Iterator typeit = extraTypes.begin();
00117   for( ; it != extraNames.end() && typeit != extraTypes.end(); ++it, ++typeit ) {
00118       d->extraFields.append( ExtraField( *it, *typeit ) );
00119   }
00120 
00121   d->showPreviews = config.readBoolEntry( "ShowPreviews", d->protClass == ":local" );
00122 
00123   tmp = config.readEntry( "URIMode", QString::null ).lower();
00124   if (tmp == "rawuri")
00125      d->uriMode = KURL::RawURI;
00126   else if (tmp == "mailto")
00127      d->uriMode = KURL::Mailto;
00128   else if (tmp == "url")
00129      d->uriMode = KURL::URL;
00130   else
00131      d->uriMode = KURL::Auto;
00132 
00133   d->capabilities = config.readListEntry( "Capabilities" );
00134   d->proxyProtocol = config.readEntry( "ProxiedBy" );
00135 }
00136 
00137 KProtocolInfo::KProtocolInfo( QDataStream& _str, int offset) :
00138     KSycocaEntry( _str, offset)
00139 {
00140    d = new KProtocolInfoPrivate;
00141    load( _str );
00142 }
00143 
00144 KProtocolInfo::~KProtocolInfo()
00145 {
00146    delete d;
00147 }
00148 
00149 void
00150 KProtocolInfo::load( QDataStream& _str)
00151 {
00152    // You may add new fields at the end. Make sure to update the version
00153    // number in ksycoca.h
00154    Q_INT32 i_inputType, i_outputType;
00155    Q_INT8 i_isSourceProtocol, i_isHelperProtocol,
00156           i_supportsListing, i_supportsReading,
00157           i_supportsWriting, i_supportsMakeDir,
00158           i_supportsDeleting, i_supportsLinking,
00159           i_supportsMoving, i_determineMimetypeFromExtension,
00160           i_canCopyFromFile, i_canCopyToFile, i_showPreviews,
00161           i_uriMode, i_canRenameFromFile, i_canRenameToFile,
00162           i_canDeleteRecursive, i_fileNameUsedForCopying;
00163 
00164    _str >> m_name >> m_exec >> m_listing >> m_defaultMimetype
00165         >> i_determineMimetypeFromExtension
00166         >> m_icon
00167         >> i_inputType >> i_outputType
00168         >> i_isSourceProtocol >> i_isHelperProtocol
00169         >> i_supportsListing >> i_supportsReading
00170         >> i_supportsWriting >> i_supportsMakeDir
00171         >> i_supportsDeleting >> i_supportsLinking
00172         >> i_supportsMoving
00173         >> i_canCopyFromFile >> i_canCopyToFile
00174         >> m_config >> m_maxSlaves >> d->docPath >> d->protClass
00175         >> d->extraFields >> i_showPreviews >> i_uriMode
00176         >> d->capabilities >> d->proxyProtocol
00177         >> i_canRenameFromFile >> i_canRenameToFile
00178         >> i_canDeleteRecursive >> i_fileNameUsedForCopying;
00179 
00180    m_inputType = (Type) i_inputType;
00181    m_outputType = (Type) i_outputType;
00182    m_isSourceProtocol = (i_isSourceProtocol != 0);
00183    m_isHelperProtocol = (i_isHelperProtocol != 0);
00184    m_supportsListing = (i_supportsListing != 0);
00185    m_supportsReading = (i_supportsReading != 0);
00186    m_supportsWriting = (i_supportsWriting != 0);
00187    m_supportsMakeDir = (i_supportsMakeDir != 0);
00188    m_supportsDeleting = (i_supportsDeleting != 0);
00189    m_supportsLinking = (i_supportsLinking != 0);
00190    m_supportsMoving = (i_supportsMoving != 0);
00191    m_canCopyFromFile = (i_canCopyFromFile != 0);
00192    m_canCopyToFile = (i_canCopyToFile != 0);
00193    d->canRenameFromFile = (i_canRenameFromFile != 0);
00194    d->canRenameToFile = (i_canRenameToFile != 0);
00195    d->canDeleteRecursive = (i_canDeleteRecursive != 0);
00196    d->fileNameUsedForCopying = (i_fileNameUsedForCopying != 0);
00197    m_determineMimetypeFromExtension = (i_determineMimetypeFromExtension != 0);
00198    d->showPreviews = (i_showPreviews != 0);
00199    d->uriMode = (KURL::URIMode) i_uriMode;
00200 }
00201 
00202 void
00203 KProtocolInfo::save( QDataStream& _str)
00204 {
00205    KSycocaEntry::save( _str );
00206 
00207    // You may add new fields at the end. Make sure to update the version
00208    // number in ksycoca.h
00209    Q_INT32 i_inputType, i_outputType;
00210    Q_INT8 i_isSourceProtocol, i_isHelperProtocol,
00211           i_supportsListing, i_supportsReading,
00212           i_supportsWriting, i_supportsMakeDir,
00213           i_supportsDeleting, i_supportsLinking,
00214           i_supportsMoving, i_determineMimetypeFromExtension,
00215           i_canCopyFromFile, i_canCopyToFile, i_showPreviews,
00216           i_uriMode, i_canRenameFromFile, i_canRenameToFile,
00217           i_canDeleteRecursive, i_fileNameUsedForCopying;
00218 
00219    i_inputType = (Q_INT32) m_inputType;
00220    i_outputType = (Q_INT32) m_outputType;
00221    i_isSourceProtocol = m_isSourceProtocol ? 1 : 0;
00222    i_isHelperProtocol = m_isHelperProtocol ? 1 : 0;
00223    i_supportsListing = m_supportsListing ? 1 : 0;
00224    i_supportsReading = m_supportsReading ? 1 : 0;
00225    i_supportsWriting = m_supportsWriting ? 1 : 0;
00226    i_supportsMakeDir = m_supportsMakeDir ? 1 : 0;
00227    i_supportsDeleting = m_supportsDeleting ? 1 : 0;
00228    i_supportsLinking = m_supportsLinking ? 1 : 0;
00229    i_supportsMoving = m_supportsMoving ? 1 : 0;
00230    i_canCopyFromFile = m_canCopyFromFile ? 1 : 0;
00231    i_canCopyToFile = m_canCopyToFile ? 1 : 0;
00232    i_canRenameFromFile = d->canRenameFromFile ? 1 : 0;
00233    i_canRenameToFile = d->canRenameToFile ? 1 : 0;
00234    i_canDeleteRecursive = d->canDeleteRecursive ? 1 : 0;
00235    i_fileNameUsedForCopying = d->fileNameUsedForCopying ? 1 : 0;
00236    i_determineMimetypeFromExtension = m_determineMimetypeFromExtension ? 1 : 0;
00237    i_showPreviews = d->showPreviews ? 1 : 0;
00238    i_uriMode = d->uriMode;
00239 
00240    _str << m_name << m_exec << m_listing << m_defaultMimetype
00241         << i_determineMimetypeFromExtension
00242         << m_icon
00243         << i_inputType << i_outputType
00244         << i_isSourceProtocol << i_isHelperProtocol
00245         << i_supportsListing << i_supportsReading
00246         << i_supportsWriting << i_supportsMakeDir
00247         << i_supportsDeleting << i_supportsLinking
00248         << i_supportsMoving
00249         << i_canCopyFromFile << i_canCopyToFile
00250         << m_config << m_maxSlaves << d->docPath << d->protClass
00251         << d->extraFields << i_showPreviews << i_uriMode
00252         << d->capabilities << d->proxyProtocol
00253         << i_canRenameFromFile << i_canRenameToFile
00254         << i_canDeleteRecursive << i_fileNameUsedForCopying;
00255 }
00256 
00257 
00258 //
00259 // Static functions:
00260 //
00261 
00262 QStringList KProtocolInfo::protocols()
00263 {
00264   return KProtocolInfoFactory::self()->protocols();
00265 }
00266 
00267 bool KProtocolInfo::isSourceProtocol( const QString& _protocol )
00268 {
00269   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00270   if ( !prot )
00271     return false;
00272 
00273   return prot->m_isSourceProtocol;
00274 }
00275 
00276 bool KProtocolInfo::isFilterProtocol( const QString& _protocol )
00277 {
00278   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00279   if ( !prot )
00280     return false;
00281 
00282   return !prot->m_isSourceProtocol;
00283 }
00284 
00285 bool KProtocolInfo::isHelperProtocol( const QString& _protocol )
00286 {
00287   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00288   if ( !prot )
00289     return false;
00290 
00291   return prot->m_isHelperProtocol;
00292 }
00293 
00294 bool KProtocolInfo::isKnownProtocol( const QString& _protocol )
00295 {
00296   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00297   return ( prot != 0);
00298 }
00299 
00300 bool KProtocolInfo::supportsListing( const QString& _protocol )
00301 {
00302   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00303   if ( !prot )
00304     return false;
00305 
00306   return prot->m_supportsListing;
00307 }
00308 
00309 QStringList KProtocolInfo::listing( const QString& _protocol )
00310 {
00311   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00312   if ( !prot )
00313     return QStringList();
00314 
00315   return prot->m_listing;
00316 }
00317 
00318 bool KProtocolInfo::supportsReading( const QString& _protocol )
00319 {
00320   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00321   if ( !prot )
00322     return false;
00323 
00324   return prot->m_supportsReading;
00325 }
00326 
00327 bool KProtocolInfo::supportsWriting( const QString& _protocol )
00328 {
00329   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00330   if ( !prot )
00331     return false;
00332 
00333   return prot->m_supportsWriting;
00334 }
00335 
00336 bool KProtocolInfo::supportsMakeDir( const QString& _protocol )
00337 {
00338   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00339   if ( !prot )
00340     return false;
00341 
00342   return prot->m_supportsMakeDir;
00343 }
00344 
00345 bool KProtocolInfo::supportsDeleting( const QString& _protocol )
00346 {
00347   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00348   if ( !prot )
00349     return false;
00350 
00351   return prot->m_supportsDeleting;
00352 }
00353 
00354 bool KProtocolInfo::supportsLinking( const QString& _protocol )
00355 {
00356   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00357   if ( !prot )
00358     return false;
00359 
00360   return prot->m_supportsLinking;
00361 }
00362 
00363 bool KProtocolInfo::supportsMoving( const QString& _protocol )
00364 {
00365   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00366   if ( !prot )
00367     return false;
00368 
00369   return prot->m_supportsMoving;
00370 }
00371 
00372 bool KProtocolInfo::canCopyFromFile( const QString& _protocol )
00373 {
00374   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00375   if ( !prot )
00376     return false;
00377 
00378   return prot->m_canCopyFromFile;
00379 }
00380 
00381 
00382 bool KProtocolInfo::canCopyToFile( const QString& _protocol )
00383 {
00384   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00385   if ( !prot )
00386     return false;
00387 
00388   return prot->m_canCopyToFile;
00389 }
00390 
00391 QString KProtocolInfo::icon( const QString& _protocol )
00392 {
00393   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00394   if ( !prot )
00395     return QString::fromLatin1("unknown");
00396 
00397   return prot->m_icon;
00398 }
00399 
00400 QString KProtocolInfo::config( const QString& _protocol )
00401 {
00402   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00403   if ( !prot )
00404     return QString::null;
00405 
00406   return QString("kio_%1rc").arg(prot->m_config);
00407 }
00408 
00409 int KProtocolInfo::maxSlaves( const QString& _protocol )
00410 {
00411   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00412   if ( !prot )
00413     return 1;
00414 
00415   return prot->m_maxSlaves;
00416 }
00417 
00418 QString KProtocolInfo::defaultMimetype( const QString& _protocol )
00419 {
00420   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00421   if ( !prot )
00422     return QString::null;
00423 
00424   return prot->m_defaultMimetype;
00425 }
00426 
00427 bool KProtocolInfo::determineMimetypeFromExtension( const QString &_protocol )
00428 {
00429   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol( _protocol );
00430   if ( !prot )
00431     return true;
00432 
00433   return prot->m_determineMimetypeFromExtension;
00434 }
00435 
00436 QString KProtocolInfo::exec( const QString& _protocol )
00437 {
00438   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00439   if ( !prot )
00440     return QString::null;
00441 
00442   return prot->m_exec;
00443 }
00444 
00445 KProtocolInfo::Type KProtocolInfo::inputType( const QString& _protocol )
00446 {
00447   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00448   if ( !prot )
00449     return T_NONE;
00450 
00451   return prot->m_inputType;
00452 }
00453 
00454 KProtocolInfo::Type KProtocolInfo::outputType( const QString& _protocol )
00455 {
00456   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00457   if ( !prot )
00458     return T_NONE;
00459 
00460   return prot->m_outputType;
00461 }
00462 
00463 KProtocolInfo::ExtraFieldList KProtocolInfo::extraFields( const KURL &url )
00464 {
00465   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(url.protocol());
00466   if ( !prot )
00467     return ExtraFieldList();
00468 
00469   return prot->d->extraFields;
00470 }
00471 
00472 QString KProtocolInfo::docPath( const QString& _protocol )
00473 {
00474   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00475   if ( !prot )
00476     return QString::null;
00477 
00478   return prot->d->docPath;
00479 }
00480 
00481 QString KProtocolInfo::protocolClass( const QString& _protocol )
00482 {
00483   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00484   if ( !prot )
00485     return QString::null;
00486 
00487   return prot->d->protClass;
00488 }
00489 
00490 bool KProtocolInfo::showFilePreview( const QString& _protocol )
00491 {
00492   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00493   if ( !prot )
00494     return false;
00495 
00496   return prot->d->showPreviews;
00497 }
00498 
00499 KURL::URIMode KProtocolInfo::uriParseMode( const QString& _protocol )
00500 {
00501   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00502   if ( !prot )
00503     return KURL::Auto;
00504 
00505   return prot->d->uriMode;
00506 }
00507 
00508 QStringList KProtocolInfo::capabilities( const QString& _protocol )
00509 {
00510   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00511   if ( !prot )
00512     return QStringList();
00513 
00514   return prot->d->capabilities;
00515 }
00516 
00517 QString KProtocolInfo::proxiedBy( const QString& _protocol )
00518 {
00519   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00520   if ( !prot )
00521     return QString::null;
00522 
00523   return prot->d->proxyProtocol;
00524 }
00525 
00526 bool KProtocolInfo::canRenameFromFile() const
00527 {
00528   return d->canRenameFromFile;
00529 }
00530 
00531 bool KProtocolInfo::canRenameToFile() const
00532 {
00533   return d->canRenameToFile;
00534 }
00535 
00536 bool KProtocolInfo::canDeleteRecursive() const
00537 {
00538   return d->canDeleteRecursive;
00539 }
00540 
00541 KProtocolInfo::FileNameUsedForCopying KProtocolInfo::fileNameUsedForCopying() const
00542 {
00543   return d->fileNameUsedForCopying ? Name : FromURL;
00544 }
00545 
00546 QDataStream& operator>>( QDataStream& s, KProtocolInfo::ExtraField& field )  {
00547   s >> field.name;
00548   s >> field.type;
00549   return s;
00550 }
00551 
00552 QDataStream& operator<<( QDataStream& s, const KProtocolInfo::ExtraField& field )  {
00553   s << field.name;
00554   s << field.type;
00555   return s;
00556 }
00557 
00558 // KURL based static functions are implemented in ../kio/kio/kprotocolinfo.cpp
00559 
00560 void KProtocolInfo::virtual_hook( int id, void* data )
00561 { KSycocaEntry::virtual_hook( id, data ); }
00562 

KDECore

Skip menu "KDECore"
  • Main Page
  • Modules
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

API Reference

Skip menu "API Reference"
  • dcop
  • DNSSD
  • interfaces
  • Kate
  • kconf_update
  • KDECore
  • KDED
  • kdefx
  • KDEsu
  • kdeui
  • KDocTools
  • KHTML
  • KImgIO
  • KInit
  • kio
  • kioslave
  • KJS
  • KNewStuff
  • KParts
  • KUtils
Generated for API Reference by doxygen 1.5.9
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal