+atom_entry_title (AtomEntry *entry)
+{
+ return entry->title;
+}
+
+void
+atom_entry_title_set (AtomEntry *entry, char *title)
+{
+ if (title == NULL)
+ return;
+ if (entry->title)
+ g_free (title);
+ entry->title = g_strdup (title);
+}
+
+time_t
+atom_entry_updated (AtomEntry *entry)
+{
+ return entry->updated;
+}
+
+void
+atom_entry_updated_set (AtomEntry *entry, time_t updated)
+{
+ entry->updated = updated;
+}
+
+static void
+atom_entry_updated_set_from_iso8601 (AtomEntry *entry, char *updated)
+{
+ GTimeVal gtv;
+ g_time_val_from_iso8601 (updated, >v);
+ entry->updated = gtv.tv_sec;
+}
+
+static char *
+atom_entry_updated_to_iso8601 (AtomEntry *entry)
+{
+ GTimeVal gtv;
+ gtv.tv_sec = entry->updated;
+ gtv.tv_usec = 0;
+ return g_time_val_to_iso8601 (>v);
+}
+
+void
+atom_entry_authors (AtomEntry *entry, AtomPerson *** authors, size_t *len)
+{
+ if (len)
+ *len = entry->authors->len;
+ if (authors)
+ *authors = entry->authors->pdata;
+}
+
+void
+atom_entry_author_add (AtomEntry *entry, AtomPerson *author)
+{
+ if (entry->authors == NULL)
+ {
+ entry->authors = g_ptr_array_new ();
+ }
+ g_ptr_array_add (entry->authors, author);
+}
+
+static void
+atom_entry_authors_delete (AtomEntry *entry)
+{
+ size_t len = entry->authors->len;
+ int i;
+ for (i = 0; i < len; i++)
+ atom_person_delete (g_ptr_array_index (entry->authors, i));
+ g_ptr_array_free (entry->authors, TRUE);
+}
+
+void
+atom_entry_categories (AtomEntry *entry, AtomCategory *** categories,
+ size_t *len)
+{
+ if (len)
+ *len = entry->categories->len;
+ if (categories)
+ *categories = entry->categories->pdata;
+}
+
+void
+atom_entry_category_add (AtomEntry *entry, AtomCategory *category)
+{
+ g_ptr_array_add (entry->categories, category);
+ if (entry->categories == NULL)
+ {
+ entry->categories = g_ptr_array_new ();
+ }
+ g_ptr_array_add (entry->categories, category);
+}
+
+static void
+atom_entry_categories_delete (AtomEntry *entry)
+{
+ size_t len = entry->categories->len;
+ int i;
+ for (i = 0; i < len; i++)
+ atom_category_delete (g_ptr_array_index (entry->categories, i));
+ g_ptr_array_free (entry->categories, TRUE);
+}
+
+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);
+}
+
+static void
+atom_entry_update_xmlnode (AtomEntry *entry)
+{
+ xmlNodePtr root;
+ xmlNodePtr id;
+ xmlNodePtr title;
+ xmlNodePtr updated;
+ xmlNodePtr summary;
+ xmlNodePtr author;
+ xmlNodePtr cat;
+ char *updatedstr;
+ int i;
+ if (entry->doc == NULL)
+ {
+ entry->doc = xmlNewDoc ("1.0");
+ root = xmlNewNode (NULL, "entry");
+ xmlNewNs (root, ATOM_NAMESPACE, NULL);
+ xmlDocSetRootElement (entry->doc, root);
+ }
+ else
+ {
+ xmlNodePtr child;
+ xmlNodePtr next;
+ root = xmlDocGetRootElement (entry->doc);
+ child = root->xmlChildrenNode;
+ while (child != NULL)
+ {
+ next = child->next;
+ if (!xmlStrcmp (child->name, "id") ||
+ !xmlStrcmp (child->name, "title") ||
+ !xmlStrcmp (child->name, "updated") ||
+ !xmlStrcmp (child->name, "summary") ||
+ !xmlStrcmp (child->name, "author") ||
+ !xmlStrcmp (child->name, "category"))
+ {
+ xmlUnlinkNode (child);
+ xmlFreeNode (child);
+ }
+ child = next;
+ }
+ }
+ id = xmlNewTextChild (root, NULL, "id", atom_id_string (entry->id));
+ title = xmlNewTextChild (root, NULL, "title", entry->title);
+ updatedstr = atom_entry_updated_to_iso8601 (entry);
+ updated = xmlNewTextChild (root, NULL, "updated", updatedstr);
+ g_free (updatedstr);
+ if (entry->summary)
+ summary = xmlNewTextChild (root, NULL, "summary", entry->summary);
+ for (i = 0; i < entry->authors->len; i++)
+ {
+ AtomPerson *person;
+ person = g_ptr_array_index (entry->authors, i);
+ author = atom_person_to_xmlnode (person, "author");
+ xmlAddChild (root, author);
+ }
+ for (i = 0; entry->categories && i < entry->categories->len; i++)
+ {
+ AtomCategory *category;
+ category = g_ptr_array_index (entry->categories, i);
+ cat = atom_category_to_xmlnode (category, "category");
+ xmlAddChild (root, cat);
+ }
+}
+
+void
+atom_entry_string (AtomEntry *entry, char **buffer, size_t *len)