Skip to content

Commit

Permalink
lib-sieve: imap4flags: Created API for registering the implicit flags…
Browse files Browse the repository at this point in the history
… side-effect with commands.

This is needed for other extensions that manipulate flags while the imap4flags extension is not used directly.
  • Loading branch information
stephanbosch committed Feb 29, 2016
1 parent da266d8 commit 6178058
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 14 deletions.
20 changes: 12 additions & 8 deletions src/lib-sieve/plugins/imap4flags/ext-imap4flags-common.c
Expand Up @@ -146,24 +146,28 @@ bool ext_imap4flags_command_validate

void ext_imap4flags_attach_flags_tag
(struct sieve_validator *valdtr, const struct sieve_extension *ext,
const char *command, bool implicit)
const char *command)
{
/* Register :flags tag with the command and we don't care whether it is
* registered or even whether it will be registered at all. The validator
* handles either situation gracefully
*/

if ( !implicit ) {
/* Tag specified by user */
sieve_validator_register_external_tag
(valdtr, command, ext, &tag_flags, SIEVE_OPT_SIDE_EFFECT);
}
/* Tag specified by user */
sieve_validator_register_external_tag
(valdtr, command, ext, &tag_flags, SIEVE_OPT_SIDE_EFFECT);
}

/* Implicit tag if none is specified */
void sieve_ext_imap4flags_register_side_effect
(struct sieve_validator *valdtr, const struct sieve_extension *flg_ext,
const char *command)
{
/* Implicit tag if none is specified */
sieve_validator_register_persistent_tag
(valdtr, command, ext, &tag_flags_implicit);
(valdtr, command, flg_ext, &tag_flags_implicit);
}


/*
* Result context
*/
Expand Down
2 changes: 1 addition & 1 deletion src/lib-sieve/plugins/imap4flags/ext-imap4flags-common.h
Expand Up @@ -70,7 +70,7 @@ bool ext_imap4flags_command_validate

void ext_imap4flags_attach_flags_tag
(struct sieve_validator *valdtr, const struct sieve_extension *ext,
const char *command, bool implicit);
const char *command);

/*
* Flag management
Expand Down
8 changes: 6 additions & 2 deletions src/lib-sieve/plugins/imap4flags/ext-imap4flags.c
Expand Up @@ -66,8 +66,12 @@ static bool ext_imap4flags_validator_load
sieve_validator_register_command(valdtr, ext, &tst_hasflag);

/* Attach :flags tag to keep and fileinto commands */
ext_imap4flags_attach_flags_tag(valdtr, ext, "keep", FALSE);
ext_imap4flags_attach_flags_tag(valdtr, ext, "fileinto", FALSE);
ext_imap4flags_attach_flags_tag(valdtr, ext, "keep");
ext_imap4flags_attach_flags_tag(valdtr, ext, "fileinto");

/* Attach flags side-effect to keep and fileinto actions */
sieve_ext_imap4flags_register_side_effect(valdtr, ext, "keep");
sieve_ext_imap4flags_register_side_effect(valdtr, ext, "fileinto");

return TRUE;
}
Expand Down
6 changes: 3 additions & 3 deletions src/lib-sieve/plugins/imap4flags/ext-imapflags.c
Expand Up @@ -128,9 +128,9 @@ static bool ext_imapflags_validator_load
sieve_validator_register_command(valdtr, master_ext, &cmd_mark);
sieve_validator_register_command(valdtr, master_ext, &cmd_unmark);

/* Attach implicit flags tag to keep and fileinto commands */
ext_imap4flags_attach_flags_tag(valdtr, master_ext, "keep", TRUE);
ext_imap4flags_attach_flags_tag(valdtr, master_ext, "fileinto", TRUE);
/* Attach flags side-effect to keep and fileinto actions */
sieve_ext_imap4flags_register_side_effect(valdtr, master_ext, "keep");
sieve_ext_imap4flags_register_side_effect(valdtr, master_ext, "fileinto");

return TRUE;
}
Expand Down
8 changes: 8 additions & 0 deletions src/lib-sieve/plugins/imap4flags/sieve-ext-imap4flags.h
Expand Up @@ -22,6 +22,14 @@ sieve_ext_imap4flags_require_extension
(svinst, &imap4flags_extension, TRUE);
}

/*
* Action side-effect
*/

void sieve_ext_imap4flags_register_side_effect
(struct sieve_validator *valdtr, const struct sieve_extension *flg_ext,
const char *command);

/*
* Flag syntax
*/
Expand Down

0 comments on commit 6178058

Please sign in to comment.