Esempio n. 1
0
static void
decorator_cache_next_items (TrackerDecorator *decorator)
{
	TrackerDecoratorPrivate *priv = decorator->priv;

	if (priv->querying ||
	    g_hash_table_size (priv->tasks) > 0 ||
	    !g_queue_is_empty (&priv->item_cache))
		return;

        priv->querying = TRUE;

	if (priv->n_remaining_items == 0) {
		decorator_query_remaining_items (decorator);
	} else {
		TrackerSparqlConnection *sparql_conn;
		gchar *query;

		sparql_conn = tracker_miner_get_connection (TRACKER_MINER (decorator));
		query = create_remaining_items_query (decorator);
		tracker_sparql_connection_query_async (sparql_conn, query,
						       NULL, decorator_cache_items_cb,
						       decorator);
		g_free (query);
	}
}
Esempio n. 2
0
static void
connection_cb (GObject      *object,
               GAsyncResult *res,
               gpointer      user_data)
{
	MyData *md = user_data;
	GError *error = NULL;

	md->connection = tracker_sparql_connection_get_finish (res, &error);
	g_print ("Async connection took: %.6f\n", g_timer_elapsed (md->timer, NULL));

	g_timer_start (md->timer);

	if (!error) {
		tracker_sparql_connection_query_async (md->connection,
		                                       "SELECT ?r { ?r a rdfs:Resource }",
		                                       md->cancellable,
		                                       query_cb,
		                                       md);
	} else {
		g_critical ("Could not connect: %s", error->message);
		g_error_free (error);
		g_main_loop_quit (md->loop);
	}
}
Esempio n. 3
0
static void
collect_channels (ReaderEngine *engine,
                  const gchar *subject)
{
	gchar *query;
	ReaderEnginePrivate *priv;

	priv = reader_engine_get_instance_private (engine);

	if (subject == NULL)
		query = g_strdup ("SELECT ?s ?t ?u ?i ?r WHERE {?s a mfo:FeedChannel; "
		                                                "nie:title ?t; "
		                                                "mfo:unreadCount ?u; "
		                                                "mfo:image ?i; "
		                                                "nie:url ?r}");
	else
		query = g_strdup_printf ("SELECT <%s> ?t ?u ?i ?r WHERE { <%s> nie:title ?t; "
		                                                      "mfo:unreadCount ?u; "
		                                                      "mfo:image ?i; "
		                                                      "nie:url ?r}",
		                         subject, subject);

	tracker_sparql_connection_query_async (priv->tracker, query, NULL,
	                                       (GAsyncReadyCallback) on_fetch_channels, engine);
	g_free (query);
}
static void
do_sparql_query_async_connection_cb (GObject      *const object,
                                     GAsyncResult *const result,
                                     GTask        *const task)
{

  g_autoptr(GError) error = NULL;

  TrackerSparqlConnection *const conn = tracker_sparql_connection_get_finish (
    result,
    &error
  );

  if (error) {
    g_task_return_error (task, g_error_copy (error));
    return;
  }

  SparqlQueryWork *const work = sparql_query_work_get (task);
  work->connection = conn;

  tracker_sparql_connection_query_async (
    conn,
    work->sparql,
    g_task_get_cancellable (task),
    (GAsyncReadyCallback) do_sparql_query_async_cursor_cb,
    task
  );

}
static void
tracker_evt_preupdate_sources (tracker_evt_update_t *evt)
{
  tracker_sparql_connection_query_async (grl_tracker_connection,
                                         TRACKER_DATASOURCES_REQUEST,
                                         NULL,
                                         (GAsyncReadyCallback) tracker_evt_preupdate_sources_cb,
                                         evt);
}
Esempio n. 6
0
static void init_model (TrackerSparqlConnection *tracker, GtkListStore *model)
{
	gchar *query;

	query = "SELECT ?item ?name ?downenclosures ?enclosurespath ?enclosuressize ?expiry "
			"WHERE {?item a mfo:FeedChannel . "
				"?item nie:title ?name . "
				"?item mfo:feedSettings ?setts . "
				"OPTIONAL {?setts mfo:downloadFlag ?downenclosures} . "
				"OPTIONAL {?setts mfo:downloadPath ?enclosurespath} . "
				"OPTIONAL {?setts mfo:maxSize ?enclosuressize} . "
				"OPTIONAL {?setts mfo:expiryInterval ?expiry}}";

	tracker_sparql_connection_query_async (tracker, query, NULL, fill_model_with_channels, model);
}
Esempio n. 7
0
static gboolean
on_timer_callback (gpointer data)
{
	TrackerSparqlConnection *connection = data;

	tracker_sparql_connection_query_async (connection,
	                                       "SELECT ?title nmm:artistName (?artist) WHERE { "
	                                       "  ?mpiece nmm:musicAlbum ?album . "
	                                       "  ?album nmm:albumTitle ?title . "
	                                       "  OPTIONAL { ?album nmm:albumArtist ?artist } "
	                                       "}",
	                                       NULL,
	                                       on_query_finished,
	                                       NULL);

	return FALSE;
}
Esempio n. 8
0
static void
decorator_query_remaining_items (TrackerDecorator *decorator)
{
	gchar *query, *clauses[] = { "COUNT(?urn)", NULL };
	TrackerSparqlConnection *sparql_conn;

	query = create_query_string (decorator, clauses, FALSE);

	if (query) {
		sparql_conn = tracker_miner_get_connection (TRACKER_MINER (decorator));
		tracker_sparql_connection_query_async (sparql_conn, query,
		                                       NULL, decorator_query_remaining_items_cb,
		                                       decorator);
		g_free (query);
	} else {
		decorator_notify_empty (decorator);
	}
}
Esempio n. 9
0
static void
collect_items (ReaderEngine *engine,
               const gchar *channel_id,
               const gchar *item_id)
{
	gchar *query;
	gchar *cid;
	gchar *iid;
	ReaderEnginePrivate *priv;

	priv = reader_engine_get_instance_private (engine);

	if (channel_id == NULL)
		cid = g_strdup ("?c");
	else
		cid = g_strdup_printf ("<%s>", channel_id);

	if (item_id == NULL)
		iid = g_strdup ("?s");
	else
		iid = g_strdup_printf ("<%s>", item_id);

	query = g_strdup_printf ("SELECT %s %s ?t ?l ?r ?c ?d "
		                 "WHERE {%s a mfo:FeedMessage; "
		                         "nmo:communicationChannel %s; "
		                         "nie:title ?t; "
		                         "nie:url ?l; "
		                         "nmo:isRead ?r; "
		                         "nie:plainTextContent ?c; "
		                         "nie:contentCreated ?d} "
	                         "ORDER BY DESC(?d) LIMIT 100", cid, iid, iid, cid);

	tracker_sparql_connection_query_async (priv->tracker, query, NULL, (GAsyncReadyCallback) on_fetch_items, engine);

	g_free (query);
	g_free (cid);
	g_free (iid);
}
Esempio n. 10
0
static void row_added_in_model (GtkTreeModel *tree_model, GtkTreePath *path, GtkTreeIter *iter, TrackerSparqlConnection *tracker_client)
{
	gchar *id;
	gchar *query;
	gboolean update;

	gtk_tree_model_get (tree_model, iter, PREDICATE_SUBJECT, &id, 6, &update, -1);

	if (update == FALSE)
		return;

	query = g_strdup_printf ("SELECT <%s> ?name ?downenclosures ?enclosurespath ?enclosuressize ?expiry "
						"WHERE {<%s> nie:title ?name . "
							"<%s> mfo:feedSettings ?setts . "
							"OPTIONAL {?setts mfo:downloadFlag ?downenclosures} . "
							"OPTIONAL {?setts mfo:downloadPath ?enclosurespath} . "
							"OPTIONAL {?setts mfo:maxSize ?enclosuressize} . "
							"OPTIONAL {?setts mfo:expiryInterval ?expiry}}", id, id, id);

	tracker_sparql_connection_query_async (tracker_client, query, NULL, find_channel_and_update, tree_model);

	g_free (id);
	g_free (query);
}
Esempio n. 11
0
static void
gtk_search_engine_tracker_start (GtkSearchEngine *engine)
{
  GtkSearchEngineTracker *tracker;
  gchar	*search_text, *location_uri;
  GString *sparql;

  tracker = GTK_SEARCH_ENGINE_TRACKER (engine);

  if (tracker->priv->query_pending)
	  {
		  g_debug ("Attempt to start a new search while one is pending, doing nothing");
		  return;
	  }

  if (tracker->priv->query == NULL)
	  {
		  g_debug ("Attempt to start a new search with no GtkQuery, doing nothing");
		  return;
	  }

  search_text = _gtk_query_get_text (tracker->priv->query);
  location_uri = _gtk_query_get_location (tracker->priv->query);

  g_debug ("Query starting, search criteria:'%s', location:'%s'", search_text, location_uri);

#ifdef FTS_MATCHING
  /* Using FTS: */
  sparql = g_string_new ("SELECT nie:url(?urn) "
                         "WHERE {"
                         "  ?urn a nfo:FileDataObject ;"
                         "  tracker:available true ; "
                         "  fts:match ");
  sparql_append_string_literal (sparql, search_text);

  if (location_uri)
	  {
		  g_string_append (sparql, " . FILTER (fn:starts-with(nie:url(?urn),");
		  sparql_append_string_literal (sparql, location_uri);
		  g_string_append (sparql, "))");
	  }

  g_string_append (sparql, " } ORDER BY DESC(fts:rank(?urn)) ASC(nie:url(?urn))");
#else  /* FTS_MATCHING */
  /* Using filename matching: */
  sparql = g_string_new ("SELECT nie:url(?urn) "
                         "WHERE {"
                         "  ?urn a nfo:FileDataObject ;"
                         "    tracker:available true ."
                         "  FILTER (fn:contains(nfo:fileName(?urn),");
  sparql_append_string_literal (sparql, search_text);

  g_string_append (sparql, 
                   "))"
                   "} ORDER BY DESC(nie:url(?urn)) DESC(nfo:fileName(?urn))");
#endif /* FTS_MATCHING */

  tracker_sparql_connection_query_async (tracker->priv->connection,
                                         sparql->str,
                                         tracker->priv->cancellable,
                                         query_callback,
                                         tracker);
  g_string_free (sparql, TRUE);

  tracker->priv->query_pending = TRUE;
  g_free (search_text);
}
static void
tracker_evt_update_orphans (tracker_evt_update_t *evt)
{
  gboolean first = TRUE;
  GString *request_str;
  GList *subject, *subjects;
  GList *source, *sources;

  GRL_DEBUG ("%s: evt=%p", __FUNCTION__, evt);

  if (g_hash_table_size (evt->orphan_items) < 1) {
    tracker_evt_postupdate_sources (evt);
    return;
  }

  sources = grl_registry_get_sources (grl_registry_get_default (),
                                      FALSE);

  request_str = g_string_new ("");
  subjects = g_hash_table_get_keys (evt->orphan_items);

  subject = subjects;
  while (subject != NULL) {
    guint id = GPOINTER_TO_INT (subject->data);
    if (GPOINTER_TO_INT (g_hash_table_lookup (evt->orphan_items,
                                              subject->data)) != GRL_CONTENT_REMOVED) {
      if (first) {
        g_string_append_printf (request_str, "%u", id);
        first = FALSE;
      }
      else {
        g_string_append_printf (request_str, ", %u", id);
      }
    } else {
      /* Notify all sources that a media been removed */
      source = sources;
      while (source != NULL) {
        if (GRL_IS_TRACKER_SOURCE (source->data)) {
          GRL_DEBUG ("\tNotify id=%u source=%s p=%p", id,
                     grl_source_get_name (GRL_SOURCE (source->data)),
                     source->data);
          if (grl_tracker_source_can_notify (GRL_TRACKER_SOURCE (source->data))) {
            GrlMedia *media = grl_media_new ();
            gchar *str_id = g_strdup_printf ("%u", id);

            grl_media_set_id (media, str_id);
            g_free (str_id);

            grl_source_notify_change (GRL_SOURCE (source->data),
                                      media,
                                      GRL_CONTENT_REMOVED,
                                      FALSE);
            g_object_unref (media);
          }
        }
        source = source->next;
      }
    }
    subject = subject->next;
  }

  g_list_free (subjects);

  if (request_str->len > 0) {
    gchar *sparql_final = g_strdup_printf (TRACKER_MEDIA_ITEM, request_str->str);

    GRL_DEBUG ("\trequest : '%s'", sparql_final);

    tracker_sparql_connection_query_async (grl_tracker_connection,
                                           sparql_final,
                                           NULL,
                                           (GAsyncReadyCallback) tracker_evt_update_orphans_cb,
                                           evt);

    g_free (sparql_final);
  } else {
    tracker_evt_postupdate_sources (evt);
  }

  g_string_free (request_str, TRUE);
}
static void
nemo_search_engine_tracker_start (NemoSearchEngine *engine)
{
	NemoSearchEngineTracker *tracker;
	gchar	*search_text, *location_uri;
	GString *sparql;
	GList *mimetypes, *l;
	gint mime_count;

	tracker = NEMO_SEARCH_ENGINE_TRACKER (engine);

	if (tracker->details->query_pending) {
		return;
	}

	if (tracker->details->query == NULL) {
		return;
	}

	g_cancellable_reset (tracker->details->cancellable);

	search_text = nemo_query_get_text (tracker->details->query);
	location_uri = nemo_query_get_location (tracker->details->query);
	mimetypes = nemo_query_get_mime_types (tracker->details->query);

	mime_count = g_list_length (mimetypes);

#ifdef FTS_MATCHING
	/* Using FTS: */
	sparql = g_string_new ("SELECT nie:url(?urn) "
			       "WHERE {"
			       "  ?urn a nfo:FileDataObject ;"
			       "  tracker:available true ; ");

	if (mime_count > 0) {
		g_string_append (sparql, "nie:mimeType ?mime ;");
	}

	g_string_append (sparql, "  fts:match ");
	sparql_append_string_literal (sparql, search_text);

	if (location_uri || mime_count > 0) {
		g_string_append (sparql, " . FILTER (");
	
		if (location_uri)  {
			g_string_append (sparql, " fn:starts-with(nie:url(?urn),");
			sparql_append_string_literal (sparql, location_uri);
			g_string_append (sparql, ")");
		}

		if (mime_count > 0) {
			if (location_uri) {
				g_string_append (sparql, " && ");
			}

			g_string_append (sparql, "(");
			for (l = mimetypes; l != NULL; l = l->next) {
				if (l != mimetypes) {
					g_string_append (sparql, " || ");
				}

				g_string_append (sparql, "?mime = ");
				sparql_append_string_literal (sparql, l->data);
			}
			g_string_append (sparql, ")");
		}

		g_string_append (sparql, ")");
	}

	g_string_append (sparql, " } ORDER BY DESC(fts:rank(?urn)) ASC(nie:url(?urn))");
#else  /* FTS_MATCHING */
	/* Using filename matching: */
	sparql = g_string_new ("SELECT nie:url(?urn) "
			       "WHERE {"
			       "  ?urn a nfo:FileDataObject ;");

	if (mime_count > 0) {
		g_string_append (sparql, "nie:mimeType ?mime ;");
	}

	g_string_append (sparql, "    tracker:available true ."
			 "  FILTER (fn:contains(nfo:fileName(?urn),");

	sparql_append_string_literal (sparql, search_text);

	g_string_append (sparql, ")");

	if (location_uri)  {
		g_string_append (sparql, " && fn:starts-with(nie:url(?urn),");
		sparql_append_string_literal (sparql, location_uri);
		g_string_append (sparql, ")");
	}

	if (mime_count > 0) {
		g_string_append (sparql, " && ");
		g_string_append (sparql, "(");
		for (l = mimetypes; l != NULL; l = l->next) {
			if (l != mimetypes) {
				g_string_append (sparql, " || ");
			}

			g_string_append (sparql, "?mime = ");
			sparql_append_string_literal (sparql, l->data);
		}
		g_string_append (sparql, ")");
	}

	g_string_append (sparql, ")");


	g_string_append (sparql, 
			 "} ORDER BY DESC(nie:url(?urn)) DESC(nfo:fileName(?urn))");
#endif /* FTS_MATCHING */

	tracker_sparql_connection_query_async (tracker->details->connection,
					       sparql->str,
					       tracker->details->cancellable,
					       query_callback,
					       tracker);
	g_string_free (sparql, TRUE);

	tracker->details->query_pending = TRUE;

	g_free (search_text);
	g_free (location_uri);

	if (mimetypes != NULL) {
		g_list_free_full (mimetypes, g_free);
	}
}