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; }
static gchar * photos_source_manager_get_filter (PhotosBaseManager *mngr, gint flags) { GObject *source; const gchar *id; gchar *filter; if (flags & PHOTOS_QUERY_FLAGS_SEARCH) source = photos_base_manager_get_active_object (mngr); else source = photos_base_manager_get_object_by_id (mngr, PHOTOS_SOURCE_STOCK_ALL); id = photos_filterable_get_id (PHOTOS_FILTERABLE (source)); if (g_strcmp0 (id, PHOTOS_SOURCE_STOCK_ALL) == 0) filter = photos_base_manager_get_all_filter (mngr); else filter = photos_filterable_get_filter (PHOTOS_FILTERABLE (source)); return filter; }