You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

117 lines
3.2 KiB

/*
SPDX-FileCopyrightText: 2007-2009 Shawn Starr <shawn.starr@rogers.com>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#pragma once
#include <QHash>
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
#include <QNetworkConfigurationManager>
#else
#include <QNetworkInformation>
#endif
#include <QTimer>
#include <Plasma/DataEngine>
#include <Plasma/DataEngineConsumer>
#include "ions/ion.h"
/**
* @author Shawn Starr
* This class is DataEngine. It handles loading, unloading, updating any data the ions wish to send. It is a gateway for datasources (ions) to
* communicate with the WeatherEngine.
*
* To search for a city:
* ion|validate|name such as noaa|validate|washington it will return a | separated list of valid places
*
* To fetch the weather:
* ion|weather|place name where the place name is a name returned by the former validate
* noaa|weather|Claxton Evans County Airport, GA
*
* Some ions may have a longer syntax, for instance wetter.com requires two extra params
* for instance:
*
* wettercom|validate|turin may return a list with items on the form
* Turin, Piemont, IT|extra|IT0PI0397;Turin
*
* Thus the query for weather will be on the form:
*
* wettercom|weather|Turin, Piemont, IT|IT0PI0397;Turin
*
* with the extra strings appended after extra
*/
class WeatherEngine : public Plasma::DataEngine, public Plasma::DataEngineConsumer
{
Q_OBJECT
public:
/** Constructor
* @param parent The parent object.
* @param args Argument list, unused.
*/
WeatherEngine(QObject *parent, const QVariantList &args);
~WeatherEngine() override;
protected: // Plasma::DataEngine API
/**
* We use it to communicate to the Ion plugins to set the data sources.
* @param source The datasource name.
*/
bool sourceRequestEvent(const QString &source) override;
/**
* @param source The datasource to update.
*/
bool updateSourceEvent(const QString &source) override;
protected Q_SLOTS: // expected DataEngine class method
/**
* Slot method with this signature expected in a DataEngine class.
* @param source The datasource to be updated.
* @param data The new data updated.
*/
void dataUpdated(const QString &source, const Plasma::DataEngine::Data &data);
private Q_SLOTS:
void forceUpdate(IonInterface *ion, const QString &source);
/**
* Notify WeatherEngine a datasource is being removed.
* @arg source datasource name.
*/
void removeIonSource(const QString &source);
/**
* Whenever networking changes, take action
*/
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
void onOnlineStateChanged(bool isOnline);
#else
void onOnlineStateChanged(QNetworkInformation::Reachability reachability);
#endif
void startReconnect();
/**
* updates the list of ions whenever KSycoca changes (as well as on init
*/
void updateIonList();
private:
/**
* Get instance of a loaded ion.
* @returns a IonInterface instance of a loaded plugin.
*/
IonInterface *ionForSource(const QString &source, QString *ionName = nullptr);
private:
QHash<QString, int> m_ionUsage;
QTimer m_reconnectTimer;
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
QNetworkConfigurationManager m_networkConfigurationManager;
#endif
};