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>
26 #define ATOM_NAMESPACE "http://www.w3.org/2005/Atom"
38 atom_entry_new (char *title, AtomPerson *author)
41 entry = g_slice_new (AtomEntry);
44 entry->title = g_strdup (title);
45 entry->author = author;
46 entry->summary = NULL;
51 atom_entry_new_data_len (char *data, size_t len)
56 entry = g_slice_new0 (AtomEntry);
57 entry->doc = xmlReadMemory (data, len, NULL, NULL, XML_PARSE_RECOVER);
58 root = xmlDocGetRootElement (entry->doc);
59 if (xmlStrcmp (root->name, "entry"))
61 xmlFreeDoc (entry->doc);
62 g_slice_free (AtomEntry, entry);
65 for (child = root->xmlChildrenNode; child != NULL; child = child->next)
68 content = xmlNodeGetContent (child->xmlChildrenNode);
69 if (!xmlStrcmp (child->name, "id"))
71 else if (!xmlStrcmp (child->name, "title"))
72 entry->title = content;
73 else if (!xmlStrcmp (child->name, "summary"))
74 entry->summary = content;
75 else if (!xmlStrcmp (child->name, "author"))
76 entry->author = atom_person_new_from_xmlnode (child);
84 atom_entry_delete (AtomEntry *entry)
87 xmlFreeDoc (entry->doc);
91 g_free (entry->title);
93 atom_person_delete (entry->author);
95 g_free (entry->summary);
96 g_slice_free (AtomEntry, entry);
100 atom_entry_id (AtomEntry *entry)
106 atom_entry_id_set (AtomEntry *entry, char *id)
110 entry->id = g_strdup (id);
114 atom_entry_title (AtomEntry *entry)
120 atom_entry_title_set (AtomEntry *entry, char *title)
124 entry->title = g_strdup (entry);
128 atom_entry_author (AtomEntry *entry)
130 return entry->author;
134 atom_entry_author_set (AtomEntry *entry, AtomPerson *author)
137 atom_person_delete (entry->author);
138 entry->author = author;
142 atom_entry_summary (AtomEntry *entry)
144 return entry->summary;
148 atom_entry_summary_set (AtomEntry *entry, char *summary)
151 g_free (entry->summary);
152 entry->summary = g_strdup (summary);
156 atom_entry_string (AtomEntry *entry)
160 xmlDocDumpMemory (entry->doc, &buffer, &size);
165 atom_entry_len (AtomEntry *entry)
169 xmlDocDumpMemory (entry->doc, &buffer, &size);