23#include "managerimpl.h"
25#include <kaboutdata.h>
29#include <kstandarddirs.h>
30#include <kconfiggroup.h>
32#include <QtDBus/QtDBus>
37#include "kresourcesmanageradaptor.h"
41class ManagerImpl::ManagerImplPrivate
50 Resource::List mResources;
57 : d(
new ManagerImplPrivate )
65 d->mConfigRead =
false;
69 QDBusConnection::sessionBus().registerObject(
dBusPath,
this );
72 d->mId = KRandom::randomString( 8 );
75 QDBusConnection::sessionBus().registerService(
QLatin1String(
"org.kde.KResourcesManager") );
77 QDBusConnection::sessionBus().connect( QString(),
dBusPath,
79 this,
SLOT(dbusKResourceAdded(QString,QString)));
80 QDBusConnection::sessionBus().connect( QString(),
dBusPath,
82 this,
SLOT(dbusKResourceModified(QString,QString)));
83 QDBusConnection::sessionBus().connect( QString(),
dBusPath,
85 this,
SLOT(dbusKResourceDeleted(QString,QString)));
88ManagerImpl::~ManagerImpl()
97void ManagerImpl::createStandardConfig()
99 if ( !d->mStdConfig ) {
100 QString
file = defaultConfigFile( d->mFamily );
104 d->mConfig = d->mStdConfig;
118 createStandardConfig();
126 QStringList
keys =
group.readEntry(
"ResourceKeys", QStringList() );
127 keys +=
group.readEntry(
"PassiveResourceKeys", QStringList() );
131 for ( QStringList::const_iterator
it =
keys.constBegin();
it !=
keys.constEnd(); ++
it ) {
132 readResourceConfig( *
it,
false );
135 d->mConfigRead =
true;
143 createStandardConfig();
152 Resource::List::Iterator
it;
153 for (
it = d->mResources.begin();
it != d->mResources.end(); ++
it ) {
154 writeResourceConfig( *
it,
false );
156 QString
key = ( *it )->identifier();
157 if ( ( *it )->isActive() ) {
166 kDebug() <<
"Saving general info";
170 if ( d->mStandard ) {
173 group.writeEntry(
"Standard", QString() );
180void ManagerImpl::add(
Resource *resource )
184 if ( d->mResources.isEmpty() ) {
185 d->mStandard = resource;
188 d->mResources.append( resource );
190 if ( d->mConfigRead ) {
191 writeResourceConfig( resource,
true );
194 signalKResourceAdded( d->mId, resource->
identifier() );
197void ManagerImpl::remove(
Resource *resource )
199 if ( d->mStandard == resource ) {
202 removeResource( resource );
204 d->mResources.removeAll( resource );
206 signalKResourceDeleted( d->mId, resource->
identifier() );
213void ManagerImpl::change(
Resource *resource )
215 writeResourceConfig( resource,
true );
217 signalKResourceModified( d->mId, resource->
identifier() );
227Resource *ManagerImpl::standardResource()
232void ManagerImpl::setStandardResource(
Resource *resource )
234 d->mStandard = resource;
239void ManagerImpl::dbusKResourceAdded(
const QString &
managerId,
243 kDebug() <<
"Ignore D-Bus notification to myself";
249 kDebug() <<
"This resource is already known to me.";
253 createStandardConfig();
256 d->mConfig->reparseConfiguration();
260 d->mNotifier->notifyResourceAdded( resource );
262 kError() <<
"Received D-Bus: resource added for unknown resource"
267void ManagerImpl::dbusKResourceModified(
const QString &
managerId,
271 kDebug() <<
"Ignore D-Bus notification to myself";
278 d->mNotifier->notifyResourceModified( resource );
280 kError() <<
"Received D-Bus: resource modified for unknown resource"
285void ManagerImpl::dbusKResourceDeleted(
const QString &
managerId,
289 kDebug() <<
"Ignore D-Bus notification to myself";
296 d->mNotifier->notifyResourceDeleted( resource );
298 kDebug() <<
"Removing item from mResources";
300 if ( d->mStandard == resource ) {
303 d->mResources.removeAll( resource );
305 kError() <<
"Received D-Bus: resource deleted for unknown resource"
310QStringList ManagerImpl::resourceNames()
314 Resource::List::ConstIterator
it;
315 Resource::List::ConstIterator end(d->mResources.constEnd());
316 for (
it = d->mResources.constBegin();
it != end; ++
it ) {
317 result.append( ( *it )->resourceName() );
322Resource::List *ManagerImpl::resourceList()
324 return &d->mResources;
336 for (
int i = 0;
i < d->mResources.size(); ++
i ) {
337 if ( d->mResources.at(
i )->isActive() ==
active ) {
338 result.append( d->mResources.at(
i ) );
344Resource *ManagerImpl::readResourceConfig(
const QString &identifier,
349 if ( !d->mFactory ) {
350 kError() <<
"mFactory is 0. Did the app forget to call readConfig?";
356 QString type =
group.readEntry(
"ResourceType" );
357 QString
name =
group.readEntry(
"ResourceName" );
360 kDebug() <<
"Failed to create resource with id" << identifier;
368 group = d->mConfig->group(
"General" );
372 d->mStandard = resource;
376 QStringList
activeKeys =
group.readEntry(
"ResourceKeys", QStringList() );
379 d->mResources.append( resource );
384void ManagerImpl::writeResourceConfig(
Resource *resource,
bool checkActive )
391 createStandardConfig();
397 group = d->mConfig->group(
"General" );
403 group.writeEntry(
"Standard",
"" );
407 QStringList
activeKeys =
group.readEntry(
"ResourceKeys", QStringList() );
408 QStringList
passiveKeys =
group.readEntry(
"PassiveResourceKeys", QStringList() );
418 }
else if ( !resource->
isActive() ) {
433void ManagerImpl::removeResource(
Resource *resource )
438 createStandardConfig();
442 QStringList
activeKeys =
group.readEntry(
"ResourceKeys", QStringList() );
447 QStringList
passiveKeys=
group.readEntry(
"PassiveResourceKeys", QStringList() );
454 group.writeEntry(
"Standard",
"" );
461Resource *ManagerImpl::getResource(
const QString &identifier )
463 Resource::List::ConstIterator
it;
464 for (
it = d->mResources.constBegin();
it != d->mResources.constEnd(); ++
it ) {
465 if ( ( *it )->identifier() == identifier ) {
472QString ManagerImpl::defaultConfigFile(
const QString &
family )
474 return KStandardDirs::locateLocal(
"config",
475 QString::fromLatin1(
"kresources/%1/stdrc" ).
arg(
family ) );
A class for loading resource plugins.
void reloadConfig()
Reload the configuration.
Resource * resource(const QString &type, const KConfigGroup &group)
Returns a pointer to a resource object or a null pointer if resource type doesn't exist.
static Factory * self(const QString &resourceFamily)
Returns the global resource factory.
This class provides a manager for resources of a specified family.
This class provides a resource which is managed in a general way.
QString identifier() const
Returns a unique identifier.
bool isActive() const
Return true, if the resource is active.
virtual void writeConfig(KConfigGroup &group)
Write configuration information for this resource to a configuration file.
void setIdentifier(const QString &identifier)
Sets the resource unique identifier.
void setActive(bool active)
Sets, if the resource is active.
This file is part of the KDE resource framework and defines the Factory class.