#include <gmime/gmime.h>
+/* GMIME_CHECK_VERSION in gmime 2.4 is not usable from the
+ * preprocessor (it calls a runtime function). But since
+ * GMIME_MAJOR_VERSION and friends were added in gmime 2.6, we can use
+ * these to check the version number. */
+#ifdef GMIME_MAJOR_VERSION
+#define GMIME_ATLEAST_26
+#endif
+
#include "notmuch.h"
/* This is separate from notmuch-private.h because we're trying to
#define STRINGIFY(s) STRINGIFY_(s)
#define STRINGIFY_(s) #s
+struct mime_node;
+struct notmuch_show_params;
+
typedef struct notmuch_show_format {
const char *message_set_start;
+ void (*part) (const void *ctx,
+ struct mime_node *node, int indent,
+ const struct notmuch_show_params *params);
const char *message_start;
void (*message) (const void *ctx,
notmuch_message_t *message,
void (*part_start) (GMimeObject *part,
int *part_count);
void (*part_encstatus) (int status);
+#ifdef GMIME_ATLEAST_26
+ void (*part_sigstatus) (GMimeSignatureList* siglist);
+#else
void (*part_sigstatus) (const GMimeSignatureValidity* validity);
+#endif
void (*part_content) (GMimeObject *part);
void (*part_end) (GMimeObject *part);
const char *part_sep;
} notmuch_show_format_t;
typedef struct notmuch_show_params {
- int entire_thread;
- int raw;
+ notmuch_bool_t entire_thread;
+ notmuch_bool_t raw;
int part;
+#ifdef GMIME_ATLEAST_26
+ GMimeCryptoContext* cryptoctx;
+#else
GMimeCipherContext* cryptoctx;
- int decrypt;
+#endif
+ notmuch_bool_t decrypt;
} notmuch_show_params_t;
/* There's no point in continuing when we've detected that we've done
notmuch_config_set_maildir_synchronize_flags (notmuch_config_t *config,
notmuch_bool_t synchronize_flags);
+const char **
+notmuch_config_get_search_exclude_tags (notmuch_config_t *config, size_t *length);
+
+void
+notmuch_config_set_search_exclude_tags (notmuch_config_t *config,
+ const char *list[],
+ size_t length);
+
int
notmuch_run_hook (const char *db_path, const char *hook);
/* The number of children of this part. */
int nchildren;
+ /* The parent of this node or NULL if this is the root node. */
+ struct mime_node *parent;
+
+ /* The depth-first part number of this child if the MIME tree is
+ * being traversed in depth-first order, or -1 otherwise. */
+ int part_num;
+
/* True if decryption of this part was attempted. */
notmuch_bool_t decrypt_attempted;
/* True if decryption of this part's child succeeded. In this
/* True if signature verification on this part was attempted. */
notmuch_bool_t verify_attempted;
+#ifdef GMIME_ATLEAST_26
+ /* The list of signatures for signed or encrypted containers. If
+ * there are no signatures, this will be NULL. */
+ GMimeSignatureList* sig_list;
+#else
/* For signed or encrypted containers, the validity of the
* signature. May be NULL if signature verification failed. If
* there are simply no signatures, this will be non-NULL with an
* empty signers list. */
const GMimeSignatureValidity *sig_validity;
+#endif
/* Internal: Context inherited from the root iterator. */
struct mime_node_context *ctx;
/* Internal: For successfully decrypted multipart parts, the
* decrypted part to substitute for the second child. */
GMimeObject *decrypted_child;
+
+ /* Internal: The next child for depth-first traversal and the part
+ * number to assign it (or -1 if unknown). */
+ int next_child;
+ int next_part_num;
} mime_node_t;
/* Construct a new MIME node pointing to the root message part of
*/
notmuch_status_t
mime_node_open (const void *ctx, notmuch_message_t *message,
- GMimeCipherContext *cryptoctx, notmuch_bool_t decrypt,
- mime_node_t **node_out);
+#ifdef GMIME_ATLEAST_26
+ GMimeCryptoContext *cryptoctx,
+#else
+ GMimeCipherContext *cryptoctx,
+#endif
+ notmuch_bool_t decrypt, mime_node_t **node_out);
/* Return a new MIME node for the requested child part of parent.
* parent will be used as the talloc context for the returned child
* an error message on stderr).
*/
mime_node_t *
-mime_node_child (const mime_node_t *parent, int child);
+mime_node_child (mime_node_t *parent, int child);
/* Return the nth child of node in a depth-first traversal. If n is
* 0, returns node itself. Returns NULL if there is no such part. */