[tracker/miner-rss: 3/3] tracker-miner-rss: Resyling, added logging capability, and relative -v (verbosity), added check call



commit 320d09fb75df079d1e13643c215ed60de9f19ab1
Author: Michele Tameni <michele tameni it>
Date:   Wed Mar 10 10:11:45 2010 +0100

    tracker-miner-rss: Resyling, added logging capability, and relative -v (verbosity),
    added check callbacks when saving contents

 configure.ac                                       |   10 +-
 data/Makefile.am                                   |    2 +-
 data/miners/Makefile.am                            |    4 +-
 ...eds.desktop.in => tracker-miner-rss.desktop.in} |    2 +-
 data/tracker-miner-rss.desktop.in.in               |    4 +-
 src/tracker-miner-rss/Makefile.am                  |    2 +-
 src/tracker-miner-rss/tracker-main.c               |   64 +++-
 src/tracker-miner-rss/tracker-miner-rss.c          |  363 ++++++++++++--------
 src/tracker-miner-rss/tracker-miner-rss.h          |   19 +-
 9 files changed, 298 insertions(+), 172 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index f0b264a..1dc3485 100644
--- a/configure.ac
+++ b/configure.ac
@@ -786,14 +786,14 @@ AM_CONDITIONAL(USING_KMAIL_MINER, test "x$enable_kmail_miner" = "xyes")
 
 AC_ARG_ENABLE([miner_rss],
               AS_HELP_STRING([--enable-miner-rss],
-		             [enable miner rss [[default=auto]]]),,
-	      [enable_miner_rss=auto])
+                             [enable miner rss [[default=auto]]]),,
+              [enable_miner_rss=auto])
 
 if test "x$enable_miner_rss" != "xno" ; then
    PKG_CHECK_MODULES(LIBGRSS,
-	             [libgrss-0 >= $LIBGRSS_REQUIRED],
-		     [have_libgrss=yes],
-		     [have_libgrss=no])
+                     [libgrss-0 >= $LIBGRSS_REQUIRED],
+                     [have_libgrss=yes],
+                     [have_libgrss=no])
 
    AC_SUBST(LIBGRSS_CFLAGS)
    AC_SUBST(LIBGRSS_LIBS)
diff --git a/data/Makefile.am b/data/Makefile.am
index c3e682d..e1a45ee 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -17,7 +17,7 @@ tracker-miner-fs.desktop.in: tracker-miner-fs.desktop.in.in
 
 if USING_MINER_RSS
 tracker-miner-rss.desktop.in: tracker-miner-rss.desktop.in.in
-	@sed -e "s|@libexecdir[ ]|${libexecdir}|" 	\
+	@$(SED) -e "s|@libexecdir[ ]|${libexecdir}|" 	\
 	     -e "s|@VERSION[ ]|${VERSION}|" $< > $@
 endif
 
diff --git a/data/miners/Makefile.am b/data/miners/Makefile.am
index efc8cb7..b435f45 100644
--- a/data/miners/Makefile.am
+++ b/data/miners/Makefile.am
@@ -5,7 +5,7 @@ desktop_in_files = \
 	tracker-miner-files.desktop.in
 
 if USING_MINER_RSS
-desktop_in_files +=	tracker-miner-feeds.desktop.in
+desktop_in_files +=	tracker-miner-rss.desktop.in
 endif
 
 tracker_minersdir = $(datadir)/tracker/miners
@@ -15,7 +15,7 @@ tracker_miners_DATA = \
 	tracker-miner-files.desktop
 
 if USING_MINER_RSS
-tracker_miners_DATA += 	tracker-miner-feeds.desktop
+tracker_miners_DATA += 	tracker-miner-rss.desktop
 endif
 
 @INTLTOOL_DESKTOP_RULE@
diff --git a/data/miners/tracker-miner-feeds.desktop.in b/data/miners/tracker-miner-rss.desktop.in
similarity index 56%
rename from data/miners/tracker-miner-feeds.desktop.in
rename to data/miners/tracker-miner-rss.desktop.in
index 77f00df..0c5007b 100644
--- a/data/miners/tracker-miner-feeds.desktop.in
+++ b/data/miners/tracker-miner-rss.desktop.in
@@ -1,6 +1,6 @@
 [Desktop Entry]
 Encoding=UTF-8
 _Name=RSS/ATOM Feeds
-_Comment=RSS/ATOM feed miner
+_Comment=Fetch RSS/ATOM Feeds
 DBusName=org.freedesktop.Tracker1.Miner.RSS
 DBusPath=/org/freedesktop/Tracker1/Miner/RSS
\ No newline at end of file
diff --git a/data/tracker-miner-rss.desktop.in.in b/data/tracker-miner-rss.desktop.in.in
index e01fc59..b270917 100644
--- a/data/tracker-miner-rss.desktop.in.in
+++ b/data/tracker-miner-rss.desktop.in.in
@@ -1,6 +1,6 @@
 [Desktop Entry]
 Encoding=UTF-8
-Name=RSS
-Comment=RSS feeds fetcher
+Name=RSS/ATOM Feeds
+Comment=Fetch RSS/ATOM Feeds
 DBusName=org.freedesktop.Tracker1.Miner.RSS
 DBusPath=/org/freedesktop/Tracker1/Miner/RSS
\ No newline at end of file
diff --git a/src/tracker-miner-rss/Makefile.am b/src/tracker-miner-rss/Makefile.am
index 750bcd4..ad8cc8a 100644
--- a/src/tracker-miner-rss/Makefile.am
+++ b/src/tracker-miner-rss/Makefile.am
@@ -17,7 +17,7 @@ INCLUDES =								\
 libexec_PROGRAMS = tracker-miner-rss
 
 tracker_miner_rss_SOURCES =						\
-	tracker-main.c						\
+	tracker-main.c							\
 	tracker-miner-rss.h						\
 	tracker-miner-rss.c
 
diff --git a/src/tracker-miner-rss/tracker-main.c b/src/tracker-miner-rss/tracker-main.c
index 921f705..8411aba 100644
--- a/src/tracker-miner-rss/tracker-main.c
+++ b/src/tracker-miner-rss/tracker-main.c
@@ -3,32 +3,82 @@
  *                          Michele Tameni <michele amdplanet it>
  *
  * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
+ * modify it under the terms of the GNU General Public
  * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
+ * version 2 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.
+ * General Public License for more details.
  *
- * You should have received a copy of the GNU Lesser General Public
+ * You should have received a copy of the GNU General Public
  * License along with this library; if not, write to the
  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
  * Boston, MA  02110-1301, USA.
  */
 
+#include "config.h"
+
 #include <stdlib.h>
+
+#include <locale.h>
+#include <glib/gi18n.h>
+
+#include <libtracker-common/tracker-common.h>
+
 #include "tracker-miner-rss.h"
 
+static gint verbosity = -1;
+
+static GOptionEntry entries[] = {
+	{ "verbosity", 'v', 0,
+	  G_OPTION_ARG_INT, &verbosity,
+	  N_("Logging, 0 = errors only, "
+	  "1 = minimal, 2 = detailed and 3 = debug (default=0)"),
+	  NULL },
+	{ NULL }
+};
+
 int
-main () {
+main (int argc, char **argv)
+{
+	gchar *log_filename;
+	GMainLoop *loop;
+	GOptionContext *context;
 	TrackerMinerRSS *miner;
 
 	g_type_init ();
 	g_thread_init (NULL);
+
+	setlocale (LC_ALL, "");
+
+	bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+	bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+	textdomain (GETTEXT_PACKAGE);
+	tzset ();
+
+	/* Translators: this messagge will apper immediately after the
+	 * usage string - Usage: COMMAND <THIS_MESSAGE>
+	 */
+	context = g_option_context_new (_("- start the feeds indexer"));
+	g_option_context_add_main_entries (context, entries, NULL);
+	g_option_context_parse (context, &argc, &argv, NULL);
+	g_option_context_free (context);
+
+	tracker_log_init (verbosity, &log_filename);
+	g_print ("Starting log:\n  File:'%s'\n", log_filename);
+	g_free (log_filename);
+
 	miner = g_object_new (TRACKER_TYPE_MINER_RSS, "name", "RSS", NULL);
 	tracker_miner_start (TRACKER_MINER (miner));
-	g_main_loop_run (g_main_loop_new (NULL, FALSE));
-	exit (0);
+
+	loop = g_main_loop_new (NULL, FALSE);
+	g_main_loop_run (loop);
+
+	tracker_log_shutdown ();
+	g_main_loop_unref (loop);
+	g_object_unref (miner);
+
+	return 0;
 }
diff --git a/src/tracker-miner-rss/tracker-miner-rss.c b/src/tracker-miner-rss/tracker-miner-rss.c
index d15b9b8..e7f60d0 100644
--- a/src/tracker-miner-rss/tracker-miner-rss.c
+++ b/src/tracker-miner-rss/tracker-miner-rss.c
@@ -3,61 +3,66 @@
  *                          Michele Tameni <michele amdplanet it>
  *
  * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
+ * modify it under the terms of the GNU General Public
  * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
+ * version 2 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.
+ * General Public License for more details.
  *
- * You should have received a copy of the GNU Lesser General Public
+ * You should have received a copy of the GNU General Public
  * License along with this library; if not, write to the
  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
  * Boston, MA  02110-1301, USA.
  */
 
-#include "tracker-miner-rss.h"
-
 #include <stdio.h>
-#include <dbus/dbus-glib.h>
-#include <libtracker-miner/tracker-miner.h>
-#include <libtracker-common/tracker-sparql-builder.h>
 #include <libgrss.h>
+#include <dbus/dbus-glib.h>
+
+#include <glib/gi18n.h>
+
+#include "tracker-miner-rss.h"
 
-#define TRACKER_MINER_RSS_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TRACKER_TYPE_MINER_RSS, TrackerMinerRSSPrivate))
+#define GET_PRIV(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TRACKER_TYPE_MINER_RSS, TrackerMinerRSSPrivate))
 
-struct TrackerMinerRSSPrivate {
-	gboolean	paused;
-	gboolean	stopped;
+typedef struct _TrackerMinerRSSPrivate TrackerMinerRSSPrivate;
 
-	FeedsPool	*pool;
-	int		now_fetching;
+struct _TrackerMinerRSSPrivate {
+	gboolean paused;
+	gboolean stopped;
+
+	FeedsPool *pool;
+	gint now_fetching;
 };
 
-static void tracker_miner_rss_started (TrackerMiner *miner);
-static void tracker_miner_rss_stopped (TrackerMiner *miner);
-static void tracker_miner_rss_paused (TrackerMiner *miner);
-static void tracker_miner_rss_resumed (TrackerMiner *miner);
-static void retrieve_and_schedule_feeds (TrackerMinerRSS *miner);
-static void update_updated_interval (TrackerMinerRSS *miner, gchar *uri, time_t *now);
-static void change_status (FeedsPool *pool, FeedChannel *feed, gpointer user_data);
-static void feed_fetched (FeedsPool *pool, FeedChannel *feed, GList *items, gpointer user_data);
-static gchar* get_message_subject (FeedItem *item);
-static const gchar* get_message_url (FeedItem *item);
+static void        tracker_miner_rss_started   (TrackerMiner    *miner);
+static void        tracker_miner_rss_stopped   (TrackerMiner    *miner);
+static void        tracker_miner_rss_paused    (TrackerMiner    *miner);
+static void        tracker_miner_rss_resumed   (TrackerMiner    *miner);
+static void        retrieve_and_schedule_feeds (TrackerMinerRSS *miner);
+static void        change_status               (FeedsPool       *pool,
+                                                FeedChannel     *feed,
+                                                gpointer         user_data);
+static void        feed_fetched                (FeedsPool       *pool,
+                                                FeedChannel     *feed,
+                                                GList           *items,
+                                                gpointer         user_data);
+static const gchar *get_message_url            (FeedItem        *item);
 
 G_DEFINE_TYPE (TrackerMinerRSS, tracker_miner_rss, TRACKER_TYPE_MINER)
 
 static void
 tracker_miner_rss_finalize (GObject *object)
 {
-	TrackerMinerRSS *rss;
+	TrackerMinerRSSPrivate *priv;
 
-	rss = TRACKER_MINER_RSS (object);
+	priv = GET_PRIV (object);
 
-	rss->priv->stopped = TRUE;
-	g_object_unref (rss->priv->pool);
+	priv->stopped = TRUE;
+	g_object_unref (priv->pool);
 
 	G_OBJECT_CLASS (tracker_miner_rss_parent_class)->finalize (object);
 }
@@ -68,38 +73,39 @@ tracker_miner_rss_class_init (TrackerMinerRSSClass *klass)
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 	TrackerMinerClass *miner_class = TRACKER_MINER_CLASS (klass);
 
-	g_type_class_add_private (object_class, sizeof (TrackerMinerRSSPrivate));
 	object_class->finalize = tracker_miner_rss_finalize;
 
 	miner_class->started = tracker_miner_rss_started;
 	miner_class->stopped = tracker_miner_rss_stopped;
 	miner_class->paused  = tracker_miner_rss_paused;
 	miner_class->resumed = tracker_miner_rss_resumed;
+
+	g_type_class_add_private (object_class, sizeof (TrackerMinerRSSPrivate));
 }
 
 static void
-subjects_added_cb (DBusGProxy *proxy, gchar **subjects, gpointer user_data)
+subjects_added_cb (DBusGProxy *proxy,
+                   gchar     **subjects,
+                   gpointer    user_data)
 {
 	TrackerMinerRSS *miner;
 
 	miner = TRACKER_MINER_RSS (user_data);
 
-	/*
-		TODO	Add only the channels added?
-	*/
+	/* TODO Add only the channels added? */
 	retrieve_and_schedule_feeds (miner);
 }
 
 static void
-subjects_removed_cb (DBusGProxy *proxy, gchar **subjects, gpointer user_data)
+subjects_removed_cb (DBusGProxy *proxy,
+                     gchar     **subjects,
+                     gpointer    user_data)
 {
 	TrackerMinerRSS *miner;
 
 	miner = TRACKER_MINER_RSS (user_data);
 
-	/*
-		TODO	Remove only the channels removed?
-	*/
+	/* TODO Remove only the channels removed? */
 	retrieve_and_schedule_feeds (miner);
 }
 
@@ -107,19 +113,11 @@ static void
 tracker_miner_rss_init (TrackerMinerRSS *object)
 {
 	DBusGProxy *wrap;
-
-	object->priv = TRACKER_MINER_RSS_GET_PRIVATE (object);
-
-	object->priv->pool = feeds_pool_new ();
-	g_signal_connect (object->priv->pool, "feed-fetching", G_CALLBACK (change_status), object);
-	g_signal_connect (object->priv->pool, "feed-ready", G_CALLBACK (feed_fetched), object);
-	object->priv->now_fetching = 0;
-
-	g_object_set (object, "progress", 0.0, "status", "Initializing", NULL);
+	TrackerMinerRSSPrivate *priv;
 
 	wrap = dbus_g_proxy_new_for_name (dbus_g_bus_get (DBUS_BUS_SESSION, NULL),
 	                                  "org.freedesktop.Tracker1",
-					  "/org/freedesktop/Tracker1/Resources/Classes/mfo/FeedChannel",
+	                                  "/org/freedesktop/Tracker1/Resources/Classes/mfo/FeedChannel",
 	                                  "org.freedesktop.Tracker1.Resources.Class");
 
 	if (wrap == NULL) {
@@ -127,6 +125,15 @@ tracker_miner_rss_init (TrackerMinerRSS *object)
 		return;
 	}
 
+	priv = GET_PRIV (object);
+
+	priv->pool = feeds_pool_new ();
+	g_signal_connect (priv->pool, "feed-fetching", G_CALLBACK (change_status), object);
+	g_signal_connect (priv->pool, "feed-ready", G_CALLBACK (feed_fetched), object);
+	priv->now_fetching = 0;
+
+	g_object_set (object, "progress", 0.0, "status", _("Initializing"), NULL);
+
 	dbus_g_proxy_add_signal (wrap, "SubjectsAdded", G_TYPE_STRV, G_TYPE_INVALID);
 	dbus_g_proxy_connect_signal (wrap, "SubjectsAdded", G_CALLBACK (subjects_added_cb), object, NULL);
 
@@ -135,14 +142,31 @@ tracker_miner_rss_init (TrackerMinerRSS *object)
 }
 
 static void
-update_updated_interval (TrackerMinerRSS *miner, gchar *uri, time_t *now)
+verify_channel_update (GObject      *source,
+                       GAsyncResult *result,
+                       gpointer      user_data)
+{
+	GError *error;
+
+	error = NULL;
+
+	tracker_miner_execute_update_finish (TRACKER_MINER (source), result, &error);
+	if (error != NULL) {
+		g_critical ("Unable to update information about channel: %s", error->message);
+		g_error_free (error);
+	}
+}
+
+static void
+update_updated_interval (TrackerMinerRSS *miner,
+                         gchar           *uri,
+                         time_t          *now)
 {
 	TrackerSparqlBuilder *sparql;
 
-	/*
-		I hope there will be soon a SPARQL command to just update a
-		value instead to delete and re-insert it
-	*/
+	/* I hope there will be soon a SPARQL command to just update a
+	 * value instead to delete and re-insert it
+	 */
 
 	sparql = tracker_sparql_builder_new_update ();
 	tracker_sparql_builder_delete_open (sparql, NULL);
@@ -162,35 +186,63 @@ update_updated_interval (TrackerMinerRSS *miner, gchar *uri, time_t *now)
 	tracker_sparql_builder_object_date (sparql, now);
 	tracker_sparql_builder_insert_close (sparql);
 
-	tracker_miner_execute_update (TRACKER_MINER (miner), tracker_sparql_builder_get_result (sparql), NULL, NULL, NULL);
+	tracker_miner_execute_update (TRACKER_MINER (miner),
+	                              tracker_sparql_builder_get_result (sparql),
+	                              NULL,
+	                              verify_channel_update,
+	                              NULL);
 	g_object_unref (sparql);
 }
 
 static void
-change_status (FeedsPool *pool, FeedChannel *feed, gpointer user_data)
+change_status (FeedsPool   *pool,
+               FeedChannel *feed,
+               gpointer     user_data)
 {
-	int avail;
-	double prog;
+	gint avail;
+	gdouble prog;
 	TrackerMinerRSS *miner;
+	TrackerMinerRSSPrivate *priv;
+
+	g_message ("Fetching %s", feed_channel_get_source (feed));
+
+	miner = TRACKER_MINER_RSS (user_data);
+	priv = GET_PRIV (miner);
+	avail = feeds_pool_get_listened_num (priv->pool);
+
+	priv->now_fetching++;
+	if (priv->now_fetching > avail)
+		priv->now_fetching = avail;
+
+	prog = ((gdouble) priv->now_fetching) / ((gdouble) avail);
+	g_object_set (miner, "progress", prog, "status", _("Fetching..."), NULL);
+}
 
-	miner = (TrackerMinerRSS*) user_data;
-	avail = feeds_pool_get_listened_num (miner->priv->pool);
+static void
+verify_item_insertion (GObject      *source,
+                       GAsyncResult *result,
+                       gpointer      user_data)
+{
+	GError *error;
 
-	miner->priv->now_fetching++;
-	if (miner->priv->now_fetching > avail)
-		miner->priv->now_fetching = avail;
+	error = NULL;
 
-	prog = (double) miner->priv->now_fetching / (double) avail;
-	g_object_set (miner, "progress", prog, "status", "Fetching...", NULL);
+	tracker_miner_execute_update_finish (TRACKER_MINER (source), result, &error);
+	if (error != NULL) {
+		g_critical ("Unable to create new item: %s", error->message);
+		g_error_free (error);
+	}
 }
 
 static void
-item_verify_reply_cb (GObject *source_object, GAsyncResult *res, gpointer data)
+item_verify_reply_cb (GObject      *source_object,
+                      GAsyncResult *res,
+                      gpointer      user_data)
 {
 	time_t t;
 	gchar *uri;
-	gchar *subject;
 	gchar **values;
+	const gchar *url;
 	gdouble latitude;
 	gdouble longitude;
 	const gchar *tmp_string;
@@ -203,26 +255,29 @@ item_verify_reply_cb (GObject *source_object, GAsyncResult *res, gpointer data)
 	gboolean has_geopoint;
 
 	miner = TRACKER_MINER_RSS (source_object);
-	response = tracker_miner_execute_sparql_finish (TRACKER_MINER (source_object), res, &error);
+	error = NULL;
+	response = tracker_miner_execute_sparql_finish (TRACKER_MINER (source_object),
+	                                                res,
+	                                                &error);
 
-	if (response == NULL) {
-		g_warning ("Unable to verify item: %s\n", error->message);
+	if (error != NULL) {
+		g_warning ("Unable to verify item existance: %s\n", error->message);
 		g_error_free (error);
 		return;
 	}
 
-	values = (gchar**) g_ptr_array_index (response, 0);
-	if (strcmp (values [0], "1") == 0)
+	values = g_ptr_array_index (response, 0);
+	if (g_strcmp0 (values[0], "1") == 0)
 		return;
 
-	item = data;
+	item = user_data;
 
-	subject = get_message_subject (item);
+	url = get_message_url (item);
 
 	sparql = tracker_sparql_builder_new_update ();
 
 	has_geopoint = feed_item_get_geo_point (item, &latitude, &longitude);
-	tracker_sparql_builder_insert_open (sparql, subject);
+	tracker_sparql_builder_insert_open (sparql, url);
 
 	if (has_geopoint) {
 		tracker_sparql_builder_subject (sparql, "_:location");
@@ -253,24 +308,22 @@ item_verify_reply_cb (GObject *source_object, GAsyncResult *res, gpointer data)
 	tmp_string = feed_item_get_title (item);
 	if (tmp_string != NULL) {
 		tracker_sparql_builder_predicate (sparql, "nie:title");
-		tracker_sparql_builder_object_string (sparql, tmp_string);
+		tracker_sparql_builder_object_unvalidated (sparql, tmp_string);
 	}
 
 	tmp_string = feed_item_get_description (item);
 	if (tmp_string != NULL) {
 		tracker_sparql_builder_predicate (sparql, "nmo:plainTextMessageContent");
-		tracker_sparql_builder_object_string (sparql, tmp_string);
+		tracker_sparql_builder_object_unvalidated (sparql, tmp_string);
 	}
 
-	tmp_string = get_message_url (item);
-	if (tmp_string != NULL) {
+	if (url != NULL) {
 		tracker_sparql_builder_predicate (sparql, "nie:url");
-		tracker_sparql_builder_object_string (sparql, tmp_string);
+		tracker_sparql_builder_object_unvalidated (sparql, url);
 	}
 
-	/*
-		nmo:receivedDate and mfo:downloadedTime are the same? Ask for the MFO maintainer
-	*/
+	/* TODO nmo:receivedDate and mfo:downloadedTime are the same?
+	 *      Ask for the MFO maintainer */
 
 	t = time (NULL);
 
@@ -288,20 +341,26 @@ item_verify_reply_cb (GObject *source_object, GAsyncResult *res, gpointer data)
 	tracker_sparql_builder_object_boolean (sparql, FALSE);
 
 	feed = feed_item_get_parent (item);
-	uri = (gchar*) g_object_get_data (G_OBJECT (feed), "subject");
+	uri = g_object_get_data (G_OBJECT (feed), "subject");
 	tracker_sparql_builder_predicate (sparql, "nmo:communicationChannel");
 	tracker_sparql_builder_object_iri (sparql, uri);
 
+	g_free (uri);
+
 	tracker_sparql_builder_insert_close (sparql);
 
-	tracker_miner_execute_update (TRACKER_MINER (miner), tracker_sparql_builder_get_result (sparql), NULL, NULL, NULL);
+	tracker_miner_execute_update (TRACKER_MINER (miner),
+	                              tracker_sparql_builder_get_result (sparql),
+	                              NULL,
+	                              verify_item_insertion,
+	                              NULL);
 
 	g_object_unref (sparql);
-	g_free (subject);
 }
 
 static void
-check_if_save (TrackerMinerRSS *miner, FeedItem *item)
+check_if_save (TrackerMinerRSS *miner,
+               FeedItem        *item)
 {
 	FeedChannel *feed;
 	gchar *query;
@@ -310,28 +369,40 @@ check_if_save (TrackerMinerRSS *miner, FeedItem *item)
 
 	url = get_message_url (item);
 	feed = feed_item_get_parent (item);
-	communication_channel = (gchar*) g_object_get_data (G_OBJECT (feed), "subject");
-
-	query = g_strdup_printf ("ASK { ?message a mfo:FeedMessage; nie:url \"%s\"; nmo:communicationChannel <%s> }",
-	                        url, communication_channel);
-	tracker_miner_execute_sparql (TRACKER_MINER (miner), query, NULL, item_verify_reply_cb, item);
+	communication_channel = g_object_get_data (G_OBJECT (feed), "subject");
+
+	query = g_strdup_printf ("ASK { ?message a mfo:FeedMessage; "
+	                         "nie:url \"%s\"; nmo:communicationChannel <%s> }",
+	                         url,
+	                         communication_channel);
+
+	tracker_miner_execute_sparql (TRACKER_MINER (miner),
+	                              query,
+	                              NULL,
+	                              item_verify_reply_cb,
+	                              item);
 	g_free (query);
 }
 
 static void
-feed_fetched (FeedsPool *pool, FeedChannel *feed, GList *items, gpointer user_data)
+feed_fetched (FeedsPool   *pool,
+              FeedChannel *feed,
+              GList       *items,
+              gpointer     user_data)
 {
 	gchar *uri;
 	time_t now;
 	GList *iter;
 	FeedItem *item;
 	TrackerMinerRSS *miner;
+	TrackerMinerRSSPrivate *priv;
 
-	miner = (TrackerMinerRSS*) user_data;
+	miner = TRACKER_MINER_RSS (user_data);
+	priv = GET_PRIV (miner);
 
-	miner->priv->now_fetching--;
-	if (miner->priv->now_fetching <= 0) {
-		miner->priv->now_fetching = 0;
+	priv->now_fetching--;
+	if (priv->now_fetching <= 0) {
+		priv->now_fetching = 0;
 		g_object_set (miner, "progress", 1.0, "status", "Idle", NULL);
 	}
 
@@ -339,31 +410,35 @@ feed_fetched (FeedsPool *pool, FeedChannel *feed, GList *items, gpointer user_da
 		return;
 
 	now = time (NULL);
-	uri = (gchar*) g_object_get_data (G_OBJECT (feed), "subject");
+	uri = g_object_get_data (G_OBJECT (feed), "subject");
 	update_updated_interval (miner, uri, &now);
 
-	for (iter = items; iter; iter = g_list_next (iter)) {
-		item = (FeedItem*) iter->data;
+	for (iter = items; iter; iter = iter->next) {
+		item = iter->data;
 		check_if_save (miner, item);
 	}
 }
 
 static void
-feeds_retrieve_cb (GObject *source_object, GAsyncResult *res, gpointer data)
+feeds_retrieve_cb (GObject      *source_object,
+                   GAsyncResult *res,
+                   gpointer      user_data)
 {
-	int interval;
-	register int i;
+	gint interval;
+	guint i;
 	gchar **values;
 	GList *channels;
 	const GPtrArray *response;
 	GError *error;
-	TrackerMinerRSS *miner;
+	TrackerMinerRSSPrivate *priv;
 	FeedChannel *chan;
 
-	miner = TRACKER_MINER_RSS (source_object);
-	response = tracker_miner_execute_sparql_finish (TRACKER_MINER (source_object), res, &error);
+	error = NULL;
+	response = tracker_miner_execute_sparql_finish (TRACKER_MINER (source_object),
+	                                                res,
+	                                                &error);
 
-	if (response == NULL) {
+	if (error != NULL) {
 		g_warning ("Unable to retrieve list of feeds: %s\n", error->message);
 		g_error_free (error);
 		return;
@@ -372,17 +447,19 @@ feeds_retrieve_cb (GObject *source_object, GAsyncResult *res, gpointer data)
 	channels = NULL;
 
 	for (i = 0; i < response->len; i++) {
-		values = (gchar**) g_ptr_array_index (response, i);
+		values = g_ptr_array_index (response, i);
 
 		chan = feed_channel_new ();
-		g_object_set_data_full (G_OBJECT (chan), "subject", g_strdup (values [2]), g_free);
+		g_object_set_data_full (G_OBJECT (chan),
+		                        "subject",
+		                        g_strdup (values [2]),
+		                        g_free);
 		feed_channel_set_source (chan, values [0]);
 
-		/*
-			How to manage feeds with an update mfo:updateInterval == 0 ?
-			Here the interval is forced to be at least 1 minute, but perhaps those
-			elements are to be considered "disabled"
-		*/
+		/* TODO How to manage feeds with an update mfo:updateInterval == 0 ?
+		 * Here the interval is forced to be at least 1 minute, but perhaps those
+		 * elements are to be considered "disabled"
+		 */
 		interval = strtoull (values [1], NULL, 10);
 		if (interval <= 0)
 			interval = 1;
@@ -391,31 +468,31 @@ feeds_retrieve_cb (GObject *source_object, GAsyncResult *res, gpointer data)
 		channels = g_list_prepend (channels, chan);
 	}
 
-	feeds_pool_listen (miner->priv->pool, channels);
+	priv = GET_PRIV (source_object);
+	feeds_pool_listen (priv->pool, channels);
 }
 
 static void
 retrieve_and_schedule_feeds (TrackerMinerRSS *miner)
 {
-	gchar *sparql;
+	const gchar *sparql;
 
-	sparql = g_strdup_printf ("SELECT ?chanUrl ?interval ?chanUrn WHERE		\
-	                           { ?chanUrn a mfo:FeedChannel .			\
-	                             ?chanUrn mfo:feedSettings ?settings .		\
-	                             ?chanUrn nie:url ?chanUrl .			\
-	                             ?settings mfo:updateInterval ?interval }");
+	sparql = "SELECT ?chanUrl ?interval ?chanUrn WHERE "
+	         "{ ?chanUrn a mfo:FeedChannel . "
+	         "?chanUrn mfo:feedSettings ?settings . "
+	         "?chanUrn nie:url ?chanUrl . "
+	         "?settings mfo:updateInterval ?interval }";
 
-	tracker_miner_execute_sparql (TRACKER_MINER (miner), sparql, NULL, feeds_retrieve_cb, NULL);
-	g_free (sparql);
-}
+	tracker_miner_execute_sparql (TRACKER_MINER (miner),
+	                              sparql,
+	                              NULL,
+	                              feeds_retrieve_cb,
+	                              NULL);
 
-static gchar*
-get_message_subject (FeedItem *item)
-{
-	return g_strdup_printf ("rss://%s", feed_item_get_id (item));
 }
 
-static const gchar*
+static
+const gchar *
 get_message_url (FeedItem *item)
 {
 	const gchar *url;
@@ -429,13 +506,13 @@ get_message_url (FeedItem *item)
 static void
 tracker_miner_rss_started (TrackerMiner *miner)
 {
-	TrackerMinerRSS *rss;
+	TrackerMinerRSSPrivate *priv;
 
 	g_object_set (miner, "progress", 0.0, "status", "Initializing", NULL);
 
-	rss = TRACKER_MINER_RSS (miner);
-	retrieve_and_schedule_feeds (rss);
-	feeds_pool_switch (rss->priv->pool, TRUE);
+	priv = GET_PRIV (miner);
+	retrieve_and_schedule_feeds (TRACKER_MINER_RSS (miner));
+	feeds_pool_switch (priv->pool, TRUE);
 
 	g_object_set (miner, "status", "Idle", NULL);
 }
@@ -443,29 +520,29 @@ tracker_miner_rss_started (TrackerMiner *miner)
 static void
 tracker_miner_rss_stopped (TrackerMiner *miner)
 {
-	TrackerMinerRSS *rss;
+	TrackerMinerRSSPrivate *priv;
 
-	rss = TRACKER_MINER_RSS (miner);
-	feeds_pool_switch (rss->priv->pool, FALSE);
+	priv = GET_PRIV (miner);
+	feeds_pool_switch (priv->pool, FALSE);
 	g_object_set (miner, "progress", 1.0, "status", "Idle", NULL);
 }
 
 static void
 tracker_miner_rss_paused (TrackerMiner *miner)
 {
-	TrackerMinerRSS *rss;
+	TrackerMinerRSSPrivate *priv;
 
-	rss = TRACKER_MINER_RSS (miner);
-	feeds_pool_switch (rss->priv->pool, FALSE);
-	g_object_set (miner, "progress", 1.0, "status", "Paused", NULL);
+	priv = GET_PRIV (miner);
+	feeds_pool_switch (priv->pool, FALSE);
+	g_object_set (miner, "status", "Paused", NULL);
 }
 
 static void
 tracker_miner_rss_resumed (TrackerMiner *miner)
 {
-	TrackerMinerRSS *rss;
+	TrackerMinerRSSPrivate *priv;
 
-	rss = TRACKER_MINER_RSS (miner);
-	feeds_pool_switch (rss->priv->pool, TRUE);
-	g_object_set (miner, "progress", 1.0, "status", "Idle", NULL);
+	priv = GET_PRIV (miner);
+	feeds_pool_switch (priv->pool, TRUE);
+	g_object_set (miner, "status", "Idle", NULL);
 }
diff --git a/src/tracker-miner-rss/tracker-miner-rss.h b/src/tracker-miner-rss/tracker-miner-rss.h
index dffb206..3977a4a 100644
--- a/src/tracker-miner-rss/tracker-miner-rss.h
+++ b/src/tracker-miner-rss/tracker-miner-rss.h
@@ -3,16 +3,16 @@
  *                          Michele Tameni <michele amdplanet it>
  *
  * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
+ * modify it under the terms of the GNU General Public
  * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
+ * version 2 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.
+ * General Public License for more details.
  *
- * You should have received a copy of the GNU Lesser General Public
+ * You should have received a copy of the GNU General Public
  * License along with this library; if not, write to the
  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
  * Boston, MA  02110-1301, USA.
@@ -32,17 +32,16 @@ G_BEGIN_DECLS
 #define TRACKER_IS_MINER_RSS_CLASS(c)  (G_TYPE_CHECK_CLASS_TYPE ((c),  TRACKER_TYPE_MINER_RSS))
 #define TRACKER_MINER_RSS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), TRACKER_TYPE_MINER_RSS, TrackerMinerRSSClass))
 
-typedef struct TrackerMinerRSS        TrackerMinerRSS;
-typedef struct TrackerMinerRSSPrivate TrackerMinerRSSPrivate;
+typedef struct _TrackerMinerRSS TrackerMinerRSS;
+typedef struct _TrackerMinerRSSClass TrackerMinerRSSClass;
 
-struct TrackerMinerRSS {
+struct _TrackerMinerRSS {
 	TrackerMiner parent;
-	TrackerMinerRSSPrivate *priv;
 };
 
-typedef struct {
+struct _TrackerMinerRSSClass {
 	TrackerMinerClass parent;
-} TrackerMinerRSSClass;
+};
 
 GType    tracker_miner_rss_get_type         (void) G_GNUC_CONST;
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]