summaryrefslogtreecommitdiff
path: root/src/miners/fs/tracker-miner-files.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/miners/fs/tracker-miner-files.c')
-rw-r--r--src/miners/fs/tracker-miner-files.c35
1 files changed, 28 insertions, 7 deletions
diff --git a/src/miners/fs/tracker-miner-files.c b/src/miners/fs/tracker-miner-files.c
index e08b45689..a479f5494 100644
--- a/src/miners/fs/tracker-miner-files.c
+++ b/src/miners/fs/tracker-miner-files.c
@@ -77,6 +77,7 @@ struct ProcessFileData {
typedef void (*fast_async_cb) (const gchar *preupdate,
const gchar *sparql,
+ const gchar *where,
GError *error,
gpointer user_data);
@@ -1950,6 +1951,7 @@ process_file_data_free (ProcessFileData *data)
static void
extractor_get_embedded_metadata_cb (const gchar *preupdate,
const gchar *sparql,
+ const gchar *where,
GError *error,
gpointer user_data)
{
@@ -1985,6 +1987,12 @@ extractor_get_embedded_metadata_cb (const gchar *preupdate,
tracker_sparql_builder_graph_close (data->sparql);
tracker_sparql_builder_insert_close (data->sparql);
+ if (where && *where) {
+ tracker_sparql_builder_where_open (data->sparql);
+ tracker_sparql_builder_append (data->sparql, where);
+ tracker_sparql_builder_where_close (data->sparql);
+ }
+
/* Prepend preupdate queries */
if (preupdate && *preupdate) {
tracker_sparql_builder_prepend (data->sparql, preupdate);
@@ -2055,7 +2063,7 @@ extractor_get_embedded_metadata_cancel (GCancellable *cancellable,
static gboolean
extractor_skip_embedded_metadata_idle (gpointer user_data)
{
- extractor_get_embedded_metadata_cb (NULL, NULL, NULL, user_data);
+ extractor_get_embedded_metadata_cb (NULL, NULL, NULL, NULL, user_data);
return FALSE;
}
@@ -2251,22 +2259,35 @@ get_metadata_fast_cb (void *buffer,
{
FastAsyncData *data;
ProcessFileData *process_data;
+ gboolean valid_input = FALSE;
gboolean free_error = FALSE;
const gchar *preupdate = NULL;
const gchar *sparql = NULL;
+ const gchar *where = NULL;
data = user_data;
process_data = data->user_data;
if (!error && buffer_size) {
- gsize preupdate_length;
+ gsize preupdate_length, sparql_length, where_length;
preupdate = buffer;
- preupdate_length = strnlen (preupdate, buffer_size);
- if (preupdate_length < buffer_size && preupdate[buffer_size - 1] == '\0') {
+ preupdate_length = strnlen (preupdate, buffer_size - 1);
+ if (preupdate[preupdate_length] == '\0') {
/* sparql is stored just after preupdate in the original buffer */
sparql = preupdate + preupdate_length + 1;
- } else {
+ sparql_length = strnlen (sparql, preupdate + buffer_size - 1 - sparql);
+ if (sparql[sparql_length] == '\0') {
+ /* where is stored just after sparql in the original buffer */
+ where = sparql + sparql_length + 1;
+ where_length = strnlen (where, preupdate + buffer_size - 1 - where);
+ if (where[where_length] == '\0') {
+ valid_input = TRUE;
+ }
+ }
+ }
+
+ if (!valid_input) {
error = g_error_new_literal (miner_files_error_quark,
0,
"Invalid data received from GetMetadataFast");
@@ -2276,13 +2297,13 @@ get_metadata_fast_cb (void *buffer,
if (G_UNLIKELY (error)) {
if (error->code != G_IO_ERROR_CANCELLED) {
- (* data->callback) (NULL, NULL, error, process_data);
+ (* data->callback) (NULL, NULL, NULL, error, process_data);
}
if (free_error) {
g_error_free (error);
}
} else {
- (* data->callback) (preupdate, sparql, NULL, data->user_data);
+ (* data->callback) (preupdate, sparql, where, NULL, data->user_data);
}
fast_async_data_free (data);