00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
#include "kprotocolinfo.h"
00020
#include "kprotocolinfofactory.h"
00021
00022
#include <kstandarddirs.h>
00023
#include <kglobal.h>
00024
#include <kapplication.h>
00025
#include <kdebug.h>
00026
#include <ksimpleconfig.h>
00027
#include <kconfig.h>
00028
#include <kstringhandler.h>
00029
00030
class KProtocolInfo::KProtocolInfoPrivate
00031 {
00032
public:
00033
QString docPath;
00034
QString protClass;
00035
KProtocolInfo::ExtraFieldList extraFields;
00036
bool showPreviews;
00037
KURL::URIMode uriMode;
00038 };
00039
00040
00041
00042
00043
KProtocolInfo::KProtocolInfo(
const QString &path)
00044 :
KSycocaEntry(path)
00045 {
00046 d =
new KProtocolInfoPrivate;
00047
QString fullPath = locate(
"services", path);
00048
00049
KSimpleConfig config( fullPath,
true );
00050 config.setGroup(
"Protocol" );
00051
00052 m_name = config.readEntry(
"protocol" );
00053 m_exec = config.readPathEntry(
"exec" );
00054 m_isSourceProtocol = config.readBoolEntry(
"source",
true );
00055 m_isHelperProtocol = config.readBoolEntry(
"helper",
false );
00056 m_supportsReading = config.readBoolEntry(
"reading",
false );
00057 m_supportsWriting = config.readBoolEntry(
"writing",
false );
00058 m_supportsMakeDir = config.readBoolEntry(
"makedir",
false );
00059 m_supportsDeleting = config.readBoolEntry(
"deleting",
false );
00060 m_supportsLinking = config.readBoolEntry(
"linking",
false );
00061 m_supportsMoving = config.readBoolEntry(
"moving",
false );
00062 m_canCopyFromFile = config.readBoolEntry(
"copyFromFile",
false );
00063 m_canCopyToFile = config.readBoolEntry(
"copyToFile",
false );
00064 m_listing = config.readListEntry(
"listing" );
00065
00066
if ( m_listing.count() == 1 && m_listing.first() ==
"false" )
00067 m_listing.clear();
00068 m_supportsListing = ( m_listing.count() > 0 );
00069 m_defaultMimetype = config.readEntry(
"defaultMimetype" );
00070 m_determineMimetypeFromExtension = config.readBoolEntry(
"determineMimetypeFromExtension",
true );
00071 m_icon = config.readEntry(
"Icon",
"mime_empty" );
00072 m_config = config.readEntry(
"config", m_name );
00073 m_maxSlaves = config.readNumEntry(
"maxInstances", 1);
00074
00075
QString tmp = config.readEntry(
"input" );
00076
if ( tmp ==
"filesystem" )
00077 m_inputType =
KProtocolInfo::T_FILESYSTEM;
00078
else if ( tmp ==
"stream" )
00079 m_inputType =
KProtocolInfo::T_STREAM;
00080
else
00081 m_inputType =
KProtocolInfo::T_NONE;
00082
00083 tmp = config.readEntry(
"output" );
00084
if ( tmp ==
"filesystem" )
00085 m_outputType =
KProtocolInfo::T_FILESYSTEM;
00086
else if ( tmp ==
"stream" )
00087 m_outputType =
KProtocolInfo::T_STREAM;
00088
else
00089 m_outputType =
KProtocolInfo::T_NONE;
00090
00091 d->docPath = config.readPathEntry(
"DocPath" );
00092 d->protClass = config.readEntry(
"Class" ).lower();
00093
if (d->protClass[0] !=
':')
00094 d->protClass.prepend(
':');
00095
00096
QStringList extraNames = config.readListEntry(
"ExtraNames" );
00097
QStringList extraTypes = config.readListEntry(
"ExtraTypes" );
00098 QStringList::Iterator it = extraNames.begin();
00099 QStringList::Iterator typeit = extraTypes.begin();
00100
for( ; it != extraNames.end() && typeit != extraTypes.end(); ++it, ++typeit ) {
00101 d->extraFields.append( ExtraField( *it, *typeit ) );
00102 }
00103
00104 d->showPreviews = config.readBoolEntry(
"ShowPreviews", d->protClass ==
":local" );
00105
00106 tmp = config.readEntry(
"URIMode", QString::null ).
lower();
00107
if (tmp ==
"rawuri")
00108 d->uriMode =
KURL::RawURI;
00109
else if (tmp ==
"mailto")
00110 d->uriMode =
KURL::Mailto;
00111
else if (tmp ==
"url")
00112 d->uriMode =
KURL::URL;
00113
else
00114 d->uriMode =
KURL::Auto;
00115 }
00116
00117
KProtocolInfo::KProtocolInfo(
QDataStream& _str,
int offset) :
00118
KSycocaEntry( _str, offset)
00119 {
00120 d =
new KProtocolInfoPrivate;
00121 load( _str );
00122 }
00123
00124 KProtocolInfo::~KProtocolInfo()
00125 {
00126
delete d;
00127 }
00128
00129
void
00130
KProtocolInfo::load(
QDataStream& _str)
00131 {
00132 Q_INT32 i_inputType, i_outputType;
00133 Q_INT8 i_isSourceProtocol, i_isHelperProtocol,
00134 i_supportsListing, i_supportsReading,
00135 i_supportsWriting, i_supportsMakeDir,
00136 i_supportsDeleting, i_supportsLinking,
00137 i_supportsMoving, i_determineMimetypeFromExtension,
00138 i_canCopyFromFile, i_canCopyToFile, i_showPreviews,
00139 i_uriMode;
00140 _str >>
m_name >>
m_exec >>
m_listing >>
m_defaultMimetype
00141 >> i_determineMimetypeFromExtension
00142 >>
m_icon
00143 >> i_inputType >> i_outputType
00144 >> i_isSourceProtocol >> i_isHelperProtocol
00145 >> i_supportsListing >> i_supportsReading
00146 >> i_supportsWriting >> i_supportsMakeDir
00147 >> i_supportsDeleting >> i_supportsLinking
00148 >> i_supportsMoving
00149 >> i_canCopyFromFile >> i_canCopyToFile
00150 >>
m_config >>
m_maxSlaves >> d->docPath >> d->protClass >> d->extraFields >> i_showPreviews >> i_uriMode;
00151
m_inputType = (
Type) i_inputType;
00152
m_outputType = (
Type) i_outputType;
00153
m_isSourceProtocol = (i_isSourceProtocol != 0);
00154
m_isHelperProtocol = (i_isHelperProtocol != 0);
00155
m_supportsListing = (i_supportsListing != 0);
00156
m_supportsReading = (i_supportsReading != 0);
00157
m_supportsWriting = (i_supportsWriting != 0);
00158
m_supportsMakeDir = (i_supportsMakeDir != 0);
00159
m_supportsDeleting = (i_supportsDeleting != 0);
00160
m_supportsLinking = (i_supportsLinking != 0);
00161
m_supportsMoving = (i_supportsMoving != 0);
00162
m_canCopyFromFile = (i_canCopyFromFile != 0);
00163
m_canCopyToFile = (i_canCopyToFile != 0);
00164
m_determineMimetypeFromExtension = (i_determineMimetypeFromExtension != 0);
00165 d->showPreviews = (i_showPreviews != 0);
00166 d->uriMode = (
KURL::URIMode) i_uriMode;
00167 }
00168
00169
void
00170
KProtocolInfo::save(
QDataStream& _str)
00171 {
00172 KSycocaEntry::save( _str );
00173
00174 Q_INT32 i_inputType, i_outputType;
00175 Q_INT8 i_isSourceProtocol, i_isHelperProtocol,
00176 i_supportsListing, i_supportsReading,
00177 i_supportsWriting, i_supportsMakeDir,
00178 i_supportsDeleting, i_supportsLinking,
00179 i_supportsMoving, i_determineMimetypeFromExtension,
00180 i_canCopyFromFile, i_canCopyToFile, i_showPreviews,
00181 i_uriMode;
00182
00183 i_inputType = (Q_INT32)
m_inputType;
00184 i_outputType = (Q_INT32)
m_outputType;
00185 i_isSourceProtocol =
m_isSourceProtocol ? 1 : 0;
00186 i_isHelperProtocol =
m_isHelperProtocol ? 1 : 0;
00187 i_supportsListing =
m_supportsListing ? 1 : 0;
00188 i_supportsReading =
m_supportsReading ? 1 : 0;
00189 i_supportsWriting =
m_supportsWriting ? 1 : 0;
00190 i_supportsMakeDir =
m_supportsMakeDir ? 1 : 0;
00191 i_supportsDeleting =
m_supportsDeleting ? 1 : 0;
00192 i_supportsLinking =
m_supportsLinking ? 1 : 0;
00193 i_supportsMoving =
m_supportsMoving ? 1 : 0;
00194 i_canCopyFromFile =
m_canCopyFromFile ? 1 : 0;
00195 i_canCopyToFile =
m_canCopyToFile ? 1 : 0;
00196 i_determineMimetypeFromExtension =
m_determineMimetypeFromExtension ? 1 : 0;
00197 i_showPreviews = d->showPreviews ? 1 : 0;
00198 i_uriMode = d->uriMode;
00199
00200 _str <<
m_name <<
m_exec <<
m_listing <<
m_defaultMimetype
00201 << i_determineMimetypeFromExtension
00202 <<
m_icon
00203 << i_inputType << i_outputType
00204 << i_isSourceProtocol << i_isHelperProtocol
00205 << i_supportsListing << i_supportsReading
00206 << i_supportsWriting << i_supportsMakeDir
00207 << i_supportsDeleting << i_supportsLinking
00208 << i_supportsMoving
00209 << i_canCopyFromFile << i_canCopyToFile
00210 <<
m_config <<
m_maxSlaves << d->docPath << d->protClass << d->extraFields << i_showPreviews << i_uriMode;
00211 }
00212
00213
00214
00215
00216
00217
00218
QStringList KProtocolInfo::protocols()
00219 {
00220
return KProtocolInfoFactory::self()->
protocols();
00221 }
00222
00223
bool KProtocolInfo::isSourceProtocol(
const QString& _protocol )
00224 {
00225
KProtocolInfo::Ptr prot =
KProtocolInfoFactory::self()->
findProtocol(_protocol);
00226
if ( !prot )
00227
return false;
00228
00229
return prot->m_isSourceProtocol;
00230 }
00231
00232
bool KProtocolInfo::isFilterProtocol(
const QString& _protocol )
00233 {
00234
KProtocolInfo::Ptr prot =
KProtocolInfoFactory::self()->
findProtocol(_protocol);
00235
if ( !prot )
00236
return false;
00237
00238
return !prot->m_isSourceProtocol;
00239 }
00240
00241
bool KProtocolInfo::isHelperProtocol(
const QString& _protocol )
00242 {
00243
KProtocolInfo::Ptr prot =
KProtocolInfoFactory::self()->
findProtocol(_protocol);
00244
if ( !prot )
00245
return false;
00246
00247
return prot->m_isHelperProtocol;
00248 }
00249
00250
bool KProtocolInfo::isKnownProtocol(
const QString& _protocol )
00251 {
00252
KProtocolInfo::Ptr prot =
KProtocolInfoFactory::self()->
findProtocol(_protocol);
00253
return ( prot != 0);
00254 }
00255
00256
bool KProtocolInfo::supportsListing(
const QString& _protocol )
00257 {
00258
KProtocolInfo::Ptr prot =
KProtocolInfoFactory::self()->
findProtocol(_protocol);
00259
if ( !prot )
00260
return false;
00261
00262
return prot->m_supportsListing;
00263 }
00264
00265
QStringList KProtocolInfo::listing(
const QString& _protocol )
00266 {
00267
KProtocolInfo::Ptr prot =
KProtocolInfoFactory::self()->
findProtocol(_protocol);
00268
if ( !prot )
00269
return QStringList();
00270
00271
return prot->m_listing;
00272 }
00273
00274
bool KProtocolInfo::supportsReading(
const QString& _protocol )
00275 {
00276
KProtocolInfo::Ptr prot =
KProtocolInfoFactory::self()->
findProtocol(_protocol);
00277
if ( !prot )
00278
return false;
00279
00280
return prot->m_supportsReading;
00281 }
00282
00283
bool KProtocolInfo::supportsWriting(
const QString& _protocol )
00284 {
00285
KProtocolInfo::Ptr prot =
KProtocolInfoFactory::self()->
findProtocol(_protocol);
00286
if ( !prot )
00287
return false;
00288
00289
return prot->m_supportsWriting;
00290 }
00291
00292
bool KProtocolInfo::supportsMakeDir(
const QString& _protocol )
00293 {
00294
KProtocolInfo::Ptr prot =
KProtocolInfoFactory::self()->
findProtocol(_protocol);
00295
if ( !prot )
00296
return false;
00297
00298
return prot->m_supportsMakeDir;
00299 }
00300
00301
bool KProtocolInfo::supportsDeleting(
const QString& _protocol )
00302 {
00303
KProtocolInfo::Ptr prot =
KProtocolInfoFactory::self()->
findProtocol(_protocol);
00304
if ( !prot )
00305
return false;
00306
00307
return prot->m_supportsDeleting;
00308 }
00309
00310
bool KProtocolInfo::supportsLinking(
const QString& _protocol )
00311 {
00312
KProtocolInfo::Ptr prot =
KProtocolInfoFactory::self()->
findProtocol(_protocol);
00313
if ( !prot )
00314
return false;
00315
00316
return prot->m_supportsLinking;
00317 }
00318
00319
bool KProtocolInfo::supportsMoving(
const QString& _protocol )
00320 {
00321
KProtocolInfo::Ptr prot =
KProtocolInfoFactory::self()->
findProtocol(_protocol);
00322
if ( !prot )
00323
return false;
00324
00325
return prot->m_supportsMoving;
00326 }
00327
00328
bool KProtocolInfo::canCopyFromFile(
const QString& _protocol )
00329 {
00330
KProtocolInfo::Ptr prot =
KProtocolInfoFactory::self()->
findProtocol(_protocol);
00331
if ( !prot )
00332
return false;
00333
00334
return prot->m_canCopyFromFile;
00335 }
00336
00337
00338
bool KProtocolInfo::canCopyToFile(
const QString& _protocol )
00339 {
00340
KProtocolInfo::Ptr prot =
KProtocolInfoFactory::self()->
findProtocol(_protocol);
00341
if ( !prot )
00342
return false;
00343
00344
return prot->m_canCopyToFile;
00345 }
00346
00347
QString KProtocolInfo::icon(
const QString& _protocol )
00348 {
00349
KProtocolInfo::Ptr prot =
KProtocolInfoFactory::self()->
findProtocol(_protocol);
00350
if ( !prot )
00351
return QString::fromLatin1(
"mime_empty");
00352
00353
return prot->m_icon;
00354 }
00355
00356
QString KProtocolInfo::config(
const QString& _protocol )
00357 {
00358
KProtocolInfo::Ptr prot =
KProtocolInfoFactory::self()->
findProtocol(_protocol);
00359
if ( !prot )
00360
return QString::null;
00361
00362
return QString(
"kio_%1rc").arg(prot->m_config);
00363 }
00364
00365
int KProtocolInfo::maxSlaves(
const QString& _protocol )
00366 {
00367
KProtocolInfo::Ptr prot =
KProtocolInfoFactory::self()->
findProtocol(_protocol);
00368
if ( !prot )
00369
return 1;
00370
00371
return prot->m_maxSlaves;
00372 }
00373
00374
QString KProtocolInfo::defaultMimetype(
const QString& _protocol )
00375 {
00376
KProtocolInfo::Ptr prot =
KProtocolInfoFactory::self()->
findProtocol(_protocol);
00377
if ( !prot )
00378
return QString::null;
00379
00380
return prot->m_defaultMimetype;
00381 }
00382
00383
bool KProtocolInfo::determineMimetypeFromExtension(
const QString &_protocol )
00384 {
00385
KProtocolInfo::Ptr prot =
KProtocolInfoFactory::self()->
findProtocol( _protocol );
00386
if ( !prot )
00387
return true;
00388
00389
return prot->m_determineMimetypeFromExtension;
00390 }
00391
00392
QString KProtocolInfo::exec(
const QString& _protocol )
00393 {
00394
KProtocolInfo::Ptr prot =
KProtocolInfoFactory::self()->
findProtocol(_protocol);
00395
if ( !prot )
00396
return QString::null;
00397
00398
return prot->m_exec;
00399 }
00400
00401
KProtocolInfo::Type KProtocolInfo::inputType(
const QString& _protocol )
00402 {
00403
KProtocolInfo::Ptr prot =
KProtocolInfoFactory::self()->
findProtocol(_protocol);
00404
if ( !prot )
00405
return T_NONE;
00406
00407
return prot->m_inputType;
00408 }
00409
00410
KProtocolInfo::Type KProtocolInfo::outputType(
const QString& _protocol )
00411 {
00412
KProtocolInfo::Ptr prot =
KProtocolInfoFactory::self()->
findProtocol(_protocol);
00413
if ( !prot )
00414
return T_NONE;
00415
00416
return prot->m_outputType;
00417 }
00418
00419
KProtocolInfo::ExtraFieldList KProtocolInfo::extraFields(
const KURL &url )
00420 {
00421
KProtocolInfo::Ptr prot =
KProtocolInfoFactory::self()->
findProtocol(url.
protocol());
00422
if ( !prot )
00423
return ExtraFieldList();
00424
00425
return prot->d->extraFields;
00426 }
00427
00428
QString KProtocolInfo::docPath(
const QString& _protocol )
00429 {
00430
KProtocolInfo::Ptr prot =
KProtocolInfoFactory::self()->
findProtocol(_protocol);
00431
if ( !prot )
00432
return QString::null;
00433
00434
return prot->d->docPath;
00435 }
00436
00437
QString KProtocolInfo::protocolClass(
const QString& _protocol )
00438 {
00439
KProtocolInfo::Ptr prot =
KProtocolInfoFactory::self()->
findProtocol(_protocol);
00440
if ( !prot )
00441
return QString::null;
00442
00443
return prot->d->protClass;
00444 }
00445
00446
bool KProtocolInfo::showFilePreview(
const QString& _protocol )
00447 {
00448
KProtocolInfo::Ptr prot =
KProtocolInfoFactory::self()->
findProtocol(_protocol);
00449
if ( !prot )
00450
return false;
00451
00452
return prot->d->showPreviews;
00453 }
00454
00455
KURL::URIMode KProtocolInfo::uriParseMode(
const QString& _protocol )
00456 {
00457
KProtocolInfo::Ptr prot =
KProtocolInfoFactory::self()->
findProtocol(_protocol);
00458
if ( !prot )
00459
return KURL::Auto;
00460
00461
return prot->d->uriMode;
00462 }
00463
00464
QDataStream&
operator>>(
QDataStream& s,
KProtocolInfo::ExtraField& field ) {
00465 s >> field.
name;
00466 s >> field.
type;
00467
return s;
00468 }
00469
00470
QDataStream&
operator<<(
QDataStream& s,
const KProtocolInfo::ExtraField& field ) {
00471 s << field.
name;
00472 s << field.
type;
00473
return s;
00474 }
00475
00476
00477
00478
void KProtocolInfo::virtual_hook(
int id,
void* data )
00479 { KSycocaEntry::virtual_hook(
id, data ); }
00480