The Atom RFC allows more than one author, which we didn't. Now, an entry
have an array of authors, which can be added to or retrieved. The header
also had the wrong function names.
xmlDocPtr doc;
char *id;
char *title;
xmlDocPtr doc;
char *id;
char *title;
+void atom_entry_author_add (AtomEntry *, AtomPerson *);
+static void atom_entry_authors_delete (AtomEntry *);
+
AtomEntry *
atom_entry_new (char *title, AtomPerson *author)
{
AtomEntry *
atom_entry_new (char *title, AtomPerson *author)
{
entry->doc = NULL;
entry->id = NULL;
entry->title = g_strdup (title);
entry->doc = NULL;
entry->id = NULL;
entry->title = g_strdup (title);
- entry->author = author;
+ entry->authors = NULL;
+ atom_entry_author_add (entry, author);
entry->summary = NULL;
return entry;
}
entry->summary = NULL;
return entry;
}
else if (!xmlStrcmp (child->name, "summary"))
entry->summary = content;
else if (!xmlStrcmp (child->name, "author"))
else if (!xmlStrcmp (child->name, "summary"))
entry->summary = content;
else if (!xmlStrcmp (child->name, "author"))
- entry->author = atom_person_new_from_xmlnode (child);
+ atom_entry_author_add (entry, atom_person_new_from_xmlnode (child));
else
xmlFree (content);
}
else
xmlFree (content);
}
g_free (entry->id);
if (entry->title)
g_free (entry->title);
g_free (entry->id);
if (entry->title)
g_free (entry->title);
- if (entry->author)
- atom_person_delete (entry->author);
+ if (entry->authors)
+ atom_entry_authors_delete (entry);
if (entry->summary)
g_free (entry->summary);
g_slice_free (AtomEntry, entry);
if (entry->summary)
g_free (entry->summary);
g_slice_free (AtomEntry, entry);
entry->title = g_strdup (entry);
}
entry->title = g_strdup (entry);
}
-AtomPerson *
-atom_entry_author (AtomEntry *entry)
+void
+atom_entry_authors (AtomEntry *entry, AtomPerson *** authors, size_t *len)
+ if (len)
+ *len = entry->authors->len;
+ if (authors)
+ *authors = entry->authors->pdata;
-atom_entry_author_set (AtomEntry *entry, AtomPerson *author)
+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)
- if (entry->author)
- atom_person_delete (entry->author);
- entry->author = author;
+ 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_id_set (AtomEntry *, char *);
char * atom_entry_title (AtomEntry *);
void atom_entry_title_set (AtomEntry *, char *);
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 *);
+void atom_entry_authors (AtomEntry *, AtomPerson ***, size_t *);
+void atom_entry_author_add (AtomEntry *, AtomPerson *);
char * atom_entry_summary (AtomEntry *);
void atom_entry_summary_set (AtomEntry *, char *);
void atom_entry_string (AtomEntry *, char **, size_t *);
char * atom_entry_summary (AtomEntry *);
void atom_entry_summary_set (AtomEntry *, char *);
void atom_entry_string (AtomEntry *, char **, size_t *);