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

KDECore

kprotocolinfo.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    Copyright (C) 2003 Waldo Bastian <bastian@kde.org>
00004 
00005    This library is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Library General Public
00007    License version 2 as published by the Free Software Foundation.
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 "kprotocolinfo.h"
00021 #include "kprotocolinfo_p.h"
00022 #include "kprotocolinfofactory.h"
00023 
00024 #include <kstandarddirs.h>
00025 #include <kglobal.h>
00026 #include <kdebug.h>
00027 #include <kconfig.h>
00028 #include <kstringhandler.h>
00029 #include <kconfiggroup.h>
00030 
00031 //
00032 // Internal functions:
00033 //
00034 KProtocolInfo::KProtocolInfo(const QString &path)
00035  : KSycocaEntry(*new KProtocolInfoPrivate(path, this))
00036 {
00037     Q_D(KProtocolInfo);
00038   QString fullPath = KStandardDirs::locate("services", path);
00039 
00040   KConfig sconfig( fullPath );
00041   KConfigGroup config(&sconfig, "Protocol" );
00042 
00043   m_name = config.readEntry( "protocol" );
00044   m_exec = config.readPathEntry( "exec", QString() );
00045   m_isSourceProtocol = config.readEntry( "source", true );
00046   m_isHelperProtocol = config.readEntry( "helper", false );
00047   m_supportsReading = config.readEntry( "reading", false );
00048   m_supportsWriting = config.readEntry( "writing", false );
00049   m_supportsMakeDir = config.readEntry( "makedir", false );
00050   m_supportsDeleting = config.readEntry( "deleting", false );
00051   m_supportsLinking = config.readEntry( "linking", false );
00052   m_supportsMoving = config.readEntry( "moving", false );
00053   m_supportsOpening = config.readEntry( "opening", false );
00054   m_canCopyFromFile = config.readEntry( "copyFromFile", false );
00055   m_canCopyToFile = config.readEntry( "copyToFile", false );
00056   d->canRenameFromFile = config.readEntry( "renameFromFile", false );
00057   d->canRenameToFile = config.readEntry( "renameToFile", false );
00058   d->canDeleteRecursive = config.readEntry( "deleteRecursive", false );
00059   d->fileNameUsedForCopying = config.readEntry( "fileNameUsedForCopying", "FromURL" ) == "Name";
00060 
00061   m_listing = config.readEntry( "listing", QStringList() );
00062   // Many .protocol files say "Listing=false" when they really mean "Listing=" (i.e. unsupported)
00063   if ( m_listing.count() == 1 && m_listing.first() == "false" )
00064     m_listing.clear();
00065   m_supportsListing = ( m_listing.count() > 0 );
00066   m_defaultMimetype = config.readEntry( "defaultMimetype" );
00067   m_determineMimetypeFromExtension = config.readEntry( "determineMimetypeFromExtension", true );
00068   d->archiveMimetype = config.readEntry("archiveMimetype", QStringList());
00069   m_icon = config.readEntry( "Icon" );
00070   m_config = config.readEntry( "config", m_name );
00071   m_maxSlaves = config.readEntry( "maxInstances", 1);
00072 
00073   QString tmp = config.readEntry( "input" );
00074   if ( tmp == "filesystem" )
00075     m_inputType = KProtocolInfo::T_FILESYSTEM;
00076   else if ( tmp == "stream" )
00077     m_inputType = KProtocolInfo::T_STREAM;
00078   else
00079     m_inputType = KProtocolInfo::T_NONE;
00080 
00081   tmp = config.readEntry( "output" );
00082   if ( tmp == "filesystem" )
00083     m_outputType = KProtocolInfo::T_FILESYSTEM;
00084   else if ( tmp == "stream" )
00085     m_outputType = KProtocolInfo::T_STREAM;
00086   else
00087     m_outputType = KProtocolInfo::T_NONE;
00088 
00089   d->docPath = config.readPathEntry( "X-DocPath", QString() );
00090   if (d->docPath.isEmpty())
00091     d->docPath = config.readPathEntry( "DocPath", QString() );
00092   d->protClass = config.readEntry( "Class" ).toLower();
00093   if (d->protClass[0] != ':')
00094      d->protClass.prepend(QLatin1Char(':'));
00095 
00096   const QStringList extraNames = config.readEntry( "ExtraNames", QStringList() );
00097   const QStringList extraTypes = config.readEntry( "ExtraTypes", QStringList() );
00098   QStringList::const_iterator it = extraNames.begin();
00099   QStringList::const_iterator typeit = extraTypes.begin();
00100   for( ; it != extraNames.end() && typeit != extraTypes.end(); ++it, ++typeit ) {
00101       QVariant::Type type = QVariant::nameToType( (*typeit).toLatin1() );
00102       // currently QVariant::Type and ExtraField::Type use the same subset of values, so we can just cast.
00103       d->extraFields.append( ExtraField( *it, static_cast<ExtraField::Type>(type) ) );
00104   }
00105 
00106   d->showPreviews = config.readEntry( "ShowPreviews", d->protClass == ":local" );
00107 
00108   d->capabilities = config.readEntry( "Capabilities", QStringList() );
00109   d->proxyProtocol = config.readEntry( "ProxiedBy" );
00110 }
00111 
00112 KProtocolInfo::KProtocolInfo( QDataStream& _str, int offset) :
00113     KSycocaEntry(*new KProtocolInfoPrivate( _str, offset, this) )
00114 {
00115    load( _str );
00116 }
00117 
00118 KProtocolInfo::~KProtocolInfo()
00119 {
00120 }
00121 
00122 void
00123 KProtocolInfo::load( QDataStream& _str)
00124 {
00125     Q_D(KProtocolInfo);
00126    // You may add new fields at the end. Make sure to update the version
00127    // number in ksycoca.h
00128    qint32 i_inputType, i_outputType;
00129    qint8 i_isSourceProtocol, i_isHelperProtocol,
00130           i_supportsListing, i_supportsReading,
00131           i_supportsWriting, i_supportsMakeDir,
00132           i_supportsDeleting, i_supportsLinking,
00133           i_supportsMoving, i_supportsOpening,
00134           i_determineMimetypeFromExtension,
00135           i_canCopyFromFile, i_canCopyToFile, i_showPreviews,
00136           i_uriMode, i_canRenameFromFile, i_canRenameToFile,
00137           i_canDeleteRecursive, i_fileNameUsedForCopying;
00138 
00139    _str >> m_name >> m_exec >> m_listing >> m_defaultMimetype
00140         >> i_determineMimetypeFromExtension
00141         >> m_icon
00142         >> i_inputType >> i_outputType
00143         >> i_isSourceProtocol >> i_isHelperProtocol
00144         >> i_supportsListing >> i_supportsReading
00145         >> i_supportsWriting >> i_supportsMakeDir
00146         >> i_supportsDeleting >> i_supportsLinking
00147         >> i_supportsMoving >> i_supportsOpening
00148         >> i_canCopyFromFile >> i_canCopyToFile
00149         >> m_config >> m_maxSlaves >> d->docPath >> d->protClass
00150         >> d->extraFields >> i_showPreviews >> i_uriMode
00151         >> d->capabilities >> d->proxyProtocol
00152         >> i_canRenameFromFile >> i_canRenameToFile
00153         >> i_canDeleteRecursive >> i_fileNameUsedForCopying
00154         >> d->archiveMimetype;
00155 
00156    m_inputType = (Type) i_inputType;
00157    m_outputType = (Type) i_outputType;
00158    m_isSourceProtocol = (i_isSourceProtocol != 0);
00159    m_isHelperProtocol = (i_isHelperProtocol != 0);
00160    m_supportsListing = (i_supportsListing != 0);
00161    m_supportsReading = (i_supportsReading != 0);
00162    m_supportsWriting = (i_supportsWriting != 0);
00163    m_supportsMakeDir = (i_supportsMakeDir != 0);
00164    m_supportsDeleting = (i_supportsDeleting != 0);
00165    m_supportsLinking = (i_supportsLinking != 0);
00166    m_supportsMoving = (i_supportsMoving != 0);
00167    m_supportsOpening = (i_supportsOpening != 0);
00168    m_canCopyFromFile = (i_canCopyFromFile != 0);
00169    m_canCopyToFile = (i_canCopyToFile != 0);
00170    d->canRenameFromFile = (i_canRenameFromFile != 0);
00171    d->canRenameToFile = (i_canRenameToFile != 0);
00172    d->canDeleteRecursive = (i_canDeleteRecursive != 0);
00173    d->fileNameUsedForCopying = (i_fileNameUsedForCopying != 0);
00174    m_determineMimetypeFromExtension = (i_determineMimetypeFromExtension != 0);
00175    d->showPreviews = (i_showPreviews != 0);
00176 }
00177 
00178 void
00179 KProtocolInfoPrivate::save( QDataStream& _str)
00180 {
00181    KSycocaEntryPrivate::save( _str );
00182 
00183    // You may add new fields at the end. Make sure to update the version
00184    // number in ksycoca.h
00185    qint32 i_inputType, i_outputType;
00186    qint8 i_isSourceProtocol, i_isHelperProtocol,
00187           i_supportsListing, i_supportsReading,
00188           i_supportsWriting, i_supportsMakeDir,
00189           i_supportsDeleting, i_supportsLinking,
00190           i_supportsMoving, i_supportsOpening,
00191           i_determineMimetypeFromExtension,
00192           i_canCopyFromFile, i_canCopyToFile, i_showPreviews,
00193           i_uriMode, i_canRenameFromFile, i_canRenameToFile,
00194           i_canDeleteRecursive, i_fileNameUsedForCopying;
00195 
00196    i_inputType = (qint32) q->m_inputType;
00197    i_outputType = (qint32) q->m_outputType;
00198    i_isSourceProtocol = q->m_isSourceProtocol ? 1 : 0;
00199    i_isHelperProtocol = q->m_isHelperProtocol ? 1 : 0;
00200    i_supportsListing = q->m_supportsListing ? 1 : 0;
00201    i_supportsReading = q->m_supportsReading ? 1 : 0;
00202    i_supportsWriting = q->m_supportsWriting ? 1 : 0;
00203    i_supportsMakeDir = q->m_supportsMakeDir ? 1 : 0;
00204    i_supportsDeleting = q->m_supportsDeleting ? 1 : 0;
00205    i_supportsLinking = q->m_supportsLinking ? 1 : 0;
00206    i_supportsMoving = q->m_supportsMoving ? 1 : 0;
00207    i_supportsOpening = q->m_supportsOpening ? 1 : 0;
00208    i_canCopyFromFile = q->m_canCopyFromFile ? 1 : 0;
00209    i_canCopyToFile = q->m_canCopyToFile ? 1 : 0;
00210    i_canRenameFromFile = canRenameFromFile ? 1 : 0;
00211    i_canRenameToFile = canRenameToFile ? 1 : 0;
00212    i_canDeleteRecursive = canDeleteRecursive ? 1 : 0;
00213    i_fileNameUsedForCopying = fileNameUsedForCopying ? 1 : 0;
00214    i_determineMimetypeFromExtension = q->m_determineMimetypeFromExtension ? 1 : 0;
00215    i_showPreviews = showPreviews ? 1 : 0;
00216   i_uriMode = 0;
00217 
00218    _str << q->m_name << q->m_exec << q->m_listing << q->m_defaultMimetype
00219         << i_determineMimetypeFromExtension
00220         << q->m_icon
00221         << i_inputType << i_outputType
00222         << i_isSourceProtocol << i_isHelperProtocol
00223         << i_supportsListing << i_supportsReading
00224         << i_supportsWriting << i_supportsMakeDir
00225         << i_supportsDeleting << i_supportsLinking
00226         << i_supportsMoving << i_supportsOpening
00227         << i_canCopyFromFile << i_canCopyToFile
00228         << q->m_config << q->m_maxSlaves << docPath << protClass
00229         << extraFields << i_showPreviews << i_uriMode
00230         << capabilities << proxyProtocol
00231         << i_canRenameFromFile << i_canRenameToFile
00232         << i_canDeleteRecursive << i_fileNameUsedForCopying
00233         << archiveMimetype;
00234 }
00235 
00236 
00237 //
00238 // Static functions:
00239 //
00240 
00241 QStringList KProtocolInfo::protocols()
00242 {
00243   return KProtocolInfoFactory::self()->protocols();
00244 }
00245 
00246 bool KProtocolInfo::isFilterProtocol( const QString& _protocol )
00247 {
00248   // We call the findProtocol directly (not via KProtocolManager) to bypass any proxy settings.
00249   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00250   if ( !prot )
00251     return false;
00252 
00253   return !prot->m_isSourceProtocol;
00254 }
00255 
00256 QString KProtocolInfo::icon( const QString& _protocol )
00257 {
00258   // We call the findProtocol directly (not via KProtocolManager) to bypass any proxy settings.
00259   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00260   if ( !prot )
00261     return QString();
00262 
00263   return prot->m_icon;
00264 }
00265 
00266 QString KProtocolInfo::config( const QString& _protocol )
00267 {
00268   // We call the findProtocol directly (not via KProtocolManager) to bypass any proxy settings.
00269   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00270   if ( !prot )
00271     return QString();
00272 
00273   return QString("kio_%1rc").arg(prot->m_config);
00274 }
00275 
00276 int KProtocolInfo::maxSlaves( const QString& _protocol )
00277 {
00278   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00279   if ( !prot )
00280     return 1;
00281 
00282   return prot->m_maxSlaves;
00283 }
00284 
00285 bool KProtocolInfo::determineMimetypeFromExtension( const QString &_protocol )
00286 {
00287   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol( _protocol );
00288   if ( !prot )
00289     return true;
00290 
00291   return prot->m_determineMimetypeFromExtension;
00292 }
00293 
00294 QString KProtocolInfo::exec( const QString& _protocol )
00295 {
00296   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00297   if ( !prot )
00298     return QString();
00299 
00300   return prot->m_exec;
00301 }
00302 
00303 KProtocolInfo::ExtraFieldList KProtocolInfo::extraFields( const KUrl &url )
00304 {
00305   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(url.protocol());
00306   if ( !prot )
00307     return ExtraFieldList();
00308 
00309   return prot->d_func()->extraFields;
00310 }
00311 
00312 QString KProtocolInfo::docPath( const QString& _protocol )
00313 {
00314   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00315   if ( !prot )
00316     return QString();
00317 
00318   return prot->d_func()->docPath;
00319 }
00320 
00321 QString KProtocolInfo::protocolClass( const QString& _protocol )
00322 {
00323   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00324   if ( !prot )
00325     return QString();
00326 
00327   return prot->d_func()->protClass;
00328 }
00329 
00330 bool KProtocolInfo::showFilePreview( const QString& _protocol )
00331 {
00332   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00333   if ( !prot )
00334     return false;
00335 
00336   return prot->d_func()->showPreviews;
00337 }
00338 
00339 /*
00340 KUrl::URIMode KProtocolInfo::uriParseMode( const QString& _protocol )
00341 {
00342   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00343   if ( !prot )
00344     return KUrl::Auto;
00345 
00346   return prot->d->uriMode;
00347 }
00348 */
00349 
00350 QStringList KProtocolInfo::capabilities( const QString& _protocol )
00351 {
00352   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00353   if ( !prot )
00354     return QStringList();
00355 
00356   return prot->d_func()->capabilities;
00357 }
00358 
00359 QString KProtocolInfo::proxiedBy( const QString& _protocol )
00360 {
00361   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(_protocol);
00362   if ( !prot )
00363     return QString();
00364 
00365   return prot->d_func()->proxyProtocol;
00366 }
00367 
00368 QString KProtocolInfo::defaultMimeType() const
00369 {
00370     return m_defaultMimetype;
00371 }
00372 
00373 
00374 QStringList KProtocolInfo::archiveMimeTypes() const
00375 {
00376     Q_D(const KProtocolInfo);
00377     return d->archiveMimetype;
00378 }
00379 
00380 bool KProtocolInfo::supportsListing() const
00381 {
00382     return m_supportsListing;
00383 }
00384 
00385 bool KProtocolInfo::canRenameFromFile() const
00386 {
00387     Q_D(const KProtocolInfo);
00388   return d->canRenameFromFile;
00389 }
00390 
00391 bool KProtocolInfo::canRenameToFile() const
00392 {
00393     Q_D(const KProtocolInfo);
00394   return d->canRenameToFile;
00395 }
00396 
00397 bool KProtocolInfo::canDeleteRecursive() const
00398 {
00399     Q_D(const KProtocolInfo);
00400   return d->canDeleteRecursive;
00401 }
00402 
00403 KProtocolInfo::FileNameUsedForCopying KProtocolInfo::fileNameUsedForCopying() const
00404 {
00405     Q_D(const KProtocolInfo);
00406   return d->fileNameUsedForCopying ? Name : FromUrl;
00407 }
00408 
00409 bool KProtocolInfo::isFilterProtocol( const KUrl &url )
00410 {
00411   return isFilterProtocol (url.protocol());
00412 }
00413 
00414 bool KProtocolInfo::isHelperProtocol( const KUrl &url )
00415 {
00416   return isHelperProtocol (url.protocol());
00417 }
00418 
00419 bool KProtocolInfo::isHelperProtocol( const QString &protocol )
00420 {
00421   // We call the findProtocol directly (not via KProtocolManager) to bypass any proxy settings.
00422   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(protocol);
00423   if ( !prot )
00424     return false;
00425 
00426   return prot->m_isHelperProtocol;
00427 }
00428 
00429 bool KProtocolInfo::isKnownProtocol( const KUrl &url )
00430 {
00431   return isKnownProtocol (url.protocol());
00432 }
00433 
00434 bool KProtocolInfo::isKnownProtocol( const QString &protocol )
00435 {
00436   // We call the findProtocol (const QString&) to bypass any proxy settings.
00437   KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(protocol);
00438   return prot;
00439 }
00440 
00441 QDataStream& operator>>( QDataStream& s, KProtocolInfo::ExtraField& field )  {
00442   s >> field.name;
00443   int type;
00444   s >> type;
00445   field.type = static_cast<KProtocolInfo::ExtraField::Type>( type );
00446   return s;
00447 }
00448 
00449 QDataStream& operator<<( QDataStream& s, const KProtocolInfo::ExtraField& field )  {
00450   s << field.name;
00451   s << static_cast<int>( field.type );
00452   return s;
00453 }

KDECore

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

kdelibs

Skip menu "kdelibs"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • Kate
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • kio
  • KIOSlave
  • KJS
  •   KJS-API
  •   WTF
  • kjsembed
  • KNewStuff
  • KParts
  • KPty
  • Kross
  • KUtils
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver
Generated for kdelibs by doxygen 1.6.1
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