2 * Copyright (C) 2008 Thadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License along
15 * with this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 #include <atompub/atom.h>
23 #include <libxml/tree.h>
24 #include <libxml/parser.h>
36 atom_entry_new (char *title, AtomPerson *author)
39 entry = g_slice_new (AtomEntry);
42 entry->title = g_strdup (title);
43 entry->author = author;
44 entry->summary = NULL;
49 atom_entry_new_data_len (char *data, size_t len)
54 entry = g_slice_new0 (AtomEntry);
55 entry->doc = xmlReadMemory (data, len, NULL, NULL, XML_PARSE_RECOVER);
56 if (entry->doc == NULL ||
57 (root = xmlDocGetRootElement (entry->doc)) == NULL)
59 g_slice_free (AtomEntry, entry);
62 if (xmlStrcmp (root->name, "entry"))
64 xmlFreeDoc (entry->doc);
65 g_slice_free (AtomEntry, entry);
68 for (child = root->xmlChildrenNode; child != NULL; child = child->next)
71 content = xmlNodeGetContent (child->xmlChildrenNode);
72 if (!xmlStrcmp (child->name, "id"))
74 else if (!xmlStrcmp (child->name, "title"))
75 entry->title = content;
76 else if (!xmlStrcmp (child->name, "summary"))
77 entry->summary = content;
78 else if (!xmlStrcmp (child->name, "author"))
79 entry->author = atom_person_new_from_xmlnode (child);
87 atom_entry_delete (AtomEntry *entry)
90 xmlFreeDoc (entry->doc);
94 g_free (entry->title);
96 atom_person_delete (entry->author);
98 g_free (entry->summary);
99 g_slice_free (AtomEntry, entry);
103 atom_entry_id (AtomEntry *entry)
109 atom_entry_id_set (AtomEntry *entry, char *id)
113 entry->id = g_strdup (id);
117 atom_entry_title (AtomEntry *entry)
123 atom_entry_title_set (AtomEntry *entry, char *title)
127 entry->title = g_strdup (entry);
131 atom_entry_author (AtomEntry *entry)
133 return entry->author;
137 atom_entry_author_set (AtomEntry *entry, AtomPerson *author)
140 atom_person_delete (entry->author);
141 entry->author = author;
145 atom_entry_summary (AtomEntry *entry)
147 return entry->summary;
151 atom_entry_summary_set (AtomEntry *entry, char *summary)
154 g_free (entry->summary);
155 entry->summary = g_strdup (summary);
159 atom_entry_string (AtomEntry *entry, char **buffer, size_t *len)
161 xmlDocDumpMemory (entry->doc, buffer, len);
165 atom_entry_to_xmlnode (AtomEntry *entry)
168 return xmlDocGetRootElement (entry->doc);