Diff between ecd621b972375d4f421c775b63b1b421f35f65dd and df080bdba5d634793c509877021958bb8d6f8c60

Changed Files

File Additions Deletions Status
obexd/client/pbap.c +21 -27 modified

Full Patch

diff --git a/obexd/client/pbap.c b/obexd/client/pbap.c
index dbc12d0..46cc09f 100644
--- a/obexd/client/pbap.c
+++ b/obexd/client/pbap.c
@@ -843,41 +843,36 @@ static DBusMessage *pbap_set_order(DBusConnection *connection,
 	return dbus_message_new_method_return(message);
 }
 
-static DBusMessage *pbap_add_filter(DBusConnection *connection,
+static DBusMessage *pbap_set_filters(DBusConnection *connection,
 					DBusMessage *message, void *user_data)
 {
 	struct session_data *session = user_data;
-	const char *filter;
+	struct pbap_data *pbapdata = session->pbapdata;
+	char **filters, **item;
+	gint size;
+	uint64_t oldfilter = pbapdata->filter;
 
-	if (dbus_message_get_args(message, NULL,
-			DBUS_TYPE_STRING, &filter,
+	if (dbus_message_get_args(message, NULL, DBUS_TYPE_ARRAY,
+			DBUS_TYPE_STRING, &filters, &size,
 			DBUS_TYPE_INVALID) == FALSE)
 		return g_dbus_create_error(message,
 				ERROR_INF ".InvalidArguments", NULL);
 
-	if (add_filter(session, filter) < 0)
-		return g_dbus_create_error(message,
-				ERROR_INF ".InvalidArguments", "InvalidFilter");
-
-	return dbus_message_new_method_return(message);
-}
-
-static DBusMessage *pbap_remove_filter(DBusConnection *connection,
-					DBusMessage *message, void *user_data)
-{
-	struct session_data *session = user_data;
-	const char *filter;
-
-	if (dbus_message_get_args(message, NULL,
-			DBUS_TYPE_STRING, &filter,
-			DBUS_TYPE_INVALID) == FALSE)
-		return g_dbus_create_error(message,
-				ERROR_INF ".InvalidArguments", NULL);
+	remove_filter(session, "ALL");
+	if (size == 0)
+		goto done;
 
-	if (remove_filter(session, filter) < 0)
-		return g_dbus_create_error(message,
-				ERROR_INF ".InvalidArguments", "InvalidFilter");
+	for (item = filters; *item; item++) {
+		if (add_filter(session, *item) < 0) {
+			pbapdata->filter = oldfilter;
+			g_strfreev(filters);
+			return g_dbus_create_error(message,
+					ERROR_INF ".InvalidArguments", "InvalidFilters");
+		}
+	}
 
+done:
+	g_strfreev(filters);
 	return dbus_message_new_method_return(message);
 }
 
@@ -931,8 +926,7 @@ static GDBusMethodTable pbap_methods[] = {
 					G_DBUS_METHOD_FLAG_ASYNC },
 	{ "SetFormat",	"s",	"",	pbap_set_format },
 	{ "SetOrder",	"s",	"",	pbap_set_order },
-	{ "AddFilter",	"s",	"",	pbap_add_filter },
-	{ "RemoveFilter",	"s",	"",	pbap_remove_filter },
+	{ "SetFilters",	"as",	"",	pbap_set_filters },
 	{ "GetFilters",	"",	"as",	pbap_get_filters },
 	{ "ListAllFilters", "",	"as",	pbap_list_all_filters },
 	{ }