1
0
mirror of https://github.com/Llewellynvdm/conky.git synced 2025-01-13 11:15:27 +00:00

add compilation switch --enable-xoap to be able to use www.weather.com as a source of weather data

This commit is contained in:
Cesare Tirabassi 2009-07-18 21:29:27 +02:00
parent 3bb9b4b6b5
commit 5eef83d90a
5 changed files with 57 additions and 29 deletions

View File

@ -1,3 +1,9 @@
2009-07-18
* add compilation switch --enable-xoap to be able to use
www.weather.com as a source of weather data (this avoids adding
libxml2 as a required dependency for users that wish to use noaa
and not weather.com)
2009-07-18 2009-07-18
* www.weather.com can now be used as well as a source of weather data * www.weather.com can now be used as well as a source of weather data

View File

@ -353,13 +353,24 @@ dnl
AC_ARG_ENABLE([weather], AC_ARG_ENABLE([weather],
AC_HELP_STRING([--enable-weather], [enable if you want weather support @<:@default=no@:>@]), AC_HELP_STRING([--enable-weather], [enable if you want weather support @<:@default=no@:>@]),
[want_weather="$enableval"], [want_weather=no]) [want_weather="$enableval"], [want_weather=no])
AC_ARG_ENABLE([xoap],
AC_HELP_STRING([--enable-xoap], [enable if you want weather xoap support @<:@default=no@:>@]),
[want_xoap="$enableval"], [want_xoap=no])
# #
AM_CONDITIONAL(BUILD_WEATHER, test x$want_weather = xyes) AM_CONDITIONAL(BUILD_WEATHER, test x$want_weather = xyes)
if test x$want_weather = xyes; then if test x$want_weather = xyes; then
PKG_CHECK_MODULES([libxml2], libxml-2.0) AM_CONDITIONAL(BUILD_XOAP, test x$want_xoap = xyes)
if test x$want_xoap = xyes; then
PKG_CHECK_MODULES([libxml2], libxml-2.0)
conky_CFLAGS="$conky_CFLAGS $libxml2_CFLAGS"
conky_LIBS="$conky_LIBS $libxml2_LIBS"
AC_DEFINE(XOAP, 1, [Define if you want weather xoap support])
AC_DEFINE(XOAP_FILE, "$HOME/.xoaprc", [User xoap keys file])
fi
PKG_CHECK_MODULES([libcurl], libcurl) PKG_CHECK_MODULES([libcurl], libcurl)
conky_CFLAGS="$conky_CFLAGS $libxml2_CFLAGS $libcurl_CFLAGS" conky_CFLAGS="$conky_CFLAGS $libcurl_CFLAGS"
conky_LIBS="$conky_LIBS $libxml2_LIBS $libcurl_LIBS" conky_LIBS="$conky_LIBS $libcurl_LIBS"
AC_DEFINE(WEATHER, 1, [Define if you want weather support]) AC_DEFINE(WEATHER, 1, [Define if you want weather support])
fi fi
@ -707,7 +718,6 @@ dnl
AC_DEFINE(DEFAULTNETDEV, "eth0", [Default networkdevice]) AC_DEFINE(DEFAULTNETDEV, "eth0", [Default networkdevice])
AC_DEFINE(CONFIG_FILE, "$HOME/.conkyrc", [Configfile of the user]) AC_DEFINE(CONFIG_FILE, "$HOME/.conkyrc", [Configfile of the user])
AC_DEFINE(XOAP_FILE, "$HOME/.xoaprc", [User xoap keys file])
AC_DEFINE(MAX_SPECIALS_DEFAULT, 512, [Default maximum number of special things, e.g. fonts, offsets, aligns, etc.]) AC_DEFINE(MAX_SPECIALS_DEFAULT, 512, [Default maximum number of special things, e.g. fonts, offsets, aligns, etc.])
AC_DEFINE(MAX_USER_TEXT_DEFAULT, 16384, [Default maximum size of config TEXT buffer, i.e. below TEXT line.]) AC_DEFINE(MAX_USER_TEXT_DEFAULT, 16384, [Default maximum size of config TEXT buffer, i.e. below TEXT line.])
AC_DEFINE(DEFAULT_TEXT_BUFFER_SIZE, 256, [Default size used for temporary, static text buffers]) AC_DEFINE(DEFAULT_TEXT_BUFFER_SIZE, 256, [Default size used for temporary, static text buffers])

View File

@ -4673,7 +4673,7 @@ static void generate_text_internal(char *p, int p_max_size,
if( obj->data.weather.uri != NULL ) { if( obj->data.weather.uri != NULL ) {
process_weather_info(p, p_max_size, obj->data.weather.uri, obj->data.weather.data_type, obj->data.weather.interval); process_weather_info(p, p_max_size, obj->data.weather.uri, obj->data.weather.data_type, obj->data.weather.interval);
} else { } else {
strncpy(p, "invalid xoap keys file", p_max_size); strncpy(p, "either invalid xoap keys file or compiled without xoap support", p_max_size);
} }
} }
#endif #endif
@ -8912,7 +8912,7 @@ static void load_config_file_x11(const char *f)
} }
#endif /* X11 */ #endif /* X11 */
#ifdef WEATHER #if defined(WEATHER) && defined(XOAP)
/* /*
* TODO: make the xoap keys file readable from the config file * TODO: make the xoap keys file readable from the config file
* make the keys directly readable from the config file * make the keys directly readable from the config file
@ -8946,7 +8946,7 @@ static void load_xoap_keys(void)
free(par); free(par);
free(key); free(key);
} }
#endif /* WEATHER */ #endif /* WEATHER && XOAP */
static void print_help(const char *prog_name) { static void print_help(const char *prog_name) {
printf("Usage: %s [OPTION]...\n" printf("Usage: %s [OPTION]...\n"
@ -9332,10 +9332,10 @@ int main(int argc, char **argv)
} }
} }
#ifdef WEATHER #if defined(WEATHER) && defined(XOAP)
/* Load xoap keys, if existing */ /* Load xoap keys, if existing */
load_xoap_keys(); load_xoap_keys();
#endif /* WEATHER */ #endif /* WEATHER && XOAP */
#ifdef HAVE_SYS_INOTIFY_H #ifdef HAVE_SYS_INOTIFY_H
inotify_fd = inotify_init(); inotify_fd = inotify_init();

View File

@ -38,7 +38,9 @@
#include <curl/curl.h> #include <curl/curl.h>
#include <curl/types.h> #include <curl/types.h>
#include <curl/easy.h> #include <curl/easy.h>
#ifdef XOAP
#include <libxml/parser.h> #include <libxml/parser.h>
#endif /* XOAP */
/* Possible sky conditions */ /* Possible sky conditions */
#define NUM_CC_CODES 6 #define NUM_CC_CODES 6
@ -58,7 +60,7 @@ const char *WM_CODES[NUM_WM_CODES] = {
const char *WC_CODES[NUM_WC_CODES] = { const char *WC_CODES[NUM_WC_CODES] = {
"DZ", "RA", "GR", "GS", "SN", "SG", "DZ", "RA", "GR", "GS", "SN", "SG",
"FG", "HZ", "FU", "BR", "DU", "SA", "FG", "HZ", "FU", "BR", "DU", "SA",
"FC", "PO", "SQ", "SS", "DS", "FC", "PO", "SQ", "SS", "DS"
}; };
typedef struct location_ { typedef struct location_ {
@ -126,6 +128,7 @@ int rel_humidity(int dew_point, int air) {
#endif /* MATH */ #endif /* MATH */
} }
#ifdef XOAP
//TODO: Lets get rid of the recursion //TODO: Lets get rid of the recursion
static void parse_cc(PWEATHER *res, xmlNodePtr cc) static void parse_cc(PWEATHER *res, xmlNodePtr cc)
{ {
@ -194,6 +197,7 @@ static void parse_weather_xml(PWEATHER *res, const char *data)
xmlFreeDoc(doc); xmlFreeDoc(doc);
return ; return ;
} }
#endif /* XOAP */
/* /*
* Horrible hack to avoid using regexes * Horrible hack to avoid using regexes
@ -490,16 +494,19 @@ static void parse_weather(PWEATHER *res, const char *data)
//Reset results //Reset results
memset(res, 0, sizeof(PWEATHER)); memset(res, 0, sizeof(PWEATHER));
#ifdef XOAP
//Check if it is an xml file //Check if it is an xml file
if ( strncmp(data, "<?xml ", 6) == 0 ) { if ( strncmp(data, "<?xml ", 6) == 0 ) {
parse_weather_xml(res, data); parse_weather_xml(res, data);
} else { } else
//We assume its a text file #endif /* XOAP */
char s_tmp[256]; {
const char delim[] = " "; //We assume its a text file
char s_tmp[256];
const char delim[] = " ";
//Divide time stamp and metar data //Divide time stamp and metar data
if (sscanf(data, "%[^'\n']\n%[^'\n']", res->lastupd, s_tmp) == 2) { if (sscanf(data, "%[^'\n']\n%[^'\n']", res->lastupd, s_tmp) == 2) {
//Process all tokens //Process all tokens
char *p_tok = NULL; char *p_tok = NULL;
@ -518,11 +525,11 @@ static void parse_weather(PWEATHER *res, const char *data)
} while (p_tok != NULL); } while (p_tok != NULL);
} }
return; return;
}
else {
return;
}
} }
else {
return;
}
}
} }
void fetch_weather_info(location *curloc) void fetch_weather_info(location *curloc)
@ -596,9 +603,12 @@ void process_weather_info(char *p, int p_max_size, char *uri, char *data_type, i
} else if (strcmp(data_type, "temperature") == EQUAL) { } else if (strcmp(data_type, "temperature") == EQUAL) {
temp_print(p, p_max_size, curloc->data.temp, TEMP_CELSIUS); temp_print(p, p_max_size, curloc->data.temp, TEMP_CELSIUS);
} else if (strcmp(data_type, "cloud_cover") == EQUAL) { } else if (strcmp(data_type, "cloud_cover") == EQUAL) {
#ifdef XOAP
if (curloc->data.xoap_t[0] != '\0') { if (curloc->data.xoap_t[0] != '\0') {
strncpy(p, curloc->data.xoap_t, p_max_size); strncpy(p, curloc->data.xoap_t, p_max_size);
} else if (curloc->data.cc == 0) { } else
#endif /* XOAP */
if (curloc->data.cc == 0) {
strncpy(p, "", p_max_size); strncpy(p, "", p_max_size);
} else if (curloc->data.cc < 3) { } else if (curloc->data.cc < 3) {
strncpy(p, "clear", p_max_size); strncpy(p, "clear", p_max_size);

View File

@ -31,15 +31,8 @@
/* WEATHER data */ /* WEATHER data */
typedef struct PWEATHER_ { typedef struct PWEATHER_ {
char lastupd[32]; char lastupd[32];
#ifdef XOAP
char xoap_t[32]; char xoap_t[32];
int temp;
int dew;
int cc;
int bar;
int wind_s;
int wind_d;
int hmid;
int wc;
/* /*
* TODO: * TODO:
* Is it worth investigating about using icons from weather.com? * Is it worth investigating about using icons from weather.com?
@ -50,6 +43,15 @@ typedef struct PWEATHER_ {
char icon[3]; char icon[3];
*/ */
#endif /* XOAP */
int temp;
int dew;
int cc;
int bar;
int wind_s;
int wind_d;
int hmid;
int wc;
} PWEATHER; } PWEATHER;
/* Prototypes */ /* Prototypes */