diff options
author | Juan A. Suarez Romero <jasuarez@igalia.com> | 2013-03-26 16:23:58 +0000 |
---|---|---|
committer | Juan A. Suarez Romero <jasuarez@igalia.com> | 2013-03-26 16:56:30 +0000 |
commit | ed6765adc343dc85ab1726d04d6a29d24d9f8ffc (patch) | |
tree | afbb134ce2b66cca71b7889100ce363fddc35612 | |
parent | ef5f03197ed0aa486bb44a06169749ccdd7e00b2 (diff) |
metadata-store: Add filtering by media type
-rw-r--r-- | src/metadata-store/grl-metadata-store.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/metadata-store/grl-metadata-store.c b/src/metadata-store/grl-metadata-store.c index 292fc01..0e07168 100644 --- a/src/metadata-store/grl-metadata-store.c +++ b/src/metadata-store/grl-metadata-store.c @@ -92,6 +92,9 @@ GRL_LOG_DOMAIN_STATIC(metadata_store_log_domain); #define GRL_SQL_SOURCE_FILTER \ "source_id=?" +#define GRL_SQL_TYPE_FILTER \ + "type_id IN ( ? , ? , ? )" + #define GRL_SQL_SEARCH_FILTER \ "SELECT * FROM store " \ "WHERE %s " \ @@ -697,6 +700,7 @@ grl_metadata_store_source_get_caps (GrlSource *source, GRL_METADATA_KEY_INVALID); grl_caps_set_key_filter (caps, keys); g_list_free (keys); + grl_caps_set_type_filter (caps, GRL_TYPE_FILTER_ALL); } return caps; @@ -827,13 +831,16 @@ grl_metadata_store_source_search (GrlSource *source, sqlite3 *db; gchar *sql; gint r; + gint i; GError *error = NULL; GrlMedia *media; GList *iter, *medias = NULL; GValue *filter_favourite_val; GValue *filter_source_val; + GrlTypeFilter filter_type_val; GString *filters; guint count; + gint type_filter[3]; GRL_DEBUG (__FUNCTION__); @@ -854,6 +861,8 @@ grl_metadata_store_source_search (GrlSource *source, GRL_METADATA_KEY_FAVOURITE); filter_source_val = grl_operation_options_get_key_filter (ss->options, GRL_METADATA_KEY_SOURCE); + filter_type_val = grl_operation_options_get_type_filter (ss->options); + if (filter_favourite_val) { filters = g_string_append (filters, GRL_SQL_FAVOURITE_FILTER); } @@ -865,6 +874,29 @@ grl_metadata_store_source_search (GrlSource *source, filters = g_string_append (filters, GRL_SQL_SOURCE_FILTER); } + if (filter_type_val != GRL_TYPE_FILTER_ALL) { + /* Fill the type_filter array */ + if (filter_type_val & GRL_TYPE_FILTER_AUDIO) { + type_filter[0] = MEDIA_AUDIO; + } else { + type_filter[0] = -1; + } + if (filter_type_val & GRL_TYPE_FILTER_VIDEO) { + type_filter[1] = MEDIA_VIDEO; + } else { + type_filter[1] = -1; + } + if (filter_type_val & GRL_TYPE_FILTER_IMAGE) { + type_filter[2] = MEDIA_IMAGE; + } else { + type_filter[2] = -1; + } + if (filters->len > 0) { + filters = g_string_append (filters, " AND "); + } + filters = g_string_append (filters, GRL_SQL_TYPE_FILTER); + } + if (filters->len > 0) { sql = g_strdup_printf (GRL_SQL_SEARCH_FILTER, filters->str, @@ -902,6 +934,12 @@ grl_metadata_store_source_search (GrlSource *source, sqlite3_bind_text (sql_stmt, count++, g_value_get_string (filter_source_val), -1, SQLITE_STATIC); } + if (filter_type_val != GRL_TYPE_FILTER_ALL) { + for (i = 0; i < G_N_ELEMENTS (type_filter); i++) { + sqlite3_bind_int (sql_stmt, count++, type_filter[i]); + } + } + while ((r = sqlite3_step (sql_stmt)) == SQLITE_BUSY); count = 0; |