Enlightenment CVS committal Author : sebastid Project : e17 Module : apps/e_modules
Dir : e17/apps/e_modules/src/modules/weather Modified Files: e_mod_main.c e_mod_main.h Log Message: Move Weather_Info to face, easier to change stuff without downloading again. Don't redownload when changing from C to F and back. =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e_modules/src/modules/weather/e_mod_main.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -3 -r1.9 -r1.10 --- e_mod_main.c 14 Aug 2005 17:15:41 -0000 1.9 +++ e_mod_main.c 14 Aug 2005 21:26:55 -0000 1.10 @@ -38,10 +38,9 @@ static int _weather_net_server_data(void *data, int type, void *event); static int _weather_net_server_del(void *data, int type, void *event); -static Weather_Info *_weather_parse(Weather_Face *face); -static void _weather_convert_degrees(Weather *weather, Weather_Info *info); -static void _weather_display_set(Weather_Face *face, Weather_Info *weather, - int display); +static int _weather_parse(Weather_Face *face); +static void _weather_convert_degrees(Weather_Face *face, int degrees); +static void _weather_display_set(Weather_Face *face, int display); static void _weather_menu_add_face(void *data, E_Menu *m, E_Menu_Item *mi); static void _weather_menu_remove_face(void *data, E_Menu *m, E_Menu_Item *mi); @@ -393,6 +392,11 @@ e_object_ref(E_OBJECT(con)); face->weather = weather; + face->temp = 0; + face->degrees = 'C'; + strcat(face->conditions, ""); + strcat(face->icon, "na.png"); + evas_event_freeze(con->bg_evas); o = edje_object_add(con->bg_evas); @@ -796,7 +800,6 @@ Weather *weather; Weather_Face *face; Ecore_Con_Event_Server_Del *e; - Weather_Info *info; Evas_List *l; weather = data; @@ -813,10 +816,15 @@ ecore_con_server_del(face->server); face->server = NULL; - info = _weather_parse(face); - _weather_convert_degrees(weather, info); - _weather_display_set(face, info, weather->conf->display); - free(info); + if (_weather_parse(face)) + { + _weather_convert_degrees(face, weather->conf->degrees); + _weather_display_set(face, weather->conf->display); + } + else + { + _weather_display_set(face, ERROR_DISPLAY); + } face->bufsize = 0; face->cursize = 0; @@ -825,15 +833,11 @@ return 1; } -static Weather_Info * +static int _weather_parse(Weather_Face *face) { - Weather_Info *info; char *needle, *ext; - info = E_NEW(Weather_Info, 1); - if (!info) return NULL; - needle = strstr(face->buffer, "<content:encoded>"); if (!needle) goto error; @@ -842,8 +846,8 @@ if (!needle) goto error; needle = strstr(needle, "id="); if (!needle) goto error; - sscanf(needle, "id=\"%[^\"]\"", info->icon); - ext = strstr(info->icon, "."); + sscanf(needle, "id=\"%[^\"]\"", face->icon); + ext = strstr(face->icon, "."); if (!strcmp(ext, ".gif")) strcpy(ext, ".png"); @@ -852,53 +856,51 @@ if (!needle) goto error; needle = strstr(needle, ">"); if (!needle) goto error; - sscanf(needle, ">%[^<]<", info->conditions); + sscanf(needle, ">%[^<]<", face->conditions); /* Get the temp */ needle = strstr(needle, "class=\"temp\""); if (!needle) goto error; needle = strstr(needle, ">"); if (!needle) goto error; - sscanf(needle, ">%d", &info->temp); + sscanf(needle, ">%d", &face->temp); needle = strstr(needle, "<"); if (!needle) goto error; needle--; - info->degrees = needle[0]; + face->degrees = needle[0]; - return info; + return 1; error: - free(info); - return NULL; + printf("ERROR: Couldn't parse info from rssweather.com\n"); + printf("%s\n", face->buffer); + return 0; } static void -_weather_convert_degrees(Weather *weather, Weather_Info *info) +_weather_convert_degrees(Weather_Face *face, int degrees) { - if (!info) return; - /* Check if degrees is in C or F */ - if ((info->degrees == 'F') && (weather->conf->degrees == DEGREES_C)) + if ((face->degrees == 'F') && (degrees == DEGREES_C)) { - info->temp = (info->temp - 32) * 5.0 / 9.0; - info->degrees = 'C'; + face->temp = (face->temp - 32) * 5.0 / 9.0; + face->degrees = 'C'; } - if ((info->degrees == 'C') && (weather->conf->degrees == DEGREES_F)) + if ((face->degrees == 'C') && (degrees == DEGREES_F)) { - info->temp = (info->temp * 9.0 / 5.0) + 32; - info->degrees = 'F'; + face->temp = (face->temp * 9.0 / 5.0) + 32; + face->degrees = 'F'; } } static void -_weather_display_set(Weather_Face *face, Weather_Info *info, - int display) +_weather_display_set(Weather_Face *face, int display) { char buf[PATH_MAX]; if (!face) return; /* If _get_weather fails, blank out text and set icon to unknown */ - if (!info) + if (display == ERROR_DISPLAY) { e_icon_file_set(face->icon_object, PACKAGE_LIB_DIR"/e_modules/weather/images/na.png"); edje_object_part_swallow(face->weather_object, "icon", face->icon_object); @@ -912,27 +914,27 @@ { /* Detailed display */ edje_object_signal_emit(face->weather_object, "set_style", "detailed"); - snprintf(buf, sizeof(buf), PACKAGE_LIB_DIR"/e_modules/weather/images/%s", info->icon); + snprintf(buf, sizeof(buf), PACKAGE_LIB_DIR"/e_modules/weather/images/%s", face->icon); e_icon_file_set(face->icon_object, buf); edje_object_part_swallow(face->weather_object, "icon", face->icon_object); edje_object_part_text_set(face->weather_object, "location", face->conf->location); - snprintf(buf, sizeof(buf), "%d°%c", info->temp, info->degrees); + snprintf(buf, sizeof(buf), "%d°%c", face->temp, face->degrees); edje_object_part_text_set(face->weather_object, "temp", buf); - edje_object_part_text_set(face->weather_object, "conditions", info->conditions); + edje_object_part_text_set(face->weather_object, "conditions", face->conditions); } else { /* Simple display */ edje_object_signal_emit(face->weather_object, "set_style", "simple"); - snprintf(buf, sizeof(buf), PACKAGE_LIB_DIR"/e_modules/weather/images/%s", info->icon); + snprintf(buf, sizeof(buf), PACKAGE_LIB_DIR"/e_modules/weather/images/%s", face->icon); e_icon_file_set(face->icon_object, buf); edje_object_part_swallow(face->weather_object, "icon", face->icon_object); edje_object_part_text_set(face->weather_object, "location", face->conf->location); - snprintf(buf, sizeof(buf), "%d°%c", info->temp, info->degrees); + snprintf(buf, sizeof(buf), "%d°%c", face->temp, face->degrees); edje_object_part_text_set(face->weather_object, "temp", buf); - edje_object_part_text_set(face->weather_object, "conditions", info->conditions); + edje_object_part_text_set(face->weather_object, "conditions", face->conditions); } } @@ -1060,10 +1062,18 @@ _weather_menu_degrees_F(void *data, E_Menu *m, E_Menu_Item *mi) { Weather *weather; + Evas_List *l; weather = data; weather->conf->degrees = DEGREES_F; - _weather_cb_check(data); + for (l = weather->faces; l; l = l->next) + { + Weather_Face *face; + + face = l->data; + _weather_convert_degrees(face, weather->conf->degrees); + _weather_display_set(face, weather->conf->display); + } e_config_save_queue(); } @@ -1071,9 +1081,17 @@ _weather_menu_degrees_C(void *data, E_Menu *m, E_Menu_Item *mi) { Weather *weather; + Evas_List *l; weather = data; weather->conf->degrees = DEGREES_C; - _weather_cb_check(data); + for (l = weather->faces; l; l = l->next) + { + Weather_Face *face; + + face = l->data; + _weather_convert_degrees(face, weather->conf->degrees); + _weather_display_set(face, weather->conf->display); + } e_config_save_queue(); } =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e_modules/src/modules/weather/e_mod_main.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- e_mod_main.h 13 Aug 2005 06:58:39 -0000 1.3 +++ e_mod_main.h 14 Aug 2005 21:26:55 -0000 1.4 @@ -6,6 +6,7 @@ #define SIMPLE_DISPLAY 0 #define DETAILED_DISPLAY 1 +#define ERROR_DISPLAY 2 #define DEGREES_F 0 #define DEGREES_C 1 @@ -14,7 +15,6 @@ typedef struct _Config_Face Config_Face; typedef struct _Weather Weather; typedef struct _Weather_Face Weather_Face; -typedef struct _Weather_Info Weather_Info; struct _Config { @@ -69,6 +69,11 @@ int bufsize; int cursize; + int temp; + char degrees; + char conditions[256]; + char icon[256]; + Evas_Object *weather_object; Evas_Object *icon_object; Evas_Object *event_object; @@ -76,14 +81,6 @@ E_Gadman_Client *gmc; }; -struct _Weather_Info -{ - int temp; - char degrees; - char conditions[256]; - char icon[256]; -}; - EAPI void *e_modapi_init(E_Module *m); EAPI int e_modapi_shutdown(E_Module *m); EAPI int e_modapi_save(E_Module *m); ------------------------------------------------------- SF.Net email is Sponsored by the Better Software Conference & EXPO September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs