[tracker/libtracker-miner] Implement file queueing from TrackerProcessor.
- From: Carlos Garnacho <carlosg src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [tracker/libtracker-miner] Implement file queueing from TrackerProcessor.
- Date: Fri, 31 Jul 2009 13:58:21 +0000 (UTC)
commit 0fa63aeb90f11699eb3dd8d2b5aca1256dbb3f8c
Author: Carlos Garnacho <carlos lanedo com>
Date: Fri Jul 31 15:56:14 2009 +0200
Implement file queueing from TrackerProcessor.
TrackerProcessor::check-file is not implemented yet.
src/libtracker-miner/tracker-miner-crawler.c | 84 +++++++++++++++++++++++++-
src/libtracker-miner/tracker-miner-crawler.h | 2 +-
2 files changed, 84 insertions(+), 2 deletions(-)
---
diff --git a/src/libtracker-miner/tracker-miner-crawler.c b/src/libtracker-miner/tracker-miner-crawler.c
index 16c5b2b..c2aac98 100644
--- a/src/libtracker-miner/tracker-miner-crawler.c
+++ b/src/libtracker-miner/tracker-miner-crawler.c
@@ -44,6 +44,9 @@ struct TrackerMinerCrawlerPrivate {
TrackerProcessor *processor;
GArray *dirs;
+
+ GQueue *files_queue;
+ guint process_files_id;
};
enum {
@@ -98,6 +101,43 @@ tracker_miner_crawler_class_init (TrackerMinerCrawlerClass *klass)
g_type_class_add_private (object_class, sizeof (TrackerMinerCrawlerPrivate));
}
+static gboolean
+process_files_func (TrackerMinerCrawler *miner)
+{
+ TrackerMinerCrawlerPrivate *priv;
+ GFile *file;
+
+ priv = miner->_priv;
+ file = g_queue_pop_head (priv->files_queue);
+
+ if (!file) {
+ /* No more files left to process, at the moment */
+ priv->process_files_id = 0;
+ return FALSE;
+ }
+
+ g_signal_emit (miner, signals [PROCESS_FILE], 0, file);
+ g_object_unref (file);
+
+ return TRUE;
+}
+
+static void
+processor_check_file (TrackerProcessor *processor,
+ GFile *file,
+ TrackerMinerCrawler *miner)
+{
+ TrackerMinerCrawlerPrivate *priv;
+
+ priv = miner->_priv;
+
+ g_queue_push_tail (priv->files_queue, g_object_ref (file));
+
+ if (priv->process_files_id == 0) {
+ priv->process_files_id = g_idle_add ((GSourceFunc) process_files_func, miner);
+ }
+}
+
static void
tracker_miner_crawler_init (TrackerMinerCrawler *miner)
{
@@ -110,13 +150,55 @@ tracker_miner_crawler_init (TrackerMinerCrawler *miner)
priv->processor = tracker_processor_new (priv->config, priv->storage);
+ g_signal_connect (priv->processor, "check-file",
+ G_CALLBACK (processor_check_file), miner);
+
priv->dirs = g_array_new (FALSE, TRUE, sizeof (DirectoryData));
+ priv->files_queue = g_queue_new ();
}
static void
tracker_miner_crawler_finalize (GObject *object)
{
- G_OBJECT_CLASS (tracker_miner_crawler_parent_class)->finalize (object);
+ TrackerMinerCrawler *miner = TRACKER_MINER_CRAWLER (object);
+ TrackerMinerCrawlerPrivate *priv = miner->_priv;
+
+ if (priv->config) {
+ g_object_unref (priv->config);
+ }
+
+ if (priv->storage) {
+ g_object_unref (priv->storage);
+ }
+
+ if (priv->processor) {
+ g_object_unref (priv->processor);
+ }
+
+ if (priv->dirs) {
+ gint i;
+
+ for (i = 0; i < priv->dirs->len; i++) {
+ DirectoryData data;
+
+ data = g_array_index (priv->dirs, DirectoryData, i);
+ g_object_unref (data.dir);
+ }
+
+ g_array_free (priv->dirs, TRUE);
+ }
+
+ if (priv->process_files_id) {
+ g_source_remove (priv->process_files_id);
+ priv->process_files_id = 0;
+ }
+
+ if (priv->files_queue) {
+ g_queue_foreach (priv->files_queue, (GFunc) g_object_unref, NULL);
+ g_queue_free (priv->files_queue);
+ }
+
+ G_OBJECT_CLASS (tracker_miner_crawler_parent_class)->finalize (object);
}
static void
diff --git a/src/libtracker-miner/tracker-miner-crawler.h b/src/libtracker-miner/tracker-miner-crawler.h
index c157a60..7fe80b0 100644
--- a/src/libtracker-miner/tracker-miner-crawler.h
+++ b/src/libtracker-miner/tracker-miner-crawler.h
@@ -53,7 +53,6 @@ struct TrackerMinerCrawlerClass {
GFile *file);
};
-
GType tracker_miner_crawler_get_type (void) G_GNUC_CONST;
void tracker_miner_crawler_add_directory (TrackerMinerCrawler *miner,
@@ -66,6 +65,7 @@ void tracker_miner_crawler_set_ignore_directory_patterns (TrackerMinerCrawle
void tracker_miner_crawler_set_ignore_file_patterns (TrackerMinerCrawler *miner,
GList *patterns);
+
G_END_DECLS
#endif /* __TRACKER_MINER_CRAWLER_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]