summaryrefslogtreecommitdiff
path: root/harmaccuweather
diff options
context:
space:
mode:
authorJavier S. Pedro <maemo@javispedro.com>2011-10-16 04:42:30 +0200
committerJavier S. Pedro <maemo@javispedro.com>2011-10-16 04:42:30 +0200
commit4da9bced6a27b92d49b9fc9392946510b8519d82 (patch)
tree7a2417a932a6463e3e6f6ec4d3799e24de917306 /harmaccuweather
parentbde4bde8ec9d6d09874d5ae9e0ba6dc9431859b6 (diff)
downloadsowatch-4da9bced6a27b92d49b9fc9392946510b8519d82.tar.gz
sowatch-4da9bced6a27b92d49b9fc9392946510b8519d82.zip
Initial implementation of weather
Diffstat (limited to 'harmaccuweather')
-rw-r--r--harmaccuweather/harmaccuplugin.cpp30
-rw-r--r--harmaccuweather/harmaccuplugin.h24
-rw-r--r--harmaccuweather/harmaccuprovider.cpp29
-rw-r--r--harmaccuweather/harmaccuprovider.h29
-rw-r--r--harmaccuweather/harmaccuweather.cpp109
-rw-r--r--harmaccuweather/harmaccuweather.h48
-rw-r--r--harmaccuweather/harmaccuweather.pro33
7 files changed, 302 insertions, 0 deletions
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 <sowatch.h>
+
+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 <QtCore/QtDebug>
+#include <QtCore/QTimer>
+#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 <QtCore/QTimer>
+#include <sowatch.h>
+
+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 <QtCore/QTimer>
+#include <QtCore/QSettings>
+#include <sowatch.h>
+
+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
+}
+
+
+
+
+
+
+
+