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 ) {
171 group.writeEntry(
"Standard", d->mStandard->identifier() );
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.
Iterator end()
Return Iterator indicating end of resource list.
Iterator begin()
Return Iterator on first resource.
bool isEmpty() const
Return true, if manager doesn't hold any resources.
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.