Enlightenment CVS committal

Author  : kiwi
Project : e_modules
Module  : news

Dir     : e_modules/news/src/module


Modified Files:
        e_mod_main.c news_config_dialog_feed.c 
        news_config_dialog_langs.c news_feed.c news_feed.h news_menu.c 
        news_parse.c news_parse_rss.c news_viewer.c 


Log Message:
Fixes, support more feeds, display parse errors ...
Note : ATOM feeds do NOT work for the moment !
Please report to [EMAIL PROTECTED] if you have RSS feeds that doesnt not work
If you have feeds that you want to see in the default configuration, you can 
send me an email too. I want News to have many feeds, in many different 
languages by default.
 * [parse] handle feeds with no title / no date / no link / no description
 * [parse] fix parse with rss version 0.91
 * [dialog] feed: fix select default language
 * [viewer] better display of feeds with no date / no description
 * [viewer] simple click on content opens browser, and show a message 'click 
here to open in browser'
 * [viewer] display if there where errors during parse, and where to report, or 
if the feed is ATOM and not supported yet

===================================================================
RCS file: /cvs/e/e_modules/news/src/module/e_mod_main.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- e_mod_main.c        16 May 2007 12:06:03 -0000      1.1
+++ e_mod_main.c        17 May 2007 14:21:29 -0000      1.2
@@ -104,7 +104,7 @@
 e_modapi_about(E_Module *m)
 {
    news_util_message_show(_("Module to display information feeds<br>"
-                            "like Rss or Atom, on youre desktop<br><br>"
+                            "like Rss (and soon Atom), on youre 
desktop<br><br>"
                             "[EMAIL PROTECTED]<br>"
                             "http://oooo.zapto.org";));
    return 1;
===================================================================
RCS file: /cvs/e/e_modules/news/src/module/news_config_dialog_feed.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- news_config_dialog_feed.c   16 May 2007 12:06:03 -0000      1.1
+++ news_config_dialog_feed.c   17 May 2007 14:21:29 -0000      1.2
@@ -204,6 +204,8 @@
      e_widget_ilist_selected_set(ilist, pos_to_select);
    else
      e_widget_ilist_selected_set(ilist, 0);
+   _cb_lang_change(cfdata, NULL);
+   
 
    e_widget_min_size_get(ilist, &w, NULL);
    e_widget_min_size_set(ilist, w, 110);
===================================================================
RCS file: /cvs/e/e_modules/news/src/module/news_config_dialog_langs.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- news_config_dialog_langs.c  16 May 2007 12:06:03 -0000      1.1
+++ news_config_dialog_langs.c  17 May 2007 14:21:29 -0000      1.2
@@ -1,5 +1,7 @@
 #include "News.h"
 
+#define DIALOG_CLASS "_e_mod_news_config_dialog_langs"
+
 struct _Lang_Choice
 {
    News_Feed_Lang *lang;
@@ -30,6 +32,9 @@
    E_Config_Dialog *cfd;
    E_Config_Dialog_View *v;
 
+   if (e_config_dialog_find("E", DIALOG_CLASS))
+     return 0;
+
    v = E_NEW(E_Config_Dialog_View, 1);
    
    v->create_cfdata = _create_data;
@@ -38,7 +43,7 @@
    
    cfd = e_config_dialog_new(e_container_current_get(e_manager_current_get()),
                             _("News Feeds Language Configuration"),
-                             "E", "_e_mod_news_config_dialog_langs",
+                             "E", DIALOG_CLASS,
                              news->theme, 0, v, NULL);
    return 1;
 }
===================================================================
RCS file: /cvs/e/e_modules/news/src/module/news_feed.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- news_feed.c 16 May 2007 12:06:03 -0000      1.1
+++ news_feed.c 17 May 2007 14:21:29 -0000      1.2
@@ -300,10 +300,10 @@
    if ( f2 && (f != f2) )
      {
         news_util_message_error_show(_("A feed with the 
<hilight>name</hilight> %s <hilight>already exists</hilight><br>"
-                                       "in the %s category<br/><br/>"
-                                       "Its not possible to have feeds with 
the same name<br/>"
+                                       "in the %s category<br><br>"
+                                       "Its not possible to have feeds with 
the same name<br>"
                                        "in one category."),
-                                     f->name, f->category->name);
+                                     name, category->name);
         return 0;
      }
    if (!language || !language[0])
@@ -1081,21 +1081,15 @@
 static char *
 _get_host_from_url(const char *url)
 {
-   char *host;
-   char *tmp, *p;
+   char *host, *p;
+   char buf[4096];
 
-   if (strncmp(url, "http://";, 7))
+   strncpy(buf, url, sizeof(buf));
+   if (strncmp(buf, "http://";, 7))
      return NULL;
-   tmp = strdup(url + 7);
-   p = strchr(tmp, '/');
-   if (!p)
-     {
-        free(tmp);
-        return NULL;
-     }
-   *p = '\0';
-   host = strdup(tmp);
-   free(tmp);
+   p = strchr(buf+7, '/');
+   if (p) *p = '\0';
+   host = strdup(buf+7);
 
    return host;
 }
@@ -1103,8 +1097,7 @@
 static char *
 _get_file_from_url(const char *url)
 {
-   char *file;
-   char *p;
+   char *file, *p;
 
    p = strstr(url, "://");
    if (!p)
@@ -1112,9 +1105,9 @@
    p += 3;
    p = strstr(p, "/");
    if (!p)
-     return NULL;
-
-   file = strdup(p);
+     file = strdup("/");
+   else
+     file = strdup(p);     
 
    return file;
 }
@@ -1307,6 +1300,7 @@
    doc->parse.last_time = ecore_time_get();
 
    //TODO with popups
+   doc->parse.error = error;
    switch(error)
      {
      case NEWS_PARSE_ERROR_NO:
===================================================================
RCS file: /cvs/e/e_modules/news/src/module/news_feed.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- news_feed.h 16 May 2007 12:06:03 -0000      1.1
+++ news_feed.h 17 May 2007 14:21:29 -0000      1.2
@@ -279,9 +279,10 @@
       const char    *meta_date;
       const char    *charset;
 
-      News_Parse *parser;
-      int         got_infos : 1;
-      time_t      last_time;
+      News_Parse      *parser;
+      int              got_infos : 1;
+      time_t           last_time;
+      News_Parse_Error error;
    } parse;
 };
 
===================================================================
RCS file: /cvs/e/e_modules/news/src/module/news_menu.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- news_menu.c 16 May 2007 12:06:03 -0000      1.1
+++ news_menu.c 17 May 2007 14:21:29 -0000      1.2
@@ -207,7 +207,6 @@
 _cb_configure_main(void *data, E_Menu *m, E_Menu_Item *mi)
 {
    if (!news) return;
-   if (news->config_dialog) return;
 
    news_config_dialog_show();
 }
@@ -216,7 +215,6 @@
 _cb_configure_feeds(void *data, E_Menu *m, E_Menu_Item *mi)
 {
    if (!news) return;
-   if (news->config_dialog_feeds) return;
 
    news_config_dialog_feeds_show();
 }
===================================================================
RCS file: /cvs/e/e_modules/news/src/module/news_parse.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- news_parse.c        16 May 2007 12:06:03 -0000      1.1
+++ news_parse.c        17 May 2007 14:21:29 -0000      1.2
@@ -284,6 +284,7 @@
      {
         doc->parse.type = NEWS_FEED_TYPE_ATOM;
         doc->parse.version = 1.0;
+        return 1;
      }
 
    doc->parse.type = NEWS_FEED_TYPE_UNKNOWN;
===================================================================
RCS file: /cvs/e/e_modules/news/src/module/news_parse_rss.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- news_parse_rss.c    16 May 2007 12:06:03 -0000      1.1
+++ news_parse_rss.c    17 May 2007 14:21:29 -0000      1.2
@@ -42,6 +42,8 @@
 
    parser = data;
 
+   //DD(("%d", parser->oc.action));
+
    switch(parser->oc.action)
      {
      case NEWS_PARSE_OC_DETECT_METAS:
@@ -101,7 +103,7 @@
      }
 
    /* error returned */
-   if (err)
+   if (err) //FIXME: != NEWS_PARSE_ERROR_TYPE_NO
      {
         parser->error = err;
         parser->oc.action = NEWS_PARSE_OC_END;
@@ -142,7 +144,7 @@
 {
    News_Feed *feed;
    News_Feed_Document *doc;
-   int ver;
+   float ver;
 
    doc = parser->doc;
    feed = doc->feed;
@@ -334,20 +336,18 @@
    pos = parser->buffer_pos;
 
    p1 = strstr(pos, "<title");
-   p2 = news_parse_meta_block_find(&p1);
-   if (!p2) return NEWS_PARSE_ERROR_BROKEN_FEED;
-
-   if (p2 < art->pos_end)
+   if (p1 && (p1 < art->pos_end))
      {
+        p2 = news_parse_meta_block_find(&p1);
+        if (!p2 || (p2 > art->pos_end))
+          return NEWS_PARSE_ERROR_BROKEN_FEED;
         len = p2 - p1;
         art->title = E_NEW(char, len+1);
         memcpy(art->title, p1, len);
         art->title[len] = '\0';
      }
    else
-     {
-        art->title = strdup("No title");
-     }
+     art->title = strdup("No title");
 
    return NEWS_PARSE_ERROR_NO;
 }
@@ -365,52 +365,53 @@
    pos = parser->buffer_pos;
 
    p1 = strstr(pos, parser->doc->parse.meta_date);
-   p2 = news_parse_meta_block_find(&p1);
-   if (!p2) return NEWS_PARSE_ERROR_BROKEN_FEED;
-   if (p2 >= art->pos_end) return NEWS_PARSE_ERROR_BROKEN_FEED;
-
-   len = p2 - p1;
-   date = p1;
-   tm = &art->date;
-   DD(("DATE LEN %d", len));
-
-   if ((parser->doc->parse.version == 1.0) &&
-       (len >= 22))
-     {
-        sscanf(date, "%4d", &i);
-        tm->tm_year = i - 1900;
-        sscanf(date+5, "%2d", &tm->tm_mon);
-        tm->tm_mon--;   /* tm works with 0-11 */
-        sscanf(date+8, "%2d", &tm->tm_mday);
-        sscanf(date+11, "%2d", &tm->tm_hour);
-        sscanf(date+14, "%2d", &tm->tm_min);
-        if (date[16] == ':') /* seconds are precised ? */
-          sscanf(date+17, "%2d", &tm->tm_sec);
-        else
-          tm->tm_sec = 0;
-        DD(("DATE seconds %d", tm->tm_sec));
-     }
-   else if (len >= 25)
+   if (p1 && (p1 < art->pos_end))
      {
-        sscanf(date+5, "%2d", &tm->tm_mday);
-        if (!strncmp(date+8, "Jan", 3)) tm->tm_mon = 0;
-        else if (!strncmp(date+8, "Feb", 3)) tm->tm_mon = 1;
-        else if (!strncmp(date+8, "Mar", 3)) tm->tm_mon = 2;
-        else if (!strncmp(date+8, "Apr", 3)) tm->tm_mon = 3;
-        else if (!strncmp(date+8, "May", 3)) tm->tm_mon = 4;
-        else if (!strncmp(date+8, "Jun", 3)) tm->tm_mon = 5;
-        else if (!strncmp(date+8, "Jul", 3)) tm->tm_mon = 6;
-        else if (!strncmp(date+8, "Aug", 3)) tm->tm_mon = 7;
-        else if (!strncmp(date+8, "Sep", 3)) tm->tm_mon = 8;
-        else if (!strncmp(date+8, "Oct", 3)) tm->tm_mon = 9;
-        else if (!strncmp(date+8, "Nov", 3)) tm->tm_mon = 10;
-        else if (!strncmp(date+8, "Dec", 3)) tm->tm_mon = 11;
-        else tm->tm_mon = 0;
-        sscanf(date+12, "%4d", &i);
-        tm->tm_year = i - 1900;
-        sscanf(date+17, "%2d", &tm->tm_hour);
-        sscanf(date+20, "%2d", &tm->tm_min);
-        sscanf(date+23, "%2d", &tm->tm_sec);
+        p2 = news_parse_meta_block_find(&p1);
+        if (!p2 || p2 > art->pos_end)
+          return NEWS_PARSE_ERROR_BROKEN_FEED;
+
+        len = p2 - p1;
+        date = p1;
+        tm = &art->date;
+
+        if ((parser->doc->parse.version == 1.0) &&
+            (len >= 22))
+          {
+             sscanf(date, "%4d", &i);
+             tm->tm_year = i - 1900;
+             sscanf(date+5, "%2d", &tm->tm_mon);
+             tm->tm_mon--;   /* tm works with 0-11 */
+             sscanf(date+8, "%2d", &tm->tm_mday);
+             sscanf(date+11, "%2d", &tm->tm_hour);
+             sscanf(date+14, "%2d", &tm->tm_min);
+             if (date[16] == ':') /* seconds are precised ? */
+               sscanf(date+17, "%2d", &tm->tm_sec);
+             else
+               tm->tm_sec = 0;
+          }
+        else if (len >= 25)
+          {
+             sscanf(date+5, "%2d", &tm->tm_mday);
+             if (!strncmp(date+8, "Jan", 3)) tm->tm_mon = 0;
+             else if (!strncmp(date+8, "Feb", 3)) tm->tm_mon = 1;
+             else if (!strncmp(date+8, "Mar", 3)) tm->tm_mon = 2;
+             else if (!strncmp(date+8, "Apr", 3)) tm->tm_mon = 3;
+             else if (!strncmp(date+8, "May", 3)) tm->tm_mon = 4;
+             else if (!strncmp(date+8, "Jun", 3)) tm->tm_mon = 5;
+             else if (!strncmp(date+8, "Jul", 3)) tm->tm_mon = 6;
+             else if (!strncmp(date+8, "Aug", 3)) tm->tm_mon = 7;
+             else if (!strncmp(date+8, "Sep", 3)) tm->tm_mon = 8;
+             else if (!strncmp(date+8, "Oct", 3)) tm->tm_mon = 9;
+             else if (!strncmp(date+8, "Nov", 3)) tm->tm_mon = 10;
+             else if (!strncmp(date+8, "Dec", 3)) tm->tm_mon = 11;
+             else tm->tm_mon = 0;
+             sscanf(date+12, "%4d", &i);
+             tm->tm_year = i - 1900;
+             sscanf(date+17, "%2d", &tm->tm_hour);
+             sscanf(date+20, "%2d", &tm->tm_min);
+             sscanf(date+23, "%2d", &tm->tm_sec);
+          }
      }
 
    return NEWS_PARSE_ERROR_NO;
@@ -436,20 +437,16 @@
    pos = parser->buffer_pos;
 
    p1 = strstr(pos, "<link");
-   p2 = news_parse_meta_block_find(&p1);
-   if (!p2) return NEWS_PARSE_ERROR_BROKEN_FEED;
-
-   if (p2 < art->pos_end)
+   if (p1 && (p1 < art->pos_end))
      {
+        p2 = news_parse_meta_block_find(&p1);
+        if (!p2 || (p2 > art->pos_end))
+          return NEWS_PARSE_ERROR_BROKEN_FEED;
         len = p2 - p1;
         art->url = E_NEW(char, len+1);
         memcpy(art->url, p1, len);
         art->url[len] = '\0';
      }
-   else
-     {
-        art->url = strdup("No link");
-     }
 
    return NEWS_PARSE_ERROR_NO;
 }
@@ -466,19 +463,15 @@
    pos = parser->buffer_pos;
 
    p1 = strstr(pos, "<description");
-   p2 = news_parse_meta_block_find(&p1);
-   if (!p2) return NEWS_PARSE_ERROR_BROKEN_FEED;
-
-   if (p2 < art->pos_end)
+   if (p1 && (p1 < art->pos_end))
      {
+        p2 = news_parse_meta_block_find(&p1);
+        if (!p2 || (p2 > art->pos_end))
+          return NEWS_PARSE_ERROR_BROKEN_FEED;
         len = p2 - p1;
         art->description = E_NEW(char, len+1);
         memcpy(art->description, p1, len);
         art->description[len] = '\0';
-     }
-   else
-     {
-        art->description = strdup("No content");
      }
 
    return NEWS_PARSE_ERROR_NO;
===================================================================
RCS file: /cvs/e/e_modules/news/src/module/news_viewer.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- news_viewer.c       16 May 2007 12:06:03 -0000      1.1
+++ news_viewer.c       17 May 2007 14:21:29 -0000      1.2
@@ -591,15 +591,18 @@
    DD(("TRIGGERED cb article ilist (%s)", art->title));
    nv->varticles.selected = art;
 
-   strftime(buf_date, sizeof(buf_date), "%Y-%m-%d %H:%M:%S", &art->date);
+   if (art->date.tm_year != 0)
+     strftime(buf_date, sizeof(buf_date), "%Y-%m-%d %H:%M:%S", &art->date);
    snprintf(buf, sizeof(buf),
             "<underline=on underline_color=%s>%s</><br>"
             "%s<br><br>"
-            "%s<br><br>",
+            "%s<br><br>"
+            "%s",
             news->config->viewer.vcontent.font_color,
             (art->title && art->title[0]) ? art->title : "No title",
             buf_date,
-            (art->description && art->description[0])? art->description : "No 
description text");
+            (art->description && art->description[0])? art->description : "No 
description text",
+            (art->url) ? "||click here to open article in a browser||" : "");
    _vcontent_text_set(nv, buf);
 
    if (art->unread)
@@ -747,11 +750,12 @@
           {
              News_Feed_Article *art;
              char label[4096];
-             char buf_date[4096] = "-- --:--";
+             char buf_date[4096] = "";
              
              art = l->data;
              /* append the article to the article ilist */
-             strftime(buf_date, sizeof(buf_date), "%d %H:%M", &art->date);
+             if (art->date.tm_year)
+               strftime(buf_date, sizeof(buf_date), "%d %H:%M", &art->date);
              snprintf(label, sizeof(label), "%s %s", buf_date, art->title);
              e_widget_ilist_append(ilist,
                                    _article_icon_get(art, 
evas_object_evas_get(ilist)), label,
@@ -810,6 +814,7 @@
 _vcontent_feed_infos_set(News_Viewer *nv)
 {
    News_Feed *f;
+   char buf_error[1024] = "";
    char buf_infos[1024] = "";
    char buf_conn[200] = "";
    char buf_unread[1024] = "No unread articles";
@@ -821,6 +826,18 @@
 
    if (f->doc)
      {
+        switch(f->doc->parse.error)
+          {
+          case NEWS_PARSE_ERROR_NO:
+          case NEWS_PARSE_ERROR_NOT_IMPLEMENTED:
+             break;
+          case NEWS_PARSE_ERROR_BROKEN_FEED:
+          case NEWS_PARSE_ERROR_TYPE_UNKNOWN:
+             snprintf(buf_error, sizeof(buf_error),
+                      "<br><color=#ff0000>An error happend during the parse of 
this feed !<br>"
+                      "You can report error at [EMAIL PROTECTED] to get it 
fixed</><br><br>");
+             break;
+          }
         if (f->doc->parse.last_time)
           {
              char buf_mtime[200];
@@ -831,7 +848,7 @@
                case NEWS_FEED_TYPE_RSS:
                   type = "RSS"; break;
                case NEWS_FEED_TYPE_ATOM:
-                  type = "ATOM"; break;
+                  type = "ATOM <color=#ff0000>(not supported for now)</>"; 
break;
                default:
                   type = "UNKNOWN";
                }
@@ -865,12 +882,14 @@
      }
    snprintf(buf, sizeof(buf),
             "<underline=on underline_color=%s>%s</> <i>in %s</i><br>"
+            "%s"
             "%s<br><br>"
             "%s%s<br>"
             "%s",
             news->config->viewer.vcontent.font_color,
             f->name,
             f->category->name,
+            buf_error,
             (f->description && f->description[0]) ? f->description : "No 
description for this feed",
             buf_infos, buf_conn,
             buf_unread);
@@ -886,20 +905,16 @@
    nv = data;
    ev = event_info;
 
-   if (ev->flags == EVAS_BUTTON_DOUBLE_CLICK)
+   if (nv->varticles.selected)
      {
-        if (nv->varticles.selected)
-          {
-             if (nv->varticles.selected->url)
-               news_util_browser_open(nv->varticles.selected->url);
-          }
-        else if (nv->vfeeds.selected)
-          {
-             if (nv->vfeeds.selected->url_home)
-               news_util_browser_open(nv->vfeeds.selected->url_home);
-          }
+        if (nv->varticles.selected->url)
+          news_util_browser_open(nv->varticles.selected->url);
+     }
+   else if (nv->vfeeds.selected)
+     {
+        if (nv->vfeeds.selected->url_home)
+          news_util_browser_open(nv->vfeeds.selected->url_home);
      }
-
 }
 
 static Evas_Object *



-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to