diff options
Diffstat (limited to 'kutils/kplugininfo.cpp')
-rw-r--r-- | kutils/kplugininfo.cpp | 359 |
1 files changed, 359 insertions, 0 deletions
diff --git a/kutils/kplugininfo.cpp b/kutils/kplugininfo.cpp new file mode 100644 index 000000000..4b80aa776 --- /dev/null +++ b/kutils/kplugininfo.cpp @@ -0,0 +1,359 @@ +/* This file is part of the KDE project + Copyright (C) 2003 Matthias Kretz <kretz@kde.org> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + +*/ + +#include "kplugininfo.h" +#include <ksimpleconfig.h> +#include <ktrader.h> +#include <kdebug.h> +#include <kconfigbase.h> +#include <kglobal.h> +#include <kstandarddirs.h> +#include <kdesktopfile.h> +#include <kservice.h> + +class KPluginInfo::KPluginInfoPrivate +{ + public: + KPluginInfoPrivate() + : hidden( false ) + , enabledbydefault( false ) + , pluginenabled( false ) + , config( 0 ) + , kcmservicesCached( false ) + {} + + ~KPluginInfoPrivate() + { + delete config; + } + + QString specfile; // the filename of the file containing all the info + QString name; + QString comment; + QString icon; + QString author; + QString email; + QString pluginName; // the name attribute in the .rc file + QString version; + QString website; // URL to the website of the plugin/author + QString category; + QString license; + QStringList dependencies; + + bool hidden; + bool enabledbydefault; + bool pluginenabled; + + KConfig * config; + QString configgroup; + KService::Ptr service; + QValueList<KService::Ptr> kcmservices; + bool kcmservicesCached; +}; + +KPluginInfo::KPluginInfo( const QString & filename, const char* resource ) +: d( new KPluginInfoPrivate ) +{ + KDesktopFile file( filename, true, resource ); + + d->specfile = filename; + + if( filename.endsWith( QString::fromAscii( ".desktop" ) ) ) + { + file.setDesktopGroup(); + d->hidden = file.readBoolEntry( "Hidden", false ); + if( d->hidden ) + return; + + d->name = file.readName(); + d->comment = file.readComment(); + d->icon = file.readEntry( "Icon" ); + d->author = file.readEntry( "X-KDE-PluginInfo-Author" ); + d->email = file.readEntry( "X-KDE-PluginInfo-Email" ); + d->pluginName = file.readEntry( "X-KDE-PluginInfo-Name" ); + d->version = file.readEntry( "X-KDE-PluginInfo-Version" ); + d->website = file.readEntry( "X-KDE-PluginInfo-Website" ); + d->category = file.readEntry( "X-KDE-PluginInfo-Category" ); + d->license = file.readEntry( "X-KDE-PluginInfo-License" ); + d->dependencies = file.readListEntry( "X-KDE-PluginInfo-Depends" ); + d->enabledbydefault = file.readBoolEntry( + "X-KDE-PluginInfo-EnabledByDefault", false ); + } + else if( filename.endsWith( QString::fromAscii( ".plugin" ) ) ) + { // provided for noatun style .plugin files compatibility + + d->name = file.readName(); + d->comment = file.readComment(); + d->icon = file.readEntry( "Icon" ); + d->author = file.readEntry( "Author" ); + d->email = file.readEntry( "Email" ); + d->pluginName = file.readPathEntry( "Filename" ); + // no version + d->website = file.readEntry( "Site" ); + d->category = file.readEntry( "Type" ); + d->license = file.readEntry( "License" ); + d->dependencies = file.readListEntry( "Require" ); + } +} + +KPluginInfo::KPluginInfo( const KService::Ptr service ) +: d( new KPluginInfoPrivate ) +{ + d->service = service; + d->specfile = service->desktopEntryPath(); + + if ( service->isDeleted() ) + { + d->hidden = true; + return; + } + + d->name = service->name(); + d->comment = service->comment(); + d->icon = service->icon(); + d->author = service->property( "X-KDE-PluginInfo-Author" ).toString(); + d->email = service->property( "X-KDE-PluginInfo-Email" ).toString(); + d->pluginName = service->property( "X-KDE-PluginInfo-Name" ).toString(); + d->version = service->property( "X-KDE-PluginInfo-Version" ).toString(); + d->website = service->property( "X-KDE-PluginInfo-Website" ).toString(); + d->category = service->property( "X-KDE-PluginInfo-Category" ).toString(); + d->license = service->property( "X-KDE-PluginInfo-License" ).toString(); + d->dependencies = + service->property( "X-KDE-PluginInfo-Depends" ).toStringList(); + QVariant tmp = service->property( "X-KDE-PluginInfo-EnabledByDefault" ); + d->enabledbydefault = tmp.isValid() ? tmp.toBool() : false; +} + +//X KPluginInfo::KPluginInfo() +//X : d( new KPluginInfoPrivate ) +//X { +//X d->hidden = true; +//X } + +KPluginInfo::~KPluginInfo() +{ + delete d; +} + +QValueList<KPluginInfo*> KPluginInfo::fromServices( const KService::List & services, KConfig * config, const QString & group ) +{ + QValueList<KPluginInfo*> infolist; + KPluginInfo * info; + for( KService::List::ConstIterator it = services.begin(); + it != services.end(); ++it ) + { + info = new KPluginInfo( *it ); + info->setConfig( config, group ); + infolist += info; + } + return infolist; +} + +QValueList<KPluginInfo*> KPluginInfo::fromFiles( const QStringList & files, KConfig * config, const QString & group ) +{ + QValueList<KPluginInfo*> infolist; + for( QStringList::ConstIterator it = files.begin(); it != files.end(); ++it ) + { + KPluginInfo * info = new KPluginInfo( *it ); + info->setConfig( config, group ); + infolist += info; + } + return infolist; +} + +QValueList<KPluginInfo*> KPluginInfo::fromKPartsInstanceName( const QString & name, KConfig * config, const QString & group ) +{ + QStringList files = KGlobal::dirs()->findAllResources( "data", name + + "/kpartplugins/*.desktop", true, false ); + return fromFiles( files, config, group ); +} + +bool KPluginInfo::isHidden() const +{ + return d->hidden; +} + +void KPluginInfo::setPluginEnabled( bool enabled ) +{ + kdDebug( 703 ) << k_funcinfo << endl; + d->pluginenabled = enabled; +} + +bool KPluginInfo::isPluginEnabled() const +{ + kdDebug( 703 ) << k_funcinfo << endl; + return d->pluginenabled; +} + +bool KPluginInfo::isPluginEnabledByDefault() const +{ + kdDebug( 703 ) << k_funcinfo << endl; + return d->enabledbydefault; +} + +const QString & KPluginInfo::name() const +{ + return d->name; +} + +const QString & KPluginInfo::comment() const +{ + return d->comment; +} + +const QString & KPluginInfo::icon() const +{ + return d->icon; +} + +const QString & KPluginInfo::specfile() const +{ + return d->specfile; +} + +const QString & KPluginInfo::author() const +{ + return d->author; +} + +const QString & KPluginInfo::email() const +{ + return d->email; +} + +const QString & KPluginInfo::category() const +{ + return d->category; +} + +const QString & KPluginInfo::pluginName() const +{ + return d->pluginName; +} + +const QString & KPluginInfo::version() const +{ + return d->version; +} + +const QString & KPluginInfo::website() const +{ + return d->website; +} + +const QString & KPluginInfo::license() const +{ + return d->license; +} + +const QStringList & KPluginInfo::dependencies() const +{ + return d->dependencies; +} + +KService::Ptr KPluginInfo::service() const +{ + return d->service; +} + +const QValueList<KService::Ptr> & KPluginInfo::kcmServices() const +{ + if ( !d->kcmservicesCached ) + { + d->kcmservices = KTrader::self()->query( "KCModule", "'" + d->pluginName + + "' in [X-KDE-ParentComponents]" ); + kdDebug( 703 ) << "found " << d->kcmservices.count() << " offers for " << + d->pluginName << endl; + + d->kcmservicesCached = true; + } + + return d->kcmservices; +} + +void KPluginInfo::setConfig( KConfig * config, const QString & group ) +{ + d->config = config; + d->configgroup = group; +} + +KConfig * KPluginInfo::config() const +{ + return d->config; +} + +const QString & KPluginInfo::configgroup() const +{ + return d->configgroup; +} + +QVariant KPluginInfo::property( const QString & key ) const +{ + if( d->service ) + return d->service->property( key ); + else + return QVariant(); +} + +QVariant KPluginInfo::operator[]( const QString & key ) const +{ + return property( key ); +} + +void KPluginInfo::save( KConfigGroup * config ) +{ + kdDebug( 703 ) << k_funcinfo << endl; + if( 0 == config ) + { + if( 0 == d->config ) + { + kdWarning( 703 ) << "no KConfigGroup, cannot save" << endl; + return; + } + d->config->setGroup( d->configgroup ); + d->config->writeEntry( d->pluginName + "Enabled", isPluginEnabled() ); + } + else + config->writeEntry( d->pluginName + "Enabled", isPluginEnabled() ); +} + +void KPluginInfo::load( KConfigGroup * config ) +{ + kdDebug( 703 ) << k_funcinfo << endl; + if( 0 == config ) + { + if( 0 == d->config ) + { + kdWarning( 703 ) << "no KConfigGroup, cannot load" << endl; + return; + } + d->config->setGroup( d->configgroup ); + setPluginEnabled( d->config->readBoolEntry( d->pluginName + "Enabled", isPluginEnabledByDefault() ) ); + } + else + setPluginEnabled( config->readBoolEntry( d->pluginName + "Enabled", isPluginEnabledByDefault() ) ); +} + +void KPluginInfo::defaults() +{ + kdDebug( 703 ) << k_funcinfo << endl; + setPluginEnabled( isPluginEnabledByDefault() ); +} + +// vim: sw=4 sts=4 et |