]> arthur.barton.de Git - netatalk.git/commitdiff
Add tracker_miner_manager and try to manually index new files
authorFrank Lahm <franklahm@googlemail.com>
Tue, 16 Oct 2012 23:08:25 +0000 (01:08 +0200)
committerFrank Lahm <franklahm@googlemail.com>
Tue, 16 Oct 2012 23:08:25 +0000 (01:08 +0200)
Doesn't work, hangs in tracker_miner_manager_new_full() for an unknown
reason.

etc/afpd/Makefile.am
etc/afpd/file.c
etc/afpd/spotlight.c
etc/afpd/spotlight.h
etc/afpd/spotlight_module.c
macros/netatalk.m4

index d870d70337f442751ea0cc003117bd49ab8c8f7c..31f0b04733b95dac8b7f2bb2c5289f636cc078bf 100644 (file)
@@ -87,6 +87,6 @@ moduledir = @UAMS_PATH@
 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
index 407dc6f9d9e5855e1bdde254ae888acf19e9956b..d97863d1564bc06365595d7fb191af24f0528d1e 100644 (file)
@@ -34,6 +34,7 @@
 #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
@@ -738,10 +739,8 @@ createfile_iderr:
     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);
index 52e2e3404bbc0fd93172df40d1d55e1e774933f1..cede06d232102f2a1992af4201574087dc8aa086 100644 (file)
@@ -368,9 +368,18 @@ EC_CLEANUP:
     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;
index 49a8fac063dd1d72204b617f7a8810b6751ada1c..4a93c18a771ea7350584cf499390b2ed6e47b912 100644 (file)
@@ -39,10 +39,11 @@ struct sl_module_export {
     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
index f5321cd1fe80d56139640bad5b3881bba53091ad..d38abebbd064a81654eedcf6eee274be9ec73fce 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <gio/gio.h>
 #include <tracker-sparql.h>
+#include <libtracker-miner/tracker-miner.h>
 
 #include <atalk/util.h>
 #include <atalk/errchk.h>
@@ -289,11 +290,48 @@ EC_CLEANUP:
     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
 };
index 50d209c24411834d1aaded0f38bd868109315aa4..72867803fcdac4c0d786e7b05dc030d0b7a8117d 100644 (file)
@@ -28,12 +28,30 @@ AC_DEFUN([AC_NETATALK_SPOTLIGHT], [
     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