Plasma/libplasma2/API Review/DataEngine

From KDE Community Wiki
Revision as of 14:15, 6 May 2013 by Sebas (talk | contribs) (→‎DataEngine functionality missing:)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

API

Status Action Method
DONE Remove explicit DataEngine(QObject *parent , KService::Ptr service);
DONE Add explicit DataEngine(QObject *parent, const KPluginInfo &info);
DONE Remove DataEngine(QObject *parent, const QVariantList &args);
DONE Keep ~DataEngine();
DONE Remove? virtual void init(); can be removed is there will be only one constructor
DONE Keep virtual QStringList sources() const;
DONE Keep virtual Service *serviceForSource(const QString &source);
DONE Add KPluginInfo pluginInfo() const;
DONE Remove QString name() const;
DONE Remove QString icon() const;
DONE Remove QString pluginName() const;
DONE Keep void connectSource(const QString &source, QObject *visualization, uint pollingInterval, Plasma::IntervalAlignment intervalAlignment ) const;
DONE Keep void connectAllSources(QObject *visualization, uint pollingInterval, Plasma::IntervalAlignment intervalAlignment) const;
DONE Keep void disconnectSource(const QString &source, QObject *visualization) const;
DONE Keep DataContainer *containerForSource(const QString &source);
DONE Remove DataEngine::Data query(const QString &source) const;
DONE Keep bool isValid() const;
DONE Keep bool isEmpty() const;
DONE Keep Package package() const;
DONE Remove Service* createDefaultService(QObject *parent );
DONE Move static QStringList listAllEngines(const QString &parentApp); -> in PluginLoader
DONE Move static KPluginInfo::List listEngineInfo(const QString &parentApp); -> in PluginLoader
DONE Move static KPluginInfo::List listEngineInfoByCategory(const QString &category, const QString &parentApp);
DONE Keep void sourceAdded(const QString &source);
DONE Keep void sourceRemoved(const QString &source);
DONE Keep virtual bool sourceRequestEvent(const QString &source);
DONE Keep virtual bool updateSourceEvent(const QString &source);
DONE Keep void setData(const QString &source, const QVariant &value);
DONE Keep void setData(const QString &source, const QString &key, const QVariant &value);
DONE Signature void setData(const QString &source, const Data ->QHash<QString, QVariant> &data); -> Data becomes QHash<QString, QVariant>
DONE Keep void removeAllData(const QString &source);
DONE Keep void removeData(const QString &source, const QString &key);
DONE Keep void addSource(DataContainer *source);
DONE Keep void setMinimumPollingInterval(int minimumMs);
DONE Keep int minimumPollingInterval() const;
DONE Keep void setPollingInterval(uint frequency);
DONE Keep void removeAllSources();
DONE Keep void setValid(bool valid);
DONE Signature SourceDict -> QHash<QString, DataContainer*> containerDict() const;
DONE Keep void timerEvent(QTimerEvent *event);
DONE Remove void setName(const QString &name);
DONE Remove void setIcon(const QString &icon);
DONE Remove void setDefaultService(const QString &serviceName);
DONE Keep void setStorageEnabled(const QString &source, bool store);
DONE Move slot void scheduleSourcesUpdated(); -> to private class
DONE Keep slot void removeSource(const QString &source);
DONE Keep slot void updateAllSources();
DONE Keep slot void forceImmediateUpdateOfAllVisualizations();


DataEngine functionality currently:

   * Timed updates
   * Ease of item creation and update
   * Item destruction when not used
   * Service integration

DataEngine functionality missing:

   * Introspection / self-documenting structures
   * Ability to represent as model internally

Open Questions

These questions have come up during review-review, and should be clarified to users of our API:

   * When to write a DataEngine, when to use an import? (In a world, where we have import security)
   * Add possibility to expose QObject*s in the API, much like QAIM*s
   * Why have QVariant(Map,Hash) *and* models, why not deprecate one?
   * Should we deprecate the QVariant*, now we have models?

QML Access

   * Can haz a model?
DataEngine {
public:
	QAbstractItemModel *model() const;
}
DataSource {
	engine: “keystate”
	sources: “*Button”
	fields: {“Pressed”}
}


Example of source types of twitter engine

Twitter			tweets		posting
identi.ca 1		dents		posting
identi.ca 2 		dents		posting
avatars		model { name : picture }

TwitterModel *model = new TwitterModel(“twitter account foo”); setData(“twitter account foo”, model);

bool pressedState = false; setData(“key”, “pressed”, pressedState);

DataContainer -> model, or contains a model …

What do we want?

  • lifecycle management
  • ondemand creation
  • keep existing API (setData, service-related stuff)
  • make it easy to use “3rd party models” (e.g. some akonadi model)


Current dataengines

  • akonadi - Akonadi PIM data engine
  • applicationjobs - Application job updates (via kuiserver)
  • apps - Information and launching of all applications in * the app menu.
  • calendar - Calendar data engine
  • comic - Online comic strips
  • devicenotifications - Passive device notifications for the user.
  • dict - Look up word meanings
  • executable - Run Executable Data Engine
  • favicons - Data Engine for getting favicons of web sites
  • filebrowser - Information about files and directories.
  • geolocation - Geolocation Data Engine
  • hotplug - Tracks hot-pluggable devices as they appear and disappear.
  • kdeobservatory - A Data Engine for acquiring consolidated data about KDE projects
  • keystate - Keyboard modifier and mouse buttons states
  • kget - No description available
  • kimpanel - DataEngine for Kimpanel
  • kremotecontrol - Data engine for kremotecontrol
  • ktorrent - KTorrent data engine, for getting information from KTorrent
  • metadata - No description available
  • microblog - identi.ca and twitter micro-blogging services
  • mixer - No description available
  • mouse - Mouse position and cursor
  • mpris2 - Provides information from and control over media players via MPRIS2
  • network - Network interface information
  • networkmanagement - Network Manager data engine
  • notifications - Passive visual notifications for the user.
  • nowplaying - Lists currently playing music
  • obsdataengine - DataEngine to make API Calls to the Open Build Service
  • ocs - No description available
  • openstreetmap - The OpenStreetMap data engine can be used to query things near the user.
  • org.kde.active.apps - Information and launching of all applications in the app menu.
  • org.kde.active.bookmarks - Bookmarks from Nepomuk
  • org.kde.active.capabilities - Provides information and services for device-specific aspects
  • org.kde.active.customsearch - Provides metadata for custom searches in semantic resources
  • org.kde.active.metadata - Provides metadata for semantic resources
  • org.kde.active.persons - Provides metadata for custom searches in semantic resources
  • org.kde.activities - Information on Plasma Activities
  • org.kde.alarms - List and set Akonadi Alarms
  • org.kde.devicecapabilities - Provides information and services for device-specific aspects
  • org.kde.examples.customDataContainers - A demonstration of how to subclass DataContainer
  • org.kde.examples.simpleEngine - A very basic DataEngine implementation
  • org.kde.examples.sourcesOnRequest - A DataEngine example showing how to respond to requests for source creation and updates
  • org.kde.konqprofiles - List and launch Konqueror profiles
  • org.kde.konsoleprofiles - List and launch Konsole profiles
  • org.kde.mobilenetworkengine - Mobile network engine
  • org.kde.mobileprofileengine - No description available
  • org.kde.plasma.dataengine.share - Engine to share content using different services
  • org.kde.preview - Shows previews for webpages
  • org.kde.printers - No description available
  • org.kde.printjobs - No description available
  • org.kde.runner - Query KRunner and execute the results
  • org.kde.sharelikeconnect - Provider of actions for sharing resources
  • parley - Vocabulary data for Plasmoids
  • places - Places, as seen in the file manager and in file dialogs.
  • potd - Data Engine for getting various online Pictures of The Day.
  • powermanagement - Battery, AC, sleep and PowerDevil information.
  • publictransport - Plasma data engine for public transport
  • rss - RSS News Data Engine
  • rtm - An engine to work with Remember the Milk.
  • searchlaunch - Engine to handle queries to SAL containment
  • soliddevice - Device data via Solid
  • statusnotifieritem - Engine for applications' status information, based on the Status Notifier protocol.
  • systemmonitor - System status information
  • tasks - Information and management services for all available windows.
  • time - Date and time by timezone
  • weather - Weather data from multiple online sources
  • workareas - Workareas Data Engine, as described in the WorkFlow Project