summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorMartyn Russell <martyn@lanedo.com>2009-11-23 07:01:23 +0000
committerMartyn Russell <martyn@lanedo.com>2009-11-23 07:01:23 +0000
commit7f0ebaba186dec88607ff9623420b16d37a8441c (patch)
tree453fc9d72a80f0335a6f05ee25c2e64cf9dabf1d /examples
parent06d09f2673a9d15b7b85837b3299c12a092a424f (diff)
downloadtracker-7f0ebaba186dec88607ff9623420b16d37a8441c.tar.gz
libtracker-miner: Moved test/ directory to examples/
I did this because although it does test the API, it also shows it off like tracker-miner-fs. This is mostly a good way to show others how to build their own miners.
Diffstat (limited to 'examples')
-rw-r--r--examples/Makefile.am4
-rw-r--r--examples/libtracker-miner/.gitignore1
-rw-r--r--examples/libtracker-miner/Makefile.am36
-rw-r--r--examples/libtracker-miner/tracker-main.c253
-rw-r--r--examples/libtracker-miner/tracker-miner-test.c43
-rw-r--r--examples/libtracker-miner/tracker-miner-test.h53
6 files changed, 390 insertions, 0 deletions
diff --git a/examples/Makefile.am b/examples/Makefile.am
new file mode 100644
index 000000000..a85844f39
--- /dev/null
+++ b/examples/Makefile.am
@@ -0,0 +1,4 @@
+include $(top_srcdir)/Makefile.decl
+
+SUBDIRS = \
+ libtracker-miner
diff --git a/examples/libtracker-miner/.gitignore b/examples/libtracker-miner/.gitignore
new file mode 100644
index 000000000..8011919fb
--- /dev/null
+++ b/examples/libtracker-miner/.gitignore
@@ -0,0 +1 @@
+tracker-miner-test
diff --git a/examples/libtracker-miner/Makefile.am b/examples/libtracker-miner/Makefile.am
new file mode 100644
index 000000000..602f6357b
--- /dev/null
+++ b/examples/libtracker-miner/Makefile.am
@@ -0,0 +1,36 @@
+include $(top_srcdir)/Makefile.decl
+
+INCLUDES = \
+ -DSHAREDIR=\""$(datadir)"\" \
+ -DG_LOG_DOMAIN=\"Tracker\" \
+ -DTRACKER_COMPILATION \
+ -DI_KNOW_THE_DEVICEKIT_POWER_API_IS_SUBJECT_TO_CHANGE \
+ -I$(top_srcdir)/src \
+ $(WARN_CFLAGS) \
+ $(GLIB2_CFLAGS) \
+ $(GCOV_CFLAGS) \
+ $(GDKPIXBUF_CFLAGS) \
+ $(GIO_CFLAGS) \
+ $(PANGO_CFLAGS) \
+ $(HAL_CFLAGS) \
+ $(DEVKIT_POWER_CFLAGS) \
+ $(DBUS_CFLAGS) \
+ $(UNAC_CFLAGS)
+
+noinst_PROGRAMS = tracker-miner-test
+
+tracker_miner_test_SOURCES = \
+ tracker-miner-test.c \
+ tracker-miner-test.h \
+ tracker-main.c
+
+tracker_miner_test_LDADD = \
+ $(top_builddir)/src/libtracker-miner/libtracker-miner.la \
+ $(DBUS_LIBS) \
+ $(GMODULE_LIBS) \
+ $(GTHREAD_LIBS) \
+ $(GIO_LIBS) \
+ $(GCOV_LIBS) \
+ $(GLIB2_LIBS) \
+ -lz \
+ -lm
diff --git a/examples/libtracker-miner/tracker-main.c b/examples/libtracker-miner/tracker-main.c
new file mode 100644
index 000000000..1a9395538
--- /dev/null
+++ b/examples/libtracker-miner/tracker-main.c
@@ -0,0 +1,253 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2009, 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 "config.h"
+
+#include <string.h>
+#include <stdlib.h>
+
+#include <glib.h>
+
+#include <libtracker-common/tracker-utils.h>
+
+#include "tracker-miner-test.h"
+
+static void
+miner_finished_cb (TrackerMiner *miner,
+ gdouble seconds_elapsed,
+ guint total_directories_found,
+ guint total_directories_ignored,
+ guint total_files_found,
+ guint total_files_ignored,
+ gpointer user_data)
+{
+ GMainLoop *main_loop = user_data;
+
+ g_message ("Finished mining in seconds:%f, total directories:%d, total files:%d",
+ seconds_elapsed,
+ total_directories_found + total_directories_ignored,
+ total_files_found + total_files_ignored);
+
+ g_main_loop_quit (main_loop);
+}
+
+static gboolean
+miner_start_cb (gpointer user_data)
+{
+ TrackerMiner *miner = user_data;
+
+ g_message ("Starting miner");
+ tracker_miner_start (miner);
+
+ return FALSE;
+}
+
+static gboolean
+check_directory_cb (TrackerMinerFS *fs,
+ GFile *file,
+ gpointer user_data)
+{
+ gchar *path;
+ gchar *basename;
+ gboolean should_process;
+
+ should_process = FALSE;
+ basename = NULL;
+ path = g_file_get_path (file);
+
+ if (tracker_is_empty_string (path)) {
+ goto done;
+ }
+
+ if (!g_utf8_validate (path, -1, NULL)) {
+ g_message ("Ignoring path:'%s', not valid UTF-8", path);
+ goto done;
+ }
+
+ /* Most common things to ignore */
+ if (strcmp (path, "/dev") == 0 ||
+ strcmp (path, "/lib") == 0 ||
+ strcmp (path, "/proc") == 0 ||
+ strcmp (path, "/sys") == 0) {
+ goto done;
+ }
+
+ if (g_str_has_prefix (path, g_get_tmp_dir ())) {
+ goto done;
+ }
+
+ /* Check ignored directories in config */
+ basename = g_file_get_basename (file);
+
+ if (!basename) {
+ goto done;
+ }
+
+ /* If directory begins with ".", check it isn't one of
+ * the top level directories to watch/crawl if it
+ * isn't we ignore it. If it is, we don't.
+ */
+ if (basename[0] == '.') {
+ goto done;
+ }
+
+ /* Check module directory ignore patterns */
+ should_process = TRUE;
+
+done:
+ g_free (path);
+ g_free (basename);
+
+ return should_process;
+}
+
+static gboolean
+check_file_cb (TrackerMinerFS *fs,
+ GFile *file,
+ gpointer user_data)
+{
+ gchar *path;
+ gchar *basename;
+ gboolean should_process;
+
+ should_process = FALSE;
+ basename = NULL;
+ path = g_file_get_path (file);
+
+ if (tracker_is_empty_string (path)) {
+ goto done;
+ }
+
+ if (!g_utf8_validate (path, -1, NULL)) {
+ g_message ("Ignoring path:'%s', not valid UTF-8", path);
+ goto done;
+ }
+
+ /* Check basename against pattern matches */
+ basename = g_file_get_basename (file);
+
+ if (!basename || basename[0] == '.') {
+ goto done;
+ }
+
+ should_process = TRUE;
+
+done:
+ g_free (path);
+ g_free (basename);
+
+ return should_process;
+}
+
+static void
+process_file_cb (TrackerMinerFS *fs,
+ GFile *file,
+ gpointer user_data)
+{
+ gchar *path;
+
+ path = g_file_get_path (file);
+ g_print ("** PROCESSING FILE:'%s'\n", path);
+ g_free (path);
+}
+
+static gboolean
+monitor_directory_cb (TrackerMinerFS *fs,
+ GFile *file,
+ gpointer user_data)
+{
+ return TRUE;
+}
+
+static void
+add_directory_path (TrackerMinerFS *fs,
+ const gchar *path,
+ gboolean recurse)
+{
+ GFile *file;
+
+ file = g_file_new_for_path (path);
+ tracker_miner_fs_add_directory (fs, file, recurse);
+ g_object_unref (file);
+}
+
+int
+main (int argc, char *argv[])
+{
+ TrackerMiner *miner;
+ GMainLoop *main_loop;
+
+ g_type_init ();
+
+ if (!g_thread_supported ()) {
+ g_thread_init (NULL);
+ }
+
+ main_loop = g_main_loop_new (NULL, FALSE);
+
+ miner = tracker_miner_test_new ("test");
+
+ g_signal_connect (TRACKER_MINER_FS (miner), "check-file",
+ G_CALLBACK (check_file_cb),
+ NULL);
+ g_signal_connect (TRACKER_MINER_FS (miner), "check-directory",
+ G_CALLBACK (check_directory_cb),
+ NULL);
+ g_signal_connect (TRACKER_MINER_FS (miner), "process-file",
+ G_CALLBACK (process_file_cb),
+ NULL);
+ g_signal_connect (TRACKER_MINER_FS (miner), "monitor-directory",
+ G_CALLBACK (monitor_directory_cb),
+ NULL);
+
+ add_directory_path (TRACKER_MINER_FS (miner),
+ g_get_home_dir (),
+ FALSE);
+ add_directory_path (TRACKER_MINER_FS (miner),
+ g_get_tmp_dir (),
+ TRUE);
+ add_directory_path (TRACKER_MINER_FS (miner),
+ g_get_user_special_dir (G_USER_DIRECTORY_PICTURES),
+ TRUE);
+ add_directory_path (TRACKER_MINER_FS (miner),
+ g_get_user_special_dir (G_USER_DIRECTORY_MUSIC),
+ TRUE);
+ add_directory_path (TRACKER_MINER_FS (miner),
+ g_get_user_special_dir (G_USER_DIRECTORY_VIDEOS),
+ TRUE);
+ add_directory_path (TRACKER_MINER_FS (miner),
+ g_get_user_special_dir (G_USER_DIRECTORY_DOWNLOAD),
+ FALSE);
+ add_directory_path (TRACKER_MINER_FS (miner),
+ g_get_user_special_dir (G_USER_DIRECTORY_DOCUMENTS),
+ TRUE);
+ add_directory_path (TRACKER_MINER_FS (miner),
+ g_get_user_special_dir (G_USER_DIRECTORY_DESKTOP),
+ TRUE);
+
+ g_signal_connect (miner, "finished",
+ G_CALLBACK (miner_finished_cb),
+ main_loop);
+ g_timeout_add_seconds (1, miner_start_cb, miner);
+
+ g_main_loop_run (main_loop);
+
+ return EXIT_SUCCESS;
+}
diff --git a/examples/libtracker-miner/tracker-miner-test.c b/examples/libtracker-miner/tracker-miner-test.c
new file mode 100644
index 000000000..ce84bbba7
--- /dev/null
+++ b/examples/libtracker-miner/tracker-miner-test.c
@@ -0,0 +1,43 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2009, 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 "config.h"
+
+#include "tracker-miner-test.h"
+
+G_DEFINE_TYPE (TrackerMinerTest, tracker_miner_test, TRACKER_TYPE_MINER_FS)
+
+static void
+tracker_miner_test_class_init (TrackerMinerTestClass *klass)
+{
+}
+
+static void
+tracker_miner_test_init (TrackerMinerTest *miner)
+{
+}
+
+TrackerMiner *
+tracker_miner_test_new (const gchar *name)
+{
+ return g_object_new (TRACKER_TYPE_MINER_TEST,
+ "name", name,
+ NULL);
+}
diff --git a/examples/libtracker-miner/tracker-miner-test.h b/examples/libtracker-miner/tracker-miner-test.h
new file mode 100644
index 000000000..e1d59a6d2
--- /dev/null
+++ b/examples/libtracker-miner/tracker-miner-test.h
@@ -0,0 +1,53 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2009, 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_TEST_H__
+#define __TRACKER_MINER_TEST_H__
+
+#include <glib-object.h>
+
+#include <libtracker-miner/tracker-miner-fs.h>
+
+G_BEGIN_DECLS
+
+#define TRACKER_TYPE_MINER_TEST (tracker_miner_test_get_type())
+#define TRACKER_MINER_TEST(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), TRACKER_TYPE_MINER_TEST, TrackerMinerTest))
+#define TRACKER_MINER_TEST_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), TRACKER_TYPE_MINER_TEST, TrackerMinerTestClass))
+#define TRACKER_IS_MINER_TEST(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), TRACKER_TYPE_MINER_TEST))
+#define TRACKER_IS_MINER_TEST_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), TRACKER_TYPE_MINER_TEST))
+#define TRACKER_MINER_TEST_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), TRACKER_TYPE_MINER_TEST, TrackerMinerTestClass))
+
+typedef struct TrackerMinerTest TrackerMinerTest;
+typedef struct TrackerMinerTestClass TrackerMinerTestClass;
+
+struct TrackerMinerTest {
+ TrackerMinerFS parent_instance;
+};
+
+struct TrackerMinerTestClass {
+ TrackerMinerFSClass parent_class;
+};
+
+GType tracker_miner_test_get_type (void) G_GNUC_CONST;
+TrackerMiner * tracker_miner_test_new (const gchar *name);
+
+G_END_DECLS
+
+#endif /* __TRACKER_MINER_TEST_H__ */