Commit 3b280cfa authored by Jamie McCracken's avatar Jamie McCracken

updates

parent 04cf0119
2006-10-16 Jamie McCracken <jamiemcc at gnome org>
* Fixed gui
* added buttons
* cleaned up code
* created dbus methods to get snippets
2006-10-17 Edward Duffy <eduffy at gmail com>
* Made a totem extractor
* Fix for pdf extractor
2006-10-16 Jamie McCracken <jamiemcc at gnome org>
......
18th October
released 0.5.0
14 May
Improved support for Fedora Core 5
Improved EXIF metadata
......
......@@ -40,38 +40,13 @@ Tracker is the most powerful open source metadata database and indexer framework
NEW CHANGES
* Hugely optimised indexing when many files are waiting to be indexed (especailly when you first run trackerd)
* Imporved indexing speed
* Mass queueing of files no longer blocks the main thread meaning super fast searches can still be performed during heavy indexing
* Removed libextractor dependency and created a suite of metadata extractors instead
* Eliminated cpu bottlenecks and improved thread synchronisations so Tracker now hits the ground running when indexing (approx 500+ files indexed per minute on inotify enabled systems)
* Extended metadata support for more Exif fields
* Added more service types
* Imporved build and support for FC5 (includes RPMs)
* Redesigned Database around version 5 of the *embedded* in-process mysql database library
* Now uses the auto repair facility provided by mysql to automatically repair damaged database files so you need never worry about losing your precious data.
* Moved virtually all DB logic into stored procedures which provides a clean seperation of DB logic and application logic
* Added support for parsing dates in various formats including conversion to/from ISO 8601 format
* Fixed MsWord filter to prevent looping (WvText causes inotify to report file write change causing endless looping)
* Redesigned DB structure to be more generic and service orientated
* Added support for service types (first class objects) to DB
* Cleaned up code warnings and fixed potential crasher (thanks to patch from Nate Nielsen)
* Fixed issues with argv handling (thanks to patch from Dan Nicolaescu)
* Fixed build issue for Fedora Core 5 (thanks to patch from Dan Nicolaescu)
* Redesigned around Sqlite DB and QDBM inverted word index
* New Tracker search tool (GUI)
FEATURES
......@@ -90,8 +65,6 @@ FEATURES
* Extracts embedded File, Image, Document and Audio type metadata from files.
* Extracts embedded metadata from HTML, PDF, PS, OLE2 (DOC, XLS, PPT), OpenOffice (sxw), StarOffice (sdw), DVI, MAN, MP3 (ID3v1 and ID3v2), OGG, WAV, EXIV2, JPEG, GIF, PNG, TIFF, DEB, RPM, TAR(.GZ), ZIP, ELF, REAL, RIFF (AVI), MPEG, QT and ASF files
* Supports the WC3's RDF Query syntax for querying metadata
* Provides support for both free text search (like Beagle/Google) as well as structured searches using RDF Query
......@@ -111,19 +84,12 @@ FEATURES
INSTALLATION (from source):
The following build dependency is needed:
lThe embedded mysql library ibmysqld.a version 5.0.19 or higher is required complete with corresponding header files and the mysql_config program. The libmysqld.a library is always statically linked so it is not a runtime dependency. It can be found in Debian/Ubuntu package libmysqlclient15-dev. Other distros should check their mysql client libs to see if it is present.
If not present you can compile libmysqld.a by downloading source tarball for an appropriate version (5.0.19+) from the bottom of page http://dev.mysql.com/downloads/mysql/5.0.html
The following configure flags are reccommended if building mysqld.a from source: --without-server --with-embedded-server --enable-assembler --without-debug --without-query-cache --without-geometry --without-extra-tools --without-docs --without-man --without-bench --without-innodb --with-senna
Generic RPMs and tarballs are also provided for the embedded mysql library and another for the development headers at http://www.gnome.org/~jamiemcc/tracker/
Run time dependencies (also needed for build) :
Sqlite 3.2+
libdbus (0.50 +)
dbus-glib bndings (0.50 +)
......@@ -132,22 +98,22 @@ glib (2.6+)
zlib
libvorbisfile3 (1.1+)
GMime
Additional recommended packages:
libextractor (0.5.9+) (tracker has a streamlined version inlined)
wv (1.0.2+)
poppler (pdftotext)
libvorbis
GTK and Gnome stack for GUI tools
COMPILATION
To compile Tracker uses the following commands :
./configure --prefix=/usr --enable-static --with-pic CFLAGS=-I/usr/include/exiv2
./configure --prefix=/usr
make
sudo make install
......@@ -158,13 +124,13 @@ If you install using any other prefix then you might have problems with files no
Notes to build tracker on Solaris
To compile Tracker with GCC on Solaris uses the following commands :
./configure --prefix=/usr --enable-static --with-pic CFLAGS=-D_POSIX_PTHREAD_SEMANTICS
./configure --prefix=/usr --with-pic CFLAGS=-D_POSIX_PTHREAD_SEMANTICS
make
login as root
make install
To compile Tracker with SUN Studio on Solaris uses the following commands, because there are some problems to compile exiv2 using SUN C++ compiler:
./configure --prefix=/usr --enable-static --with-pic --disable-warnings --disable-exiv2 CFLAGS=-D_POSIX_PTHREAD_SEMANTICS
./configure --prefix=/usr --with-pic --disable-warnings --disable-exiv2 CFLAGS=-D_POSIX_PTHREAD_SEMANTICS
make
login as root
make install
......@@ -179,8 +145,6 @@ Tracker has several compiler options to enable/disable certain features. The fol
--disable-inotify : this option omits support for inotify with tracker
--enable-libextractor : this option forces the use of the prepackaged streamlined version of libextractor in tracker
RUNNING TRACKER
......@@ -192,6 +156,14 @@ You can also pass a directory root to be indexed as a command line parameter if
"trackerd /home/jamie/Documents"
You can disable indexing by passing --disable-indexing
You can enable a low memory usage mode (recommended for machines with less than 256MB of RAM) by passing --enable-low-memory
You can enable turbo indexing by passing --turbo
You can specify directory roots not to be watched or indexed by passing --ignore-dirs=dir1 for each directory root
You can make sure that tracker only indexes a subset of your home directory and also specify folders not in your home directory by editing the tracker.cfg file in ~/.Tracker (which is created when you first run trackerd) and setting WatchDirectoryRoots to a semicolon delimited list of directories (full path required!)
EG:
......@@ -221,10 +193,12 @@ COMMAND LINE TOOLS
Tracker comes with a number of command line apps that you can use:
"tracker-tag" for setting and searching tags/keywords
"tracker-extract FILE" - this extracts embedded metadata from FILE and prints to stdout
"tracker-search SEARCHTERM" - this perfoms a google like search using SEARCHTERM to retrieve all matching files where SEARCHTERM appears in any searchable metadata
"tracker-query" - this reads from STDIN an RDF Query that specifies the search criteria for various fields. It prints to STDOUT all matching files. You can see some example queries in the RDF-Query-examples folder. You can run the examples as "tracker-query < RDFFILE"
"tracker-query" - this reads an RDF Query that specifies the search criteria for various fields. It prints to STDOUT all matching files. You can see some example queries in the RDF-Query-examples folder. You can run the examples as "tracker-query < RDFFILE"
......@@ -115,9 +115,9 @@ then
AC_SUBST(SQLITE3_LIBS)
# Check for QDBM
PKG_CHECK_MODULES(QDBM, [ qdbm >= 1.8.0 ])
AC_SUBST(QDBM_CFLAGS)
AC_SUBST(QDBM_LIBS)
#PKG_CHECK_MODULES(QDBM, [ qdbm >= 1.8.0 ])
#AC_SUBST(QDBM_CFLAGS)
#AC_SUBST(QDBM_LIBS)
else
......
......@@ -18,6 +18,8 @@ GetFilesByServiceType SELECT DISTINCT F.Path || '/' || F.Name as uri FROM Serv
GetFileByID SELECT DISTINCT Path , Name, Mime FROM Services WHERE ID = ?;
GetFileByID2 SELECT DISTINCT (Path || '/' || Name) as uri, GetServiceName (ServiceTypeID), Mime FROM Services WHERE ID = ?;
GetFileMTime SELECT M.MetaDataValue FROM Services F inner join ServiceNumericMetaData M on F.ID = M.ServiceID WHERE F.Path = ? and F.Name = ? and M.MetaDataID = (select ID From MetaDataTypes where MetaName ='File.Modified');
......@@ -85,7 +87,6 @@ DeleteDirectory6 DELETE FROM ServiceNumericMetaData WHERE ServiceID in (select
DeleteDirectory7 DELETE FROM ServiceBlobMetaData WHERE ServiceID in (select ID FROM Services F where (F.Path = ?) OR (F.Path glob ?));
DeleteDirectory8 DELETE FROM ServiceWords WHERE ServiceID in (select ID FROM Services F where (F.Path = ?) OR (F.Path glob ?));
SaveFileContents REPLACE into ServiceContents (ServiceID, Content, ContainsWordScores) values (?,?,?);
DeleteFileContents DELETE FROM ServiceContents where ServiceID = ?;
GetFileContents Select uncompress (Content), ContainsWordScores from ServiceContents where ServiceID = ? and Content is not null
......
......@@ -4,7 +4,7 @@ CREATE TABLE Options (
OptionValue Text COLLATE NOCASE
);
insert Into Options (OptionKey, OptionValue) values ('DBVersion', '10');
insert Into Options (OptionKey, OptionValue) values ('DBVersion', '11');
insert Into Options (OptionKey, OptionValue) values ('Sequence', '0');
insert Into Options (OptionKey, OptionValue) values ('UpdateCount', '0');
......
......@@ -106,6 +106,9 @@
<arg type="as" name="keys" direction="in" />
<arg type="as" name="values" direction="in" />
</method>
<!--
Registers a new metadata type. The metadata name must be namespaced with an appropriate class in the format "class.name"
......@@ -234,7 +237,7 @@
<!-- generic search interface (see other interfaces for file/keyword specific searches)-->
<!-- searches specified service for entities that match the specified search_text.
Returns id field of all hits. sort_by_relevance returns results sorted with the biggest hits first (as sorting is slower, you might want to disable this for fast queries) -->
Returns uri of all hits. -->
<method name="Text">
<arg type="i" name="live_query_id" direction="in" />
<arg type="s" name="service" direction="in" />
......@@ -244,6 +247,26 @@
<arg type="as" name="result" direction="out" />
</method>
<!-- More detailed version of above. Searches specified service for entities that match the specified search_text.
Returns hits in array format [uri, service, mime] -->
<method name="TextDetailed">
<arg type="i" name="live_query_id" direction="in" />
<arg type="s" name="service" direction="in" />
<arg type="s" name="search_text" direction="in" />
<arg type="i" name="offset" direction="in" />
<arg type="i" name="max_hits" direction="in" />
<arg type="aas" name="result" direction="out" />
</method>
<!-- Returns a search snippet of text with matchinhg text enclosed in bold tags -->
<method name="GetSnippet">
<arg type="s" name="service" direction="in" />
<arg type="s" name="id" direction="in" />
<arg type="s" name="search_text" direction="in" />
<arg type="s" name="result" direction="out" />
</method>
<!-- searches a specific metadata field (field parameter) for a search term (search_text).
......
......@@ -5,12 +5,12 @@ INCLUDES = \
$(CFLAGS) \
-g
lib_LTLIBRARIES = libmetatracker.la
lib_LTLIBRARIES = libtrackerclient.la
libmetatracker_la_LIBADD = $(GLIB2_LIBS) \
libtrackerclient_la_LIBADD = $(GLIB2_LIBS) \
$(DBUS_LIBS)
libmetatracker_la_SOURCES = tracker.c
libtrackerclient_la_SOURCES = tracker.c
include_HEADERS = tracker.h tracker-client.h
bin_PROGRAMS = tracker-search tracker-query tracker-meta-folder tracker-stats tracker-tag tracker-files
......@@ -20,43 +20,43 @@ tracker_search_SOURCES = tracker-search.c
tracker_search_LDADD = $(GLIB2_LIBS) \
$(DBUS_LIBS) \
$(GOBJECT_LIBS) \
$(top_builddir)/src/libtracker/libmetatracker.la
$(top_builddir)/src/libtracker/libtrackerclient.la
tracker_query_SOURCES = tracker-query.c
tracker_query_LDADD = $(GLIB2_LIBS) \
$(DBUS_LIBS) \
$(GOBJECT_LIBS) \
$(top_builddir)/src/libtracker/libmetatracker.la
$(top_builddir)/src/libtracker/libtrackerclient.la
tracker_meta_folder_SOURCES = tracker-get-meta-for-folder.c
tracker_meta_folder_LDADD = $(GLIB2_LIBS) \
$(DBUS_LIBS) \
$(GOBJECT_LIBS) \
$(top_builddir)/src/libtracker/libmetatracker.la
$(top_builddir)/src/libtracker/libtrackerclient.la
tracker_stats_SOURCES = tracker-stats.c
tracker_stats_LDADD = $(GLIB2_LIBS) \
$(DBUS_LIBS) \
$(GOBJECT_LIBS) \
$(top_builddir)/src/libtracker/libmetatracker.la
$(top_builddir)/src/libtracker/libtrackerclient.la
tracker_tag_SOURCES = tracker-tag.c
tracker_tag_LDADD = $(GLIB2_LIBS) \
$(DBUS_LIBS) \
$(GOBJECT_LIBS) \
$(top_builddir)/src/libtracker/libmetatracker.la
$(top_builddir)/src/libtracker/libtrackerclient.la
tracker_files_SOURCES = tracker-files.c
tracker_files_LDADD = $(GLIB2_LIBS) \
$(DBUS_LIBS) \
$(GOBJECT_LIBS) \
$(top_builddir)/src/libtracker/libmetatracker.la
$(top_builddir)/src/libtracker/libtrackerclient.la
install-exec-hook:
ln -fs $(DESTDIR)/$(libdir)/libmetatracker.so $(DESTDIR)/$(libdir)/libtracker.so
ln -fs $(DESTDIR)/$(libdir)/libmetatracker.so.0 $(DESTDIR)/$(libdir)/libtracker.so.0
ln -fs $(DESTDIR)/$(libdir)/libtrackerclient.so $(DESTDIR)/$(libdir)/libtracker.so
ln -fs $(DESTDIR)/$(libdir)/libtrackerclient.so.0 $(DESTDIR)/$(libdir)/libtracker.so.0
......@@ -672,6 +672,82 @@ static
inline
#endif
gboolean
org_freedesktop_Tracker_Search_text_detailed (DBusGProxy *proxy, const gint IN_live_query_id, const char * IN_service, const char * IN_search_text, const gint IN_offset, const gint IN_max_hits, GPtrArray** OUT_result, GError **error)
{
return dbus_g_proxy_call (proxy, "TextDetailed", error, G_TYPE_INT, IN_live_query_id, G_TYPE_STRING, IN_service, G_TYPE_STRING, IN_search_text, G_TYPE_INT, IN_offset, G_TYPE_INT, IN_max_hits, G_TYPE_INVALID, dbus_g_type_get_collection ("GPtrArray", G_TYPE_STRV), OUT_result, G_TYPE_INVALID);
}
typedef void (*org_freedesktop_Tracker_Search_text_detailed_reply) (DBusGProxy *proxy, GPtrArray *OUT_result, GError *error, gpointer userdata);
static void
org_freedesktop_Tracker_Search_text_detailed_async_callback (DBusGProxy *proxy, DBusGProxyCall *call, void *user_data)
{
DBusGAsyncData *data = user_data;
GError *error = NULL;
GPtrArray* OUT_result;
dbus_g_proxy_end_call (proxy, call, &error, dbus_g_type_get_collection ("GPtrArray", G_TYPE_STRV), &OUT_result, G_TYPE_INVALID);
(*(org_freedesktop_Tracker_Search_text_detailed_reply)data->cb) (proxy, OUT_result, error, data->userdata);
return;
}
static
#ifdef G_HAVE_INLINE
inline
#endif
DBusGProxyCall*
org_freedesktop_Tracker_Search_text_detailed_async (DBusGProxy *proxy, const gint IN_live_query_id, const char * IN_service, const char * IN_search_text, const gint IN_offset, const gint IN_max_hits, org_freedesktop_Tracker_Search_text_detailed_reply callback, gpointer userdata)
{
DBusGAsyncData *stuff;
stuff = g_new (DBusGAsyncData, 1);
stuff->cb = G_CALLBACK (callback);
stuff->userdata = userdata;
return dbus_g_proxy_begin_call (proxy, "TextDetailed", org_freedesktop_Tracker_Search_text_detailed_async_callback, stuff, g_free, G_TYPE_INT, IN_live_query_id, G_TYPE_STRING, IN_service, G_TYPE_STRING, IN_search_text, G_TYPE_INT, IN_offset, G_TYPE_INT, IN_max_hits, G_TYPE_INVALID);
}
static
#ifdef G_HAVE_INLINE
inline
#endif
gboolean
org_freedesktop_Tracker_Search_get_snippet (DBusGProxy *proxy, const char * IN_service, const char * IN_id, const char * IN_search_text, char ** OUT_result, GError **error)
{
return dbus_g_proxy_call (proxy, "GetSnippet", error, G_TYPE_STRING, IN_service, G_TYPE_STRING, IN_id, G_TYPE_STRING, IN_search_text, G_TYPE_INVALID, G_TYPE_STRING, OUT_result, G_TYPE_INVALID);
}
typedef void (*org_freedesktop_Tracker_Search_get_snippet_reply) (DBusGProxy *proxy, char * OUT_result, GError *error, gpointer userdata);
static void
org_freedesktop_Tracker_Search_get_snippet_async_callback (DBusGProxy *proxy, DBusGProxyCall *call, void *user_data)
{
DBusGAsyncData *data = user_data;
GError *error = NULL;
char * OUT_result;
dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_STRING, &OUT_result, G_TYPE_INVALID);
(*(org_freedesktop_Tracker_Search_get_snippet_reply)data->cb) (proxy, OUT_result, error, data->userdata);
return;
}
static
#ifdef G_HAVE_INLINE
inline
#endif
DBusGProxyCall*
org_freedesktop_Tracker_Search_get_snippet_async (DBusGProxy *proxy, const char * IN_service, const char * IN_id, const char * IN_search_text, org_freedesktop_Tracker_Search_get_snippet_reply callback, gpointer userdata)
{
DBusGAsyncData *stuff;
stuff = g_new (DBusGAsyncData, 1);
stuff->cb = G_CALLBACK (callback);
stuff->userdata = userdata;
return dbus_g_proxy_begin_call (proxy, "GetSnippet", org_freedesktop_Tracker_Search_get_snippet_async_callback, stuff, g_free, G_TYPE_STRING, IN_service, G_TYPE_STRING, IN_id, G_TYPE_STRING, IN_search_text, G_TYPE_INVALID);
}
static
#ifdef G_HAVE_INLINE
inline
#endif
gboolean
org_freedesktop_Tracker_Search_metadata (DBusGProxy *proxy, const char * IN_service, const char * IN_field, const char * IN_search_text, const gint IN_offset, const gint IN_max_hits, char *** OUT_result, GError **error)
{
......
......@@ -25,15 +25,43 @@
static gint limit = 0;
static gchar **terms = NULL;
static gchar *service = NULL;
static gboolean detailed;
static GOptionEntry entries[] = {
{"limit", 'l', 0, G_OPTION_ARG_INT, &limit, "limit the number of results showed", "limit"},
{"service", 's', 0, G_OPTION_ARG_STRING, &service, "search from a specific service", "service"},
{"detailed", 'd', 0, G_OPTION_ARG_NONE, &detailed, "Show more detailed results with service and mime type as well", NULL},
{G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_STRING_ARRAY, &terms, "search terms", NULL},
{NULL}
};
static void
get_meta_table_data (gpointer value)
{
char **meta, **meta_p;
meta = (char **)value;
int i = 0;
for (meta_p = meta; *meta_p; meta_p++) {
char *str;
str = g_filename_from_utf8 (*meta_p, -1, NULL, NULL, NULL);
if (i == 0) {
g_print ("%s : ", str);
} else {
g_print ("%s, ", *meta_p);
}
i++;
}
g_print ("\n");
}
int
main (int argc, char **argv)
{
......@@ -44,6 +72,7 @@ main (int argc, char **argv)
gchar *search;
gchar **result;
char **p_strarray;
GPtrArray *out_array = NULL;
setlocale (LC_ALL, "");
......@@ -91,9 +120,16 @@ main (int argc, char **argv)
}
search = g_strjoinv (" ", terms);
result = tracker_search_text (client, -1, type, search, 0, limit, &error);
if (!detailed) {
result = tracker_search_text (client, -1, type, search, 0, limit, &error);
} else {
out_array = tracker_search_text_detailed (client, -1, type, search, 0, limit, &error);
}
g_free (search);
if (error) {
g_printerr ("tracker raised error: %s\n", error->message);
g_error_free (error);
......@@ -104,6 +140,17 @@ main (int argc, char **argv)
g_printerr ("no results found\n");
return 0;
}
if (detailed) {
if (out_array) {
g_ptr_array_foreach (out_array, (GFunc)get_meta_table_data, NULL);
g_ptr_array_free (out_array, TRUE);
}
tracker_disconnect (client);
return 0;
}
for (p_strarray = result; *p_strarray; p_strarray++) {
char *s = g_locale_from_utf8 (*p_strarray, -1, NULL, NULL, NULL);
......@@ -116,6 +163,8 @@ main (int argc, char **argv)
}
g_strfreev (result);
tracker_disconnect (client);
return 0;
}
......@@ -537,6 +537,34 @@ tracker_search_text (TrackerClient *client, int live_query_id, ServiceType servi
return array;
}
GPtrArray *
tracker_search_text_detailed (TrackerClient *client, int live_query_id, ServiceType service, const char *search_text, int offset, int max_hits, GError **error)
{
GPtrArray *array;
char *service_str = service_types[service];
if (!org_freedesktop_Tracker_Search_text_detailed (client->proxy_search, live_query_id, service_str, search_text, offset, max_hits, &array, &*error)) {
return NULL;
}
return array;
}
char *
tracker_search_get_snippet (TrackerClient *client, ServiceType service, const char *uri, const char *search_text, GError **error)
{
char *result;
char *service_str = service_types[service];
if (!org_freedesktop_Tracker_Search_get_snippet (client->proxy_search, service_str, uri, search_text, &result, &*error)) {
return NULL;
}
return result;
}
char **
......@@ -1020,6 +1048,40 @@ tracker_search_text_async (TrackerClient *client, int live_query_id, ServiceType
}
void
tracker_search_text_detailed_async (TrackerClient *client, int live_query_id, ServiceType service, const char *search_text, int offset, int max_hits, TrackerGPtrArrayReply callback, gpointer user_data)
{
GPtrArrayCallBackStruct *callback_struct;
callback_struct = g_new (GPtrArrayCallBackStruct, 1);
callback_struct->callback = callback;
callback_struct->data = user_data;
char *service_str = service_types[service];
client->last_pending_call = org_freedesktop_Tracker_Search_text_detailed_async (client->proxy_search, live_query_id, service_str, search_text, offset, max_hits, tracker_GPtrArray_reply, callback_struct);
}
void
tracker_search_get_snippet_async (TrackerClient *client, ServiceType service, const char *uri, const char *search_text, TrackerStringReply callback, gpointer user_data)
{
StringCallBackStruct *callback_struct;
callback_struct = g_new (StringCallBackStruct, 1);
callback_struct->callback = callback;
callback_struct->data = user_data;
char *service_str = service_types[service];
client->last_pending_call = org_freedesktop_Tracker_Search_get_snippet_async (client->proxy_search, service_str, uri, search_text, tracker_string_reply, callback_struct);
}
void
tracker_search_metadata_async (TrackerClient *client, ServiceType service, const char *field, const char* search_text, int offset, int max_hits, TrackerArrayReply callback, gpointer user_data)
{
......
......@@ -118,6 +118,8 @@ char ** tracker_keywords_search (TrackerClient *client, int live_query_id, S
char ** tracker_search_text (TrackerClient *client, int live_query_id, ServiceType service, const char *search_text, int offset, int max_hits, GError **error);
GPtrArray * tracker_search_text_detailed (TrackerClient *client, int live_query_id, ServiceType service, const char *search_text, int offset, int max_hits, GError **error);
char * tracker_search_get_snippet (TrackerClient *client, ServiceType service, const char *uri, const char *search_text, GError **error);
char ** tracker_search_metadata (TrackerClient *client, ServiceType service, const char *field, const char* search_text, int offset, int max_hits, GError **error);
GPtrArray * tracker_search_query (TrackerClient *client, int live_query_id, ServiceType service, char **fields, const char *search_text, const char *keywords, const char *query, int offset, int max_hits, gboolean sort_by_service, GError **error);
......@@ -167,6 +169,8 @@ void tracker_keywords_search_async (TrackerClient *client, int live_query_i
void tracker_search_text_async (TrackerClient *client, int live_query_id, ServiceType service, const char *search_text, int offset, int max_hits, TrackerArrayReply callback, gpointer user_data);
void tracker_search_text_detailed_async (TrackerClient *client, int live_query_id, ServiceType service, const char *search_text, int offset, int max_hits, TrackerGPtrArrayReply callback, gpointer user_data);
void tracker_search_get_snippet_async (TrackerClient *client, ServiceType service, const char *uri, const char *search_text, TrackerStringReply callback, gpointer user_data);
void tracker_search_metadata_async (TrackerClient *client, ServiceType service, const char *field, const char* search_text, int offset, int max_hits, TrackerArrayReply callback, gpointer user_data);
void tracker_search_query_async (TrackerClient *client, int live_query_id, ServiceType service, char **fields, const char *search_text, const char *keywords, const char *query, int offset, int max_hits, gboolean sort_by_service, TrackerGPtrArrayReply callback, gpointer user_data);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment