Developing a very simple client from scratch

Requirements

This example has been tested on the system with tracker-client-0.9 installed from sources. Might work with other versions after changing the configure.in.

Project files

main.c, Makefile.am, configure.in

configure.in

AC_INIT(main.c)
AM_INIT_AUTOMAKE(main,1.0)
AC_PROG_CC

PKG_CHECK_MODULES(TRACKER, [tracker-client-0.9])
AC_SUBST(TRACKER_CFLAGS)
AC_SUBST(TRACKER_LIBS)

AC_PROG_INSTALL
AC_OUTPUT(Makefile)

Makefile.am

INCLUDES = $(DBUS_CFLAGS) $(TRACKER_CFLAGS)
main_LDADD = $(DBUS_LIBS) $(TRACKER_LIBS)

bin_PROGRAMS = main
main_SOURCES = main.c

main.c

#include <glib.h>
#include <libtracker-client/tracker-client.h>

void print_row (gpointer data, gpointer user_data)
{
        gchar **columns = (gchar**) data;
        g_print ("%s\n", columns[0]);
}

int main (int argc, char **argv)
{
        TrackerClient   *client = NULL;
        GPtrArray       *rows = NULL;
        GError          *error = NULL;
        const gchar     *query;

        client = tracker_client_new (0, G_MAXINT);

        query = "SELECT ?s WHERE { ?s rdf:type rdfs:Class . }";
        // Uncomment the line below and comment out the line above if you have Tracker running and it contains some files
        // query = "SELECT ?fileName WHERE { ?contact a nfo:FileDataObject; nfo:fileName ?fileName}";

        // Returns an array containing pointers to arrays of strings
        rows = tracker_resources_sparql_query (client, query, &error);

        if (error) {
                g_warning ("Could not query Tracker, %s", error->message);

                g_error_free (error);
                g_object_unref (client);
                return -1;
        }

        // Processes a query result
        g_ptr_array_foreach (rows, print_row, NULL);

        g_ptr_array_free (rows, TRUE);
        g_object_unref (client);
        return 0;
}

Building the project

The simplest way

In this case Makefile.am and configure.in are not needed.

$ cc `pkg-config --cflags --libs tracker-client` main.c -o main

Using autotools

Put all three files in the same folder and execute the line below.

$ aclocal && autoconf && automake -a && ./configure

Projects/Tracker/Documentation/ClientDevelopmentFromScratch (last edited 2013-11-25 12:54:22 by WilliamJonMcCann)