diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2010-01-02 22:37:49 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2010-01-02 22:38:13 +0200 |
commit | e113d685f81852992a08b5dabab93dd97f0fee59 (patch) | |
tree | 7bf55540c9aa51f80e8f0c38d33a8b2a6da25d42 /src | |
parent | c44f0f83448b426935e9aeb07c5d761299144d14 (diff) | |
download | wydawca-e113d685f81852992a08b5dabab93dd97f0fee59.tar.gz wydawca-e113d685f81852992a08b5dabab93dd97f0fee59.tar.bz2 |
New email-related meta-variables.
These variables make it possible to avoid setting
`recipient' statement in `notify' blocks, instead
specifying recipients directly in the message
headers and using the default recipient setting, which
is `read'.
* src/mail.c (expand_email_admin)
(expand_email_owner): New functions.
* src/triplet.c (triplet_processor): Remove the
triplet if process_directives returns !0.
(expand_email_user): New function.
(triplet_meta): New keywords email:user (not to
be confused with user:email), email:admin and
email:owner.
* src/wydawca.h (expand_email_admin)
(expand_email_owner): New functions.
* NEWS, doc/wydawca.texi: Updated.
Diffstat (limited to 'src')
-rw-r--r-- | src/mail.c | 45 | ||||
-rw-r--r-- | src/triplet.c | 19 | ||||
-rw-r--r-- | src/wydawca.h | 3 |
3 files changed, 66 insertions, 1 deletions
@@ -685,3 +685,48 @@ notify (struct notification *notification_list, do_notify (trp, ev, p); /* FIXME */ } + +const char * +expand_email_admin (struct metadef *def, void *data) +{ + size_t size; + if (mu_address_to_string (admin_address, NULL, 0, &size) == 0) + { + size++; + def->storage = xmalloc (size); + mu_address_to_string (admin_address, def->storage, size, NULL); + def->value = def->storage; + } + else + def->value = ""; + return def->value; +} + +const char * +expand_email_owner (struct metadef *def, void *data) +{ + struct file_triplet *trp = data; + mu_address_t addr; + const char *errp; + size_t size; + + addr = get_recipient (trp->spool->dictionary[project_owner_dict], + trp, &errp); + if (!addr) + { + logmsg (LOG_ERR, _("cannot get email of the %s's owner: %s"), + trp->project, gettext (errp)); + def->value = ""; + } + else if (mu_address_to_string (addr, NULL, 0, &size) == 0) + { + size++; + def->storage = xmalloc (size); + mu_address_to_string (addr, def->storage, size, NULL); + def->value = def->storage; + mu_address_destroy (&addr); + } + else + def->value = ""; + return def->value; +} diff --git a/src/triplet.c b/src/triplet.c index 7f6ac68..0744daa 100644 --- a/src/triplet.c +++ b/src/triplet.c @@ -193,7 +193,8 @@ triplet_processor (void *data, void *proc_data) case triplet_complete: if (debug_level) logmsg (LOG_DEBUG, _("processing triplet `%s'"), trp->name); - process_directives (trp, spool); + if (process_directives (trp, spool)) + remove_triplet (trp); return true; case triplet_incomplete: @@ -515,6 +516,19 @@ expand_user_email (struct metadef *def, void *data) } static const char * +expand_email_user (struct metadef *def, void *data) +{ + struct file_triplet *trp = data; + if (trp->uploader) + { + asprintf (&def->storage, "\"%s\" <%s>", + trp->uploader->realname, trp->uploader->email); + def->value = def->storage; + } + return def->value; +} + +static const char * expand_report (struct metadef *def, void *data) { return report_string; @@ -626,6 +640,9 @@ struct metadef triplet_meta[] = { { "user:name", NULL, expand_user_name, NULL }, { "user:real-name", NULL, expand_user_real_name, NULL }, { "user:email", NULL, expand_user_email, NULL }, + { "email:user", NULL, expand_email_user, NULL }, + { "email:admin", NULL, expand_email_admin, NULL }, + { "email:owner", NULL, expand_email_owner, NULL }, { "report", NULL, expand_report, NULL }, { "comment", NULL, expand_comment, NULL }, DECL_FULL_TIMER(wydawca), diff --git a/src/wydawca.h b/src/wydawca.h index af24e47..54ecf00 100644 --- a/src/wydawca.h +++ b/src/wydawca.h @@ -312,6 +312,9 @@ char *meta_expand_string (const char *string, struct metadef *def, void *data, struct dictionary *dict, void *handle); void meta_free (struct metadef *def); +const char *expand_email_admin (struct metadef *def, void *data); +const char *expand_email_owner (struct metadef *def, void *data); + /* Global variables */ extern uid_t wydawca_uid; |