mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	pw-cli: handle unquoted strings
Use parse_string for everything else to use it as a string value.
Make it possible to use short name for the param.
so now you can do:
pw-cli set-param 55 Props '{ channelVolumes: [ 0.3, 0.3 ], channelMap: [ FR,FL ] }'
			
			
This commit is contained in:
		
							parent
							
								
									4340f84776
								
							
						
					
					
						commit
						9a03f8769e
					
				
					 1 changed files with 20 additions and 20 deletions
				
			
		| 
						 | 
					@ -1550,7 +1550,7 @@ static int json_to_pod(struct spa_pod_builder *b, uint32_t id,
 | 
				
			||||||
	char key[256];
 | 
						char key[256];
 | 
				
			||||||
	struct spa_pod_frame f[1];
 | 
						struct spa_pod_frame f[1];
 | 
				
			||||||
	struct spa_json it[1];
 | 
						struct spa_json it[1];
 | 
				
			||||||
	int l;
 | 
						int l, res;
 | 
				
			||||||
	const char *v;
 | 
						const char *v;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (spa_json_is_object(value, len)) {
 | 
						if (spa_json_is_object(value, len)) {
 | 
				
			||||||
| 
						 | 
					@ -1567,7 +1567,8 @@ static int json_to_pod(struct spa_pod_builder *b, uint32_t id,
 | 
				
			||||||
			if ((pi = find_type_info(ti->values, key)) == NULL)
 | 
								if ((pi = find_type_info(ti->values, key)) == NULL)
 | 
				
			||||||
				continue;
 | 
									continue;
 | 
				
			||||||
			spa_pod_builder_prop(b, pi->type, 0);
 | 
								spa_pod_builder_prop(b, pi->type, 0);
 | 
				
			||||||
			json_to_pod(b, id, pi, &it[0], v, l);
 | 
								if ((res = json_to_pod(b, id, pi, &it[0], v, l)) < 0)
 | 
				
			||||||
 | 
									return res;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		spa_pod_builder_pop(b, &f[0]);
 | 
							spa_pod_builder_pop(b, &f[0]);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -1575,7 +1576,8 @@ static int json_to_pod(struct spa_pod_builder *b, uint32_t id,
 | 
				
			||||||
		spa_pod_builder_push_array(b, &f[0]);
 | 
							spa_pod_builder_push_array(b, &f[0]);
 | 
				
			||||||
		spa_json_enter(iter, &it[0]);
 | 
							spa_json_enter(iter, &it[0]);
 | 
				
			||||||
		while ((l = spa_json_next(&it[0], &v)) > 0)
 | 
							while ((l = spa_json_next(&it[0], &v)) > 0)
 | 
				
			||||||
			json_to_pod(b, id, info->values, &it[0], v, l);
 | 
								if ((res = json_to_pod(b, id, info->values, &it[0], v, l)) < 0)
 | 
				
			||||||
 | 
									return res;
 | 
				
			||||||
		spa_pod_builder_pop(b, &f[0]);
 | 
							spa_pod_builder_pop(b, &f[0]);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else if (spa_json_is_float(value, len)) {
 | 
						else if (spa_json_is_float(value, len)) {
 | 
				
			||||||
| 
						 | 
					@ -1605,12 +1607,21 @@ static int json_to_pod(struct spa_pod_builder *b, uint32_t id,
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else if (spa_json_is_string(value, len)) {
 | 
						else if (spa_json_is_bool(value, len)) {
 | 
				
			||||||
 | 
							bool val = false;
 | 
				
			||||||
 | 
							spa_json_parse_bool(value, len, &val);
 | 
				
			||||||
 | 
							spa_pod_builder_bool(b, val);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else if (spa_json_is_null(value, len)) {
 | 
				
			||||||
 | 
							spa_pod_builder_none(b);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
		char *val = alloca(len);
 | 
							char *val = alloca(len);
 | 
				
			||||||
		spa_json_parse_string(value, len, val);
 | 
							spa_json_parse_string(value, len, val);
 | 
				
			||||||
		switch (info->parent) {
 | 
							switch (info->parent) {
 | 
				
			||||||
		case SPA_TYPE_Id:
 | 
							case SPA_TYPE_Id:
 | 
				
			||||||
			if ((ti = find_type_info(info ? info->values : info, val)) != NULL)
 | 
								if ((ti = find_type_info(info ? info->values : info, val)) == NULL)
 | 
				
			||||||
 | 
									return -EINVAL;
 | 
				
			||||||
			spa_pod_builder_id(b, ti->type);
 | 
								spa_pod_builder_id(b, ti->type);
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case SPA_TYPE_String:
 | 
							case SPA_TYPE_String:
 | 
				
			||||||
| 
						 | 
					@ -1621,17 +1632,6 @@ static int json_to_pod(struct spa_pod_builder *b, uint32_t id,
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else if (spa_json_is_bool(value, len)) {
 | 
					 | 
				
			||||||
		bool val = false;
 | 
					 | 
				
			||||||
		spa_json_parse_bool(value, len, &val);
 | 
					 | 
				
			||||||
		spa_pod_builder_bool(b, val);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	else if (spa_json_is_null(value, len)) {
 | 
					 | 
				
			||||||
		spa_pod_builder_none(b);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
		return -EINVAL;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1656,7 +1656,6 @@ static bool do_set_param(struct data *data, const char *cmd, char *args, char **
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	id = atoi(a[0]);
 | 
						id = atoi(a[0]);
 | 
				
			||||||
	param_id = atoi(a[1]);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	global = pw_map_lookup(&rd->globals, id);
 | 
						global = pw_map_lookup(&rd->globals, id);
 | 
				
			||||||
	if (global == NULL) {
 | 
						if (global == NULL) {
 | 
				
			||||||
| 
						 | 
					@ -1668,11 +1667,12 @@ static bool do_set_param(struct data *data, const char *cmd, char *args, char **
 | 
				
			||||||
			return false;
 | 
								return false;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ti = spa_debug_type_find(spa_type_param, param_id);
 | 
						ti = find_type_info(spa_type_param, a[1]);
 | 
				
			||||||
	if (ti == NULL) {
 | 
						if (ti == NULL) {
 | 
				
			||||||
		*error = spa_aprintf("%s: unknown param type: %d", cmd, param_id);
 | 
							*error = spa_aprintf("%s: unknown param type: %s", cmd, a[1]);
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						param_id = ti->type;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	spa_json_init(&it[0], a[2], strlen(a[2]));
 | 
						spa_json_init(&it[0], a[2], strlen(a[2]));
 | 
				
			||||||
	if ((len = spa_json_next(&it[0], &val)) <= 0) {
 | 
						if ((len = spa_json_next(&it[0], &val)) <= 0) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue