summaryrefslogtreecommitdiff
path: root/extern/rss-glib/rss-item.c
diff options
context:
space:
mode:
Diffstat (limited to 'extern/rss-glib/rss-item.c')
-rw-r--r--extern/rss-glib/rss-item.c738
1 files changed, 738 insertions, 0 deletions
diff --git a/extern/rss-glib/rss-item.c b/extern/rss-glib/rss-item.c
new file mode 100644
index 0000000..0f84661
--- /dev/null
+++ b/extern/rss-glib/rss-item.c
@@ -0,0 +1,738 @@
+/* rss-item.c
+ *
+ * This file is part of RSS-GLib.
+ * Copyright (C) 2008 Christian Hergert <chris@dronelabs.com>
+ *
+ * This library is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Author:
+ * Christian Hergert <chris@dronelabs.com>
+ */
+
+/**
+ * SECTION:rss-item
+ * @short_description: a RSS entry representation
+ *
+ * #RssItem is the representation of an individual item parsed from a
+ * #RssDocument. This would mean an individual article, or note within
+ * the source feed.
+ */
+
+#include "rss-item.h"
+#include "rss-item-private.h"
+
+G_DEFINE_TYPE (RssItem, rss_item, G_TYPE_OBJECT);
+
+enum {
+ PROP_0,
+
+ PROP_TITLE,
+ PROP_LINK,
+ PROP_DESCRIPTION,
+ PROP_COPYRIGHT,
+ PROP_AUTHOR,
+ PROP_AUTHOR_URI,
+ PROP_AUTHOR_EMAIL,
+ PROP_CONTRIBUTOR,
+ PROP_CONTRIBUTOR_URI,
+ PROP_CONTRIBUTOR_EMAIL,
+ PROP_COMMENTS,
+ PROP_PUB_DATE,
+ PROP_GUID,
+ PROP_SOURCE,
+ PROP_SOURCE_URL
+};
+
+static void
+rss_item_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ RssItemPrivate *priv = RSS_ITEM (object)->priv;
+
+ switch (property_id) {
+ case PROP_TITLE:
+ g_value_set_string (value, priv->title);
+ break;
+ case PROP_LINK:
+ g_value_set_string (value, priv->link);
+ break;
+ case PROP_DESCRIPTION:
+ g_value_set_string (value, priv->description);
+ break;
+ case PROP_COPYRIGHT:
+ g_value_set_string (value, priv->copyright);
+ break;
+ case PROP_AUTHOR:
+ g_value_set_string (value, priv->author);
+ break;
+ case PROP_AUTHOR_URI:
+ g_value_set_string (value, priv->author_uri);
+ break;
+ case PROP_AUTHOR_EMAIL:
+ g_value_set_string (value, priv->author_email);
+ break;
+ case PROP_CONTRIBUTOR:
+ g_value_set_string (value, priv->contributor);
+ break;
+ case PROP_CONTRIBUTOR_URI:
+ g_value_set_string (value, priv->contributor_uri);
+ break;
+ case PROP_CONTRIBUTOR_EMAIL:
+ g_value_set_string (value, priv->contributor_email);
+ break;
+ case PROP_COMMENTS:
+ g_value_set_string (value, priv->comments);
+ break;
+ case PROP_PUB_DATE:
+ g_value_set_string (value, priv->pub_date);
+ break;
+ case PROP_GUID:
+ g_value_set_string (value, priv->guid);
+ break;
+ case PROP_SOURCE:
+ g_value_set_string (value, priv->source);
+ break;
+ case PROP_SOURCE_URL:
+ g_value_set_string (value, priv->source_url);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ }
+}
+
+static void
+rss_item_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ RssItemPrivate *priv = RSS_ITEM (object)->priv;
+
+ switch (property_id) {
+ case PROP_TITLE:
+ g_free (priv->title);
+ priv->title = g_value_dup_string (value);
+ break;
+ case PROP_LINK:
+ g_free (priv->link);
+ priv->link = g_value_dup_string (value);
+ break;
+ case PROP_DESCRIPTION:
+ g_free (priv->description);
+ priv->description = g_value_dup_string (value);
+ break;
+ case PROP_COPYRIGHT:
+ g_free (priv->copyright);
+ priv->copyright = g_value_dup_string (value);
+ break;
+ case PROP_AUTHOR:
+ g_free (priv->author);
+ priv->author = g_value_dup_string (value);
+ break;
+ case PROP_AUTHOR_URI:
+ g_free (priv->author_uri);
+ priv->author_uri = g_value_dup_string (value);
+ break;
+ case PROP_AUTHOR_EMAIL:
+ g_free (priv->author_email);
+ priv->author_email = g_value_dup_string (value);
+ break;
+ case PROP_CONTRIBUTOR:
+ g_free (priv->contributor);
+ priv->contributor = g_value_dup_string (value);
+ break;
+ case PROP_CONTRIBUTOR_URI:
+ g_free (priv->contributor_uri);
+ priv->contributor_uri = g_value_dup_string (value);
+ break;
+ case PROP_CONTRIBUTOR_EMAIL:
+ g_free (priv->contributor_email);
+ priv->contributor_email = g_value_dup_string (value);
+ break;
+ case PROP_COMMENTS:
+ g_free (priv->comments);
+ priv->comments = g_value_dup_string (value);
+ break;
+ case PROP_PUB_DATE:
+ g_free (priv->pub_date);
+ priv->pub_date = g_value_dup_string (value);
+ break;
+ case PROP_GUID:
+ g_free (priv->guid);
+ priv->guid = g_value_dup_string (value);
+ break;
+ case PROP_SOURCE:
+ g_free (priv->source);
+ priv->source = g_value_dup_string (value);
+ break;
+ case PROP_SOURCE_URL:
+ g_free (priv->source_url);
+ priv->source_url = g_value_dup_string (value);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ }
+}
+
+static void
+rss_item_finalize (GObject *object)
+{
+ RssItemPrivate *priv = RSS_ITEM (object)->priv;
+
+ g_free (priv->guid);
+ g_free (priv->title);
+ g_free (priv->link);
+ g_free (priv->description);
+ g_free (priv->copyright);
+ g_free (priv->author);
+ g_free (priv->author_uri);
+ g_free (priv->author_email);
+ g_free (priv->contributor);
+ g_free (priv->contributor_uri);
+ g_free (priv->contributor_email);
+ g_free (priv->comments);
+ g_free (priv->pub_date);
+ g_free (priv->source);
+ g_free (priv->source_url);
+
+ g_list_foreach (priv->categories, (GFunc) g_free, NULL);
+ g_list_free (priv->categories);
+
+ G_OBJECT_CLASS (rss_item_parent_class)->finalize (object);
+}
+
+static void
+rss_item_class_init (RssItemClass *klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ GParamSpec *pspec;
+
+ g_type_class_add_private (klass, sizeof (RssItemPrivate));
+
+ gobject_class->get_property = rss_item_get_property;
+ gobject_class->set_property = rss_item_set_property;
+ gobject_class->finalize = rss_item_finalize;
+
+ /**
+ * RssItem:title:
+ *
+ * The title of the item.
+ */
+ pspec = g_param_spec_string ("title",
+ "Title",
+ "Title of the item",
+ NULL,
+ G_PARAM_READWRITE);
+ g_object_class_install_property (gobject_class,
+ PROP_TITLE,
+ pspec);
+
+ /**
+ * RssItem:link:
+ *
+ * The link to the upstream source of the item.
+ */
+ pspec = g_param_spec_string ("link",
+ "Link",
+ "Link to the upstream source",
+ NULL,
+ G_PARAM_READWRITE);
+ g_object_class_install_property (gobject_class,
+ PROP_LINK,
+ pspec);
+
+ /**
+ * RssItem:description:
+ *
+ * The description of the item. This is often where the actual
+ * content for the item is stored.
+ */
+ pspec = g_param_spec_string ("description",
+ "Description",
+ "Description of the item",
+ NULL,
+ G_PARAM_READWRITE);
+ g_object_class_install_property (gobject_class,
+ PROP_DESCRIPTION,
+ pspec);
+
+ /**
+ * RssItem:copyright:
+ *
+ * Any associated copyright that may exist for the content.
+ */
+ pspec = g_param_spec_string ("copyright",
+ "Copyright",
+ "Any associated copyright for "
+ "the content",
+ NULL,
+ G_PARAM_READWRITE);
+ g_object_class_install_property (gobject_class,
+ PROP_COPYRIGHT,
+ pspec);
+
+ /**
+ * RssItem:author:
+ *
+ * The author's name.
+ */
+ pspec = g_param_spec_string ("author",
+ "Author",
+ "The name of the author",
+ NULL,
+ G_PARAM_READWRITE);
+ g_object_class_install_property (gobject_class,
+ PROP_AUTHOR,
+ pspec);
+
+ /**
+ * RssItem:author-uri:
+ *
+ * The authors uri, often a website.
+ */
+ pspec = g_param_spec_string ("author-uri",
+ "Author URI",
+ "The URI of the author",
+ NULL,
+ G_PARAM_READWRITE);
+ g_object_class_install_property (gobject_class,
+ PROP_AUTHOR_URI,
+ pspec);
+
+ /**
+ * RssItem:author-email:
+ *
+ * The authors email.
+ */
+ pspec = g_param_spec_string ("author-email",
+ "Author Email",
+ "The email address of the author",
+ NULL,
+ G_PARAM_READWRITE);
+ g_object_class_install_property (gobject_class,
+ PROP_AUTHOR_EMAIL,
+ pspec);
+
+ /**
+ * RssItem:contributor:
+ *
+ * The contributors name.
+ */
+ pspec = g_param_spec_string ("contributor",
+ "Contributor",
+ "The name of the contributor",
+ NULL,
+ G_PARAM_READWRITE);
+ g_object_class_install_property (gobject_class,
+ PROP_CONTRIBUTOR,
+ pspec);
+
+ /**
+ * RssItem:contributor-uri:
+ *
+ * The contributors uri, often a website.
+ */
+ pspec = g_param_spec_string ("contributor-uri",
+ "Contributor URI",
+ "The URI of the contributor",
+ NULL,
+ G_PARAM_READWRITE);
+ g_object_class_install_property (gobject_class,
+ PROP_CONTRIBUTOR_URI,
+ pspec);
+
+ /**
+ * RssItem:contributor-email:
+ *
+ * The contributors email.
+ */
+ pspec = g_param_spec_string ("contributor-email",
+ "Contributor Email",
+ "The email of the contributor",
+ NULL,
+ G_PARAM_READWRITE);
+ g_object_class_install_property (gobject_class,
+ PROP_CONTRIBUTOR_EMAIL,
+ pspec);
+
+ /**
+ * RssItem:comments:
+ *
+ * Any comments that may have been associated with the item.
+ */
+ pspec = g_param_spec_string ("comments",
+ "Comments",
+ "Any comment associated to the item",
+ NULL,
+ G_PARAM_READWRITE);
+ g_object_class_install_property (gobject_class,
+ PROP_COMMENTS,
+ pspec);
+
+ /**
+ * RssItem:pub-date:
+ *
+ * The string representation of the publish date.
+ */
+ pspec = g_param_spec_string ("pub-date",
+ "Publication Date",
+ "The date of publication",
+ NULL,
+ G_PARAM_READWRITE);
+ g_object_class_install_property (gobject_class,
+ PROP_PUB_DATE,
+ pspec);
+
+ /**
+ * RssItem:guid:
+ *
+ * The guid of the item. Many feed engines will use the url here
+ * plus some tag metadata.
+ */
+ pspec = g_param_spec_string ("guid",
+ "GUID",
+ "The guid of the item",
+ NULL,
+ G_PARAM_READWRITE);
+ g_object_class_install_property (gobject_class,
+ PROP_GUID,
+ pspec);
+
+ /**
+ * RssItem:source:
+ *
+ * The name of the source of the item.
+ */
+ pspec = g_param_spec_string ("source",
+ "Source",
+ "Source of the item",
+ NULL,
+ G_PARAM_READWRITE);
+ g_object_class_install_property (gobject_class,
+ PROP_SOURCE,
+ pspec);
+
+ /**
+ * RssItem:source-url:
+ *
+ * The url of the source of the item.
+ */
+ pspec = g_param_spec_string ("source-url",
+ "Source URL",
+ "URL of the source",
+ NULL,
+ G_PARAM_READWRITE);
+ g_object_class_install_property (gobject_class,
+ PROP_SOURCE_URL,
+ pspec);
+}
+
+static void
+rss_item_init (RssItem *self)
+{
+ self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, RSS_TYPE_ITEM, RssItemPrivate);
+}
+
+/**
+ * rss_item_new:
+ *
+ * Creates a new #RssItem. This isn't incredibly useful yet as we do not
+ * have an RssGenerator written. However, that will come eventuall and
+ * make creating feeds much simpler.
+ *
+ * Returns: a new #RssItem which should be unref'd with g_object_unref().
+ */
+RssItem*
+rss_item_new (void)
+{
+ return g_object_new (RSS_TYPE_ITEM, NULL);
+}
+
+/**
+ * rss_item_get_guid:
+ * @self: a #RssItem
+ *
+ * Retrieves the #RssItem:guid field.
+ *
+ * Return value: the value of the field. The returned string is
+ * owned by the #RssItem and should never be modified or freed.
+ */
+const gchar *
+rss_item_get_guid (RssItem *self)
+{
+ g_return_val_if_fail (RSS_IS_ITEM (self), NULL);
+
+ return self->priv->guid;
+}
+
+/**
+ * rss_item_get_title:
+ * @self: a #RssItem
+ *
+ * Retrieves the #RssItem:title field.
+ *
+ * Return value: the value of the field. The returned string is
+ * owned by the #RssItem and should never be modified or freed.
+ */
+const gchar *
+rss_item_get_title (RssItem *self)
+{
+ g_return_val_if_fail (RSS_IS_ITEM (self), NULL);
+
+ return self->priv->title;
+}
+
+/**
+ * rss_item_get_link:
+ * @self: a #RssItem
+ *
+ * Retrieves the #RssItem:link field.
+ *
+ * Return value: the value of the field. The returned string is
+ * owned by the #RssItem and should never be modified or freed.
+ */
+const gchar *
+rss_item_get_link (RssItem *self)
+{
+ g_return_val_if_fail (RSS_IS_ITEM (self), NULL);
+
+ return self->priv->link;
+}
+
+/**
+ * rss_item_get_description:
+ * @self: a #RssItem
+ *
+ * Retrieves the #RssItem:description field.
+ *
+ * Return value: the value of the field. The returned string is
+ * owned by the #RssItem and should never be modified or freed.
+ */
+const gchar *
+rss_item_get_description (RssItem *self)
+{
+ g_return_val_if_fail (RSS_IS_ITEM (self), NULL);
+
+ return self->priv->description;
+}
+
+/**
+ * rss_item_get_copyright:
+ * @self: a #RssItem
+ *
+ * Retrieves the #RssItem:copyright field.
+ *
+ * Return value: the value of the field. The returned string is
+ * owned by the #RssItem and should never be modified or freed.
+ */
+const gchar *
+rss_item_get_copyright (RssItem *self)
+{
+ g_return_val_if_fail (RSS_IS_ITEM (self), NULL);
+
+ return self->priv->copyright;
+}
+
+/**
+ * rss_item_get_author_name:
+ * @self: a #RssItem
+ *
+ * Retrieves the #RssItem:author field.
+ *
+ * Return value: the value of the field. The returned string is
+ * owned by the #RssItem and should never be modified or freed.
+ */
+const gchar *
+rss_item_get_author_name (RssItem *self)
+{
+ g_return_val_if_fail (RSS_IS_ITEM (self), NULL);
+
+ return self->priv->author;
+}
+
+/**
+ * rss_item_get_author_uri:
+ * @self: a #RssItem
+ *
+ * Retrieves the #RssItem:author-uri field.
+ *
+ * Return value: the value of the field. The returned string is
+ * owned by the #RssItem and should never be modified or freed.
+ */
+const gchar *
+rss_item_get_author_uri (RssItem *self)
+{
+ g_return_val_if_fail (RSS_IS_ITEM (self), NULL);
+
+ return self->priv->author_uri;
+}
+
+/**
+ * rss_item_get_author_email:
+ * @self: a #RssItem
+ *
+ * Retrieves the #RssItem:author-email field.
+ *
+ * Return value: the value of the field. The returned string is
+ * owned by the #RssItem and should never be modified or freed.
+ */
+const gchar *
+rss_item_get_author_email (RssItem *self)
+{
+ g_return_val_if_fail (RSS_IS_ITEM (self), NULL);
+
+ return self->priv->author_email;
+}
+
+/**
+ * rss_item_get_contributor_name:
+ * @self: a #RssItem
+ *
+ * Retrieves the #RssItem:contributor field.
+ *
+ * Return value: the value of the field. The returned string is
+ * owned by the #RssItem and should never be modified or freed.
+ */
+const gchar *
+rss_item_get_contributor_name (RssItem *self)
+{
+ g_return_val_if_fail (RSS_IS_ITEM (self), NULL);
+
+ return self->priv->contributor;
+}
+
+/**
+ * rss_item_get_contributor_uri:
+ * @self: a #RssItem
+ *
+ * Retrieves the #RssItem:contributor-uri field.
+ *
+ * Return value: the value of the field. The returned string is
+ * owned by the #RssItem and should never be modified or freed.
+ */
+const gchar *
+rss_item_get_contributor_uri (RssItem *self)
+{
+ g_return_val_if_fail (RSS_IS_ITEM (self), NULL);
+
+ return self->priv->contributor_uri;
+}
+
+/**
+ * rss_item_get_contributor_email:
+ * @self: a #RssItem
+ *
+ * Retrieves the #RssItem:contributor-email field.
+ *
+ * Return value: the value of the field. The returned string is
+ * owned by the #RssItem and should never be modified or freed.
+ */
+const gchar *
+rss_item_get_contributor_email (RssItem *self)
+{
+ g_return_val_if_fail (RSS_IS_ITEM (self), NULL);
+
+ return self->priv->contributor_email;
+}
+
+/**
+ * rss_item_get_comments:
+ * @self: a #RssItem
+ *
+ * Retrieves the #RssItem:comments field.
+ *
+ * Return value: the value of the field. The returned string is
+ * owned by the #RssItem and should never be modified or freed.
+ */
+const gchar *
+rss_item_get_comments (RssItem *self)
+{
+ g_return_val_if_fail (RSS_IS_ITEM (self), NULL);
+
+ return self->priv->comments;
+}
+
+/**
+ * rss_item_get_pub_date:
+ * @self: a #RssItem
+ *
+ * Retrieves the #RssItem:pub-date field.
+ *
+ * Return value: the value of the field. The returned string is
+ * owned by the #RssItem and should never be modified or freed.
+ */
+const gchar *
+rss_item_get_pub_date (RssItem *self)
+{
+ g_return_val_if_fail (RSS_IS_ITEM (self), NULL);
+
+ return self->priv->pub_date;
+}
+
+/**
+ * rss_item_get_source:
+ * @self: a #RssItem
+ *
+ * Retrieves the #RssItem:source field.
+ *
+ * Return value: the value of the field. The returned string is
+ * owned by the #RssItem and should never be modified or freed.
+ */
+const gchar *
+rss_item_get_source (RssItem *self)
+{
+ g_return_val_if_fail (RSS_IS_ITEM (self), NULL);
+
+ return self->priv->source;
+}
+
+/**
+ * rss_item_get_source_url:
+ * @self: a #RssItem
+ *
+ * Retrieves the #RssItem:source-url field.
+ *
+ * Return value: the value of the field. The returned string is
+ * owned by the #RssItem and should never be modified or freed.
+ */
+const gchar *
+rss_item_get_source_url (RssItem *self)
+{
+ g_return_val_if_fail (RSS_IS_ITEM (self), NULL);
+
+ return self->priv->source_url;
+}
+
+/**
+ * rss_item_get_categories:
+ * @self: a #RssItem
+ *
+ * Returns a copy of the list of categories for the #RssItem. The data
+ * in the linked list are pointers to strings (char*). They are owned
+ * by the #RssItem and should not be modified. Use g_strdup() to copy
+ * the individual strings.
+ *
+ * Returns: a new #GList which should be freed with g_list_free().
+ */
+GList*
+rss_item_get_categories (RssItem *self)
+{
+ g_return_val_if_fail (RSS_IS_ITEM (self), NULL);
+
+ return g_list_copy (self->priv->categories);
+}