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,
56 XML_PARSE_RECOVER | XML_PARSE_NOERROR);
57 if (entry->doc == NULL ||
58 (root = xmlDocGetRootElement (entry->doc)) == NULL)
60 g_slice_free (AtomEntry, entry);
63 if (xmlStrcmp (root->name, "entry"))
65 xmlFreeDoc (entry->doc);
66 g_slice_free (AtomEntry, entry);
69 for (child = root->xmlChildrenNode; child != NULL; child = child->next)
72 content = xmlNodeGetContent (child->xmlChildrenNode);
73 if (!xmlStrcmp (child->name, "id"))
75 else if (!xmlStrcmp (child->name, "title"))
76 entry->title = content;
77 else if (!xmlStrcmp (child->name, "summary"))
78 entry->summary = content;
79 else if (!xmlStrcmp (child->name, "author"))
80 entry->author = atom_person_new_from_xmlnode (child);
88 atom_entry_delete (AtomEntry *entry)
91 xmlFreeDoc (entry->doc);
95 g_free (entry->title);
97 atom_person_delete (entry->author);
99 g_free (entry->summary);
100 g_slice_free (AtomEntry, entry);
104 atom_entry_id (AtomEntry *entry)
110 atom_entry_id_set (AtomEntry *entry, char *id)
114 entry->id = g_strdup (id);
118 atom_entry_title (AtomEntry *entry)
124 atom_entry_title_set (AtomEntry *entry, char *title)
128 entry->title = g_strdup (entry);
132 atom_entry_author (AtomEntry *entry)
134 return entry->author;
138 atom_entry_author_set (AtomEntry *entry, AtomPerson *author)
141 atom_person_delete (entry->author);
142 entry->author = author;
146 atom_entry_summary (AtomEntry *entry)
148 return entry->summary;
152 atom_entry_summary_set (AtomEntry *entry, char *summary)
155 g_free (entry->summary);
156 entry->summary = g_strdup (summary);
160 atom_entry_string (AtomEntry *entry, char **buffer, size_t *len)
162 xmlDocDumpMemory (entry->doc, buffer, len);
166 atom_entry_to_xmlnode (AtomEntry *entry)
169 return xmlCopyNodeList (xmlDocGetRootElement (entry->doc));