Skip to content

Commit 316e375

Browse files
ralfbrownTurboGit
authored andcommitted
add IMAGE.ID.NEXT for the next image id to be assigned on import
1 parent 8fe8841 commit 316e375

File tree

2 files changed

+42
-3
lines changed

2 files changed

+42
-3
lines changed

src/common/variables.c

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,22 @@ static gboolean _is_number(char *str)
344344
return TRUE;
345345
}
346346

347+
static uint8_t _get_var_parameter(char **variable, int default_value)
348+
{
349+
uint8_t val = default_value;
350+
if(*variable[0] == '[')
351+
{
352+
char *parameters[1] = { NULL };
353+
const int num = _get_parameters(variable, parameters, 1);
354+
if(num == 1 && _is_number(parameters[0]))
355+
{
356+
val = (uint8_t)strtol(parameters[0], NULL, 10);
357+
}
358+
g_free(parameters[0]);
359+
}
360+
return val;
361+
}
362+
347363
static char *_get_base_value(dt_variables_params_t *params, char **variable)
348364
{
349365
char *result = NULL;
@@ -558,8 +574,28 @@ static char *_get_base_value(dt_variables_params_t *params, char **variable)
558574
result = g_strdup(params->data->camera_alias);
559575
else if(_has_prefix(variable, "EXIF.LENS") || _has_prefix(variable, "LENS"))
560576
result = g_strdup(params->data->exif_lens);
577+
else if(_has_prefix(variable, "IMAGE.ID.NEXT"))
578+
{
579+
dt_imgid_t highest_id = 0;
580+
sqlite3_stmt *stmt;
581+
// clang-format off
582+
DT_DEBUG_SQLITE3_PREPARE_V2(dt_database_get(darktable.db),
583+
"SELECT MAX(id) FROM main.images",
584+
-1, &stmt, NULL);
585+
// clang-format on
586+
if(sqlite3_step(stmt) == SQLITE_ROW)
587+
highest_id = sqlite3_column_int(stmt, 0);
588+
sqlite3_finalize(stmt);
589+
// determine how many zero-padded digits to use with an optional parameter: $(IMAGE.ID.NEXT[n]), default n=1
590+
uint8_t nb_digit = _get_var_parameter(variable, 1);
591+
result = g_strdup_printf("%0*u", nb_digit, highest_id + 1);
592+
}
561593
else if(_has_prefix(variable, "ID") || _has_prefix(variable, "IMAGE.ID"))
562-
result = g_strdup_printf("%u", params->imgid);
594+
{
595+
// determine how many zero-padded digits to use with an optional parameter: $(IMAGE.ID[n]), default n=1
596+
uint8_t nb_digit = _get_var_parameter(variable, 1);
597+
result = g_strdup_printf("%0*u", nb_digit, params->imgid);
598+
}
563599
else if(_has_prefix(variable, "IMAGE.EXIF"))
564600
{
565601
gchar buffer[1024];
@@ -667,7 +703,7 @@ static char *_get_base_value(dt_variables_params_t *params, char **variable)
667703
(*variable) ++;
668704
}
669705
// new $(SEQUENCE[n,m]) syntax
670-
// allows \[[0-9]+,[0-9]+] (PCER)
706+
// allows \[[0-9]+,[0-9]+] (PCRE)
671707
// everything else will be ignored
672708
else if(*variable[0] == '[')
673709
{
@@ -681,6 +717,8 @@ static char *_get_base_value(dt_variables_params_t *params, char **variable)
681717
shift = (gint) strtol(parameters[1], NULL, 10);
682718
}
683719
}
720+
if(num == 2)
721+
g_free(parameters[1]);
684722
g_free(parameters[0]);
685723
}
686724
result = g_strdup_printf("%.*u", nb_digit,

src/gui/gtkentry.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,8 @@ const dt_gtkentry_completion_spec *dt_gtkentry_get_default_path_compl_list()
242242
{ "LABELS.ICONS", N_("$(LABELS.ICONS) - color labels as icons") },
243243
{ "IMAGE.TAGS.HIERARCHY", N_("$(IMAGE.TAGS.HIERARCHY) - tags as set in metadata settings, preserving hierarchy") },
244244
{ "IMAGE.TAGS", N_("$(IMAGE.TAGS) - tags as set in metadata settings, flattened") },
245-
{ "IMAGE.ID", N_("$(ID) - image ID") },
245+
{ "IMAGE.ID", N_("$(IMAGE.ID) - image ID") },
246+
{ "IMAGE.ID.NEXT", N_("$(IMAGE.ID.NEXT) - next image ID to be assigned on import") },
246247
{ "ID", N_("$(ID) - image ID") },
247248
{ "TITLE", N_("$(TITLE) - title from metadata") },
248249
{ "DESCRIPTION", N_("$(DESCRIPTION) - description from metadata") },

0 commit comments

Comments
 (0)