summaryrefslogtreecommitdiff
path: root/harmaccuweather/harmaccuweather.cpp
blob: 1306b6ed6b624f6bb56224e936f6765ae49c14fe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#include "harmaccuweather.h"

using namespace sowatch;

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("/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();
}

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 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("Partly cloudy");
	case 7:
		return tr("Cloudy");
	default:
		return QString("%1").arg(_lastWxCode);
	}
}

WeatherNotification::WeatherType HarmAccuWeather::forecast()
{
	switch (_lastWxCode) {
	case 2:
	case 3:
	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::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;
		_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();
	}

	delete s;
}