From 2c8f42cc6ad1c67c5ee0110393c7ee756d14044e Mon Sep 17 00:00:00 2001 From: "Javier S. Pedro" Date: Sun, 16 Oct 2011 20:58:29 +0200 Subject: Now monitoring AccuWeather's config file --- harmaccuweather/harmaccuplugin.cpp | 5 ++--- harmaccuweather/harmaccuprovider.cpp | 13 +++++++------ harmaccuweather/harmaccuprovider.h | 5 ++--- harmaccuweather/harmaccuweather.cpp | 37 +++++++++++++++++++++++++++++------- harmaccuweather/harmaccuweather.h | 8 ++++++-- 5 files changed, 47 insertions(+), 21 deletions(-) (limited to 'harmaccuweather') diff --git a/harmaccuweather/harmaccuplugin.cpp b/harmaccuweather/harmaccuplugin.cpp index 9ea94bd..25821c4 100644 --- a/harmaccuweather/harmaccuplugin.cpp +++ b/harmaccuweather/harmaccuplugin.cpp @@ -21,10 +21,9 @@ QStringList HarmAccuPlugin::providers() NotificationProvider* HarmAccuPlugin::getProvider(const QString& id, QSettings& settings, QObject *parent) { + Q_UNUSED(settings); 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); + return new HarmAccuProvider(parent); } Q_EXPORT_PLUGIN2(harmaccuweather, HarmAccuPlugin) diff --git a/harmaccuweather/harmaccuprovider.cpp b/harmaccuweather/harmaccuprovider.cpp index af4a8d0..0eedf04 100644 --- a/harmaccuweather/harmaccuprovider.cpp +++ b/harmaccuweather/harmaccuprovider.cpp @@ -5,11 +5,10 @@ using namespace sowatch; -HarmAccuProvider::HarmAccuProvider(int updateTime, QObject *parent) : - NotificationProvider(parent), - _updateTime(updateTime) +HarmAccuProvider::HarmAccuProvider(QObject *parent) : + NotificationProvider(parent) { - // Give some time to send the notification + // Give some time to send the first notification QTimer::singleShot(2000, this, SLOT(generateNotification())); } @@ -22,8 +21,10 @@ void HarmAccuProvider::generateNotification() { QSettings* s = HarmAccuWeather::getAccuweatherData(); if (s->contains("LastUpdate")) { - qDebug() << "generate harmaccuweather notification"; - emit incomingNotification(new HarmAccuWeather(_updateTime, this)); + qDebug() << "generating harmaccuweather notification"; + emit incomingNotification(new HarmAccuWeather(this)); + } else { + qWarning() << "Accuweather config file does not seem to exist"; } delete s; } diff --git a/harmaccuweather/harmaccuprovider.h b/harmaccuweather/harmaccuprovider.h index 44942ad..f7c7ca4 100644 --- a/harmaccuweather/harmaccuprovider.h +++ b/harmaccuweather/harmaccuprovider.h @@ -1,7 +1,6 @@ #ifndef CKITCALLPROVIDER_H #define CKITCALLPROVIDER_H -#include #include namespace sowatch @@ -14,14 +13,14 @@ class HarmAccuProvider : public NotificationProvider Q_OBJECT public: - explicit HarmAccuProvider(int updateTime, QObject *parent = 0); + explicit HarmAccuProvider(QObject *parent = 0); ~HarmAccuProvider(); public slots: void generateNotification(); private: - int _updateTime; + }; } diff --git a/harmaccuweather/harmaccuweather.cpp b/harmaccuweather/harmaccuweather.cpp index 9d7a00d..1306b6e 100644 --- a/harmaccuweather/harmaccuweather.cpp +++ b/harmaccuweather/harmaccuweather.cpp @@ -2,14 +2,22 @@ using namespace sowatch; -HarmAccuWeather::HarmAccuWeather(int updateTime, QObject *parent) : +HarmAccuWeather::HarmAccuWeather(QObject *parent) : WeatherNotification(parent), - _updateTimer(new QTimer(this)), + _watcher(new QFileSystemWatcher(this)), + _timer(new QTimer(this)), _lastUpdate(QDateTime::fromTime_t(0)) { - connect(_updateTimer, SIGNAL(timeout()), SLOT(update())); - _updateTimer->setInterval(updateTime * 1000); - _updateTimer->start(); + // This only works on Harmattan either way, so I guess + // hardcoding the path is OK. + _watcher->addPath("/home/user/.config/AccuWeather, Inc./awxapp.conf"); + connect(_watcher, SIGNAL(fileChanged(QString)), SLOT(fileChanged(QString))); + + _timer->setInterval(2000); + _timer->setSingleShot(true); + connect(_timer, SIGNAL(timeout()), SLOT(update())); + + // Perform an initial update update(); } @@ -41,13 +49,17 @@ QString HarmAccuWeather::title() const QString HarmAccuWeather::body() const { switch (_lastWxCode) { + case 2: + return tr("Sunny"); + case 3: + return tr("Partly sunny"); case 33: return tr("Clear"); case 6: case 38: return tr("Mostly cloudy"); case 35: - return tr("Part. cloudy"); + return tr("Partly cloudy"); case 7: return tr("Cloudy"); default: @@ -58,6 +70,8 @@ QString HarmAccuWeather::body() const WeatherNotification::WeatherType HarmAccuWeather::forecast() { switch (_lastWxCode) { + case 2: + case 3: case 33: return Sunny; case 6: @@ -90,18 +104,27 @@ 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) { - 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(); + qDebug() << "updated weather info" << _lastUpdate << _lastWxCode; emit changed(); } diff --git a/harmaccuweather/harmaccuweather.h b/harmaccuweather/harmaccuweather.h index bac08e2..8b403b9 100644 --- a/harmaccuweather/harmaccuweather.h +++ b/harmaccuweather/harmaccuweather.h @@ -1,6 +1,7 @@ #ifndef HARMACCUWEATHER_H #define HARMACCUWEATHER_H +#include #include #include #include @@ -13,7 +14,7 @@ class HarmAccuWeather : public WeatherNotification Q_OBJECT public: - explicit HarmAccuWeather(int updateTime, QObject *parent = 0); + explicit HarmAccuWeather(QObject *parent = 0); static QSettings* getAccuweatherData(); @@ -31,10 +32,13 @@ public: void dismiss(); private slots: + void fileChanged(const QString& path); void update(); private: - QTimer* _updateTimer; + QFileSystemWatcher* _watcher; + QTimer* _timer; + bool _metric; QDateTime _lastUpdate; QString _lastLocation; -- cgit v1.2.3