2 * Claws Mail -- a GTK based, lightweight, and fast e-mail client
3 * Copyright (C) 2006-2023 the Claws Mail Team and Andrej Kacian <andrej@kacian.sk>
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 3 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
23 #include <curl/curl.h>
28 #include "feeditemenclosure.h"
32 * Initializes a new empty FeedItem struct, setting its parent feed,
34 FeedItem *feed_item_new(Feed *feed)
36 FeedItem *item = NULL;
38 item = g_malloc( sizeof(FeedItem) );
41 item->title_format = 0;
46 item->comments_url = NULL;
47 item->parent_id = NULL;
48 item->enclosure = NULL;
50 item->sourcetitle = NULL;
51 item->sourceid = NULL;
52 item->sourcedate = -1;
54 item->id_is_permalink = FALSE;
55 item->xhtml_content = FALSE;
57 item->date_published = -1;
58 item->date_modified = -1;
68 void feed_item_free(FeedItem *item)
75 g_free(item->summary);
80 g_free(item->comments_url);
81 g_free(item->parent_id);
82 feed_item_enclosure_free(item->enclosure);
84 g_free(item->sourcetitle);
85 g_free(item->sourceid);
91 Feed *feed_item_get_feed(FeedItem *item)
93 g_return_val_if_fail(item != NULL, NULL);
98 gchar *feed_item_get_url(FeedItem *item)
100 g_return_val_if_fail(item != NULL, NULL);
104 void feed_item_set_url(FeedItem *item, const gchar *url)
106 g_return_if_fail(item != NULL);
107 g_return_if_fail(url != NULL);
110 item->url = g_strdup(url);
114 gchar *feed_item_get_title(FeedItem *item)
116 g_return_val_if_fail(item != NULL, NULL);
120 void feed_item_set_title(FeedItem *item, const gchar *title)
122 g_return_if_fail(item != NULL);
123 g_return_if_fail(title != NULL);
126 item->title = g_strdup(title);
130 gint feed_item_get_title_format(FeedItem *item)
132 g_return_val_if_fail(item != NULL, -1);
133 return item->title_format;
136 void feed_item_set_title_format(FeedItem *item, gint format)
138 g_return_if_fail(item != NULL);
139 g_return_if_fail(format >= 0 && format <= FEED_ITEM_TITLE_UNKNOWN);
141 item->title_format = format;
145 gchar *feed_item_get_summary(FeedItem *item)
147 g_return_val_if_fail(item != NULL, NULL);
148 return item->summary;
151 void feed_item_set_summary(FeedItem *item, const gchar *summary)
153 g_return_if_fail(item != NULL);
154 g_return_if_fail(summary != NULL);
156 g_free(item->summary);
157 item->summary = g_strdup(summary);
161 gchar *feed_item_get_text(FeedItem *item)
163 g_return_val_if_fail(item != NULL, NULL);
167 void feed_item_set_text(FeedItem *item, const gchar *text)
169 g_return_if_fail(item != NULL);
170 g_return_if_fail(text != NULL);
173 item->text = g_strdup(text);
177 gchar *feed_item_get_author(FeedItem *item)
179 g_return_val_if_fail(item != NULL, NULL);
183 void feed_item_set_author(FeedItem *item, const gchar *author)
185 g_return_if_fail(item != NULL);
186 g_return_if_fail(author != NULL);
188 g_free(item->author);
189 item->author = g_strdup(author);
193 gchar *feed_item_get_id(FeedItem *item)
195 g_return_val_if_fail(item != NULL, NULL);
199 void feed_item_set_id(FeedItem *item, const gchar *id)
201 g_return_if_fail(item != NULL);
202 g_return_if_fail(id != NULL);
205 item->id = g_strdup(id);
209 gchar *feed_item_get_comments_url(FeedItem *item)
211 g_return_val_if_fail(item != NULL, NULL);
212 return item->comments_url;
215 void feed_item_set_comments_url(FeedItem *item, const gchar *url)
217 g_return_if_fail(item != NULL);
218 g_return_if_fail(url != NULL);
220 g_free(item->comments_url);
221 item->comments_url = g_strdup(url);
225 gchar *feed_item_get_parent_id(FeedItem *item)
227 g_return_val_if_fail(item != NULL, NULL);
228 return item->parent_id;
231 void feed_item_set_parent_id(FeedItem *item, const gchar *id)
233 g_return_if_fail(item != NULL);
234 g_return_if_fail(id != NULL);
236 g_free(item->parent_id);
237 item->parent_id = g_strdup(id);
240 /* Media enclosure */
241 FeedItemEnclosure *feed_item_get_enclosure(FeedItem *item)
243 g_return_val_if_fail(item != NULL, NULL);
244 return item->enclosure;
247 void feed_item_set_enclosure(FeedItem *item, FeedItemEnclosure *enclosure)
249 g_return_if_fail(item != NULL);
250 g_return_if_fail(enclosure != NULL);
251 g_return_if_fail(enclosure->url != NULL);
252 g_return_if_fail(enclosure->type != NULL);
254 feed_item_enclosure_free(item->enclosure);
255 item->enclosure = enclosure;
258 /* Source title (Atom only) */
259 gchar *feed_item_get_sourcetitle(FeedItem *item)
261 g_return_val_if_fail(item != NULL, NULL);
262 return item->sourcetitle;
265 void feed_item_set_sourcetitle(FeedItem *item, const gchar *sourcetitle)
267 g_return_if_fail(item != NULL);
268 g_return_if_fail(sourcetitle != NULL);
270 g_free(item->sourcetitle);
271 item->sourcetitle = g_strdup(sourcetitle);
274 /* Source ID (Atom only) */
275 gchar *feed_item_get_sourceid(FeedItem *item)
277 g_return_val_if_fail(item != NULL, NULL);
278 return item->sourceid;
281 void feed_item_set_sourceid(FeedItem *item, const gchar *sourceid)
283 g_return_if_fail(item != NULL);
284 g_return_if_fail(sourceid != NULL);
286 g_free(item->sourceid);
287 item->sourceid = g_strdup(sourceid);
290 /* Source date (Atom only) */
291 time_t feed_item_get_sourcedate(FeedItem *item)
293 g_return_val_if_fail(item != NULL, -1);
294 return item->sourcedate;
297 void feed_item_set_sourcedate(FeedItem *item, time_t date)
299 g_return_if_fail(item != NULL);
300 item->sourcedate = date;
304 time_t feed_item_get_date_published(FeedItem *item)
306 g_return_val_if_fail(item != NULL, -1);
307 return item->date_published;
310 void feed_item_set_date_published(FeedItem *item, time_t date)
312 g_return_if_fail(item != NULL);
313 item->date_published = date;
317 time_t feed_item_get_date_modified(FeedItem *item)
319 g_return_val_if_fail(item != NULL, -1);
320 return item->date_modified;
323 void feed_item_set_date_modified(FeedItem *item, time_t date)
325 g_return_if_fail(item != NULL);
326 item->date_modified = date;
329 FeedItem *feed_item_copy(FeedItem *item)
333 g_return_val_if_fail(item != NULL, NULL);
335 nitem = feed_item_new(NULL);
337 nitem->url = g_strdup(item->url);
338 nitem->title = g_strdup(item->title);
339 nitem->summary = g_strdup(item->summary);
340 nitem->text = g_strdup(item->text);
341 nitem->author = g_strdup(item->author);
342 nitem->id = g_strdup(item->id);
343 nitem->comments_url = g_strdup(item->comments_url);
344 nitem->parent_id = g_strdup(item->parent_id);
346 nitem->enclosure = feed_item_enclosure_copy(item->enclosure);
348 nitem->date_published = item->date_published;
349 nitem->date_modified = item->date_modified;
351 nitem->id_is_permalink = item->id_is_permalink;
352 nitem->xhtml_content = item->xhtml_content;
354 /* We have no way of knowing the size of object item->data is pointing
355 * to, so we can not reliably copy it to the new item. Caller will have
356 * to take care of that itself. */
362 gboolean feed_item_id_is_permalink(FeedItem *item)
364 g_return_val_if_fail(item != NULL, FALSE);
366 return item->id_is_permalink;
369 void feed_item_set_id_permalink(FeedItem *item, gboolean permalink)
371 g_return_if_fail(item != NULL);
373 item->id_is_permalink = permalink;