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

Reply via email to