[tracker/libtracker-miner] Add TrackerMinerFiles to tracker-miner-fs.



commit 15cd4357e22c726e87a8ff301b9f630b70c40323
Author: Carlos Garnacho <carlos lanedo com>
Date:   Wed Aug 19 17:39:31 2009 +0200

    Add TrackerMinerFiles to tracker-miner-fs.

 src/tracker-miner-fs/Makefile.am           |    2 +
 src/tracker-miner-fs/tracker-miner-files.c |  285 ++++++++++++++++++++++++++++
 src/tracker-miner-fs/tracker-miner-files.h |   53 +++++
 src/tracker-miner-fs/tracker-miner-main.c  |    9 +-
 4 files changed, 348 insertions(+), 1 deletions(-)
---
diff --git a/src/tracker-miner-fs/Makefile.am b/src/tracker-miner-fs/Makefile.am
index e137b24..3982df8 100644
--- a/src/tracker-miner-fs/Makefile.am
+++ b/src/tracker-miner-fs/Makefile.am
@@ -24,6 +24,8 @@ tracker_miner_fs_new_SOURCES =						\
 	tracker-config.h						\
 	tracker-miner-applications.c					\
 	tracker-miner-applications.h					\
+	tracker-miner-files.c						\
+	tracker-miner-files.h						\
 	tracker-miner-main.c
 
 tracker_miner_fs_new_LDADD =						\
diff --git a/src/tracker-miner-fs/tracker-miner-files.c b/src/tracker-miner-fs/tracker-miner-files.c
new file mode 100644
index 0000000..b49efce
--- /dev/null
+++ b/src/tracker-miner-fs/tracker-miner-files.c
@@ -0,0 +1,285 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2008, Nokia
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation; either
+ * 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
+ * General Public License for more details.
+ *
+ * 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-files.h"
+#include "tracker-config.h"
+
+#define TRACKER_MINER_FILES_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TRACKER_TYPE_MINER_FILES, TrackerMinerFilesPrivate))
+
+typedef struct _TrackerMinerFilesPrivate TrackerMinerFilesPrivate;
+
+struct _TrackerMinerFilesPrivate {
+        TrackerConfig *config;
+};
+
+enum {
+        PROP_0,
+        PROP_CONFIG
+};
+
+static void tracker_miner_files_finalize     (GObject      *object);
+static void tracker_miner_files_get_property (GObject      *object,
+                                              guint         param_id,
+                                              GValue       *value,
+                                              GParamSpec   *pspec);
+static void tracker_miner_files_set_property (GObject      *object,
+                                              guint         param_id,
+                                              const GValue *value,
+                                              GParamSpec   *pspec);
+static void tracker_miner_files_constructed  (GObject      *object);
+
+static gboolean tracker_miner_files_check_file      (TrackerMinerProcess  *miner,
+                                                     GFile                *file);
+static gboolean tracker_miner_files_check_directory (TrackerMinerProcess  *miner,
+                                                     GFile                *file);
+static gboolean tracker_miner_files_process_file    (TrackerMinerProcess  *miner,
+                                                     GFile                *file,
+                                                     TrackerSparqlBuilder *sparql);
+static gboolean tracker_miner_files_monitor_directory (TrackerMinerProcess  *miner,
+                                                       GFile                *file);
+
+
+G_DEFINE_TYPE (TrackerMinerFiles, tracker_miner_files, TRACKER_TYPE_MINER_PROCESS)
+
+
+static void
+tracker_miner_files_class_init (TrackerMinerFilesClass *klass)
+{
+        GObjectClass *object_class = G_OBJECT_CLASS (klass);
+        TrackerMinerProcessClass *miner_process_class = TRACKER_MINER_PROCESS_CLASS (klass);
+
+        object_class->finalize = tracker_miner_files_finalize;
+        object_class->get_property = tracker_miner_files_get_property;
+        object_class->set_property = tracker_miner_files_set_property;
+        object_class->constructed = tracker_miner_files_constructed;
+
+        miner_process_class->check_file = tracker_miner_files_check_file;
+	miner_process_class->check_directory = tracker_miner_files_check_directory;
+	miner_process_class->monitor_directory = tracker_miner_files_monitor_directory;
+        miner_process_class->process_file = tracker_miner_files_process_file;
+
+       	g_object_class_install_property (object_class,
+					 PROP_CONFIG,
+					 g_param_spec_object ("config",
+							      "Config",
+							      "Config",
+                                                              TRACKER_TYPE_CONFIG,
+							      G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
+        g_type_class_add_private (klass, sizeof (TrackerMinerFilesPrivate));
+}
+
+static void
+tracker_miner_files_finalize (GObject *object)
+{
+        TrackerMinerFilesPrivate *priv;
+
+        priv = TRACKER_MINER_FILES_GET_PRIVATE (object);
+
+        g_object_unref (priv->config);
+
+        G_OBJECT_CLASS (tracker_miner_files_parent_class)->finalize (object);
+}
+
+static void
+tracker_miner_files_get_property (GObject      *object,
+                                  guint         prop_id,
+                                  GValue       *value,
+                                  GParamSpec   *pspec)
+{
+        TrackerMinerFilesPrivate *priv;
+
+        priv = TRACKER_MINER_FILES_GET_PRIVATE (object);
+
+        switch (prop_id) {
+        case PROP_CONFIG:
+                g_value_set_object (value, priv->config);
+                break;
+        default:
+                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+		break;
+        }
+}
+
+static void
+tracker_miner_files_set_property (GObject      *object,
+                                  guint         prop_id,
+                                  const GValue *value,
+                                  GParamSpec   *pspec)
+{
+        TrackerMinerFilesPrivate *priv;
+
+        priv = TRACKER_MINER_FILES_GET_PRIVATE (object);
+
+        switch (prop_id) {
+        case PROP_CONFIG:
+                priv->config = g_value_dup_object (value);
+                break;
+        default:
+                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+		break;
+        }
+}
+
+static void
+tracker_miner_files_constructed (GObject *object)
+{
+        TrackerMinerFilesPrivate *priv;
+        TrackerMiner *miner;
+        GSList *dirs;
+
+        priv = TRACKER_MINER_FILES_GET_PRIVATE (object);
+        miner = TRACKER_MINER (object);
+
+        if (!priv->config) {
+                g_critical ("No config. This is mandatory");
+                g_assert_not_reached ();
+        }
+
+        /* Fill in directories to inspect */
+        dirs = tracker_config_get_monitor_directories (priv->config);
+
+        while (dirs) {
+                tracker_miner_process_add_directory (miner, dirs->data, FALSE);
+                dirs = dirs->next;
+        }
+
+        dirs = tracker_config_get_monitor_recurse_directories (priv->config);
+
+        while (dirs) {
+                tracker_miner_process_add_directory (miner, dirs->data, TRUE);
+                dirs = dirs->next;
+        }
+}
+
+static gboolean
+tracker_miner_files_check_file (TrackerMinerProcess *miner,
+                                GFile               *file)
+{
+        /* FIXME: Check config */
+        return TRUE;
+}
+
+static gboolean
+tracker_miner_files_check_directory (TrackerMinerProcess  *miner,
+                                     GFile                *file)
+{
+        /* FIXME: Check config */
+	return TRUE;
+}
+
+static gboolean
+tracker_miner_files_monitor_directory (TrackerMinerProcess  *miner,
+                                       GFile                *file)
+{
+        TrackerMinerFilesPrivate *priv;
+
+        priv = TRACKER_MINER_FILES_GET_PRIVATE (miner);
+
+        return tracker_config_get_enable_monitors (priv->config);
+}
+
+static gboolean
+tracker_miner_files_process_file (TrackerMinerProcess  *miner,
+                                  GFile                *file,
+                                  TrackerSparqlBuilder *sparql)
+{
+	gchar *uri, *mime_type;
+	GFileInfo *file_info;
+	guint64 time_;
+	GFile *parent;
+	gchar *parent_uri;
+
+	file_info = g_file_query_info (file,
+                                       "standard::type,"
+                                       "standard::content-type,"
+                                       "standard::display-name,"
+                                       "standard::size,"
+                                       "time::modified,"
+                                       "time::access",
+                                       G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
+                                       NULL, NULL);
+	if (!file_info) {
+		return FALSE;
+	}
+
+	uri = g_file_get_uri (file);
+	mime_type = g_strdup (g_file_info_get_content_type (file_info));
+
+        tracker_sparql_builder_insert_open (sparql);
+
+        tracker_sparql_builder_subject_iri (sparql, uri);
+	tracker_sparql_builder_predicate (sparql, "a");
+	tracker_sparql_builder_object (sparql, "nfo:FileDataObject");
+
+	tracker_sparql_builder_subject_iri (sparql, uri); /* Change to URN */
+	tracker_sparql_builder_predicate (sparql, "nie:isStoredAs");
+	tracker_sparql_builder_object_iri (sparql, uri);
+
+	if (g_file_info_get_file_type (file_info) == G_FILE_TYPE_DIRECTORY) {
+		tracker_sparql_builder_object (sparql, "nfo:Folder");
+	}
+
+	parent = g_file_get_parent (file);
+	if (parent) {
+		parent_uri = g_file_get_uri (parent);
+		tracker_sparql_builder_predicate (sparql, "nfo:belongsToContainer");
+		tracker_sparql_builder_object_iri (sparql, parent_uri);
+		g_free (parent_uri);
+		g_object_unref (parent);
+	}
+
+	tracker_sparql_builder_predicate (sparql, "nfo:fileName");
+	tracker_sparql_builder_object_string (sparql, g_file_info_get_display_name (file_info));
+
+	tracker_sparql_builder_predicate (sparql, "nie:mimeType");
+	tracker_sparql_builder_object_string (sparql, mime_type);
+
+	tracker_sparql_builder_predicate (sparql, "nfo:fileSize");
+	tracker_sparql_builder_object_int64 (sparql, g_file_info_get_size (file_info));
+
+	time_ = g_file_info_get_attribute_uint64 (file_info, G_FILE_ATTRIBUTE_TIME_MODIFIED);
+	tracker_sparql_builder_predicate (sparql, "nfo:fileLastModified");
+	tracker_sparql_builder_object_date (sparql, (time_t *) &time_);
+
+	time_ = g_file_info_get_attribute_uint64 (file_info, G_FILE_ATTRIBUTE_TIME_ACCESS);
+        tracker_sparql_builder_predicate (sparql, "nfo:fileLastAccessed");
+	tracker_sparql_builder_object_date (sparql, (time_t *) &time_);
+
+        /* FIXME: Missing embedded data and text */
+
+	g_free (uri);
+
+	return TRUE;
+}
+
+static void
+tracker_miner_files_init (TrackerMinerFiles *miner)
+{
+}
+
+TrackerMiner *
+tracker_miner_files_new (TrackerConfig *config)
+{
+        return g_object_new (TRACKER_TYPE_MINER_FILES,
+                             "name", "Files",
+                             "config", config,
+                             NULL);
+}
diff --git a/src/tracker-miner-fs/tracker-miner-files.h b/src/tracker-miner-fs/tracker-miner-files.h
new file mode 100644
index 0000000..a1db9e3
--- /dev/null
+++ b/src/tracker-miner-fs/tracker-miner-files.h
@@ -0,0 +1,53 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2008, Nokia
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation; either
+ * 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
+ * General Public License for more details.
+ *
+ * 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.
+ */
+
+#ifndef __TRACKER_MINER_FILES_H__
+#define __TRACKER_MINER_FILES_H__
+
+#include <libtracker-miner/tracker-miner-process.h>
+#include "tracker-config.h"
+
+G_BEGIN_DECLS
+
+#define TRACKER_TYPE_MINER_FILES         (tracker_miner_files_get_type())
+#define TRACKER_MINER_FILES(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), TRACKER_TYPE_MINER_FILES, TrackerMinerFiles))
+#define TRACKER_MINER_FILES_CLASS(c)     (G_TYPE_CHECK_CLASS_CAST ((c), TRACKER_TYPE_MINER_FILES, TrackerMinerFilesClass))
+#define TRACKER_IS_FILES(o)              (G_TYPE_CHECK_INSTANCE_TYPE ((o), TRACKER_TYPE_MINER_FILES))
+#define TRACKER_IS_FILES_CLASS(c)        (G_TYPE_CHECK_CLASS_TYPE ((c),  TRACKER_TYPE_MINER_FILES))
+#define TRACKER_MINER_FILES_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), TRACKER_TYPE_MINER_FILES, TrackerMinerFilesClass))
+
+typedef struct _TrackerMinerFiles TrackerMinerFiles;
+typedef struct _TrackerMinerFilesClass TrackerMinerFilesClass;
+
+struct _TrackerMinerFiles {
+        TrackerMinerProcess parent_instance;
+};
+
+struct _TrackerMinerFilesClass {
+        TrackerMinerProcessClass parent_class;
+};
+
+GType          tracker_miner_files_get_type (void) G_GNUC_CONST;
+
+TrackerMiner * tracker_miner_files_new (TrackerConfig *config);
+
+G_END_DECLS
+
+#endif /* __TRACKER_MINER_FILES_H__ */
diff --git a/src/tracker-miner-fs/tracker-miner-main.c b/src/tracker-miner-fs/tracker-miner-main.c
index 93acbbe..0db9fab 100644
--- a/src/tracker-miner-fs/tracker-miner-main.c
+++ b/src/tracker-miner-fs/tracker-miner-main.c
@@ -53,6 +53,7 @@
 #include "tracker-indexer.h"
 #include "tracker-marshal.h"
 #include "tracker-miner-applications.h"
+#include "tracker-miner-files.h"
 
 #define ABOUT								  \
 	"Tracker " PACKAGE_VERSION "\n"
@@ -213,7 +214,7 @@ int
 main (gint argc, gchar *argv[])
 {
 	TrackerConfig *config;
-        TrackerMiner *miner_applications;
+        TrackerMiner *miner_applications, *miner_files;
         TrackerStorage *storage;
 	GOptionContext *context;
 	GError *error = NULL;
@@ -309,6 +310,7 @@ main (gint argc, gchar *argv[])
 	storage = NULL;
 #endif
 
+        /* Create miner for applications */
         miner_applications = tracker_miner_applications_new ();
 
         tracker_miner_process_add_directory (TRACKER_MINER_PROCESS (miner_applications),
@@ -322,6 +324,11 @@ main (gint argc, gchar *argv[])
 
         tracker_miner_start (miner_applications);
 
+        /* Create miner for files */
+        miner_files = tracker_miner_files_new (config);
+
+        tracker_miner_start (miner_files);
+
 	g_message ("Starting...");
 
 	main_loop = g_main_loop_new (NULL, FALSE);



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