-rw-r--r-- | noncore/todayplugins/weather/weatherpluginwidget.cpp | 65 | ||||
-rw-r--r-- | noncore/todayplugins/weather/weatherpluginwidget.h | 8 |
2 files changed, 39 insertions, 34 deletions
diff --git a/noncore/todayplugins/weather/weatherpluginwidget.cpp b/noncore/todayplugins/weather/weatherpluginwidget.cpp index 0fd8e57..6444ebf 100644 --- a/noncore/todayplugins/weather/weatherpluginwidget.cpp +++ b/noncore/todayplugins/weather/weatherpluginwidget.cpp | |||
@@ -1,150 +1,141 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of the OPIE Project | 2 | This file is part of the OPIE Project |
3 | =. | 3 | =. |
4 | .=l. Copyright (c) 2002 Dan Williams <williamsdr@acm.org> | 4 | .=l. Copyright (c) 2002 Dan Williams <williamsdr@acm.org> |
5 | .>+-= | 5 | .>+-= |
6 | _;:, .> :=|. This file is free software; you can | 6 | _;:, .> :=|. This file is free software; you can |
7 | .> <`_, > . <= redistribute it and/or modify it under | 7 | .> <`_, > . <= redistribute it and/or modify it under |
8 | :`=1 )Y*s>-.-- : the terms of the GNU General Public | 8 | :`=1 )Y*s>-.-- : the terms of the GNU General Public |
9 | .="- .-=="i, .._ License as published by the Free Software | 9 | .="- .-=="i, .._ License as published by the Free Software |
10 | - . .-<_> .<> Foundation; either version 2 of the License, | 10 | - . .-<_> .<> Foundation; either version 2 of the License, |
11 | ._= =} : or (at your option) any later version. | 11 | ._= =} : or (at your option) any later version. |
12 | .%`+i> _;_. | 12 | .%`+i> _;_. |
13 | .i_,=:_. -<s. This file is distributed in the hope that | 13 | .i_,=:_. -<s. This file is distributed in the hope that |
14 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; | 14 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; |
15 | : .. .:, . . . without even the implied warranty of | 15 | : .. .:, . . . without even the implied warranty of |
16 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A | 16 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A |
17 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU General | 17 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU General |
18 | ..}^=.= = ; Public License for more details. | 18 | ..}^=.= = ; Public License for more details. |
19 | ++= -. .` .: | 19 | ++= -. .` .: |
20 | : = ...= . :.=- You should have received a copy of the GNU | 20 | : = ...= . :.=- You should have received a copy of the GNU |
21 | -. .:....=;==+<; General Public License along with this file; | 21 | -. .:....=;==+<; General Public License along with this file; |
22 | -_. . . )=. = see the file COPYING. If not, write to the | 22 | -_. . . )=. = see the file COPYING. If not, write to the |
23 | -- :-=` Free Software Foundation, Inc., | 23 | -- :-=` Free Software Foundation, Inc., |
24 | 59 Temple Place - Suite 330, | 24 | 59 Temple Place - Suite 330, |
25 | Boston, MA 02111-1307, USA. | 25 | Boston, MA 02111-1307, USA. |
26 | 26 | ||
27 | */ | 27 | */ |
28 | #include <stdio.h> | ||
29 | 28 | ||
30 | #include <qfile.h> | 29 | #include <qfile.h> |
31 | #include <qimage.h> | 30 | #include <qimage.h> |
32 | #include <qlabel.h> | 31 | #include <qlabel.h> |
33 | #include <qlayout.h> | 32 | #include <qlayout.h> |
34 | #include <qpixmap.h> | 33 | #include <qpixmap.h> |
35 | #include <qtextstream.h> | 34 | #include <qtextstream.h> |
36 | 35 | ||
36 | #include <opie/oprocess.h> | ||
37 | |||
37 | #include <qpe/config.h> | 38 | #include <qpe/config.h> |
38 | #include <qpe/resource.h> | 39 | #include <qpe/resource.h> |
39 | 40 | ||
40 | #include "weatherpluginwidget.h" | 41 | #include "weatherpluginwidget.h" |
41 | 42 | ||
42 | WeatherPluginWidget::WeatherPluginWidget( QWidget *parent, const char* name ) | 43 | WeatherPluginWidget::WeatherPluginWidget( QWidget *parent, const char* name ) |
43 | : QWidget( parent, name ) | 44 | : QWidget( parent, name ) |
44 | { | 45 | { |
45 | Config config( "todayweatherplugin"); | ||
46 | config.setGroup( "Config" ); | ||
47 | |||
48 | location = config.readEntry( "Location", "" ); | ||
49 | useMetric = config.readBoolEntry( "Metric", TRUE ); | ||
50 | frequency = config.readNumEntry( "Frequency", 5 ); | ||
51 | |||
52 | localFile = "/tmp/"; | ||
53 | localFile.append( location ); | ||
54 | localFile.append( ".TXT" ); | ||
55 | |||
56 | remoteFile = "http://weather.noaa.gov/pub/data/observations/metar/stations/"; | ||
57 | remoteFile.append( location ); | ||
58 | remoteFile.append( ".TXT" ); | ||
59 | |||
60 | QHBoxLayout *layout = new QHBoxLayout( this ); | 46 | QHBoxLayout *layout = new QHBoxLayout( this ); |
61 | layout->setAutoAdd( TRUE ); | 47 | layout->setAutoAdd( TRUE ); |
62 | layout->setSpacing( 2 ); | 48 | layout->setSpacing( 2 ); |
63 | 49 | ||
64 | weatherIcon = new QLabel( this ); | 50 | weatherIcon = new QLabel( this ); |
65 | weatherIcon->setMaximumWidth( 32 ); | 51 | weatherIcon->setMaximumWidth( 32 ); |
66 | QImage logo1 = Resource::loadImage( "todayweatherplugin/wait" ); | 52 | QImage logo1 = Resource::loadImage( "todayweatherplugin/wait" ); |
67 | QPixmap pic; | 53 | QPixmap pic; |
68 | pic.convertFromImage( logo1 ); | 54 | pic.convertFromImage( logo1 ); |
69 | weatherIcon->setPixmap( pic ); | 55 | weatherIcon->setPixmap( pic ); |
70 | 56 | ||
71 | weatherLabel = new QLabel( tr( "Retreiving current weather information." ), this ); | 57 | weatherLabel = new QLabel( tr( "Retreiving current weather information." ), this ); |
72 | weatherLabel->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ) ); | 58 | weatherLabel->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ) ); |
73 | 59 | ||
74 | startTimer(1000); | 60 | startTimer(1000); |
75 | //retreiveData(); | ||
76 | } | 61 | } |
77 | 62 | ||
78 | WeatherPluginWidget::~WeatherPluginWidget() | 63 | WeatherPluginWidget::~WeatherPluginWidget() |
79 | { | 64 | { |
80 | QFile file( localFile ); | 65 | QFile file( localFile ); |
81 | if ( file.exists() ) | 66 | if ( file.exists() ) |
82 | { | 67 | { |
83 | file.remove(); | 68 | file.remove(); |
84 | } | 69 | } |
85 | } | 70 | } |
86 | 71 | ||
87 | void WeatherPluginWidget::timerEvent( QTimerEvent *e ) | 72 | void WeatherPluginWidget::timerEvent( QTimerEvent *e ) |
88 | { | 73 | { |
89 | killTimer( e->timerId() ); | 74 | killTimer( e->timerId() ); |
90 | retreiveData(); | 75 | retreiveData(); |
91 | } | 76 | } |
92 | 77 | ||
93 | 78 | ||
94 | 79 | ||
95 | void WeatherPluginWidget::retreiveData() | 80 | void WeatherPluginWidget::retreiveData() |
96 | { | 81 | { |
97 | startTimer( frequency * 60000 ); | 82 | startTimer( frequency * 60000 ); |
98 | 83 | ||
84 | Config config( "todayweatherplugin"); | ||
85 | config.setGroup( "Config" ); | ||
86 | |||
87 | location = config.readEntry( "Location", "" ); | ||
88 | useMetric = config.readBoolEntry( "Metric", TRUE ); | ||
89 | frequency = config.readNumEntry( "Frequency", 5 ); | ||
90 | |||
91 | localFile = "/tmp/"; | ||
92 | localFile.append( location ); | ||
93 | localFile.append( ".TXT" ); | ||
94 | |||
95 | remoteFile = "http://weather.noaa.gov/pub/data/observations/metar/stations/"; | ||
96 | remoteFile.append( location ); | ||
97 | remoteFile.append( ".TXT" ); | ||
98 | |||
99 | QFile file( localFile ); | 99 | QFile file( localFile ); |
100 | if ( file.exists() ) | 100 | if ( file.exists() ) |
101 | { | 101 | { |
102 | file.remove(); | 102 | file.remove(); |
103 | } | 103 | } |
104 | 104 | ||
105 | QString command = "wget -q "; | 105 | OProcess *proc = new OProcess; |
106 | command.append( remoteFile ); | 106 | |
107 | command.append( " -O " ); | 107 | *proc << "wget" << "-q" << remoteFile << "-O" << localFile; |
108 | command.append( localFile ); | 108 | connect( proc, SIGNAL( processExited( OProcess * ) ), this, SLOT( dataRetrieved( OProcess * ) ) ); |
109 | FILE *get = popen( command.latin1(), "r" ); | 109 | proc->start(); |
110 | if ( get ) | ||
111 | { | ||
112 | pclose( get ); | ||
113 | displayWeather(); | ||
114 | } | ||
115 | else | ||
116 | { | ||
117 | weatherLabel->setText( tr( "Current weather data not available.\nTry looking out the window." ) ); | ||
118 | } | ||
119 | } | 110 | } |
120 | 111 | ||
121 | void WeatherPluginWidget::displayWeather() | 112 | void WeatherPluginWidget::displayWeather() |
122 | { | 113 | { |
123 | weatherData = QString::null; | 114 | weatherData = QString::null; |
124 | 115 | ||
125 | QFile file( localFile ); | 116 | QFile file( localFile ); |
126 | if ( file.open( IO_ReadOnly ) ) | 117 | if ( file.open( IO_ReadOnly ) ) |
127 | { | 118 | { |
128 | QTextStream data( &file ); | 119 | QTextStream data( &file ); |
129 | while ( !data.eof() ) | 120 | while ( !data.eof() ) |
130 | { | 121 | { |
131 | weatherData.append( data.readLine() ); | 122 | weatherData.append( data.readLine() ); |
132 | } | 123 | } |
133 | file.close(); | 124 | file.close(); |
134 | weatherData = weatherData.simplifyWhiteSpace(); | 125 | weatherData = weatherData.simplifyWhiteSpace(); |
135 | 126 | ||
136 | QString tmpstr; | 127 | QString tmpstr; |
137 | 128 | ||
138 | tmpstr.append( tr( "Temp: " ) ); | 129 | tmpstr.append( tr( "Temp: " ) ); |
139 | getTemp( weatherData ); | 130 | getTemp( weatherData ); |
140 | tmpstr.append( dataStr ); | 131 | tmpstr.append( dataStr ); |
141 | 132 | ||
142 | tmpstr.append( tr( " Wind: " ) ); | 133 | tmpstr.append( tr( " Wind: " ) ); |
143 | getWind( weatherData ); | 134 | getWind( weatherData ); |
144 | tmpstr.append( dataStr ); | 135 | tmpstr.append( dataStr ); |
145 | 136 | ||
146 | tmpstr.append( tr( "\nPres: " ) ); | 137 | tmpstr.append( tr( "\nPres: " ) ); |
147 | getPressure( weatherData ); | 138 | getPressure( weatherData ); |
148 | tmpstr.append( dataStr ); | 139 | tmpstr.append( dataStr ); |
149 | 140 | ||
150 | weatherLabel->setText( tmpstr ); | 141 | weatherLabel->setText( tmpstr ); |
@@ -290,32 +281,44 @@ void WeatherPluginWidget::getIcon(const QString &data ) | |||
290 | if ( data.find( "CLR ", 20 ) > -1 || | 281 | if ( data.find( "CLR ", 20 ) > -1 || |
291 | data.find( "SKC ", 20 ) > -1 || | 282 | data.find( "SKC ", 20 ) > -1 || |
292 | data.find( "CAVOK ", 20 ) > -1 ) | 283 | data.find( "CAVOK ", 20 ) > -1 ) |
293 | { | 284 | { |
294 | dataStr = "sunny"; | 285 | dataStr = "sunny"; |
295 | } | 286 | } |
296 | else if ( data.find( "SH ", 20 ) > -1 || | 287 | else if ( data.find( "SH ", 20 ) > -1 || |
297 | data.find( "DZ ", 20 ) > -1 || | 288 | data.find( "DZ ", 20 ) > -1 || |
298 | data.find( "RA ", 20 ) > -1 || | 289 | data.find( "RA ", 20 ) > -1 || |
299 | data.find( "UP ", 20 ) > -1 || | 290 | data.find( "UP ", 20 ) > -1 || |
300 | data.find( "BR ", 20 ) > -1 ) | 291 | data.find( "BR ", 20 ) > -1 ) |
301 | { | 292 | { |
302 | dataStr = "shower"; | 293 | dataStr = "shower"; |
303 | } | 294 | } |
304 | else if ( data.find( "TS ", 20 ) > -1 ) | 295 | else if ( data.find( "TS ", 20 ) > -1 ) |
305 | { | 296 | { |
306 | dataStr = "tstorm"; | 297 | dataStr = "tstorm"; |
307 | } | 298 | } |
308 | else if ( data.find( "SN ", 20 ) > -1 || | 299 | else if ( data.find( "SN ", 20 ) > -1 || |
309 | data.find( "SG ", 20 ) > -1 ) | 300 | data.find( "SG ", 20 ) > -1 ) |
310 | { | 301 | { |
311 | dataStr = "snow"; | 302 | dataStr = "snow"; |
312 | } | 303 | } |
313 | else if ( data.find( "FZ ", 20 ) > -1 || | 304 | else if ( data.find( "FZ ", 20 ) > -1 || |
314 | data.find( "GR ", 20 ) > -1 || | 305 | data.find( "GR ", 20 ) > -1 || |
315 | data.find( "GS ", 20 ) > -1 || | 306 | data.find( "GS ", 20 ) > -1 || |
316 | data.find( "PE ", 20 ) > -1 || | 307 | data.find( "PE ", 20 ) > -1 || |
317 | data.find( "IC ", 20 ) > -1 ) | 308 | data.find( "IC ", 20 ) > -1 ) |
318 | { | 309 | { |
319 | dataStr = "sleet"; | 310 | dataStr = "sleet"; |
320 | } | 311 | } |
321 | } | 312 | } |
313 | |||
314 | void WeatherPluginWidget::dataRetrieved( OProcess *process ) | ||
315 | { | ||
316 | if ( process->normalExit() ) | ||
317 | { | ||
318 | displayWeather(); | ||
319 | } | ||
320 | else | ||
321 | { | ||
322 | weatherLabel->setText( tr( "Current weather data not available.\nTry looking out the window." ) ); | ||
323 | } | ||
324 | } | ||
diff --git a/noncore/todayplugins/weather/weatherpluginwidget.h b/noncore/todayplugins/weather/weatherpluginwidget.h index 2c0238d..d2bbd8b 100644 --- a/noncore/todayplugins/weather/weatherpluginwidget.h +++ b/noncore/todayplugins/weather/weatherpluginwidget.h | |||
@@ -3,67 +3,69 @@ | |||
3 | =. | 3 | =. |
4 | .=l. Copyright (c) 2002 Dan Williams <williamsdr@acm.org> | 4 | .=l. Copyright (c) 2002 Dan Williams <williamsdr@acm.org> |
5 | .>+-= | 5 | .>+-= |
6 | _;:, .> :=|. This file is free software; you can | 6 | _;:, .> :=|. This file is free software; you can |
7 | .> <`_, > . <= redistribute it and/or modify it under | 7 | .> <`_, > . <= redistribute it and/or modify it under |
8 | :`=1 )Y*s>-.-- : the terms of the GNU General Public | 8 | :`=1 )Y*s>-.-- : the terms of the GNU General Public |
9 | .="- .-=="i, .._ License as published by the Free Software | 9 | .="- .-=="i, .._ License as published by the Free Software |
10 | - . .-<_> .<> Foundation; either version 2 of the License, | 10 | - . .-<_> .<> Foundation; either version 2 of the License, |
11 | ._= =} : or (at your option) any later version. | 11 | ._= =} : or (at your option) any later version. |
12 | .%`+i> _;_. | 12 | .%`+i> _;_. |
13 | .i_,=:_. -<s. This file is distributed in the hope that | 13 | .i_,=:_. -<s. This file is distributed in the hope that |
14 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; | 14 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; |
15 | : .. .:, . . . without even the implied warranty of | 15 | : .. .:, . . . without even the implied warranty of |
16 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A | 16 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A |
17 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU General | 17 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU General |
18 | ..}^=.= = ; Public License for more details. | 18 | ..}^=.= = ; Public License for more details. |
19 | ++= -. .` .: | 19 | ++= -. .` .: |
20 | : = ...= . :.=- You should have received a copy of the GNU | 20 | : = ...= . :.=- You should have received a copy of the GNU |
21 | -. .:....=;==+<; General Public License along with this file; | 21 | -. .:....=;==+<; General Public License along with this file; |
22 | -_. . . )=. = see the file COPYING. If not, write to the | 22 | -_. . . )=. = see the file COPYING. If not, write to the |
23 | -- :-=` Free Software Foundation, Inc., | 23 | -- :-=` Free Software Foundation, Inc., |
24 | 59 Temple Place - Suite 330, | 24 | 59 Temple Place - Suite 330, |
25 | Boston, MA 02111-1307, USA. | 25 | Boston, MA 02111-1307, USA. |
26 | 26 | ||
27 | */ | 27 | */ |
28 | 28 | ||
29 | #ifndef WEATHER_PLUGIN_WIDGET_H | 29 | #ifndef WEATHER_PLUGIN_WIDGET_H |
30 | #define WEATHER_PLUGIN_WIDGET_H | 30 | #define WEATHER_PLUGIN_WIDGET_H |
31 | 31 | ||
32 | #include <qstring.h> | 32 | #include <qstring.h> |
33 | #include <qwidget.h> | 33 | #include <qwidget.h> |
34 | 34 | ||
35 | #include <unistd.h> | 35 | class OProcess; |
36 | |||
37 | class QLabel; | 36 | class QLabel; |
38 | class QTimer; | 37 | class QTimer; |
39 | 38 | ||
40 | class WeatherPluginWidget : public QWidget { | 39 | class WeatherPluginWidget : public QWidget { |
41 | 40 | ||
42 | Q_OBJECT | 41 | Q_OBJECT |
43 | 42 | ||
44 | public: | 43 | public: |
45 | WeatherPluginWidget( QWidget *parent, const char *name ); | 44 | WeatherPluginWidget( QWidget *parent, const char *name ); |
46 | ~WeatherPluginWidget(); | 45 | ~WeatherPluginWidget(); |
47 | 46 | ||
48 | private: | 47 | private: |
49 | QString location; | 48 | QString location; |
50 | QString remoteFile; | 49 | QString remoteFile; |
51 | QString localFile; | 50 | QString localFile; |
52 | QString weatherData; | 51 | QString weatherData; |
53 | QString dataStr; | 52 | QString dataStr; |
54 | bool useMetric; | 53 | bool useMetric; |
55 | int frequency; | 54 | int frequency; |
56 | 55 | ||
57 | QLabel *weatherLabel; | 56 | QLabel *weatherLabel; |
58 | QLabel *weatherIcon; | 57 | QLabel *weatherIcon; |
59 | 58 | ||
60 | void timerEvent( QTimerEvent * ); | 59 | void timerEvent( QTimerEvent * ); |
61 | void retreiveData(); | 60 | void retreiveData(); |
62 | void displayWeather(); | 61 | void displayWeather(); |
63 | void getTemp( const QString & ); | 62 | void getTemp( const QString & ); |
64 | void getWind( const QString & ); | 63 | void getWind( const QString & ); |
65 | void getPressure( const QString & ); | 64 | void getPressure( const QString & ); |
66 | void getIcon( const QString & ); | 65 | void getIcon( const QString & ); |
66 | |||
67 | private slots: | ||
68 | void dataRetrieved( OProcess * ); | ||
67 | }; | 69 | }; |
68 | 70 | ||
69 | #endif | 71 | #endif |