From: Jani Nikula Date: Sun, 19 Jun 2016 20:15:31 +0000 (+0300) Subject: [RFC PATCH 3/6] cli/reply: return internet address list from get header funcs X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=168d4b0f5366806b4b967c6a6fc4a6ed4b0885ba;p=notmuch-archives.git [RFC PATCH 3/6] cli/reply: return internet address list from get header funcs --- diff --git a/0a/75840581cdd776ec1f243fe53dd5590259fc62 b/0a/75840581cdd776ec1f243fe53dd5590259fc62 new file mode 100644 index 000000000..2e2be900c --- /dev/null +++ b/0a/75840581cdd776ec1f243fe53dd5590259fc62 @@ -0,0 +1,249 @@ +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 +