static gchar *
photos_search_match_manager_get_filter (PhotosBaseManager *mngr, gint flags)
{
  PhotosSearchMatchManager *self = PHOTOS_SEARCH_MATCH_MANAGER (mngr);
  GHashTable *objects;
  PhotosSearchMatch *search_match;
  const gchar *blank = "(true)";
  gchar *filter = NULL;
  gchar *ret_val = NULL;
  gchar **filters = NULL;
  gchar **terms = NULL;
  guint i;
  guint n_terms;

  if (!(flags & PHOTOS_QUERY_FLAGS_SEARCH))
    goto out;

  terms = photos_search_controller_get_terms (self->priv->srch_cntrlr);
  n_terms = g_strv_length (terms);
  if (n_terms == 0)
    goto out;

  objects = photos_base_manager_get_objects (PHOTOS_BASE_MANAGER (self));
  filters = (gchar **) g_malloc0_n (n_terms + 1, sizeof (gchar *));

  for (i = 0; terms[i] != NULL; i++)
    {
      GHashTableIter iter;
      const gchar *id;

      g_hash_table_iter_init (&iter, objects);
      while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &search_match))
        photos_search_match_set_filter_term (search_match, terms[i]);

      search_match = PHOTOS_SEARCH_MATCH (photos_base_manager_get_active_object (PHOTOS_BASE_MANAGER (self)));
      id = photos_filterable_get_id (PHOTOS_FILTERABLE (search_match));
      if (g_strcmp0 (id, PHOTOS_SEARCH_MATCH_STOCK_ALL) == 0)
        filter = photos_base_manager_get_all_filter (PHOTOS_BASE_MANAGER (self));
      else
        filter = photos_filterable_get_filter (PHOTOS_FILTERABLE (search_match));

      filters[i] = filter;
      filter = NULL;
    }

  filter = g_strjoinv (" && ", filters);
  ret_val = g_strconcat ("(", filter, ")", NULL);

 out:
  g_free (filter);
  g_strfreev (filters);
  g_strfreev (terms);
  return (ret_val == NULL) ? g_strdup (blank) : ret_val;
}
Ejemplo n.º 2
0
static void
photos_search_match_finalize (GObject *object)
{
  PhotosSearchMatch *self = PHOTOS_SEARCH_MATCH (object);

  g_free (self->filter);
  g_free (self->id);
  g_free (self->name);
  g_free (self->term);

  G_OBJECT_CLASS (photos_search_match_parent_class)->finalize (object);
}
Ejemplo n.º 3
0
static gchar *
photos_search_match_get_filter (PhotosFilterable *iface)
{
  PhotosSearchMatch *self = PHOTOS_SEARCH_MATCH (iface);
  char *ret_val;

  #pragma GCC diagnostic push
  #pragma GCC diagnostic ignored "-Wformat-nonliteral"

  ret_val = g_strdup_printf (self->filter, self->term);

  #pragma GCC diagnostic pop

  return ret_val;
}
Ejemplo n.º 4
0
static void
photos_search_match_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
{
  PhotosSearchMatch *self = PHOTOS_SEARCH_MATCH (object);

  switch (prop_id)
    {
    case PROP_ID:
      g_value_set_string (value, self->id);
      break;

    case PROP_NAME:
      g_value_set_string (value, self->name);
      break;

    default:
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
      break;
    }
}
Ejemplo n.º 5
0
static const gchar *
photos_search_match_get_id (PhotosFilterable *filterable)
{
  PhotosSearchMatch *self = PHOTOS_SEARCH_MATCH (filterable);
  return self->id;
}