From 4da9bced6a27b92d49b9fc9392946510b8519d82 Mon Sep 17 00:00:00 2001 From: "Javier S. Pedro" Date: Sun, 16 Oct 2011 04:42:30 +0200 Subject: Initial implementation of weather --- harmaccuweather/harmaccuplugin.cpp | 30 ++++++++++ harmaccuweather/harmaccuplugin.h | 24 ++++++++ harmaccuweather/harmaccuprovider.cpp | 29 ++++++++++ harmaccuweather/harmaccuprovider.h | 29 ++++++++++ harmaccuweather/harmaccuweather.cpp | 109 +++++++++++++++++++++++++++++++++++ harmaccuweather/harmaccuweather.h | 48 +++++++++++++++ harmaccuweather/harmaccuweather.pro | 33 +++++++++++ 7 files changed, 302 insertions(+) create mode 100644 harmaccuweather/harmaccuplugin.cpp create mode 100644 harmaccuweather/harmaccuplugin.h create mode 100644 harmaccuweather/harmaccuprovider.cpp create mode 100644 harmaccuweather/harmaccuprovider.h create mode 100644 harmaccuweather/harmaccuweather.cpp create mode 100644 harmaccuweather/harmaccuweather.h create mode 100644 harmaccuweather/harmaccuweather.pro (limited to 'harmaccuweather') diff --git a/harmaccuweather/harmaccuplugin.cpp b/harmaccuweather/harmaccuplugin.cpp new file mode 100644 index 0000000..9ea94bd --- /dev/null +++ b/harmaccuweather/harmaccuplugin.cpp @@ -0,0 +1,30 @@ +#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; +} + +NotificationProvider* HarmAccuPlugin::getProvider(const QString& id, QSettings& settings, QObject *parent) +{ + if (id != "harmaccu") return 0; + int updateTime = settings.value("updateTime").toInt(); + if (updateTime <= 0) updateTime = 2 * 3600; // Two hours by default + return new HarmAccuProvider(updateTime, parent); +} + +Q_EXPORT_PLUGIN2(harmaccuweather, HarmAccuPlugin) diff --git a/harmaccuweather/harmaccuplugin.h b/harmaccuweather/harmaccuplugin.h new file mode 100644 index 0000000..16198ad --- /dev/null +++ b/harmaccuweather/harmaccuplugin.h @@ -0,0 +1,24 @@ +#ifndef CKITCALLPLUGIN_H +#define CKITCALLPLUGIN_H + +#include + +namespace sowatch +{ + +class HarmAccuPlugin : public QObject, public NotificationPluginInterface +{ + Q_OBJECT + Q_INTERFACES(sowatch::NotificationPluginInterface) + +public: + HarmAccuPlugin(QObject *parent = 0); + ~HarmAccuPlugin(); + + QStringList providers(); + NotificationProvider* getProvider(const QString& driver, QSettings& settings, QObject *parent = 0); +}; + +} + +#endif // CKITCALLPLUGIN_H diff --git a/harmaccuweather/harmaccuprovider.cpp b/harmaccuweather/harmaccuprovider.cpp new file mode 100644 index 0000000..af4a8d0 --- /dev/null +++ b/harmaccuweather/harmaccuprovider.cpp @@ -0,0 +1,29 @@ +#include +#include +#include "harmaccuweather.h" +#include "harmaccuprovider.h" + +using namespace sowatch; + +HarmAccuProvider::HarmAccuProvider(int updateTime, QObject *parent) : + NotificationProvider(parent), + _updateTime(updateTime) +{ + // Give some time to send the notification + QTimer::singleShot(2000, this, SLOT(generateNotification())); +} + +HarmAccuProvider::~HarmAccuProvider() +{ + +} + +void HarmAccuProvider::generateNotification() +{ + QSettings* s = HarmAccuWeather::getAccuweatherData(); + if (s->contains("LastUpdate")) { + qDebug() << "generate harmaccuweather notification"; + emit incomingNotification(new HarmAccuWeather(_updateTime, this)); + } + delete s; +} diff --git a/harmaccuweather/harmaccuprovider.h b/harmaccuweather/harmaccuprovider.h new file mode 100644 index 0000000..44942ad --- /dev/null +++ b/harmaccuweather/harmaccuprovider.h @@ -0,0 +1,29 @@ +#ifndef CKITCALLPROVIDER_H +#define CKITCALLPROVIDER_H + +#include +#include + +namespace sowatch +{ + +class HarmAccuWeather; + +class HarmAccuProvider : public NotificationProvider +{ + Q_OBJECT + +public: + explicit HarmAccuProvider(int updateTime, QObject *parent = 0); + ~HarmAccuProvider(); + +public slots: + void generateNotification(); + +private: + int _updateTime; +}; + +} + +#endif // CKITCALLPROVIDER_H diff --git a/harmaccuweather/harmaccuweather.cpp b/harmaccuweather/harmaccuweather.cpp new file mode 100644 index 0000000..9d7a00d --- /dev/null +++ b/harmaccuweather/harmaccuweather.cpp @@ -0,0 +1,109 @@ +#include "harmaccuweather.h" + +using namespace sowatch; + +HarmAccuWeather::HarmAccuWeather(int updateTime, QObject *parent) : + WeatherNotification(parent), + _updateTimer(new QTimer(this)), + _lastUpdate(QDateTime::fromTime_t(0)) +{ + connect(_updateTimer, SIGNAL(timeout()), SLOT(update())); + _updateTimer->setInterval(updateTime * 1000); + _updateTimer->start(); + update(); +} + +QSettings* HarmAccuWeather::getAccuweatherData() +{ + return new QSettings("AccuWeather, Inc.", "awxapp"); +} + +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 33: + return tr("Clear"); + case 6: + case 38: + return tr("Mostly cloudy"); + case 35: + return tr("Part. cloudy"); + case 7: + return tr("Cloudy"); + default: + return QString("%1").arg(_lastWxCode); + } +} + +WeatherNotification::WeatherType HarmAccuWeather::forecast() +{ + switch (_lastWxCode) { + case 33: + return Sunny; + case 6: + case 7: + case 35: + case 38: + return Cloudy; + 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::update() +{ + QSettings* s = getAccuweatherData(); + + QDateTime lastUpdate = s->value("LastUpdate").toDateTime(); + if (lastUpdate > _lastUpdate) { + qDebug() << "updated weather info"; + _lastUpdate = lastUpdate; + _metric = s->value("useMetric").toBool(); + _lastTemp = s->value("LastTemp").toInt(); + _lastLocation = s->value("LastLocation").toString(); + _lastWxCode = s->value("LastWxCode").toInt(); + emit changed(); + } + + delete s; +} diff --git a/harmaccuweather/harmaccuweather.h b/harmaccuweather/harmaccuweather.h new file mode 100644 index 0000000..bac08e2 --- /dev/null +++ b/harmaccuweather/harmaccuweather.h @@ -0,0 +1,48 @@ +#ifndef HARMACCUWEATHER_H +#define HARMACCUWEATHER_H + +#include +#include +#include + +namespace sowatch +{ + +class HarmAccuWeather : public WeatherNotification +{ + Q_OBJECT + +public: + explicit HarmAccuWeather(int updateTime, 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 update(); + +private: + QTimer* _updateTimer; + bool _metric; + QDateTime _lastUpdate; + QString _lastLocation; + int _lastTemp; + int _lastWxCode; + +}; + +} + +#endif // HARMACCUWEATHER_H diff --git a/harmaccuweather/harmaccuweather.pro b/harmaccuweather/harmaccuweather.pro new file mode 100644 index 0000000..7c9bfe5 --- /dev/null +++ b/harmaccuweather/harmaccuweather.pro @@ -0,0 +1,33 @@ +TARGET = harmaccuweather +TEMPLATE = lib +# CONFIG += plugin # Qt creator doesn't want to deploy plugins +CONFIG += mobility +MOBILITY += systeminfo + +SOURCES += harmaccuplugin.cpp harmaccuprovider.cpp \ + harmaccuweather.cpp + +HEADERS += harmaccuplugin.h harmaccuprovider.h \ + harmaccuweather.h + +unix: LIBS += -L$$OUT_PWD/../libsowatch/ -lsowatch + +INCLUDEPATH += $$PWD/../libsowatch +DEPENDPATH += $$PWD/../libsowatch + +unix:!symbian { + maemo5 { + target.path = /opt/sowatch/notifications + } else { + target.path = /usr/lib/sowatch/notifications + } + INSTALLS += target +} + + + + + + + + -- cgit v1.2.3