module_LTLIBRARIES = mod_spotlight.la
mod_spotlight_la_SOURCES = spotlight_module.c
-mod_spotlight_la_CFLAGS = -DDBUS_API_SUBJECT_TO_CHANGE @TRACKER_CFLAGS@
-mod_spotlight_la_LDFLAGS = -module -avoid-version @TRACKER_LIBS@
+mod_spotlight_la_CFLAGS = -DDBUS_API_SUBJECT_TO_CHANGE @TRACKER_CFLAGS@ @TRACKER_MINER_CFLAGS@
+mod_spotlight_la_LDFLAGS = -module -avoid-version @TRACKER_LIBS@ @TRACKER_MINER_LIBS@
endif
#include "file.h"
#include "filedir.h"
#include "unix.h"
+#include "spotlight.h"
/* the format for the finderinfo fields (from IM: Toolbox Essentials):
* field bytes subfield bytes
ad_flush(&ad);
ad_close(&ad, ADFLAGS_DF|ADFLAGS_HF );
fce_register_new_file(s_path);
-
-createfile_done:
+ sl_index_file(path);
curdir->d_offcnt++;
-
setvoltime(obj, vol );
return (retvalue);
EC_EXIT;
}
+/**
+ * Index a file
+ **/
+void sl_index_file(const char *path)
+{
+ sl_module_export->sl_mod_index_file(path);
+}
+
/**************************************************************************************************
* AFP functions
**************************************************************************************************/
+
int afp_spotlight_rpc(AFPObj *obj, char *ibuf, size_t ibuflen, char *rbuf, size_t *rbuflen)
{
EC_INIT;
int (*sl_mod_fetch_result)(void *);
int (*sl_mod_end_search) (void *);
int (*sl_mod_error) (void *);
+ int (*sl_mod_index_file) (const void *);
};
extern int sl_mod_load(const char *path);
-
+extern void sl_index_file(const char *path);
/**************************************************************************************************
* Spotlight RPC and marshalling stuff
#include <gio/gio.h>
#include <tracker-sparql.h>
+#include <libtracker-miner/tracker-miner.h>
#include <atalk/util.h>
#include <atalk/errchk.h>
EC_EXIT;
}
+static int sl_mod_index_file(const void *p)
+{
+#ifdef HAVE_TRACKER_MINER
+ /* hangs in tracker_miner_manager_new_full() for whatever reason... */
+ return 0;
+
+ EC_INIT;
+ const char *f = p;
+
+ if (!f)
+ goto EC_CLEANUP;
+
+ TrackerMinerManager *manager;
+ GError *error = NULL;
+ GFile *file;
+
+ if ((manager = tracker_miner_manager_new_full(FALSE, &error)) == NULL) {
+ LOG(log_error, logtype_sl, "sl_mod_index_file(\"%s\"): couldn't connect to Tracker miner", f);
+ } else {
+ file = g_file_new_for_commandline_arg(f);
+ tracker_miner_manager_index_file(manager, file, &error);
+ if (error)
+ LOG(log_error, logtype_sl, "sl_mod_index_file(\"%s\"): indexing failed", f);
+ else
+ LOG(log_debug, logtype_sl, "sl_mod_index_file(\"%s\"): indexing file was successful", f);
+ g_object_unref(manager);
+ g_object_unref(file);
+ }
+
+EC_CLEANUP:
+ EC_EXIT;
+#else
+ return 0;
+#endif
+}
+
struct sl_module_export sl_mod = {
SL_MODULE_VERSION,
sl_mod_init,
sl_mod_start_search,
sl_mod_fetch_result,
sl_mod_close_query,
- sl_mod_error
+ sl_mod_error,
+ sl_mod_index_file
};
if test x"$ac_cv_have_tracker" = x"no" ; then
if test x"$need_tracker" = x"yes" ; then
AC_MSG_ERROR([$ac_cv_tracker_pkg not found])
+ fi
+ else
+ AC_DEFINE(HAVE_TRACKER, 1, [Define if Tracker library is available])
fi
- fi
AC_SUBST(TRACKER_CFLAGS)
AC_SUBST(TRACKER_LIBS)
AM_CONDITIONAL(HAVE_TRACKER, [test x"$ac_cv_have_tracker" = x"yes"])
+
+ ac_cv_tracker_miner_pkg_default=tracker-miner-0.12
+ AC_ARG_WITH([tracker-miner-pkg-config],
+ [AS_HELP_STRING([--with-tracker-miner-pkg-config],[name of the Tracker miner pkg in pkg-config])],
+ [ac_cv_tracker_miner_pkg=$withval],
+ [ac_cv_tracker_miner_pkg=$ac_cv_tracker_miner_pkg_default])
+
+ AC_MSG_NOTICE([searching for $ac_cv_tracker_miner_pkg])
+
+ PKG_CHECK_MODULES([TRACKER_MINER], [$ac_cv_tracker_miner_pkg >= 0.12], [ac_cv_have_tracker_miner=yes], [ac_cv_have_tracker_miner=no])
+
+ if test x"$ac_cv_have_tracker_miner" = x"yes" ; then
+ AC_DEFINE(HAVE_TRACKER_MINER, 1, [Define if Tracker miner library is available])
+ AC_SUBST(TRACKER_MINER_CFLAGS)
+ AC_SUBST(TRACKER_MINER_LIBS)
+ fi
])
dnl Whether to disable bundled libevent