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