diff options
author | Tomas Bzatek <tbzatek@redhat.com> | 2010-12-16 16:17:18 +0100 |
---|---|---|
committer | Tomas Bzatek <tbzatek@redhat.com> | 2010-12-16 16:17:18 +0100 |
commit | f1700e070e9aa902c7f346bf884802cdd2b81d45 (patch) | |
tree | 1f694f6b83c510eae6162a7173451352c47cf84c | |
parent | 5c2a4f4e982d3af96a4b3012ea906ba1a2b14d50 (diff) | |
download | gvfs-tracker-metadata.tar.gz |
metadata: Try reconnecting to tracker-store periodicallytracker-metadata
Timeout is set to five seconds, could be tweaked.
-rw-r--r-- | metadata/metadata-tracker-miner.c | 90 |
1 files changed, 60 insertions, 30 deletions
diff --git a/metadata/metadata-tracker-miner.c b/metadata/metadata-tracker-miner.c index 69e48461..f539b090 100644 --- a/metadata/metadata-tracker-miner.c +++ b/metadata/metadata-tracker-miner.c @@ -44,6 +44,7 @@ struct MetadataTrackerMinerPrivate { TrackerSparqlConnection *connection; + guint running_connection_attempt; GQueue *queue; guint running_queue_id; @@ -269,6 +270,8 @@ typedef struct { } MetadataTrackerMinerEntry; static gboolean process_queue (MetadataTrackerMiner *miner); +static void schedule_queue_pickup (MetadataTrackerMiner *miner); + static void push_to_tracker_cb (GObject *source, @@ -298,6 +301,8 @@ process_queue (MetadataTrackerMiner *miner) GFile *file; char *data; + g_return_val_if_fail (miner->priv->connection != NULL, FALSE); + g_print ("process_queue: Picking up queue\n"); entry = g_queue_pop_head (miner->priv->queue); @@ -429,16 +434,65 @@ queue_push_data_to_tracker (MetadataTrackerMiner *miner, /* FIXME: mutex? */ g_queue_push_head (miner->priv->queue, entry); + schedule_queue_pickup (miner); +} + +static void +create_connection_cb (GObject *source_object, + GAsyncResult *res, + gpointer user_data) +{ + TrackerSparqlConnection *connection; + MetadataTrackerMiner *miner; + GError *error; + + miner = user_data; + error = NULL; - /* FIXME: mutex? */ - if (miner->priv->connection != NULL && miner->priv->running_queue_id == 0) - miner->priv->running_queue_id = g_idle_add ((GSourceFunc) process_queue, miner); + connection = tracker_sparql_connection_get_finish (res, &error); + if (error != NULL) + { + g_critical ("Could not initialize Tracker: %s", error->message); + g_error_free (error); + } + miner->priv->connection = connection; + miner->priv->running_connection_attempt = 0; + g_print ("create_connection_cb: Initialized.\n"); + + schedule_queue_pickup (miner); +} + +static gboolean +create_connection_timeout (MetadataTrackerMiner *miner) +{ + tracker_sparql_connection_get_async (NULL, create_connection_cb, miner); + + return FALSE; +} + +static void +schedule_queue_pickup (MetadataTrackerMiner *miner) +{ + if (miner->priv->connection != NULL) + { + /* FIXME: mutex? */ + if (miner->priv->running_queue_id == 0) + miner->priv->running_queue_id = g_idle_add ((GSourceFunc) process_queue, miner); + } + else + { + if (miner->priv->running_connection_attempt == 0) + miner->priv->running_connection_attempt = g_timeout_add_seconds (5, (GSourceFunc) create_connection_timeout, miner); + } } + + + G_DEFINE_TYPE (MetadataTrackerMiner, metadata_tracker_miner, G_TYPE_OBJECT) static void @@ -466,42 +520,18 @@ metadata_tracker_miner_class_init (MetadataTrackerMinerClass *klass) g_type_class_add_private (object_class, sizeof (MetadataTrackerMinerPrivate)); } -static void -create_connection_cb (GObject *source_object, - GAsyncResult *res, - gpointer user_data) -{ - TrackerSparqlConnection *connection; - MetadataTrackerMiner *miner; - GError *error; - - miner = user_data; - error = NULL; - - connection = tracker_sparql_connection_get_finish (res, &error); - if (error != NULL) - { - g_critical ("Could not initialize Tracker: %s", error->message); - g_error_free (error); - } - miner->priv->connection = connection; - g_print ("create_connection_cb: Initialized.\n"); - - /* Process queue */ - if (connection != NULL && miner->priv->running_queue_id == 0) - miner->priv->running_queue_id = g_idle_add ((GSourceFunc) process_queue, miner); -} - static void metadata_tracker_miner_init (MetadataTrackerMiner *object) { object->priv = METADATA_TRACKER_MINER_GET_PRIVATE (object); object->priv->running_queue_id = 0; + + object->priv->queue = g_queue_new (); + object->priv->running_connection_attempt = 1; /* spawn manually now */ /* FIXME: do we need cancellable? */ tracker_sparql_connection_get_async (NULL, create_connection_cb, object); - object->priv->queue = g_queue_new (); } MetadataTrackerMiner * |