140 JsonReader *reader = NULL;
141 gboolean valid =
TRUE;
145 JsonNode *root = json_parser_get_root(parser);
148 reader = json_reader_new(root);
150 if(!json_reader_read_member(reader,
"version"))
_ERROR(
"can't find file version.");
153 const int version = json_reader_get_int_value(reader);
154 json_reader_end_member(reader);
158 if(!json_reader_read_member(reader,
"noiseprofiles"))
_ERROR(
"can't find `noiseprofiles' entry.");
160 if(!json_reader_is_array(reader))
_ERROR(
"`noiseprofiles' is supposed to be an array");
163 const int n_makers = json_reader_count_elements(reader);
165 for(
int i = 0;
i < n_makers;
i++)
167 if(!json_reader_read_element(reader,
i))
_ERROR(
"can't access maker at position %d / %d",
i+1, n_makers);
169 if(!json_reader_read_member(reader,
"maker"))
_ERROR(
"missing `maker`");
172 json_reader_end_member(reader);
174 if(!json_reader_read_member(reader,
"models"))
_ERROR(
"missing `models`");
176 const int n_models = json_reader_count_elements(reader);
178 for(
int j = 0; j < n_models; j++)
180 if(!json_reader_read_element(reader, j))
_ERROR(
"can't access model at position %d / %d", j+1, n_models);
182 if(!json_reader_read_member(reader,
"model"))
_ERROR(
"missing `model`");
184 json_reader_end_member(reader);
186 if(!json_reader_read_member(reader,
"profiles"))
_ERROR(
"missing `profiles`");
188 const int n_profiles = json_reader_count_elements(reader);
189 for(
int k = 0;
k < n_profiles;
k++)
191 if(!json_reader_read_element(reader,
k))
_ERROR(
"can't access profile at position %d / %d",
k+1, n_profiles);
193 gchar** member_names = json_reader_list_members(reader);
198 g_strfreev(member_names);
205 g_strfreev(member_names);
212 g_strfreev(member_names);
215 json_reader_read_member(reader,
"a");
216 if(json_reader_count_elements(reader) != 3)
218 g_strfreev(member_names);
219 _ERROR(
"`a` with size != 3");
221 json_reader_end_member(reader);
226 g_strfreev(member_names);
229 json_reader_read_member(reader,
"b");
230 if(json_reader_count_elements(reader) != 3)
232 g_strfreev(member_names);
233 _ERROR(
"`b` with size != 3");
235 json_reader_end_member(reader);
237 json_reader_end_element(reader);
239 g_strfreev(member_names);
242 json_reader_end_member(reader);
243 json_reader_end_element(reader);
246 json_reader_end_member(reader);
247 json_reader_end_element(reader);
250 json_reader_end_member(reader);
253 if(reader) g_object_unref(reader);
281 JsonReader *reader = NULL;
282 GList *result = NULL;
283 gboolean parser_locked =
FALSE;
292 parser_locked =
TRUE;
297 JsonNode *root = json_parser_get_root(parser);
300 reader = json_reader_new(root);
303 if(!json_reader_read_member(reader,
"noiseprofiles"))
goto end;
306 const int n_makers = json_reader_count_elements(reader);
307 for(
int i = 0;
i < n_makers;
i++)
309 json_reader_read_element(reader,
i);
311 json_reader_read_member(reader,
"maker");
313 if(g_strstr_len(cimg->
camera_maker, -1, json_reader_get_string_value(reader)))
316 json_reader_end_member(reader);
318 json_reader_read_member(reader,
"models");
320 const int n_models = json_reader_count_elements(reader);
321 for(
int j = 0; j < n_models; j++)
323 json_reader_read_element(reader, j);
325 json_reader_read_member(reader,
"model");
327 if(!g_strcmp0(cimg->
camera_model, json_reader_get_string_value(reader)))
330 json_reader_end_member(reader);
332 json_reader_read_member(reader,
"profiles");
334 const int n_profiles = json_reader_count_elements(reader);
335 for(
int k = 0;
k < n_profiles;
k++)
339 json_reader_read_element(reader,
k);
341 gchar** member_names = json_reader_list_members(reader);
346 json_reader_read_member(reader,
"skip");
347 gboolean skip = json_reader_get_boolean_value(reader);
348 json_reader_end_member(reader);
351 json_reader_end_element(reader);
352 g_strfreev(member_names);
364 json_reader_read_member(reader,
"name");
365 tmp_profile.
name = g_strdup(json_reader_get_string_value(reader));
366 json_reader_end_member(reader);
369 json_reader_read_member(reader,
"iso");
370 tmp_profile.
iso = json_reader_get_double_value(reader);
371 json_reader_end_member(reader);
374 json_reader_read_member(reader,
"a");
375 for(
int a = 0; a < 3; a++)
377 json_reader_read_element(reader, a);
378 tmp_profile.
a[a] = json_reader_get_double_value(reader);
379 json_reader_end_element(reader);
381 json_reader_end_member(reader);
384 json_reader_read_member(reader,
"b");
385 for(
int b = 0; b < 3; b++)
387 json_reader_read_element(reader, b);
388 tmp_profile.
b[b] = json_reader_get_double_value(reader);
389 json_reader_end_element(reader);
391 json_reader_end_member(reader);
393 json_reader_end_element(reader);
398 *new_profile = tmp_profile;
399 result = g_list_prepend(result, new_profile);
401 g_strfreev(member_names);
407 json_reader_end_member(reader);
408 json_reader_end_element(reader);
412 json_reader_end_member(reader);
413 json_reader_end_element(reader);
416 json_reader_end_member(reader);
void dt_concat_path_file(char destination[4096], const char path[4096], const char *const file)
Append a constant filename to a variable, stack-based, fixed-sized, directory, and add a / in-between...