Return-Path: X-Original-To: notmuch@notmuchmail.org Delivered-To: notmuch@notmuchmail.org Received: from localhost (localhost [127.0.0.1]) by olra.theworths.org (Postfix) with ESMTP id 0C857429E25 for ; Tue, 12 Jul 2011 20:07:20 -0700 (PDT) X-Virus-Scanned: Debian amavisd-new at olra.theworths.org X-Spam-Flag: NO X-Spam-Score: 0 X-Spam-Level: X-Spam-Status: No, score=0 tagged_above=-999 required=5 tests=[none] autolearn=disabled Received: from olra.theworths.org ([127.0.0.1]) by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id A7fVeCkVinj0 for ; Tue, 12 Jul 2011 20:07:18 -0700 (PDT) Received: from imarko.xen.prgmr.com (imarko.xen.prgmr.com [72.13.95.244]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by olra.theworths.org (Postfix) with ESMTPS id 33072431FB6 for ; Tue, 12 Jul 2011 20:07:18 -0700 (PDT) Received: from localhost ([127.0.0.1] helo=zsu.kismala.com) by imarko.xen.prgmr.com with esmtp (Exim 4.75) (envelope-from ) id 1QgpnB-0003sw-05; Tue, 12 Jul 2011 20:07:17 -0700 From: Istvan Marko To: Austin Clements Subject: Re: Slowness (search opens every email file?) References: <20110711190721.GA5386@compy.jasonwoof.org> <20110712202459.GB15019@compy.jasonwoof.org> <20110713022247.GG25558@mit.edu> Date: Tue, 12 Jul 2011 20:07:16 -0700 In-Reply-To: <20110713022247.GG25558@mit.edu> (Austin Clements's message of "Tue, 12 Jul 2011 22:22:47 -0400") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Cc: Notmuch Mail X-BeenThere: notmuch@notmuchmail.org X-Mailman-Version: 2.1.13 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: Wed, 13 Jul 2011 03:07:20 -0000 --=-=-= Content-Type: text/plain Austin Clements writes: > I'd say this patch looks good other than coding style > - Tab indentation > - /* */ comments, starting with a capital letter > - Space between function name and open paren > - Space after comma in argument lists > - Spaces around assignment operator Thanks, fixed the ones I see: --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=notmuch-value3.patch diff --git a/lib/database.cc b/lib/database.cc index 9c2f4ec..63a15bb 100644 --- a/lib/database.cc +++ b/lib/database.cc @@ -1654,7 +1654,7 @@ notmuch_database_add_message (notmuch_database_t *notmuch, goto DONE; date = notmuch_message_file_get_header (message_file, "date"); - _notmuch_message_set_date (message, date); + _notmuch_message_set_header_values (message, date, from, subject); _notmuch_message_index_file (message, filename); } else { diff --git a/lib/message.cc b/lib/message.cc index d993cde..55070c6 100644 --- a/lib/message.cc +++ b/lib/message.cc @@ -410,6 +410,21 @@ _notmuch_message_ensure_message_file (notmuch_message_t *message) const char * notmuch_message_get_header (notmuch_message_t *message, const char *header) { + std::string value; + + /* Fetch header from the appropriate xapian value field if + * available */ + if (strcmp(header, "from") == 0) + value = message->doc.get_value(NOTMUCH_VALUE_FROM); + else if (strcmp(header, "subject") == 0) + value = message->doc.get_value (NOTMUCH_VALUE_SUBJECT); + else if (strcmp(header, "message-id") == 0) + value = message->doc.get_value (NOTMUCH_VALUE_MESSAGE_ID); + + if (!value.empty()) + return talloc_strdup (message, value.c_str ()); + + /* Otherwise fall back to parsing the file */ _notmuch_message_ensure_message_file (message); if (message->message_file == NULL) return NULL; @@ -785,8 +800,10 @@ notmuch_message_set_author (notmuch_message_t *message, } void -_notmuch_message_set_date (notmuch_message_t *message, - const char *date) +_notmuch_message_set_header_values (notmuch_message_t *message, + const char *date, + const char *from, + const char *subject) { time_t time_value; @@ -799,6 +816,8 @@ _notmuch_message_set_date (notmuch_message_t *message, message->doc.add_value (NOTMUCH_VALUE_TIMESTAMP, Xapian::sortable_serialise (time_value)); + message->doc.add_value (NOTMUCH_VALUE_FROM, from); + message->doc.add_value (NOTMUCH_VALUE_SUBJECT, subject); } /* Synchronize changes made to message->doc out into the database. */ diff --git a/lib/notmuch-private.h b/lib/notmuch-private.h index 02e24ee..2e91afd 100644 --- a/lib/notmuch-private.h +++ b/lib/notmuch-private.h @@ -111,7 +111,9 @@ _internal_error (const char *format, ...) PRINTF_ATTRIBUTE (1, 2); typedef enum { NOTMUCH_VALUE_TIMESTAMP = 0, - NOTMUCH_VALUE_MESSAGE_ID + NOTMUCH_VALUE_MESSAGE_ID, + NOTMUCH_VALUE_FROM, + NOTMUCH_VALUE_SUBJECT } notmuch_value_t; /* Xapian (with flint backend) complains if we provide a term longer @@ -287,9 +289,10 @@ void _notmuch_message_ensure_thread_id (notmuch_message_t *message); void -_notmuch_message_set_date (notmuch_message_t *message, - const char *date); - +_notmuch_message_set_header_values (notmuch_message_t *message, + const char *date, + const char *from, + const char *subject); void _notmuch_message_sync (notmuch_message_t *message); --=-=-= Content-Type: text/plain -- Istvan --=-=-=--