On Saturday 19 February 2011 13:02:20 Vishesh Handa wrote: > The method Laura described is the correct one as of now. Though, we would > prefer it if you didn't use it. The reason is that you get notified for all > the statements that have been added/removed - and those can be quite a lot. > > Especially if files or emails are being indexed. That causes the entire > system to slow down. I had to monitor everything for Nepomuk > synchronization, and it caused Nepomuk to slow down so much that in 4.6 > RC1, I finally had to disable it! > > We are working on a better way for you to watch changes in the Nepomuk > Repository. The current API that I have planned is something like this - > > ResourceWatcher * watcher = SomeObject->watchType( > Nepomuk::Vocabulary::NAO::Tag() ); > what is SomeObject?
> watcher would have its own statementAdded() and statementRemoved() signals > which would only give you those statements. I was even thinking of watching > by property. > Yes, that would be good. > Would this solve your use case? Any comments on the API? None of this has > been implemented so feel free to comment - we can change anything at this > point. > I have three usecases. Usecase1: Updating things like TagClouds where I need a signal when a new item of a certain type (i.e. Tag) is added/removed to/from the repository. For this the watchType with an added/removed signal for the concerned item would solve my problems. Usecase2: I filter a QAbstractItemModel based on the PIMO:isRelated property. So here I need a signal with the Resource and the changed isRelated property. Usecase3: When I display an item in an editor where I show some Nepomuk properties, I need a signal only for this exact resource. I'd like a similar api like the akonadi::monitor: //acts as a filter on the emitted signals for object type ResourceWatcher::watchType(Nepomuk::Vocabulary::NAO::Tag(), bool enable = true); //If set emits only signals for the explicitly watched resources ResourceWatcher::watchResource(const Nepomuk::Resource &, bool enable = true); //acts as a filter on the emitted signals for predicate ResourceWatcher::watchProperty(Nepomuk::Vocabulary::PIMO::isRelated(), bool enable = true); Usecase1: watcher->watchType(Nepomuk::Vocabulary::NAO::Tag() ); Usecase2: watcher->watchType(Nepomuk::Vocabulary::NAO::Topic() ); watcher->watchProperty(Nepomuk::Vocabulary::PIMO::isRelated()); Usecase3: watcher->watchResource(res, true); //and maybe filtering for only the properties which im interested in I think that would keep us quite flexible and would be exactly what I'm looking for. Cheers, Chris > On Fri, Feb 18, 2011 at 5:25 PM, Laura Dragan <[email protected]> wrote: > > On Thursday 17 February 2011 16:32:45 Christian Mollekopf wrote: > > > Hey Laura, > > > > > > On Thursday 17 February 2011 14:10:58 Laura Dragan wrote: > > > > Hi Chris, > > > > > > > > On Thursday 17 February 2011 01:14:02 Christian Mollekopf wrote: > > > > > hi, > > > > > > > > > > Does anybody know how I can detect when a new Tag was added/removed > > > > > to/from Nepomuk? I.e. to update a Tag Cloud. > > > > > > > > do you need to update the tag cloud if any resource is tagged outside > > > > your > > > > > > app, or just inside your app? > > > > > > I'd like to update it whenever new tags are available, not only from > > > > within my > > > > > app. > > > > > > > In SemNotes for instance the tag cloud is built only with the tags > > > > used > > > > on > > > > > > the notes - you can find that code on gitorious. > > > > > > > > A long time ago I wrote a plasmoid that built the tagcloud for the > > > > entire > > > > > > desktop (not sure if it's in playground or not), and that one was > > > > listening to statementsAdded and statementsRemoved from the model, > > > > but > > > > I > > > > > > took the easy path and rebuilt the cloud every time instead of just > > > > updating it. It worked ok with up to 30 tags, without visible delays > > > > from > > > > > > all the repository querying. > > > > > > > > > Currently I listen to the statementAdded/statementRemoved signals > > > > > of > > > > the > > > > > > > Soprano::Model, and I can also detect if an Item gets a new Tag, > > > > > but > > > > I > > > > > > > don't know how I can see from the Statement when a new Tag was > > > > created > > > > > > > or a Tag was deleted. > > > > > > > > I think you can use the signals > > > > > > > > void statementAdded( const Soprano::Statement &statement) > > > > void statementRemoved( const Soprano::Statement &statement) > > > > > > > > to look into the statements that are affected with the functions: > > > > subject(), predicate() and object(). > > > > > > Thats what I'm trying to do, but I don't get what indicates that a tag > > > is > > > > new > > > > > to the Nepomuk system (or that a tag was removed). > > > > I'd do that by checking if the statement added or removed has the > > predicate "rdf:type" and the object "nao:Tag". The subject of the > > statement is then the uri of the tag that was created or deleted. > > > > Laura > > > > > Thanks for your help, > > > > > > Chris > > > > > > > Hope this helps > > > > Laura > > > > > > > > > Cheers, > > > > > > > > > > Chris > > > > > _______________________________________________ > > > > > Nepomuk mailing list > > > > > [email protected] > > > > > https://mail.kde.org/mailman/listinfo/nepomuk > > > > > > > > _______________________________________________ > > > > Nepomuk mailing list > > > > [email protected] > > > > https://mail.kde.org/mailman/listinfo/nepomuk > > > > > > _______________________________________________ > > > Nepomuk mailing list > > > [email protected] > > > https://mail.kde.org/mailman/listinfo/nepomuk > > > > _______________________________________________ > > Nepomuk mailing list > > [email protected] > > https://mail.kde.org/mailman/listinfo/nepomuk _______________________________________________ Nepomuk mailing list [email protected] https://mail.kde.org/mailman/listinfo/nepomuk
