Enlightenment CVS committal

Author  : dj2
Project : misc
Module  : eke

Dir     : misc/eke/src


Modified Files:
        eke_parse.c 


Log Message:
- start the handling of rdf feeds too

===================================================================
RCS file: /cvsroot/enlightenment/misc/eke/src/eke_parse.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- eke_parse.c 28 Dec 2004 03:39:36 -0000      1.2
+++ eke_parse.c 30 Dec 2004 03:47:41 -0000      1.3
@@ -13,15 +13,21 @@
 
 static void eke_parse_handler(Eke_Feed *feed, Eke_Parse_Type type);
 static void eke_parse_xml(xmlDoc *doc, Eke_Feed *feed);
+static void eke_parse_item_free(void *val);
+
 static void eke_parse_rss_feed(xmlDoc *doc, Eke_Feed *feed, xmlNode *node);
-static void eke_parse_rss_item_parse(Eke_Feed *feed, xmlDoc *doc, xmlNode 
*node);
 static void eke_parse_rss_xml_node(xmlDoc *doc, Eke_Feed *feed, xmlNode *node);
-static void eke_parse_item_free(void *val);
+static void eke_parse_rss_item_parse(Eke_Feed *feed, xmlDoc *doc, xmlNode 
*node);
 
 static void eke_parse_atom_feed(xmlDoc *doc, Eke_Feed *feed, xmlNode *node);
 static void eke_parse_atom_xml_node(xmlDoc *doc, Eke_Feed *feed, xmlNode 
*node);
 static void eke_parse_atom_item_parse(Eke_Feed *feed, xmlDoc *doc, xmlNode 
*node);
 
+static void eke_parse_rdf_feed(xmlDoc *doc, Eke_Feed *feed, xmlNode *node);
+static void eke_parse_rdf_xml_node(xmlDoc *doc, Eke_Feed *feed, xmlNode *node);
+static void eke_parse_rdf_channel_parse(Eke_Feed *feed, xmlDoc *doc, xmlNode 
*node);
+static void eke_parse_rdf_item_parse(Eke_Feed *feed, xmlDoc *doc, xmlNode 
*node);
+
 static void strtrim(char *str);
 
 void
@@ -86,6 +92,9 @@
     else if (!strcasecmp(node->name, "feed"))
         eke_parse_atom_feed(doc, feed, node);
 
+    else if (!strcasecmp(node->name, "rdf"))
+        eke_parse_rdf_feed(doc, feed, node);
+
     else
         printf("Got a feed of type %s\n", node->name);
 }
@@ -289,6 +298,96 @@
     ecore_list_append(feed->items, item);
 }
 
+static void
+eke_parse_rdf_feed(xmlDoc *doc, Eke_Feed *feed, xmlNode *node)
+{
+    feed->rss_version = 0.0;
+    eke_parse_rdf_xml_node(doc, feed, node->xmlChildrenNode);
+}
+
+static void
+eke_parse_rdf_xml_node(xmlDoc *doc, Eke_Feed *feed, xmlNode *node)
+{
+    while (node) {
+        if (!strcasecmp(node->name, "channel")) {
+            eke_parse_rdf_channel_parse(feed, doc, node->xmlChildrenNode);
+
+        } else if (!strcasecmp(node->name, "item")) {
+            eke_parse_rdf_item_parse(feed, doc, node->xmlChildrenNode);
+        }
+
+        node = node->next;
+    }
+    feed->data.type = EKE_FEED_DATA_RESPONSE_CHANGED;
+}
+
+static void
+eke_parse_rdf_channel_parse(Eke_Feed *feed, xmlDoc *doc, xmlNode *node)
+{
+    xmlNode *tmp;
+    char *ptr;
+
+    while (node) {
+        if (!strcasecmp(node->name, "title")) {
+            tmp = node->xmlChildrenNode;
+            ptr = xmlNodeListGetString(doc, tmp, 1);
+            strtrim(ptr);
+            feed->title = ptr;
+
+        } else if (!strcasecmp(node->name, "link")) {
+            ptr = xmlGetProp(node, "href");
+            strtrim(ptr);
+            feed->link = ptr;
+
+        }
+        node = node->next;
+    }
+}
+
+static void
+eke_parse_rdf_item_parse(Eke_Feed *feed, xmlDoc *doc, xmlNode *node)
+{
+    Eke_Feed_Item *item;
+    xmlNode *tmp;
+    char *ptr;
+
+    item = eke_feed_item_new();
+    while (node) {
+        if (!strcasecmp(node->name, "title")) {
+            tmp = node->xmlChildrenNode;
+            ptr = xmlNodeListGetString(doc, tmp, 1);
+            strtrim(ptr);
+
+            eke_feed_item_title_set(item, ptr);
+            IF_FREE(ptr);
+
+        } else if (!strcasecmp(node->name, "link")) {
+            ptr = xmlGetProp(node, "href");
+            strtrim(ptr);
+
+            eke_feed_item_link_set(item, ptr);
+            IF_FREE(ptr);
+
+        } else if (!strcasecmp(node->name, "description")) {
+            ptr = xmlNodeGetContent(node);
+            strtrim(ptr);
+
+            eke_feed_item_description_set(item, ptr);
+            IF_FREE(ptr);
+
+        } else if (!strcasecmp(node->name, "dc:date")) {
+            tmp = node->xmlChildrenNode;
+            ptr = xmlNodeListGetString(doc, tmp, 1);
+            strtrim(ptr);
+
+            eke_feed_item_date_set(item, ptr);
+            IF_FREE(ptr);
+        }
+        node = node->next;
+    }
+    ecore_list_append(feed->items, item);
+}
+
 
 
 




-------------------------------------------------------
The SF.Net email is sponsored by: Beat the post-holiday blues
Get a FREE limited edition SourceForge.net t-shirt from ThinkGeek.
It's fun and FREE -- well, almost....http://www.thinkgeek.com/sfshirt
_______________________________________________
enlightenment-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to