Return-Path: X-Original-To: notmuch@notmuchmail.org Delivered-To: notmuch@notmuchmail.org Received: from localhost (localhost [127.0.0.1]) by arlo.cworth.org (Postfix) with ESMTP id DBA936DE091F for ; Sun, 19 Jun 2016 13:17:20 -0700 (PDT) X-Virus-Scanned: Debian amavisd-new at cworth.org X-Amavis-Alert: BAD HEADER SECTION, Duplicate header field: "References" X-Spam-Flag: NO X-Spam-Score: -0.568 X-Spam-Level: X-Spam-Status: No, score=-0.568 tagged_above=-999 required=5 tests=[AWL=0.152, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01] autolearn=disabled Received: from arlo.cworth.org ([127.0.0.1]) by localhost (arlo.cworth.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Kgy9ZBscP9r9 for ; Sun, 19 Jun 2016 13:17:13 -0700 (PDT) Received: from mail-wm0-f66.google.com (mail-wm0-f66.google.com [74.125.82.66]) by arlo.cworth.org (Postfix) with ESMTPS id AB9456DE01F9 for ; Sun, 19 Jun 2016 13:17:06 -0700 (PDT) Received: by mail-wm0-f66.google.com with SMTP id c82so6633603wme.3 for ; Sun, 19 Jun 2016 13:17:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nikula-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=0Wi7c1OZnF7bwlFMEApf+3G2yvM9M/8CtF2wBYS6gLU=; b=GKNO3g2dxWqwIzYmKcgv2Z77VjnJqOpK9jUAoZFB80ywugL5tc395kodLILmAXS1yV qY62aKDaOuLOs12FWVlq7U77mYaSnklqXHY9Ng2z4k4JF5gjpSiuc7z8i3vXaOXCDQXY +og/1y5aAa15bzEf1MAIhqdLrGJSBCcTsbkyzsiJjV1DT/uJ0WdNiJOahskOrNFbxJra xZFoY0wjxzAmigdTKq6r4CB2Y/tsQvRGDLqMmhREgxwEGtFi2scVxO+Aal+RrnqjDx0T +N137WX5Vn7dgoS363VlrFY9gkvmqiH+aEAI9/vfRoVmYIejZfUIguuuLippw1+M8poC +sVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:in-reply-to:references; bh=0Wi7c1OZnF7bwlFMEApf+3G2yvM9M/8CtF2wBYS6gLU=; b=eYLymwi0ULsxXbQUtUrgevI+0Dsu2IElHn49KYs08iAE57drW2Y0/DHSyUiTucWars chtuaJJF6GLjZlHij2s47TMa7k9C3ENqKtExnRVGZwI2P/he+FSYznAPRBX4nYkih7KL WdDvhZGWoqEskuy89jOtRZ00IndRXkpqNDvstj093gNaOFuGxLPP8P9g5zOLApO8O5lv MD0a1cxreWfRLOHuJCEshltutPoFnjZdfF2ihTVDZ/7JLAjIZWu5nYR44WOXVPGfl+uy 8pVUS2FPkveMi08YPNhy+c9w/l6y1qzDX58HiNvX09f14z1Wa05yN6ZZxe2m9vB78bWJ MKrA== X-Gm-Message-State: ALyK8tJjugttvjfj+lmMaEJHt2Dj7omjYcFITkdW5k+A1epogUeYSWK6pgKTcvadi1EP0w== X-Received: by 10.28.54.147 with SMTP id y19mr7724156wmh.68.1466367425247; Sun, 19 Jun 2016 13:17:05 -0700 (PDT) Received: from localhost (mobile-access-bcee4e-81.dhcp.inet.fi. [188.238.78.81]) by smtp.gmail.com with ESMTPSA id kd7sm60038230wjc.33.2016.06.19.13.17.04 (version=TLSv1/SSLv3 cipher=OTHER); Sun, 19 Jun 2016 13:17:04 -0700 (PDT) From: Jani Nikula To: Jani Nikula , notmuch@notmuchmail.org Cc: Daniel Kahn Gillmor Subject: [RFC PATCH 3/6] cli/reply: return internet address list from get header funcs Date: Sun, 19 Jun 2016 23:15:31 +0300 Message-Id: X-Mailer: git-send-email 2.1.4 In-Reply-To: References: In-Reply-To: References: X-BeenThere: notmuch@notmuchmail.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: "Use and development of the notmuch mail system." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Jun 2016 20:17:21 -0000 Pass in GMimeMessage to simplify To/Cc/Bcc headers. We'll eventually remove the notmuch message passing altogether, but keep both for now to not make too big changes at once. Get rid of an intermediate function. The small annoyance is the ownership differences in the address lists. --- notmuch-reply.c | 73 ++++++++++++++++++++++++--------------------------------- 1 file changed, 30 insertions(+), 43 deletions(-) diff --git a/notmuch-reply.c b/notmuch-reply.c index d90f46f9bed3..98034485c546 100644 --- a/notmuch-reply.c +++ b/notmuch-reply.c @@ -227,31 +227,6 @@ scan_address_list (InternetAddressList *list, return n; } -/* Scan addresses in 'recipients'. - * - * See the documentation of scan_address_list() above. This function - * does exactly the same, but converts 'recipients' to an - * InternetAddressList first. - */ -static unsigned int -scan_address_string (const char *recipients, - notmuch_config_t *config, - GMimeMessage *message, - GMimeRecipientType type, - const char **user_from) -{ - InternetAddressList *list; - - if (recipients == NULL) - return 0; - - list = internet_address_list_parse_string (recipients); - if (list == NULL) - return 0; - - return scan_address_list (list, config, message, type, user_from); -} - /* Does the address in the Reply-To header of 'message' already appear * in either the 'To' or 'Cc' header of the message? */ @@ -287,11 +262,12 @@ reply_to_header_is_redundant (notmuch_message_t *message, const char *reply_to) return 0; } -static const char *get_sender(notmuch_message_t *message) +static InternetAddressList *get_sender(notmuch_message_t *message, + GMimeMessage *mime_message) { const char *reply_to; - reply_to = notmuch_message_get_header (message, "reply-to"); + reply_to = g_mime_message_get_reply_to (mime_message); if (reply_to && *reply_to) { /* * Some mailing lists munge the Reply-To header despite it @@ -307,25 +283,32 @@ static const char *get_sender(notmuch_message_t *message) * will always appear in the reply if reply_all is true. */ if (! reply_to_header_is_redundant (message, reply_to)) - return reply_to; + return internet_address_list_parse_string (reply_to); } - return notmuch_message_get_header (message, "from"); + return internet_address_list_parse_string ( + g_mime_message_get_sender (mime_message)); } -static const char *get_to(notmuch_message_t *message) +static InternetAddressList *get_to(unused(notmuch_message_t *message), + GMimeMessage *mime_message) { - return notmuch_message_get_header (message, "to"); + return g_mime_message_get_recipients (mime_message, + GMIME_RECIPIENT_TYPE_TO); } -static const char *get_cc(notmuch_message_t *message) +static InternetAddressList *get_cc(unused(notmuch_message_t *message), + GMimeMessage *mime_message) { - return notmuch_message_get_header (message, "cc"); + return g_mime_message_get_recipients (mime_message, + GMIME_RECIPIENT_TYPE_CC); } -static const char *get_bcc(notmuch_message_t *message) +static InternetAddressList *get_bcc(unused(notmuch_message_t *message), + GMimeMessage *mime_message) { - return notmuch_message_get_header (message, "bcc"); + return g_mime_message_get_recipients (mime_message, + GMIME_RECIPIENT_TYPE_BCC); } /* Augment the recipients of 'reply' from the "Reply-to:", "From:", @@ -344,10 +327,12 @@ static const char * add_recipients_from_message (GMimeMessage *reply, notmuch_config_t *config, notmuch_message_t *message, + GMimeMessage *mime_message, notmuch_bool_t reply_all) { struct { - const char * (*get_header)(notmuch_message_t *message); + InternetAddressList * (*get_header)(notmuch_message_t *message, + GMimeMessage *mime_message); GMimeRecipientType recipient_type; } reply_to_map[] = { { get_sender, GMIME_RECIPIENT_TYPE_TO }, @@ -360,12 +345,12 @@ add_recipients_from_message (GMimeMessage *reply, unsigned int n = 0; for (i = 0; i < ARRAY_SIZE (reply_to_map); i++) { - const char *recipients; + InternetAddressList *recipients; - recipients = reply_to_map[i].get_header (message); + recipients = reply_to_map[i].get_header (message, mime_message); - n += scan_address_string (recipients, config, reply, - reply_to_map[i].recipient_type, &from_addr); + n += scan_address_list (recipients, config, reply, + reply_to_map[i].recipient_type, &from_addr); if (!reply_all && n) { /* Stop adding new recipients in reply-to-sender mode if @@ -536,6 +521,7 @@ static GMimeMessage * create_reply_message(void *ctx, notmuch_config_t *config, notmuch_message_t *message, + GMimeMessage *mime_message, notmuch_bool_t reply_all, notmuch_bool_t limited) { @@ -566,8 +552,8 @@ create_reply_message(void *ctx, g_mime_object_set_header (GMIME_OBJECT (reply), "References", references); - from_addr = add_recipients_from_message (reply, config, - message, reply_all); + from_addr = add_recipients_from_message (reply, config, message, + mime_message, reply_all); /* The above is all that is needed for limited headers. */ if (limited) @@ -666,7 +652,8 @@ static int do_reply(notmuch_config_t *config, if (mime_node_open (config, message, ¶ms->crypto, &node)) return 1; - reply = create_reply_message (config, config, message, reply_all, + reply = create_reply_message (config, config, message, + GMIME_MESSAGE (node->part), reply_all, format == FORMAT_HEADERS_ONLY); if (!reply) return 1; -- 2.1.4