Enlightenment CVS committal

Author  : azundris
Project : misc
Module  : erss

Dir     : misc/erss/src


Modified Files:
        Makefile.am erss.c erss.h parse.c parse.h parse_config.c 
        parse_config.h tooltip.c 
Added Files:
        config.h gui.c gui.h ls.c ls.h net.c net.h 


Log Message:
* refactoring (I) -- kill all globals
  (bear with me, there actually is a point to this : )

===================================================================
RCS file: /cvsroot/enlightenment/misc/erss/src/Makefile.am,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- Makefile.am 24 Jan 2004 18:04:35 -0000      1.5
+++ Makefile.am 21 Feb 2004 08:53:36 -0000      1.6
@@ -4,6 +4,6 @@
 
 bin_PROGRAMS = erss
 
-erss_SOURCES = erss.c parse.c parse_config.c tooltip.c
+erss_SOURCES = erss.c parse.c parse_config.c tooltip.c net.c ls.c gui.c
 
 erss_LDADD = @edje_libs@ @esmart_libs@ @ewd_libs@ @etox_libs@ @xml2_libs@
===================================================================
RCS file: /cvsroot/enlightenment/misc/erss/src/erss.c,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -3 -r1.36 -r1.37
--- erss.c      20 Feb 2004 13:36:54 -0000      1.36
+++ erss.c      21 Feb 2004 08:53:36 -0000      1.37
@@ -1,84 +1,35 @@
 #include "erss.h"
-#include "parse.h"
 #include "parse_config.h"
+#include "net.h"
+#include "ls.h"
+#include "gui.h"
 
-Evas *evas = NULL;
-Ecore_Evas *ee = NULL;
-Ecore_Con_Server *server = NULL;
-Evas_Object *bg = NULL;
-Evas_Object *cont = NULL;
-Evas_Object *tid = NULL;
-Ewd_List *config_files = NULL;
+Ewd_List    *config_files=NULL;
 
-char *main_buffer = NULL;
-char *last_time = NULL;
 
-int main_bufsize = 0;
-int waiting_for_reply = FALSE;
-int total_connects = 0;
-
-int world_x, world_y;
-
-
-void erss_xml_error_handler (void *ctx, const char *msg, ...)
+#if 0
+static void erss_xml_error_handler (void *ctx, const char *msg, ...)
 {
        fprintf (stderr, "%s xml report: %s\n", PACKAGE, msg);
 
        return;
 }
+#endif
 
-int erss_connect (void *data)
+static int erss_handler_signal_exit (void *data, int ev_type, void *ev)
 {
-       if (waiting_for_reply) {
-               fprintf (stderr, "%s warning: client has not received all information 
", 
-                               PACKAGE);
-               fprintf (stderr, "from the last connection attempt yet! \n");
-               return TRUE;
-       }
-       
-       server = NULL;
-       
-       if (last_time)
-               free (last_time);
-       else
-               printf ("%s info: connecting to '%s' ...\n", PACKAGE, cfg->url);
-
-       if (rc->proxy) {
-               if (!strcasecmp (rc->proxy, "")) {
-                       server = ecore_con_server_connect (ECORE_CON_REMOTE_SYSTEM,
-                                                                                      
          cfg->hostname, 80, NULL);
-               } else {
-                       if (!rc->proxy_port)
-                       {
-                               fprintf (stderr, 
-                                               "%s error: You need to define a proxy 
port!\n", PACKAGE);
-                               exit (-1);
-                       }
-                       server = ecore_con_server_connect (ECORE_CON_REMOTE_SYSTEM,
-                                                                                      
          rc->proxy, rc->proxy_port, NULL);
-               }
-       } else {
-               server = ecore_con_server_connect (ECORE_CON_REMOTE_SYSTEM,
-                               cfg->hostname, 80, NULL);
-       }
-
-       if (!server) {
-               fprintf (stderr, "%s error: Could not connect to server ..\n", 
PACKAGE);
-               exit (-1);
-       }
+       Ecore_Event_Signal_Exit *e = ev;
 
-       total_connects++;
-       last_time = strdup (erss_time_format ());
-       erss_set_time (NULL);
+       if (e->interrupt)
+               printf ("%s exit: interrupt\n", PACKAGE);
+       if (e->quit)
+               printf ("%s exit: quit\n", PACKAGE);
+       if (e->terminate)
+               printf ("%s exit: terminate\n", PACKAGE);
 
-       return TRUE;
-}
+       ecore_main_loop_quit ();
 
-int erss_alphasort (const void *a, const void *b)
-{
-       struct dirent **ad = (struct dirent **)a;
-       struct dirent **bd = (struct dirent **)b;
-       return (strcmp((*bd)->d_name, (*ad)->d_name));
+       return 1;
 }
 
 char *erss_time_format () 
@@ -98,337 +49,7 @@
        return str;
 }
 
-int erss_set_time (void *data)
-{
-       char *str;
-       char text[100];
-
-       str = erss_time_format ();
-       if (last_time)
-               snprintf (text, sizeof (text), "Last update: %s", last_time);
-
-       edje_object_part_text_set (tid, "clock", text);
-
-       free (str);
-
-       return TRUE;
-}
-
-int erss_handler_signal_exit (void *data, int ev_type, void *ev)
-{
-       Ecore_Event_Signal_Exit *e = ev;
-
-       if (e->interrupt)
-               printf ("%s exit: interrupt\n", PACKAGE);
-       if (e->quit)
-               printf ("%s exit: quit\n", PACKAGE);
-       if (e->terminate)
-               printf ("%s exit: terminate\n", PACKAGE);
-
-       ecore_main_loop_quit ();
-
-       return 1;
-}
-
-int erss_handler_server_add (void *data, int type, void *event)
-{
-       Erss_Article *ptr;
-       char c[1024];
-
-       /*
-        * Clean out the evas objects from the container to
-        * make room for the new items.
-        */
-       if (list) {
-               ptr = ewd_list_goto_first (list);
-               while ((ptr = ewd_list_next(list))) {
-
-                       /*
-                        * Remove the evas object from the list 
-                        * and destory it.
-                        */
-
-                       if (ptr->obj)
-                               e_container_element_destroy (cont, ptr->obj);
-
-                       if (ptr->url)
-                               free (ptr->url);
-
-                       if (ptr->description)
-                               free (ptr->description);
-
-                       free (ptr);
-               }
-       }
-
-       /* 
-        * Remove the list, we want to build a new one for 
-        * the next connection.
-        */
-       if (list)
-       {
-               ewd_list_remove (list);
-               list = NULL;
-       }
-
-       item = NULL;
-       list = ewd_list_new ();
-
-       /*
-        * We want to be connected before sending the request.
-        */
-       if (total_connects == 1)
-               printf ("%s info: sending HTTP request ...\n", PACKAGE);
-       
-       snprintf (c, sizeof (c), "GET %s HTTP/1.0\r\n", cfg->url);
-       ecore_con_server_send (server, c, strlen (c));
-       snprintf (c, sizeof (c), "Host: %s\r\n", cfg->hostname);
-       ecore_con_server_send (server, c, strlen (c));
-       snprintf (c, sizeof (c), "User-Agent: %s/%s\r\n\r\n",
-                 PACKAGE, VERSION);
-       ecore_con_server_send (server, c, strlen (c));
-
-       waiting_for_reply = TRUE;
-
-       return 1;
-}
-
-int erss_handler_server_data (void *data, int type, void *event)
-{
-       Ecore_Con_Event_Server_Data *e = event;
-
-       if (total_connects == 1)
-               printf ("%s info: receiving data ...\n", PACKAGE);
-
-       /* 
-        * Read everything we receive into one big buffer, and handle
-        * that buffer when the server disconnects.
-        */
-       main_buffer = realloc (main_buffer, main_bufsize + e->size);
-       memcpy (main_buffer + main_bufsize, e->data, e->size);
-       main_bufsize += e->size;
-
-       return 1;
-}
-
-int erss_handler_server_del (void *data, int type, void *event)
-{
-       Ecore_Con_Event_Server_Del *e = event;
-       char *buf = main_buffer;
-       xmlDocPtr doc;
-       char *temp;
-
-       if (total_connects == 1)
-               printf ("%s info: disconnecting ...\n", PACKAGE);
-
-       /*
-        * Now split our buffer in each newline and then parse the line.
-        */
-
-       temp = strstr (buf, "<?xml");
-       doc = xmlParseMemory (temp, main_bufsize - (temp - main_buffer));
-
-       erss_parse (doc);
-
-       ecore_con_server_del (e->server);
-       server = NULL;
-       
-       if (ewd_list_is_empty (list)) {
-               if (buf) 
-                       printf ("%s\n", temp);
-        else 
-                       printf ("%s error: could not connect to '%s'\n", PACKAGE, 
cfg->url);
-
-               fprintf (stderr, "\n%s error: parsing data\n", PACKAGE);
-               fprintf (stderr, "%s error: are you sure you have to correct input in 
your config file?\n", PACKAGE);
-
-               exit (-1);
-       }
-
-       if (main_buffer) {
-               free (main_buffer);
-               main_buffer = NULL;
-       }
-
-       main_bufsize = 0;
-       waiting_for_reply = FALSE;
-
-       if (total_connects == 1)
-               printf ("%s info: connection information only displays on the first 
connect.\n", 
-                               PACKAGE);
-
-       return 1;
-}
-
-void erss_window_move (Ecore_Evas *ee)
-{
-       int x, y, w, h;
-       Evas_Object *o = NULL;
-
-       ecore_evas_geometry_get (ee, &x, &y, &w, &h);
-
-       if((o = evas_object_name_find(ecore_evas_get(ee), "root_background")))
-               esmart_trans_x11_freshen(o, x, y, w, h);
-
-       world_x = x;
-       world_y = y;
-
-}
-       
-void erss_window_resize(Ecore_Evas *ee)
-{
-       int x, y, w, h;
-       Evas_Object *o = NULL;
-
-       ecore_evas_geometry_get(ee, &x, &y, &w, &h);
-
-       if((o = evas_object_name_find(ecore_evas_get(ee), "root_background")))
-       {
-               evas_object_resize(o, w, h);
-               esmart_trans_x11_freshen(o, x, y, w, h);
-       }
-       
-       if((o = evas_object_name_find(ecore_evas_get(ee), "background")))
-       {
-               evas_object_resize(o, w, h);
-       }
-
-       if((o = evas_object_name_find(ecore_evas_get(ee), "container")))
-               evas_object_resize(o, w, h);
-}
-
-void erss_mouse_click_item (void *data, Evas_Object *o, const char *sig, 
-               const char *src)
-{
-       char *url = data;
-       char  c[1024];
-printf("clicked: %s\n",url);
-       if (!rc->browser) {
-               fprintf (stderr, "%s error: you have not defined any browser in your 
config file setting /usr/bin/mozilla as default\n", PACKAGE);
-               rc->browser = strdup ("mozilla");
-       }
-       
-       snprintf (c, sizeof (c), "%s \"%s\"", rc->browser, url);
-       ecore_exe_run (c, NULL);
-}
-
-void erss_mouse_in_cursor_change (void *data, Evas *e, Evas_Object *obj,
-               void *event_info)
-{
-       Ecore_X_Window win;
-
-       win = ecore_evas_software_x11_window_get(ee);
-       if (cfg->item_url)
-               ecore_x_cursor_shape_set(win, ECORE_X_CURSOR_HAND2);
-}
-
-void erss_mouse_out_cursor_change (void *data, Evas *e, Evas_Object *obj,
-               void *event_info)
-{
-       Ecore_X_Window win;
-  
-       win = ecore_evas_software_x11_window_get(ee);
-  ecore_x_cursor_set(win, 0);
-}
-
-void erss_list_config_files (int output)
-{
-       char *str;
-       char *ptr;
-       Ewd_List *paths;
-       struct dirent **dentries;
-       struct stat statbuf;
-       int num, i;
-       char file[PATH_MAX];
-       int found_files = FALSE;
-       int no_dir = FALSE;
-
-       paths = ewd_list_new ();
-       config_files = ewd_list_new ();
-
-       str = malloc (PATH_MAX);
-       snprintf (str, PATH_MAX, "%s/.%s/config", getenv("HOME"), PACKAGE);
-       ewd_list_append (paths, str);
-
-       str = malloc (PATH_MAX);
-       snprintf (str, PATH_MAX, "/etc/%s/config", PACKAGE);
-       ewd_list_append (paths, str);
-
-       str = malloc (PATH_MAX);
-       snprintf (str, PATH_MAX, "%s/config", PACKAGE_DATA_DIR);
-       ewd_list_append (paths, str);
-
-       if (output)
-               printf ("\n%s processing potential dirs ...\n", PACKAGE);
-
-       ptr = ewd_list_goto_first (paths);
-       while ((ptr = ewd_list_current (paths))) {
-               if (output)
-                       printf ("\nprocessing '%s':\n", ptr);
-
-               i = stat (ptr, &statbuf);
-
-               if (i == -1) {
-                       no_dir = TRUE;
-               } else {
-                       if (S_ISDIR(statbuf.st_mode)) {
-
-                               if ((num = scandir(ptr, &dentries, 0, erss_alphasort)) 
< 0) 
-                                       perror("erss - scandir");
-
-                               while (num--) {
-                                       snprintf(file, PATH_MAX, "%s/%s", ptr, 
dentries[num]->d_name);
-
-                                       i = stat (file, &statbuf);
-                                       if (i == -1) {
-                                               perror("erss - stat 1");
-                                               continue;
-                                       }
-
-                                       if (S_ISDIR(statbuf.st_mode))
-                                               continue;
-
-                                       if (strstr (dentries[num]->d_name, ".cfg")) {
-                                               found_files = TRUE;
-                                               ewd_list_append (config_files, strdup 
(file));
-                                               if (output)
-                                                       printf ("\t%s\n", file);
-                                       }
-                               }
-
-                               if (!found_files) {
-                                       if (output)
-                                               printf ("\tno config files in this dir 
...\n");
-                                       found_files = FALSE;
-                               }
-                       }
-               }
-
-               if (output) {
-                       if (no_dir)
-                               printf ("\tno such dir ...\n");
-                       no_dir = FALSE;
-               }
-
-               ewd_list_next (paths);
-       }
-
-       /*
-        * Finished reading and printing avaliable config files
-        * now remove the paths list since we don't need it anyumore.
-        */
-       ptr = ewd_list_goto_first (paths);
-       while ((ptr = ewd_list_current (paths))) {
-               if (ptr)
-                       free (ptr);
-               
-               ewd_list_next (paths);
-       }
-
-       ewd_list_destroy (paths);
-}
-
-void erss_display_default_usage ()
+static void erss_display_default_usage ()
 {
        fprintf (stderr, "Usage: %s [OPTION] ...\n", PACKAGE);
        fprintf (stderr, "Try `%s -h` for more information\n", PACKAGE);
@@ -437,21 +58,17 @@
 
 int main (int argc, char * const argv[])
 {
-       Ecore_X_Window win;
-       Evas_Object *header;
-       int x, y, w, h;
-       int height;
-       int width;
-       int c = 0;
-       char *xdisplay = NULL;
-
-       int got_config_file = FALSE;
-       int got_theme_file = FALSE;
-       int got_rc_file = FALSE;
-       char config_file[PATH_MAX];
-       char theme_file[PATH_MAX];
-
+       int         c = 0;
+       int         got_config_file = FALSE;
+       int         got_theme_file = FALSE;
+       int         got_rc_file = FALSE;
+       char        config_file[PATH_MAX];
+       char        theme_file[PATH_MAX];
+       char       *config=NULL;
        struct stat statbuf;
+       erss_feed   f;
+
+       memset(&f,0,sizeof(erss_feed));
 
        cfg = NULL;
 
@@ -502,15 +119,13 @@
                
        if(!got_config_file) {
                
-               if (!got_rc_file) {
+               if (!got_rc_file || !rc->config)
                        erss_display_default_usage ();
-               }
-                else 
-                       erss_parse_config_file (rc->config);
+               else
+                       erss_parse_config_file (config=rc->config);
 
-       } else {
-               erss_parse_config_file (config_file);
-       }
+       } else
+               erss_parse_config_file (config=config_file);
        
        if (!got_theme_file) {
                if (!got_rc_file) 
@@ -528,121 +143,21 @@
                exit (-1);
        }
 
-       ecore_init ();
-       ecore_x_init (xdisplay);
 
+
+       ecore_init ();
+       ecore_event_handler_add (ECORE_EVENT_SIGNAL_EXIT,erss_handler_signal_exit, 
NULL);
        if (!ecore_con_init ()) return -1;
-       
        ecore_app_args_set (argc, (const char **) argv);
+       erss_gui_init(config);
 
-       if (!ecore_evas_init ()) return -1;
-
-       width = 300;
-       height = 16 * cfg->num_stories;
-
-       if (cfg->header) height += 26;
-       if (cfg->clock) height += 26;
-
-       ee = ecore_evas_software_x11_new (NULL, 0, 0, 0, width, height);
-       win = ecore_evas_software_x11_window_get(ee);
-       
-       if (!ee)
-               return -1;
-
-       ecore_evas_borderless_set (ee, cfg->borderless);
-       snprintf(theme_file, PATH_MAX, "erss - %s", config_file);
-       ecore_evas_title_set (ee, theme_file);
-       ecore_x_window_prop_layer_set(win, -1);
-       ecore_evas_show (ee);
-       
-       /* ecore_x_window_lower(win); */
-
-       if (cfg->x != 0 && cfg->y != 0)
-               ecore_evas_move (ee, cfg->x, cfg->y);
-
-       evas = ecore_evas_get (ee);
-       
-       evas_font_path_append (evas, PACKAGE_DATA_DIR"/fonts/");
-
-       ecore_event_handler_add (ECORE_CON_EVENT_SERVER_ADD,
-                                                        erss_handler_server_add, 
NULL);
-       ecore_event_handler_add (ECORE_CON_EVENT_SERVER_DEL,
-                                                        erss_handler_server_del, 
NULL);
-       ecore_event_handler_add (ECORE_CON_EVENT_SERVER_DATA,
-                                                        erss_handler_server_data, 
NULL);
-
-       ecore_evas_geometry_get (ee, &x, &y, &w, &h);
-       
-       bg = esmart_trans_x11_new (evas);
-       evas_object_move (bg, 0, 0);
-       evas_object_layer_set (bg, -5);
-       evas_object_resize (bg, w, h);
-       evas_object_name_set(bg, "root_background");
-       evas_object_show (bg);
-
-       bg = evas_object_rectangle_add(evas);
-       evas_object_move (bg, 0, 0);
-       evas_object_layer_set (bg, -6);
-       evas_object_resize (bg, w, h);
-       evas_object_color_set(bg, 255, 255, 255, 0);
-       evas_object_name_set(bg, "background");
-       evas_object_show (bg);
-
-       ecore_event_handler_add (ECORE_EVENT_SIGNAL_EXIT,
-                                                        erss_handler_signal_exit, 
NULL);
-       
-       ecore_evas_callback_move_set (ee, erss_window_move);
-       ecore_evas_callback_resize_set(ee, erss_window_resize);
-
-       cont = e_container_new(evas);
-       evas_object_move(cont, 0, 0);
-       evas_object_resize(cont, width, height);
-       evas_object_layer_set(cont, 0);
-       evas_object_name_set(cont, "container");
-       evas_object_show(cont);
-       e_container_padding_set(cont, 10, 10, 10, 10);
-       e_container_spacing_set(cont, 5);
-       e_container_direction_set(cont, 1);
-       e_container_fill_policy_set(cont,
-                       CONTAINER_FILL_POLICY_FILL);
-
-       edje_init();
-
-       if (cfg->header) {
-               header = edje_object_add (evas);
-               edje_object_file_set (header, cfg->theme, "erss");
-               edje_object_part_text_set (header, "header", cfg->header);
-               evas_object_show (header);
-
-               evas_object_event_callback_add (header,
-                                               EVAS_CALLBACK_MOUSE_IN, 
erss_mouse_in_cursor_change, NULL);
-               evas_object_event_callback_add (header,
-                                               EVAS_CALLBACK_MOUSE_OUT, 
erss_mouse_out_cursor_change, NULL);
-
-               edje_object_signal_callback_add (header, "exec*", "*",
-                                                erss_mouse_click_item, cfg->hostname);
-               edje_object_signal_emit (header, "mouse,in", "article");
-               edje_object_signal_emit (header, "mouse,out", "article");
-
-               e_container_element_append(cont, header);
-       }
-
-       if ((rc->clock==1)||((cfg->clock==1)&&(rc->clock!=0))) {
-               tid = edje_object_add (evas);
-               edje_object_file_set (tid, cfg->theme, "erss_clock");
-               edje_object_part_text_set (tid, "clock", "");
-               evas_object_show (tid);
-
-               e_container_element_append(cont, tid);
-       }
-
-       erss_connect (NULL);
-       ecore_timer_add (cfg->update_rate, erss_connect, NULL); 
+       erss_net_connect(&f);
+       erss_net_poll (&f);
+       ecore_timer_add (cfg->update_rate, erss_net_poll, &f);
 
        ecore_main_loop_begin ();
 
-       ecore_evas_shutdown ();
-       ecore_x_shutdown ();
+       erss_gui_exit();
        ecore_shutdown ();
 
        return FALSE;
===================================================================
RCS file: /cvsroot/enlightenment/misc/erss/src/erss.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -3 -r1.10 -r1.11
--- erss.h      24 Jan 2004 18:04:56 -0000      1.10
+++ erss.h      21 Feb 2004 08:53:36 -0000      1.11
@@ -2,22 +2,23 @@
 #define _MAIN_H
 
 #include <Ecore.h>
-#include <Ecore_X.h>
-#include <Ecore_X_Cursor.h>
-#include <Ecore_Evas.h>
 #include <Ecore_Con.h>
-#include <Evas.h>
-#include <Edje.h>
 #include <Ewd.h>
 #include <Esmart/Esmart_Trans.h>
 #include <Esmart/container.h>
 #include <Etox.h>
 #include <math.h>
+#include <unistd.h>
+#include <dirent.h>
+
+#include <Ecore_X.h>
+#include <Ecore_X_Cursor.h>
+#include <Ecore_Evas.h>
+#include <Evas.h>
+#include <Edje.h>
 #include <X11/Xatom.h>
 #include <X11/Xlib.h>
 #include <Imlib2.h>
-#include <unistd.h>
-#include <dirent.h>
 
 #include <netdb.h>
 #include <sys/types.h>
@@ -32,37 +33,37 @@
 
 #include "config.h"
 
-extern Evas *evas;
-extern Ecore_Evas *ee;
-extern Ewd_List *list;
+extern Ecore_Evas  *ee;
+extern Evas        *evas;
 extern Evas_Object *cont;
-extern Ewd_List *config_files;
-extern int world_x;
-extern int world_y;
-
-void erss_xml_error_handler (void *ctx, const char *msg, ...);
-int erss_connect (void *data);
-int erss_alphasort (const void *a, const void *b);
+extern int          world_x;
+extern int          world_y;
+extern Ewd_List    *config_files;
+
 
-char *erss_time_format ();
-int erss_set_time (void *data);
 
-int erss_handler_signal_exit (void *data, int ev_type, void *ev);
-int erss_handler_server_add (void *data, int type, void *event);
-int erss_handler_server_data (void *data, int type, void *event);
-int erss_handler_server_del (void *data, int type, void *event);
-
-void erss_window_move (Ecore_Evas * ee);
-void erss_window_resize (Ecore_Evas *ee);
-
-void erss_mouse_click_item (void *data, Evas_Object *o, 
-               const char *sig, const char *src);
-void erss_mouse_in_cursor_change (void *data, Evas *e, Evas_Object *obj,
-               void *event_info);
-void erss_mouse_out_cursor_change (void *data, Evas *e, Evas_Object *obj,
-               void *event_info);
+typedef struct _erss_article {
+  Evas_Object *obj;
+  char        *url;
+  char        *description;
+  time_t       ts;
+} Erss_Article;
 
-void erss_list_config_files (int output);
-void erss_display_default_usage ();
+
+
+typedef struct _erss_feed {
+  Ecore_Con_Server *server;
+  char             *main_buffer;
+  char             *last_time;
+  size_t            main_bufsize;
+  int               waiting_for_reply;
+  int               total_connects;
+  Ewd_List         *list;
+  xmlDocPtr         doc;
+  Erss_Article     *item;
+} erss_feed;
+
+
+char *erss_time_format ();
 
 #endif
===================================================================
RCS file: /cvsroot/enlightenment/misc/erss/src/parse.c,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -3 -r1.24 -r1.25
--- parse.c     20 Feb 2004 13:36:54 -0000      1.24
+++ parse.c     21 Feb 2004 08:53:36 -0000      1.25
@@ -2,92 +2,94 @@
 #include "parse.h"
 #include "parse_config.h"
 #include "tooltip.h"
+#include "gui.h"
 
-Ewd_List *list = NULL;
-Erss_Article *item = NULL;
 
 
-void erss_story_new ()
+static Erss_Article *erss_story_new (erss_feed *f)
 {
-       item = malloc (sizeof (Erss_Article));
-       item->description = NULL;
-       item->url = NULL;
-       memset(item, 0, sizeof (Erss_Article));
+       f->item=malloc(sizeof(Erss_Article));
+       memset(f->item,0,sizeof(Erss_Article));
+       f->item->description=NULL;
+       f->item->url=NULL;
+       f->item->ts=time(NULL);
+       return f->item;
 }
 
-void erss_story_end ()
+static void erss_story_end (erss_feed *f)
 {
-       ewd_list_append (list, item);
+       ewd_list_append (f->list, f->item);
+       f->item = NULL;
 }
 
-void erss_parse_story (xmlDocPtr doc, xmlNodePtr cur)
+static void erss_parse_story (erss_feed *f, xmlNodePtr cur)
 {
        Erss_Tooltip *tt = NULL;
        char *text;
        xmlChar *str;
        int i;
-       
+
        cur = cur->xmlChildrenNode;
 
        while (cur != NULL) {
 
-               if (ewd_list_nodes (list) >= cfg->num_stories)
+               if (ewd_list_nodes (f->list) >= cfg->num_stories)
                        return;
 
                if (!strcmp(cur->name, cfg->item_start)) {
-                       erss_story_new ();
-                       erss_parse_story (doc, cur);
-                       erss_story_end ();
-               } 
-               
-               if ((!strcmp(cur->name, cfg->item_title)) && item) {
-                       str = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
-                       
+                       erss_story_new (f);
+                       erss_parse_story (f, cur);
+                       erss_story_end (f);
+               }
+
+               if ((!strcmp(cur->name, cfg->item_title)) && f->item) {
+                       str = xmlNodeListGetString(f->doc, cur->xmlChildrenNode, 1);
+
                        i = strlen(str) + 3 + strlen(cfg->prefix);
                        text = malloc (i);
-               
+
                        snprintf (text, i, " %s %s", cfg->prefix, str);
-                       
-                       item->obj = edje_object_add (evas);
-                       edje_object_file_set (item->obj, cfg->theme, "erss_item");
-                       evas_object_show (item->obj);
 
-                       evas_object_event_callback_add (item->obj,
+                       f->item->obj = edje_object_add (evas);
+                       edje_object_file_set (f->item->obj, cfg->theme, "erss_item");
+                       evas_object_show (f->item->obj);
+
+                       evas_object_event_callback_add (f->item->obj,
                                        EVAS_CALLBACK_MOUSE_IN, 
erss_mouse_in_cursor_change, NULL);
-                       evas_object_event_callback_add (item->obj,
+                       evas_object_event_callback_add (f->item->obj,
                                        EVAS_CALLBACK_MOUSE_OUT, 
erss_mouse_out_cursor_change, NULL);
-                       
-                       e_container_element_append(cont, item->obj);
-                       edje_object_part_text_set (item->obj, "article", text);
+
+                       e_container_element_append(cont, f->item->obj);
+                       edje_object_part_text_set (f->item->obj, "article", text);
 
                        free (text);
                        xmlFree (str);
                }
        
                if (cfg->item_url) {
-                       if (!strcmp(cur->name, cfg->item_url) && item) {
-                               str = xmlNodeListGetString(doc, cur->xmlChildrenNode, 
1);
-                               item->url = strdup (str);
-
-                               edje_object_signal_callback_add (item->obj, "exec*", 
"*",
-                                               erss_mouse_click_item, item->url);
-                               edje_object_signal_emit (item->obj, "mouse,in", 
"article");
-                               edje_object_signal_emit (item->obj, "mouse,out", 
"article");
+                       if (!strcmp(cur->name, cfg->item_url) && f->item) {
+                               str = xmlNodeListGetString(f->doc, 
cur->xmlChildrenNode, 1);
+                               f->item->url = strdup (str);
+
+                               edje_object_signal_callback_add (f->item->obj, 
"exec*", "*",
+                                               erss_mouse_click_item, f->item->url);
+                               edje_object_signal_emit (f->item->obj, "mouse,in", 
"article");
+                               edje_object_signal_emit (f->item->obj, "mouse,out", 
"article");
 
                                xmlFree (str);
                        }
                }
                
                if (cfg->item_description) {
-                       if (!strcmp(cur->name, cfg->item_description) && item) {
-                               str = xmlNodeListGetString(doc, cur->xmlChildrenNode, 
1);
+                       if (!strcmp(cur->name, cfg->item_description) && f->item) {
+                               str = xmlNodeListGetString(f->doc, 
cur->xmlChildrenNode, 1);
 
                                tt = erss_tooltip_new (str);
 
-                               if (item->obj) {
-                                       evas_object_event_callback_add (item->obj,
+                               if (f->item->obj) {
+                                       evas_object_event_callback_add (f->item->obj,
                                                        EVAS_CALLBACK_MOUSE_IN, 
erss_tooltip_mouse_in, tt);
-                                       evas_object_event_callback_add (item->obj,
+                                       evas_object_event_callback_add (f->item->obj,
                                                        EVAS_CALLBACK_MOUSE_OUT, 
erss_tooltip_mouse_out, tt);
                                }
 
@@ -99,42 +101,41 @@
        }
 }
 
-void erss_parse (xmlDocPtr doc)
+void erss_parse (erss_feed *f)
 {
        xmlNodePtr cur;
-       
-       if (doc == NULL ) {
+
+       if (f->doc == NULL ) {
                fprintf(stderr, "%s warn: buffer not parsed successfully.\n", PACKAGE);
        }
 
-       cur = xmlDocGetRootElement(doc);
+       cur = xmlDocGetRootElement(f->doc);
 
        if (cur == NULL) {
                fprintf(stderr,"%s error: empty buffer\n", PACKAGE);
-               xmlFreeDoc(doc);
+               xmlFreeDoc(f->doc);
                exit (-1);
        }
 
        cur = cur->xmlChildrenNode;
        while (cur != NULL) {
-               if (ewd_list_nodes (list) >= cfg->num_stories)
+               if (ewd_list_nodes (f->list) >= cfg->num_stories)
                        return;
 
                if (cfg->item_root) {
                        if (!strcmp(cur->name, cfg->item_root)) {
-                               erss_parse_story (doc, cur);
+                               erss_parse_story (f, cur);
                        }
                } else {
                        if (!strcmp(cur->name, cfg->item_start)) {
-                               erss_story_new ();
-                               erss_parse_story (doc, cur);
-                               erss_story_end ();
+                               erss_story_new (f);
+                               erss_parse_story (f, cur);
+                               erss_story_end (f);
                        }
                }
-               
+
                cur = cur->next;
        }
-       
-       xmlFreeDoc(doc);
-}
 
+       xmlFreeDoc(f->doc);
+}
===================================================================
RCS file: /cvsroot/enlightenment/misc/erss/src/parse.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -3 -r1.8 -r1.9
--- parse.h     24 Jan 2004 18:05:20 -0000      1.8
+++ parse.h     21 Feb 2004 08:53:36 -0000      1.9
@@ -1,16 +1,3 @@
+#include "erss.h"
 
-typedef struct _erss_article Erss_Article;
-
-struct _erss_article {
-       Evas_Object *obj;
-
-       char *url;
-       char *description;
-};
-
-extern Erss_Article *item;
-
-void erss_story_new ();
-void erss_story_end ();
-void erss_parse_story (xmlDocPtr doc, xmlNodePtr cur);
-void erss_parse (xmlDocPtr doc);
+void erss_parse (erss_feed *);
===================================================================
RCS file: /cvsroot/enlightenment/misc/erss/src/parse_config.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- parse_config.c      3 Feb 2004 14:41:10 -0000       1.3
+++ parse_config.c      21 Feb 2004 08:53:36 -0000      1.4
@@ -1,6 +1,7 @@
 #include "erss.h"
 #include "parse.h"
 #include "parse_config.h"
+#include "ls.h"
 
 Erss_Config *cfg = NULL;
 Erss_Rc_Config *rc = NULL;
===================================================================
RCS file: /cvsroot/enlightenment/misc/erss/src/parse_config.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- parse_config.h      3 Feb 2004 14:41:10 -0000       1.3
+++ parse_config.h      21 Feb 2004 08:53:36 -0000      1.4
@@ -1,7 +1,4 @@
-typedef struct _erss_config Erss_Config;
-typedef struct _erss_rc_config Erss_Rc_Config;
-
-struct _erss_config {
+typedef struct _erss_config {
        char *header;
        char *hostname;
        char *url;
@@ -25,9 +22,11 @@
 
        char *theme;
        char *config;
-};
+} Erss_Config;
+
+
 
-struct _erss_rc_config {
+typedef struct _erss_rc_config {
        char *config;
        char *theme;
        char *browser;
@@ -35,7 +34,9 @@
        int proxy_port;
        int clock;
        double tooltip_delay;
-};
+} Erss_Rc_Config;
+
+
 
 extern Erss_Config *cfg;
 extern Erss_Rc_Config *rc;
===================================================================
RCS file: /cvsroot/enlightenment/misc/erss/src/tooltip.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- tooltip.c   20 Feb 2004 13:36:54 -0000      1.5
+++ tooltip.c   21 Feb 2004 08:53:36 -0000      1.6
@@ -2,6 +2,7 @@
 #include "parse.h"
 #include "parse_config.h"
 #include "tooltip.h"
+#include "gui.h"
 
 char *erss_tooltip_clean (char *description) {
        /* remove potential tags. not using libXML here, contents may not




-------------------------------------------------------
SF.Net is sponsored by: Speed Start Your Linux Apps Now.
Build and deploy apps & Web services for Linux with
a free DVD software kit from IBM. Click Now!
http://ads.osdn.com/?ad_id=1356&alloc_id=3438&op=click
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to