AtomEntry has some of the interesting nodes as properties
authorThadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
Sat, 9 Aug 2008 20:15:19 +0000 (17:15 -0300)
committerThadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
Sat, 9 Aug 2008 20:15:19 +0000 (17:15 -0300)
atom/entry.c
include/atompub/entry.h

index cd90460..d9d1f2a 100644 (file)
 struct _atom_entry
 {
   xmlDocPtr doc;
+  char *id;
+  char *title;
+  AtomPerson *author;
+  char *summary;
 };
 
 AtomEntry *
-atom_entry_new_with_prefix (char *prefix)
+atom_entry_new (char *title, AtomPerson *author)
 {
   AtomEntry *entry;
-  xmlDocPtr doc;
-  xmlNsPtr ns;
-  xmlNodePtr node;
-  doc = xmlNewDoc ("1.0");
-  node = xmlNewNode (ns, "entry");
-  xmlNewNs (node, ATOM_NAMESPACE, prefix);
-  xmlDocSetRootElement (doc, node);
   entry = g_slice_new (AtomEntry);
-  entry->doc = doc;
+  entry->doc = NULL;
+  entry->id = NULL;
+  entry->title = g_strdup (title);
+  entry->author = author;
+  entry->summary = NULL;
   return entry;
 }
 
-AtomEntry *
-atom_entry_new (void)
-{
-  return atom_entry_new_with_prefix (NULL);
-}
-
 AtomEntry *
 atom_entry_new_data_len (char *data, size_t len)
 {
   AtomEntry *entry;
-  entry = g_slice_new (AtomEntry);
+  xmlNodePtr root;
+  xmlNodePtr child;
+  entry = g_slice_new0 (AtomEntry);
   entry->doc = xmlReadMemory (data, len, NULL, NULL, XML_PARSE_RECOVER);
+  root = xmlDocGetRootElement (entry->doc);
+  if (xmlStrcmp (root->name, "entry"))
+    {
+      xmlFreeDoc (entry->doc);
+      g_slice_free (AtomEntry, entry);
+      return NULL;
+    }
+  for (child = root->xmlChildrenNode; child != NULL; child = child->next)
+    {
+      char * content;
+      content = xmlNodeGetContent (child->xmlChildrenNode);
+      if (!xmlStrcmp (child->name, "id"))
+       entry->id = content;
+      else if (!xmlStrcmp (child->name, "title"))
+       entry->title = content;
+      else if (!xmlStrcmp (child->name, "summary"))
+       entry->summary = content;
+      else if (!xmlStrcmp (child->name, "author"))
+       entry->author = atom_person_new_from_xmlnode (child);
+      else
+       xmlFree (content);
+    }
   return entry;
 }
 
@@ -66,9 +85,73 @@ atom_entry_delete (AtomEntry *entry)
 {
   if (entry->doc)
     xmlFreeDoc (entry->doc);
+  if (entry->id)
+    g_free (entry->id);
+  if (entry->title)
+    g_free (entry->title);
+  if (entry->author)
+    atom_person_delete (entry->author);
+  if (entry->summary)
+    g_free (entry->summary);
   g_slice_free (AtomEntry, entry);
 }
 
+char *
+atom_entry_id (AtomEntry *entry)
+{
+  return entry->id;
+}
+
+void
+atom_entry_id_set (AtomEntry *entry, char *id)
+{
+  if (entry->id)
+    g_free (entry->id);
+  entry->id = g_strdup (id);
+}
+
+char *
+atom_entry_title (AtomEntry *entry)
+{
+  return entry->title;
+}
+
+void
+atom_entry_title_set (AtomEntry *entry, char *title)
+{
+  if (entry->title)
+    g_free (title);
+  entry->title = g_strdup (entry);
+}
+
+AtomPerson *
+atom_entry_author (AtomEntry *entry)
+{
+  return entry->author;
+}
+
+void
+atom_entry_author_set (AtomEntry *entry, AtomPerson *author)
+{
+  if (entry->author)
+    atom_person_delete (entry->author);
+  entry->author = author;
+}
+
+char *
+atom_entry_summary (AtomEntry *entry)
+{
+  return entry->summary;
+}
+
+void
+atom_entry_summary_set (AtomEntry *entry, char *summary)
+{
+  if (entry->summary)
+    g_free (entry->summary);
+  entry->summary = g_strdup (summary);
+}
+
 char *
 atom_entry_string (AtomEntry *entry)
 {
index a8eadb2..c455c65 100644 (file)
 
 typedef struct _atom_entry AtomEntry;
 
-AtomEntry * atom_entry_new_with_prefix (char *);
-AtomEntry * atom_entry_new (void);
+AtomEntry * atom_entry_new (char *, AtomPerson *);
 AtomEntry * atom_entry_new_data_len (char *, size_t);
 void atom_entry_delete (AtomEntry *);
+char * atom_entry_id (AtomEntry *);
+void atom_entry_id_set (AtomEntry *, char *);
+char * atom_entry_title (AtomEntry *);
+void atom_entry_title_set (AtomEntry *, char *);
+AtomPerson * atom_entry_person (AtomEntry *);
+void atom_entry_person_set (AtomEntry *, AtomPerson *);
+char * atom_entry_summary (AtomEntry *);
+void atom_entry_summary_set (AtomEntry *, char *);
 char * atom_entry_string (AtomEntry *);
 size_t atom_entry_len (AtomEntry *);