26
26
#include <QtDBus/QDBusObjectPath>
28
#include <Nepomuk/Resource>
28
#include <nepomuk/resource.h>
33
QList<QUrl> convertUris(const QStringList& uris) {
35
foreach(const QString& uri, uris) {
34
QString convertUri(const QUrl& uri) {
35
return KUrl(uri).url();
38
QStringList convertUris(const QList<QUrl>& uris) {
40
foreach(const QUrl& uri, uris) {
41
cs << convertUri(uri);
46
QList<QUrl> convertUris(const QStringList& uris) {
48
foreach(const QString& uri, uris) {
42
55
class Nepomuk::ResourceWatcher::Private {
44
QList<Types::Class> m_types;
45
QList<Nepomuk::Resource> m_resources;
46
QList<Types::Property> m_properties;
58
QList<QUrl> m_resources;
59
QList<QUrl> m_properties;
48
61
org::kde::nepomuk::ResourceWatcherConnection * m_connectionInterface;
49
62
org::kde::nepomuk::ResourceWatcher * m_watchManagerInterface;
64
QDBusServiceWatcher* m_rwServiceWatcher;
52
67
Nepomuk::ResourceWatcher::ResourceWatcher(QObject* parent)
69
85
bool Nepomuk::ResourceWatcher::start()
72
90
// Convert to list of strings
75
foreach( const Nepomuk::Resource & res, d->m_resources ) {
76
uris << KUrl(res.resourceUri()).url();
80
foreach( const Types::Property & prop, d->m_properties ) {
81
props << KUrl(prop.uri()).url();
84
QList<QString> types_;
85
foreach( const Types::Class & cl, d->m_types ) {
86
types_ << KUrl(cl.uri()).url();
92
QList<QString> uris = convertUris(d->m_resources);
93
QList<QString> props = convertUris(d->m_properties);
94
QList<QString> types_ = convertUris(d->m_types);
97
// Watch for the RW service to (re-)appear and then re-connect to make sure we always get updates
98
// We create this watcher even if we fail to connect below. Thus, once the rw service comes up we
101
d->m_rwServiceWatcher = new QDBusServiceWatcher(QLatin1String("org.kde.nepomuk.DataManagement"),
102
QDBusConnection::sessionBus());
103
connect(d->m_rwServiceWatcher, SIGNAL(serviceRegistered(QString)), this, SLOT(start()));
90
106
// Create the dbus object to watch
96
112
d->m_connectionInterface = new org::kde::nepomuk::ResourceWatcherConnection( "org.kde.nepomuk.DataManagement",
98
114
QDBusConnection::sessionBus() );
99
connect( d->m_connectionInterface, SIGNAL(propertyAdded(QString,QString,QDBusVariant)),
100
this, SLOT(slotPropertyAdded(QString,QString,QDBusVariant)) );
101
connect( d->m_connectionInterface, SIGNAL(propertyRemoved(QString,QString,QDBusVariant)),
102
this, SLOT(slotPropertyRemoved(QString,QString,QDBusVariant)) );
115
connect( d->m_connectionInterface, SIGNAL(propertyAdded(QString,QString,QVariantList)),
116
this, SLOT(slotPropertyAdded(QString,QString,QVariantList)) );
117
connect( d->m_connectionInterface, SIGNAL(propertyRemoved(QString,QString,QVariantList)),
118
this, SLOT(slotPropertyRemoved(QString,QString,QVariantList)) );
103
119
connect( d->m_connectionInterface, SIGNAL(resourceCreated(QString,QStringList)),
104
120
this, SLOT(slotResourceCreated(QString,QStringList)) );
121
connect( d->m_connectionInterface, SIGNAL(propertyChanged(QString,QString,QVariantList,QVariantList)),
122
this, SLOT(slotPropertyChanged(QString,QString,QVariantList,QVariantList)) );
105
123
connect( d->m_connectionInterface, SIGNAL(resourceRemoved(QString,QStringList)),
106
124
this, SLOT(slotResourceRemoved(QString,QStringList)) );
107
connect( d->m_connectionInterface, SIGNAL(resourceTypeAdded(QString,QString)),
108
this, SLOT(slotResourceTypeAdded(QString,QString)) );
109
connect( d->m_connectionInterface, SIGNAL(resourceTypeRemoved(QString,QString)),
110
this, SLOT(slotResourceTypeRemoved(QString,QString)) );
125
connect( d->m_connectionInterface, SIGNAL(resourceTypesAdded(QString,QStringList)),
126
this, SLOT(slotResourceTypesAdded(QString,QStringList)) );
127
connect( d->m_connectionInterface, SIGNAL(resourceTypesRemoved(QString,QStringList)),
128
this, SLOT(slotResourceTypesRemoved(QString,QStringList)) );
122
140
delete d->m_connectionInterface;
123
141
d->m_connectionInterface = 0;
144
delete d->m_rwServiceWatcher;
145
d->m_rwServiceWatcher = 0;
127
148
void Nepomuk::ResourceWatcher::addProperty(const Nepomuk::Types::Property& property)
129
d->m_properties << property;
150
d->m_properties << property.uri();
151
if(d->m_connectionInterface) {
152
d->m_connectionInterface->addProperty(convertUri(property.uri()));
132
156
void Nepomuk::ResourceWatcher::addResource(const Nepomuk::Resource& res)
134
d->m_resources << res;
158
d->m_resources << res.resourceUri();
159
if(d->m_connectionInterface) {
160
d->m_connectionInterface->addResource(convertUri(res.resourceUri()));
137
164
void Nepomuk::ResourceWatcher::addType(const Nepomuk::Types::Class& type)
166
d->m_types << type.uri();
167
if(d->m_connectionInterface) {
168
d->m_connectionInterface->addType(convertUri(type.uri()));
172
void Nepomuk::ResourceWatcher::removeProperty(const Nepomuk::Types::Property& property)
174
d->m_properties.removeAll(property.uri());
175
if(d->m_connectionInterface) {
176
d->m_connectionInterface->removeProperty(convertUri(property.uri()));
180
void Nepomuk::ResourceWatcher::removeResource(const Nepomuk::Resource& res)
182
d->m_resources.removeAll(res.resourceUri());
183
if(d->m_connectionInterface) {
184
d->m_connectionInterface->removeResource(convertUri(res.resourceUri()));
188
void Nepomuk::ResourceWatcher::removeType(const Nepomuk::Types::Class& type)
190
d->m_types.removeAll(type.uri());
191
if(d->m_connectionInterface) {
192
d->m_connectionInterface->removeType(convertUri(type.uri()));
142
196
QList< Nepomuk::Types::Property > Nepomuk::ResourceWatcher::properties() const
144
return d->m_properties;
198
QList< Nepomuk::Types::Property > props;
199
foreach(const QUrl& uri, d->m_properties)
200
props << Types::Property(uri);
147
204
QList<Nepomuk::Resource> Nepomuk::ResourceWatcher::resources() const
149
return d->m_resources;
206
QList<Nepomuk::Resource> resources;
207
foreach(const QUrl& uri, d->m_resources)
208
resources << Resource::fromResourceUri(uri);
152
212
QList< Nepomuk::Types::Class > Nepomuk::ResourceWatcher::types() const
214
QList<Nepomuk::Types::Class> types;
215
foreach(const QUrl& uri, d->m_types)
216
types << Types::Class(uri);
157
220
void Nepomuk::ResourceWatcher::setProperties(const QList< Nepomuk::Types::Property >& properties_)
159
d->m_properties = properties_;
222
d->m_properties.clear();
223
foreach(const Nepomuk::Types::Property& p, properties_) {
224
d->m_properties << p.uri();
227
if(d->m_connectionInterface) {
228
d->m_connectionInterface->setProperties(convertUris(d->m_properties));
162
232
void Nepomuk::ResourceWatcher::setResources(const QList< Nepomuk::Resource >& resources_)
164
d->m_resources = resources_;
234
d->m_resources.clear();
235
foreach(const Nepomuk::Resource& res, resources_) {
236
d->m_resources << res.resourceUri();
239
if(d->m_connectionInterface) {
240
d->m_connectionInterface->setResources(convertUris(d->m_resources));
167
244
void Nepomuk::ResourceWatcher::setTypes(const QList< Nepomuk::Types::Class >& types_)
247
foreach(const Nepomuk::Types::Class& t, types_) {
248
d->m_types << t.uri();
251
if(d->m_connectionInterface) {
252
d->m_connectionInterface->setTypes(convertUris(d->m_types));
172
256
void Nepomuk::ResourceWatcher::slotResourceCreated(const QString &res, const QStringList &types)
179
263
emit resourceRemoved(KUrl(res), convertUris(types));
182
void Nepomuk::ResourceWatcher::slotResourceTypeAdded(const QString &res, const QString &type)
184
emit resourceTypeAdded(KUrl(res), KUrl(type));
187
void Nepomuk::ResourceWatcher::slotResourceTypeRemoved(const QString &res, const QString &type)
189
emit resourceTypeRemoved(KUrl(res), KUrl(type));
192
void Nepomuk::ResourceWatcher::slotPropertyAdded(const QString& res, const QString& prop, const QDBusVariant& object)
194
emit propertyAdded( Resource::fromResourceUri(KUrl(res)), Types::Property( KUrl(prop) ), object.variant() );
197
void Nepomuk::ResourceWatcher::slotPropertyRemoved(const QString& res, const QString& prop, const QDBusVariant& object)
199
emit propertyRemoved( Resource::fromResourceUri(KUrl(res)), Types::Property( KUrl(prop) ), object.variant() );
266
void Nepomuk::ResourceWatcher::slotResourceTypesAdded(const QString &res, const QStringList &types)
268
foreach(const QString& type, types) {
269
emit resourceTypeAdded(KUrl(res), KUrl(type));
273
void Nepomuk::ResourceWatcher::slotResourceTypesRemoved(const QString &res, const QStringList &types)
275
foreach(const QString& type, types) {
276
emit resourceTypeRemoved(KUrl(res), KUrl(type));
280
void Nepomuk::ResourceWatcher::slotPropertyAdded(const QString& res, const QString& prop, const QVariantList &objects)
282
foreach(const QVariant& v, objects) {
283
emit propertyAdded( Resource::fromResourceUri(KUrl(res)), Types::Property( KUrl(prop) ), v );
287
void Nepomuk::ResourceWatcher::slotPropertyRemoved(const QString& res, const QString& prop, const QVariantList &objects)
289
foreach(const QVariant& v, objects) {
290
emit propertyRemoved( Resource::fromResourceUri(KUrl(res)), Types::Property( KUrl(prop) ), v );
294
void Nepomuk::ResourceWatcher::slotPropertyChanged(const QString& res, const QString& prop, const QVariantList& oldObjs, const QVariantList& newObjs)
296
emit propertyChanged( Resource::fromResourceUri(KUrl(res)), Types::Property( KUrl(prop) ),
202
300
#include "resourcewatcher.moc"