diff options
| author | Javier S. Pedro <maemo@javispedro.com> | 2012-08-15 15:53:09 +0200 | 
|---|---|---|
| committer | Javier S. Pedro <maemo@javispedro.com> | 2012-08-15 15:53:09 +0200 | 
| commit | 2ecf718cc9d460ad192de196aac8d13e30a7ab4c (patch) | |
| tree | 28ad0698f48e563ff0cca74c780e283ad16b7994 /meecastweather | |
| parent | c752ccafd8d826b3c0c9140e89ece09e90b34cb1 (diff) | |
| download | sowatch-2ecf718cc9d460ad192de196aac8d13e30a7ab4c.tar.gz sowatch-2ecf718cc9d460ad192de196aac8d13e30a7ab4c.zip  | |
preparing meecastweather plugin
Diffstat (limited to 'meecastweather')
| -rw-r--r-- | meecastweather/meecastplugin.cpp | 37 | ||||
| -rw-r--r-- | meecastweather/meecastplugin.h | 25 | ||||
| -rw-r--r-- | meecastweather/meecastprovider.cpp | 29 | ||||
| -rw-r--r-- | meecastweather/meecastprovider.h | 28 | ||||
| -rw-r--r-- | meecastweather/meecastweather.cpp | 272 | ||||
| -rw-r--r-- | meecastweather/meecastweather.h | 52 | ||||
| -rw-r--r-- | meecastweather/meecastweather.pro | 24 | 
7 files changed, 467 insertions, 0 deletions
diff --git a/meecastweather/meecastplugin.cpp b/meecastweather/meecastplugin.cpp new file mode 100644 index 0000000..ff7b6cf --- /dev/null +++ b/meecastweather/meecastplugin.cpp @@ -0,0 +1,37 @@ +#include "harmaccuprovider.h" +#include "harmaccuplugin.h" + +using namespace sowatch; + +HarmAccuPlugin::HarmAccuPlugin(QObject *parent) : +    QObject(parent) +{ +} + +HarmAccuPlugin::~HarmAccuPlugin() +{ +} + +QStringList HarmAccuPlugin::providers() +{ +	QStringList providers; +	providers << "harmaccu"; +	return providers; +} + +NotificationPluginInterface::NotificationProviderInfo HarmAccuPlugin::describeProvider(const QString &driver) +{ +	NotificationProviderInfo info; +	if (driver != "harmaccu") return info; +	info.name = "Accuweather"; +	return info; +} + +NotificationProvider* HarmAccuPlugin::getProvider(const QString& id, ConfigKey *settings, QObject *parent) +{ +	Q_UNUSED(settings); +	if (id != "harmaccu") return 0; +	return new HarmAccuProvider(parent); +} + +Q_EXPORT_PLUGIN2(harmaccuweather, HarmAccuPlugin) diff --git a/meecastweather/meecastplugin.h b/meecastweather/meecastplugin.h new file mode 100644 index 0000000..535b4a2 --- /dev/null +++ b/meecastweather/meecastplugin.h @@ -0,0 +1,25 @@ +#ifndef CKITCALLPLUGIN_H +#define CKITCALLPLUGIN_H + +#include <sowatch.h> + +namespace sowatch +{ + +class HarmAccuPlugin : public QObject, public NotificationPluginInterface +{ +	Q_OBJECT +	Q_INTERFACES(sowatch::NotificationPluginInterface) + +public: +	HarmAccuPlugin(QObject *parent = 0); +	~HarmAccuPlugin(); + +	QStringList providers(); +	NotificationProviderInfo describeProvider(const QString &driver); +	NotificationProvider* getProvider(const QString& driver, ConfigKey *settings, QObject *parent = 0); +}; + +} + +#endif // CKITCALLPLUGIN_H diff --git a/meecastweather/meecastprovider.cpp b/meecastweather/meecastprovider.cpp new file mode 100644 index 0000000..2c26b67 --- /dev/null +++ b/meecastweather/meecastprovider.cpp @@ -0,0 +1,29 @@ +#include <QtCore/QtDebug> +#include <QtCore/QTimer> +#include "harmaccuweather.h" +#include "harmaccuprovider.h" + +using namespace sowatch; + +HarmAccuProvider::HarmAccuProvider(QObject *parent) : +	NotificationProvider(parent) +{ +	// Give some time to send the first notification +	QTimer::singleShot(2000, this, SLOT(generateNotification())); +} + +HarmAccuProvider::~HarmAccuProvider() +{ +} + +void HarmAccuProvider::generateNotification() +{ +	QSettings* s = HarmAccuWeather::getAccuweatherData(); +	if (s->contains("LastUpdate")) { +		qDebug() << "generating harmaccuweather notification"; +		emit incomingNotification(new HarmAccuWeather(this)); +	} else { +		qWarning() << "Accuweather config file does not seem to exist"; +	} +	delete s; +} diff --git a/meecastweather/meecastprovider.h b/meecastweather/meecastprovider.h new file mode 100644 index 0000000..4524e12 --- /dev/null +++ b/meecastweather/meecastprovider.h @@ -0,0 +1,28 @@ +#ifndef HARMACCUPROVIDER_H +#define HARMACCUPROVIDER_H + +#include <sowatch.h> + +namespace sowatch +{ + +class HarmAccuWeather; + +class HarmAccuProvider : public NotificationProvider +{ +    Q_OBJECT + +public: +	explicit HarmAccuProvider(QObject *parent = 0); +	~HarmAccuProvider(); + +public slots: +	void generateNotification(); + +private: + +}; + +} + +#endif // HARMACCUPROVIDER_H diff --git a/meecastweather/meecastweather.cpp b/meecastweather/meecastweather.cpp new file mode 100644 index 0000000..c4daeb9 --- /dev/null +++ b/meecastweather/meecastweather.cpp @@ -0,0 +1,272 @@ +#include "harmaccuweather.h" + +using namespace sowatch; + +#define ACCUWEATHER_FILE_PATH "/home/user/.config/AccuWeather, Inc./awxapp.conf" + +HarmAccuWeather::HarmAccuWeather(QObject *parent) : +	WeatherNotification(parent), +	_watcher(new QFileSystemWatcher(this)), +	_timer(new QTimer(this)), +	_lastUpdate(QDateTime::fromTime_t(0)) +{ +	// This only works on Harmattan either way, so I guess +	// hardcoding the path is OK. +	_watcher->addPath(ACCUWEATHER_FILE_PATH); +	connect(_watcher, SIGNAL(fileChanged(QString)), SLOT(fileChanged(QString))); + +	_timer->setInterval(5000); +	_timer->setSingleShot(true); +	connect(_timer, SIGNAL(timeout()), SLOT(update())); + +	// Perform an initial update +	update(); +} + +QSettings* HarmAccuWeather::getAccuweatherData() +{ +	return new QSettings(ACCUWEATHER_FILE_PATH, QSettings::IniFormat); +} + +Notification::Type HarmAccuWeather::type() const +{ +	return Notification::WeatherNotification; +} + +uint HarmAccuWeather::count() const +{ +	return 1; +} + +QDateTime HarmAccuWeather::dateTime() const +{ +	return _lastUpdate; +} + +QString HarmAccuWeather::title() const +{ +	return _lastLocation; +} + +QString HarmAccuWeather::body() const +{ +	switch (_lastWxCode) { +	case 1: +	case 2: +		return tr("Sunny"); + +	case 3: +	case 4: +	case 5: +		return tr("Partly cloudy"); +	case 6: +		return tr("Mostly cloudy"); +	case 7: +	case 8: +		return tr("Cloudy"); + +	case 11: +		return tr("Fog"); + +	case 12: +		return tr("Light rain"); +	case 13: +	case 14: +		return tr("Light rain with sun"); +	case 18: +	case 26: +		return tr("Heavy rain"); + +	case 15: +	case 16: +		return tr("Thunderstorm"); +	case 17: +		return tr("Thunderstorm with sun"); + +	case 19: +		return tr("Light snow"); +	case 20: +	case 21: +		return tr("Light snow with sun"); +	case 22: +		return tr("Heavy snow"); +	case 29: +		return tr("Heavy rain and snow"); + +	case 25: +		return tr("Blizzard"); + +	case 30: +		return tr("Hot"); +	case 31: +		return tr("Cold"); +	case 32: +		return tr("Wind"); + + +	// Night versions +	case 33: +	case 34: +		return tr("Clear"); +	case 35: +		return tr("Partly cloudy"); +	case 36: +	case 37: +		return tr("Mostly cloudy"); +	case 38: +		return tr("Cloudy"); +	case 39: +	case 40: +		return tr("Light rain"); +	case 41: +	case 42: +		return tr("Thunderstorm"); +	case 43: +		return tr("Light snow"); +	case 44: +		return tr("Heavy snow"); + +	default: +		return QString("? %1").arg(_lastWxCode); +	} +} + +WeatherNotification::WeatherType HarmAccuWeather::forecast() +{ +	switch (_lastWxCode) { +	case 1: +	case 2: +		return Sunny; + +	case 3: +	case 4: +	case 5: +		return PartlyCloudy; + +	case 6: +	case 7: +	case 8: +		return Cloudy; + +	case 11: +		return Fog; + +	case 12: +	case 13: +	case 14: +	case 18: +	case 26: +		return Rain; + +	case 15: +	case 16: +	case 17: +		return Thunderstorm; + +	case 19: +	case 20: +	case 21: +	case 22: +	case 23: +	case 24: +	case 25: +	case 29: +		return Snow; + +	// Night versions +	case 33: +	case 34: +		return Sunny; +	case 35: +		return PartlyCloudy; +	case 36: +	case 37: +	case 38: +		return Cloudy; +	case 39: +	case 40: +		return Rain; +	case 41: +	case 42: +		return Thunderstorm; +	case 43: +	case 44: +		return Snow; + +	default: +		return UnknownWeather; +	} +} + +int HarmAccuWeather::temperature() +{ +	return _lastTemp; +} + +WeatherNotification::Unit HarmAccuWeather::temperatureUnits() +{ +	return _metric ? Celsius : Fahrenheit; +} + +void HarmAccuWeather::activate() +{ +	// Launch accuweather? +} + +void HarmAccuWeather::dismiss() +{ +	// Do nothing +} + +void HarmAccuWeather::fileChanged(const QString &path) +{ +	Q_UNUSED(path); +	qDebug() << "accuweather config file changed"; +	_timer->start(); +} + +void HarmAccuWeather::update() +{ +	QSettings* s = getAccuweatherData(); + +	qDebug() << "reading accuweather config file"; + +	QDateTime lastUpdate = s->value("LastUpdate").toDateTime(); +	if (lastUpdate > _lastUpdate) { +		_lastUpdate = lastUpdate; +		bool anythingChanged = false; + +		qDebug() << "reading weather info at" << _lastUpdate; + +		bool useMetric = s->value("useMetric").toBool(); +		if (useMetric != _metric) { +			_metric = useMetric; +			anythingChanged = true; +		} + +		int temp = s->value("LastTemp").toInt(); +		if (_lastTemp != temp) { +			_lastTemp = temp; +			anythingChanged = true; +		} + +		QString location = s->value("LastLocation").toString(); +		if (_lastLocation != location) { +			_lastLocation = location; +			anythingChanged = true; +		} + +		int wxCode = s->value("LastWxCode").toInt(); +		if (_lastWxCode != wxCode) { +			_lastWxCode = wxCode; +			anythingChanged = true; +		} + +		if (anythingChanged) { +			qDebug() << "weather info changed wxcode=" << wxCode; +			emit changed(); +		} +	} + +	delete s; +} diff --git a/meecastweather/meecastweather.h b/meecastweather/meecastweather.h new file mode 100644 index 0000000..8b403b9 --- /dev/null +++ b/meecastweather/meecastweather.h @@ -0,0 +1,52 @@ +#ifndef HARMACCUWEATHER_H +#define HARMACCUWEATHER_H + +#include <QtCore/QFileSystemWatcher> +#include <QtCore/QTimer> +#include <QtCore/QSettings> +#include <sowatch.h> + +namespace sowatch +{ + +class HarmAccuWeather : public WeatherNotification +{ +    Q_OBJECT + +public: +	explicit HarmAccuWeather(QObject *parent = 0); + +	static QSettings* getAccuweatherData(); + +	Type type() const; +	uint count() const; +	QDateTime dateTime() const; +	QString title() const; +	QString body() const; + +	WeatherType forecast(); +	int temperature(); +	Unit temperatureUnits(); + +	void activate(); +	void dismiss(); + +private slots: +	void fileChanged(const QString& path); +	void update(); + +private: +	QFileSystemWatcher* _watcher; +	QTimer* _timer; + +	bool _metric; +	QDateTime _lastUpdate; +	QString _lastLocation; +	int _lastTemp; +	int _lastWxCode; + +}; + +} + +#endif // HARMACCUWEATHER_H diff --git a/meecastweather/meecastweather.pro b/meecastweather/meecastweather.pro new file mode 100644 index 0000000..bccc255 --- /dev/null +++ b/meecastweather/meecastweather.pro @@ -0,0 +1,24 @@ +TARGET = meecastweather +TEMPLATE = lib +CONFIG   += plugin +CONFIG += mobility +MOBILITY += systeminfo + +SOURCES += meecastplugin.cpp meecastprovider.cpp meecastweather.cpp + +HEADERS += meecastplugin.h meecastprovider.h meecastweather.h + +unix: LIBS += -L$$OUT_PWD/../libsowatch/ -lsowatch + +INCLUDEPATH += $$PWD/../libsowatch +DEPENDPATH += $$PWD/../libsowatch + +unix:!symbian { +	!isEmpty(MEEGO_VERSION_MAJOR)|maemo5 { +		QMAKE_RPATHDIR += /opt/sowatch/lib +		target.path = /opt/sowatch/lib/notifications +	} else { +		target.path = /usr/lib/sowatch/notifications +	} +	INSTALLS += target +}  | 
