< Projects‎ | Nepomuk
Revision as of 18:58, 30 August 2011 by Trueg (talk | contribs) (Decisions)

Topic

For KDE 5.0 kdelibs and kde-runtime will be split into several parts/components/repositories in order to be more modular and reach a larger audience. This development is at the moment going on in the frameworks branch of kdelibs. There is basically three groups of repositories:

  1. Tier 1: components which only depend on Qt and no other lib/component from KDE
  2. Tier 2: components which depend on Qt and other libraries from Tier 1.
  3. Tier 3: components which depend on anything

Due to our central runtime parts basically all our components are in Tier 3. The only exception is Soprano which is in Tier 1.

Items of Discussion

  • How do we split libnepomuk for kdelibs 5.0
  • Which parts do we drop (besides the already deprecated API)
  • Which new parts do we introduce (candidate: nepomukdatamanagement) and how do we combine them with existing libs (maybe merge)
  • What do we do with ResourceManager::mainModel()? Do we drop it altogether? Do we introduce an alternative which is purely DBus based? Do we extend the QueryServiceClient to provide better SPARQL result support?
  • We need to move nepomuk-dependent code from KIO to our libs
  • We need to make the rest of KIO independent of Nepomuk. This is mainly the download tracking. David Faure suggested to introduce a DBus signal which one of our services can connect to. Maybe similar to the KDirNotify signals.

Participants in IRC meeting 29.08.2011 and 30.08.2011

  • Vishesh Handa
  • Artem Serebinsky
  • Sebastian Trueg

Decisions

Git Repositories

Which repositories will we use and which components will they contain. The decision was based on the question of which parts of Nepomuk we want always to be available and which are optional.

  1. nepomuk-core - The main Nepomuk repository which is required in any case and provides the basic Nepomuk functionality including storage, query, and the like. Draft repository can be found in trueg's nepomuk-core scratch repo.
    • Nepomukserver
    • nepomukservicestub
    • Extension ontologies
    • Core services: Storage/DMS, Query service, Filewatch service, File indexer
    • Core libraries: see below.
  2. nepomuk-ui
    • UI libraries: see below
  3. nepomuk-kde-kio
    • KIO slaves: nepomuksearch, timeline, nepomuk
  4. nepomuk-kde-config-ui
    • nepomukcontroller
    • Nepomuk KCM

Libraries

New Libraries

Which libraries do we want to have in the end?

  1. nepomukcore - The core libraries which are always installed and everything else depends on
    • libnepomukdatamanagement
    • The current kdelibs/nepomuk/core
    • The current libnepomukquery
    • The current kdelibs/nepomuk/types
    • Nepomuk::formatPropertyValue - maybe rename to propertyToString to indicate that it is the basic formatting method
  2. nepomukui - UI elements build upon nepomukcore
    • The current kdelibs/nepomuk/utils/searchlineedit.h/.cpp, searchwidget.h/.cpp
    • KFileMetaDataWidget - with a new name and in Nepomuk namespace (is in dire need of a rewrite)

API to drop

  • For now we drop the facet API and move it to playground since it was forced and is weird
  • We drop all in kdelibs/nepomuk/ui from public API and only copy what we need for the metadatawidget
  • We will drop ResourceManager as a public class.
  • We will drop QueryServiceClient and replace it with methods in the Nepomuk namespace that return job instances which will then signal the results.

Queries

We currently have the async QueryServiceClient API and the sync Soprano APi provided through ResourceManager::mainModel. The goal is to have one way to query Nepomuk in order not to confuse developers. This one way should allow for use of Nepomuk::Query::Query or a SPARQL string. The result type would depend on the query method used - for SPARQL strings it should return bingings, for Query instances it should return something simpler like Nepomuk::Query::Result.

The road to take is this:

  • Drop the mainModel method together with the whole of ResourceManager.
  • Drop QueryServiceClient and instead add query methods into the Nepomuk namespace which return jobs or query instances that provide result signals and can be synchronously iterated with a method like waitForNext. This method would ideally not use a local event loop but wait for the socket to give more information.
  • Merge Query service into storage service for faster queries
  • Unless kernel DBus is finished quickly we should keep the socket communication for queries. Otherwise the DBus daemon goes crazy.

KIO

Currently KIO contains classes that depend on Nepomuk. We will move those into nepomuk-ui. Basically it is only the KFileMetaDataWidget.

KParts

browserrun_p.h contains a class to Nepomuk::Utils. This will be replaced by a DBus signal as follows:

void emitFileDownloaded(const QString& srcUrl, const QString& destUrl, const QString& referrer, int startTime, int endTime);

Which is in sync with the design of KDirNotify. One might even think about making this a desktop standard.

Nepomuk::Resource

The code and API of Nepomuk::Resource is one of the oldest part of Nepomuk. Its API will be cleaned up considerably. Besides the already mentioned removal of ResourceManager we will make use of QObject. "Make use" here means that conceptually Nepomuk::Resource will be derived from QObject to provide change signals. Effectively, however, it will not be derived from QObject since that would prevent fancy multi-inheritance in generated sub-classes. Instead we will provide a watcher method which returns a QObject derived class. This class provides the required signals instead.

namespace Nepomuk {
class Resource {
    [...]

    ResourceWatcher* watcher();

    [...]
};
}

Here "ResourceWatcher" is not the same as the existing ResourceWatcher class which allows watching arbitrary resources. (The naming clash has still to be resolved.) Instead it has signals which only relate to the resource in question:

namespace Nepomuk {
class ResourceWatcher : public QObject {
    Q_OBJECT

Q_SIGNALS:
    void resourceChanged();
    void resourceRemoved();
    void propertyAdded(const Nepomuk::Types::Property& prop, const QVariant& value);
    [...]
};
}

(The type of the parameters is yet to be decided - it is not clear if we will keep Nepomuk::Variant or not.)


Content is available under Creative Commons License SA 4.0 unless otherwise noted.