diff options
author | Martyn Russell <martyn@lanedo.com> | 2009-11-23 07:01:23 +0000 |
---|---|---|
committer | Martyn Russell <martyn@lanedo.com> | 2009-11-23 07:01:23 +0000 |
commit | 7f0ebaba186dec88607ff9623420b16d37a8441c (patch) | |
tree | 453fc9d72a80f0335a6f05ee25c2e64cf9dabf1d /examples/libtracker-miner | |
parent | 06d09f2673a9d15b7b85837b3299c12a092a424f (diff) | |
download | tracker-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/libtracker-miner')
-rw-r--r-- | examples/libtracker-miner/.gitignore | 1 | ||||
-rw-r--r-- | examples/libtracker-miner/Makefile.am | 36 | ||||
-rw-r--r-- | examples/libtracker-miner/tracker-main.c | 253 | ||||
-rw-r--r-- | examples/libtracker-miner/tracker-miner-test.c | 43 | ||||
-rw-r--r-- | examples/libtracker-miner/tracker-miner-test.h | 53 |
5 files changed, 386 insertions, 0 deletions
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__ */ |