RSSyl: Convert relative URLs in Atom entries to absolute URLs, using feed's <link...
[claws.git] / src / plugins / rssyl / libfeed / feed.h
1 /*
2  * Copyright (C) 2006 Andrej Kacian <andrej@kacian.sk>
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License as
6  * published by the Free Software Foundation; either version 2 of the
7  * License, or (at your option) any later version.
8  *
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 GNU
12  * General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public
15  * License along with this program; if not, write to the
16  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17  * Boston, MA 02111-1307, USA.
18  */
19
20 #ifndef __FEED_H
21 #define __FEED_H
22
23 #include <glib.h>
24 #include <expat.h>
25
26 #define FEED_DEFAULT_TIMEOUT    20      /* In seconds */
27
28 /* ---------------- Structures */
29
30 typedef struct _Feed Feed;
31 typedef struct _FeedItem FeedItem;
32 typedef struct _FeedParserCtx FeedParserCtx;
33         
34 struct _Feed {
35         gchar *url;
36         gchar *title;
37         gchar *description;
38         gchar *language;
39         gchar *author;
40         gchar *generator;
41         gchar *link;
42         time_t date;
43
44         guint timeout;
45         gchar *fetcherr;
46         gchar *cookies_path;
47         gboolean ssl_verify_peer;
48
49         GSList *items;
50 };
51
52 struct _FeedParserCtx {
53         XML_Parser parser;
54         guint depth;
55         guint location;
56         GString *str;
57         gchar *name;
58         gchar *mail;
59         gboolean id_is_permalink;
60
61         Feed *feed;
62         FeedItem *curitem;
63 };
64
65 typedef enum {
66         FEED_ERR_NOFEED,
67         FEED_ERR_NOURL,
68         FEED_ERR_INIT,
69         FEED_ERR_FETCH
70 } FeedErrCodes;
71
72 /* ---------------- Prototypes */
73
74 Feed *feed_new(gchar *url);
75 void feed_free(Feed *feed);
76
77 void feed_free_items(Feed *feed);
78
79 void feed_set_timeout(Feed *feed, guint timeout);
80 guint feed_get_timeout(Feed *feed);
81
82 void feed_set_url(Feed *feed, gchar *url);
83 gchar *feed_get_url(Feed *feed);
84
85 gchar *feed_get_title(Feed *feed);
86 void feed_set_title(Feed *feed, gchar *new_title);
87
88 gchar *feed_get_description(Feed *feed);
89 gchar *feed_get_language(Feed *feed);
90 gchar *feed_get_author(Feed *feed);
91 gchar *feed_get_generator(Feed *feed);
92 gchar *feed_get_link(Feed *feed);
93 gchar *feed_get_fetcherror(Feed *feed);
94
95 gchar *feed_get_cookies_path(Feed *feed);
96 void feed_set_cookies_path(Feed *feed, gchar *path);
97
98 gboolean feed_get_ssl_verify_peer(Feed *feed);
99 void feed_set_ssl_verify_peer(Feed *feed, gboolean ssl_verify_peer);
100
101 gint feed_n_items(Feed *feed);
102 FeedItem *feed_nth_item(Feed *feed, guint n);
103
104 void feed_foreach_item(Feed *feed, GFunc func, gpointer data);
105
106 gboolean feed_prepend_item(Feed *feed, FeedItem *item);
107 gboolean feed_append_item(Feed *feed, FeedItem *item);
108 gboolean feed_insert_item(Feed *feed, FeedItem *item, gint pos);
109
110 guint feed_update(Feed *feed, time_t last_update);
111
112 #define FILL(n)         do { g_free(n); n = g_strdup(text); } while(0);
113
114 #include "feeditem.h"
115
116 #endif /* __FEED_H */