blob: d7cb9089934040b504caed43bd45c2face2e3930 (
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
|
#include <vdr/plugin.h>
#include <string>
#include <sstream>
#include <jansson.h>
#include "../tools/jsonhelpers.h"
#include "forecasts.h"
using namespace std;
cForecasts::cForecasts(void) {
type = ftUnknownForecast;
summary = "";
icon = "";
numDataPoints = 0;
dataPointPointer = 0;
dataPoints = NULL;
}
cForecasts::~cForecasts() {
if (dataPoints && numDataPoints > 0) {
for (int i=0; i<numDataPoints; i++) {
if (dataPoints[i])
delete dataPoints[i];
}
delete[] dataPoints;
}
}
void cForecasts::SetForecast(json_t *forecast) {
summary = JsonGetString(forecast, "summary");
icon = JsonGetString(forecast, "icon");
json_t *data = json_object_get(forecast, "data");
if ( !json_is_array(data) ) {
return;
}
numDataPoints = json_array_size(data);
dataPoints = new cForecast*[numDataPoints];
for (int i = 0; i < numDataPoints; i++) {
json_t *jDataPoint = json_array_get(data, i);
cForecast *dataPoint = new cForecast();
dataPoint->SetForecast(jDataPoint);
dataPoint->SetForecastType(type);
dataPoints[i] = dataPoint;
}
}
cForecast *cForecasts::GetForecast(int dataPoint) {
if (!dataPoints)
return NULL;
if (dataPoint < 0 || dataPoint >= numDataPoints)
return NULL;
return dataPoints[dataPoint];
}
cForecast *cForecasts::GetCurrent(void) {
if (!dataPoints)
return NULL;
time_t now = time(0);
for (int i=0; i<numDataPoints; i++) {
if (dataPoints[i] && dataPoints[i]->TimeMatch(now))
return dataPoints[i];
}
return NULL;
}
cForecast *cForecasts::GetFirstHourly(void) {
if (!dataPoints)
return NULL;
time_t now = time(0);
for (int i=0; i<numDataPoints; i++) {
if (dataPoints[i] && dataPoints[i]->TimeMatch(now)) {
dataPointPointer = i;
return dataPoints[dataPointPointer];
}
}
return NULL;
}
cForecast *cForecasts::GetFirstDaily(void) {
if (!dataPoints)
return NULL;
time_t now = time(0);
for (int i=0; i<numDataPoints; i++) {
if (dataPoints[i] && dataPoints[i]->DayMatch(now)) {
dataPointPointer = i;
return dataPoints[dataPointPointer];
}
}
return NULL;
}
cForecast *cForecasts::GetNext(void) {
if (!dataPoints)
return NULL;
dataPointPointer++;
if (dataPointPointer < numDataPoints) {
return dataPoints[dataPointPointer];
}
dataPointPointer = 0;
return NULL;
}
void cForecasts::Debug(void) {
if (type == ftHourly) {
dsyslog("weatherforecast: 48 hour forecast");
} else if (type == ftDaily) {
dsyslog("weatherforecast: 7 day forecast");
}
dsyslog("weatherforecast: summary: \"%s\"", summary.c_str());
dsyslog("weatherforecast: icon: \"%s\"", icon.c_str());
for (int i = 0; i < numDataPoints; i++) {
dsyslog("weatherforecast: ------------ %s %d -----------", (type == ftHourly)?"Hour":"Day", i);
dataPoints[i]->Debug();
}
}
|