mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-29 22:24:12 +01:00
303 lines
11 KiB
Python
303 lines
11 KiB
Python
|
import cffi
|
||
|
|
||
|
|
||
|
ffibuilder = cffi.FFI()
|
||
|
ffibuilder.set_source(
|
||
|
'notdb._capi',
|
||
|
r"""
|
||
|
#include <stdlib.h>
|
||
|
#include <time.h>
|
||
|
#include <notmuch.h>
|
||
|
|
||
|
#if LIBNOTMUCH_MAJOR_VERSION < 5
|
||
|
#error libnotmuch version not supported by notdb
|
||
|
#endif
|
||
|
""",
|
||
|
include_dirs=['../../lib'],
|
||
|
library_dirs=['../../lib'],
|
||
|
libraries=['notmuch'],
|
||
|
)
|
||
|
ffibuilder.cdef(
|
||
|
r"""
|
||
|
void free(void *ptr);
|
||
|
typedef int... time_t;
|
||
|
|
||
|
#define LIBNOTMUCH_MAJOR_VERSION ...
|
||
|
#define LIBNOTMUCH_MINOR_VERSION ...
|
||
|
#define LIBNOTMUCH_MICRO_VERSION ...
|
||
|
|
||
|
#define NOTMUCH_TAG_MAX ...
|
||
|
|
||
|
typedef enum _notmuch_status {
|
||
|
NOTMUCH_STATUS_SUCCESS = 0,
|
||
|
NOTMUCH_STATUS_OUT_OF_MEMORY,
|
||
|
NOTMUCH_STATUS_READ_ONLY_DATABASE,
|
||
|
NOTMUCH_STATUS_XAPIAN_EXCEPTION,
|
||
|
NOTMUCH_STATUS_FILE_ERROR,
|
||
|
NOTMUCH_STATUS_FILE_NOT_EMAIL,
|
||
|
NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID,
|
||
|
NOTMUCH_STATUS_NULL_POINTER,
|
||
|
NOTMUCH_STATUS_TAG_TOO_LONG,
|
||
|
NOTMUCH_STATUS_UNBALANCED_FREEZE_THAW,
|
||
|
NOTMUCH_STATUS_UNBALANCED_ATOMIC,
|
||
|
NOTMUCH_STATUS_UNSUPPORTED_OPERATION,
|
||
|
NOTMUCH_STATUS_UPGRADE_REQUIRED,
|
||
|
NOTMUCH_STATUS_PATH_ERROR,
|
||
|
NOTMUCH_STATUS_ILLEGAL_ARGUMENT,
|
||
|
NOTMUCH_STATUS_LAST_STATUS
|
||
|
} notmuch_status_t;
|
||
|
typedef enum {
|
||
|
NOTMUCH_DATABASE_MODE_READ_ONLY = 0,
|
||
|
NOTMUCH_DATABASE_MODE_READ_WRITE
|
||
|
} notmuch_database_mode_t;
|
||
|
typedef int notmuch_bool_t;
|
||
|
typedef enum _notmuch_message_flag {
|
||
|
NOTMUCH_MESSAGE_FLAG_MATCH,
|
||
|
NOTMUCH_MESSAGE_FLAG_EXCLUDED,
|
||
|
NOTMUCH_MESSAGE_FLAG_GHOST,
|
||
|
} notmuch_message_flag_t;
|
||
|
typedef enum {
|
||
|
NOTMUCH_SORT_OLDEST_FIRST,
|
||
|
NOTMUCH_SORT_NEWEST_FIRST,
|
||
|
NOTMUCH_SORT_MESSAGE_ID,
|
||
|
NOTMUCH_SORT_UNSORTED
|
||
|
} notmuch_sort_t;
|
||
|
typedef enum {
|
||
|
NOTMUCH_EXCLUDE_FLAG,
|
||
|
NOTMUCH_EXCLUDE_TRUE,
|
||
|
NOTMUCH_EXCLUDE_FALSE,
|
||
|
NOTMUCH_EXCLUDE_ALL
|
||
|
} notmuch_exclude_t;
|
||
|
|
||
|
// These are fully opaque types for us, we only ever use pointers.
|
||
|
typedef struct _notmuch_database notmuch_database_t;
|
||
|
typedef struct _notmuch_query notmuch_query_t;
|
||
|
typedef struct _notmuch_threads notmuch_threads_t;
|
||
|
typedef struct _notmuch_thread notmuch_thread_t;
|
||
|
typedef struct _notmuch_messages notmuch_messages_t;
|
||
|
typedef struct _notmuch_message notmuch_message_t;
|
||
|
typedef struct _notmuch_tags notmuch_tags_t;
|
||
|
typedef struct _notmuch_string_map_iterator notmuch_message_properties_t;
|
||
|
typedef struct _notmuch_directory notmuch_directory_t;
|
||
|
typedef struct _notmuch_filenames notmuch_filenames_t;
|
||
|
typedef struct _notmuch_config_list notmuch_config_list_t;
|
||
|
|
||
|
const char *
|
||
|
notmuch_status_to_string (notmuch_status_t status);
|
||
|
|
||
|
notmuch_status_t
|
||
|
notmuch_database_create_verbose (const char *path,
|
||
|
notmuch_database_t **database,
|
||
|
char **error_message);
|
||
|
notmuch_status_t
|
||
|
notmuch_database_create (const char *path, notmuch_database_t **database);
|
||
|
notmuch_status_t
|
||
|
notmuch_database_open_verbose (const char *path,
|
||
|
notmuch_database_mode_t mode,
|
||
|
notmuch_database_t **database,
|
||
|
char **error_message);
|
||
|
notmuch_status_t
|
||
|
notmuch_database_open (const char *path,
|
||
|
notmuch_database_mode_t mode,
|
||
|
notmuch_database_t **database);
|
||
|
notmuch_status_t
|
||
|
notmuch_database_close (notmuch_database_t *database);
|
||
|
notmuch_status_t
|
||
|
notmuch_database_destroy (notmuch_database_t *database);
|
||
|
const char *
|
||
|
notmuch_database_get_path (notmuch_database_t *database);
|
||
|
unsigned int
|
||
|
notmuch_database_get_version (notmuch_database_t *database);
|
||
|
notmuch_bool_t
|
||
|
notmuch_database_needs_upgrade (notmuch_database_t *database);
|
||
|
notmuch_status_t
|
||
|
notmuch_database_begin_atomic (notmuch_database_t *notmuch);
|
||
|
notmuch_status_t
|
||
|
notmuch_database_end_atomic (notmuch_database_t *notmuch);
|
||
|
unsigned long
|
||
|
notmuch_database_get_revision (notmuch_database_t *notmuch,
|
||
|
const char **uuid);
|
||
|
notmuch_status_t
|
||
|
notmuch_database_add_message (notmuch_database_t *database,
|
||
|
const char *filename,
|
||
|
notmuch_message_t **message);
|
||
|
notmuch_status_t
|
||
|
notmuch_database_remove_message (notmuch_database_t *database,
|
||
|
const char *filename);
|
||
|
notmuch_status_t
|
||
|
notmuch_database_find_message (notmuch_database_t *database,
|
||
|
const char *message_id,
|
||
|
notmuch_message_t **message);
|
||
|
notmuch_status_t
|
||
|
notmuch_database_find_message_by_filename (notmuch_database_t *notmuch,
|
||
|
const char *filename,
|
||
|
notmuch_message_t **message);
|
||
|
notmuch_tags_t *
|
||
|
notmuch_database_get_all_tags (notmuch_database_t *db);
|
||
|
|
||
|
notmuch_query_t *
|
||
|
notmuch_query_create (notmuch_database_t *database,
|
||
|
const char *query_string);
|
||
|
const char *
|
||
|
notmuch_query_get_query_string (const notmuch_query_t *query);
|
||
|
notmuch_database_t *
|
||
|
notmuch_query_get_database (const notmuch_query_t *query);
|
||
|
void
|
||
|
notmuch_query_set_omit_excluded (notmuch_query_t *query,
|
||
|
notmuch_exclude_t omit_excluded);
|
||
|
void
|
||
|
notmuch_query_set_sort (notmuch_query_t *query, notmuch_sort_t sort);
|
||
|
notmuch_sort_t
|
||
|
notmuch_query_get_sort (const notmuch_query_t *query);
|
||
|
notmuch_status_t
|
||
|
notmuch_query_add_tag_exclude (notmuch_query_t *query, const char *tag);
|
||
|
notmuch_status_t
|
||
|
notmuch_query_search_threads (notmuch_query_t *query,
|
||
|
notmuch_threads_t **out);
|
||
|
notmuch_status_t
|
||
|
notmuch_query_search_messages (notmuch_query_t *query,
|
||
|
notmuch_messages_t **out);
|
||
|
notmuch_status_t
|
||
|
notmuch_query_count_messages (notmuch_query_t *query, unsigned int *count);
|
||
|
notmuch_status_t
|
||
|
notmuch_query_count_threads (notmuch_query_t *query, unsigned *count);
|
||
|
void
|
||
|
notmuch_query_destroy (notmuch_query_t *query);
|
||
|
|
||
|
notmuch_bool_t
|
||
|
notmuch_threads_valid (notmuch_threads_t *threads);
|
||
|
notmuch_thread_t *
|
||
|
notmuch_threads_get (notmuch_threads_t *threads);
|
||
|
void
|
||
|
notmuch_threads_move_to_next (notmuch_threads_t *threads);
|
||
|
void
|
||
|
notmuch_threads_destroy (notmuch_threads_t *threads);
|
||
|
|
||
|
const char *
|
||
|
notmuch_thread_get_thread_id (notmuch_thread_t *thread);
|
||
|
notmuch_messages_t *
|
||
|
notmuch_message_get_replies (notmuch_message_t *message);
|
||
|
int
|
||
|
notmuch_thread_get_total_messages (notmuch_thread_t *thread);
|
||
|
notmuch_messages_t *
|
||
|
notmuch_thread_get_toplevel_messages (notmuch_thread_t *thread);
|
||
|
notmuch_messages_t *
|
||
|
notmuch_thread_get_messages (notmuch_thread_t *thread);
|
||
|
int
|
||
|
notmuch_thread_get_matched_messages (notmuch_thread_t *thread);
|
||
|
const char *
|
||
|
notmuch_thread_get_authors (notmuch_thread_t *thread);
|
||
|
const char *
|
||
|
notmuch_thread_get_subject (notmuch_thread_t *thread);
|
||
|
time_t
|
||
|
notmuch_thread_get_oldest_date (notmuch_thread_t *thread);
|
||
|
time_t
|
||
|
notmuch_thread_get_newest_date (notmuch_thread_t *thread);
|
||
|
notmuch_tags_t *
|
||
|
notmuch_thread_get_tags (notmuch_thread_t *thread);
|
||
|
void
|
||
|
notmuch_thread_destroy (notmuch_thread_t *thread);
|
||
|
|
||
|
notmuch_bool_t
|
||
|
notmuch_messages_valid (notmuch_messages_t *messages);
|
||
|
notmuch_message_t *
|
||
|
notmuch_messages_get (notmuch_messages_t *messages);
|
||
|
void
|
||
|
notmuch_messages_move_to_next (notmuch_messages_t *messages);
|
||
|
void
|
||
|
notmuch_messages_destroy (notmuch_messages_t *messages);
|
||
|
notmuch_tags_t *
|
||
|
notmuch_messages_collect_tags (notmuch_messages_t *messages);
|
||
|
|
||
|
const char *
|
||
|
notmuch_message_get_message_id (notmuch_message_t *message);
|
||
|
const char *
|
||
|
notmuch_message_get_thread_id (notmuch_message_t *message);
|
||
|
const char *
|
||
|
notmuch_message_get_filename (notmuch_message_t *message);
|
||
|
notmuch_filenames_t *
|
||
|
notmuch_message_get_filenames (notmuch_message_t *message);
|
||
|
notmuch_bool_t
|
||
|
notmuch_message_get_flag (notmuch_message_t *message,
|
||
|
notmuch_message_flag_t flag);
|
||
|
void
|
||
|
notmuch_message_set_flag (notmuch_message_t *message,
|
||
|
notmuch_message_flag_t flag,
|
||
|
notmuch_bool_t value);
|
||
|
time_t
|
||
|
notmuch_message_get_date (notmuch_message_t *message);
|
||
|
const char *
|
||
|
notmuch_message_get_header (notmuch_message_t *message,
|
||
|
const char *header);
|
||
|
notmuch_tags_t *
|
||
|
notmuch_message_get_tags (notmuch_message_t *message);
|
||
|
notmuch_status_t
|
||
|
notmuch_message_add_tag (notmuch_message_t *message, const char *tag);
|
||
|
notmuch_status_t
|
||
|
notmuch_message_remove_tag (notmuch_message_t *message, const char *tag);
|
||
|
notmuch_status_t
|
||
|
notmuch_message_remove_all_tags (notmuch_message_t *message);
|
||
|
notmuch_status_t
|
||
|
notmuch_message_maildir_flags_to_tags (notmuch_message_t *message);
|
||
|
notmuch_status_t
|
||
|
notmuch_message_tags_to_maildir_flags (notmuch_message_t *message);
|
||
|
notmuch_status_t
|
||
|
notmuch_message_freeze (notmuch_message_t *message);
|
||
|
notmuch_status_t
|
||
|
notmuch_message_thaw (notmuch_message_t *message);
|
||
|
notmuch_status_t
|
||
|
notmuch_message_get_property (notmuch_message_t *message,
|
||
|
const char *key, const char **value);
|
||
|
notmuch_status_t
|
||
|
notmuch_message_add_property (notmuch_message_t *message,
|
||
|
const char *key, const char *value);
|
||
|
notmuch_status_t
|
||
|
notmuch_message_remove_property (notmuch_message_t *message,
|
||
|
const char *key, const char *value);
|
||
|
notmuch_status_t
|
||
|
notmuch_message_remove_all_properties (notmuch_message_t *message,
|
||
|
const char *key);
|
||
|
notmuch_message_properties_t *
|
||
|
notmuch_message_get_properties (notmuch_message_t *message,
|
||
|
const char *key, notmuch_bool_t exact);
|
||
|
notmuch_bool_t
|
||
|
notmuch_message_properties_valid (notmuch_message_properties_t
|
||
|
*properties);
|
||
|
void
|
||
|
notmuch_message_properties_move_to_next (notmuch_message_properties_t
|
||
|
*properties);
|
||
|
const char *
|
||
|
notmuch_message_properties_key (notmuch_message_properties_t *properties);
|
||
|
const char *
|
||
|
notmuch_message_properties_value (notmuch_message_properties_t
|
||
|
*properties);
|
||
|
void
|
||
|
notmuch_message_properties_destroy (notmuch_message_properties_t
|
||
|
*properties);
|
||
|
void
|
||
|
notmuch_message_destroy (notmuch_message_t *message);
|
||
|
|
||
|
notmuch_bool_t
|
||
|
notmuch_tags_valid (notmuch_tags_t *tags);
|
||
|
const char *
|
||
|
notmuch_tags_get (notmuch_tags_t *tags);
|
||
|
void
|
||
|
notmuch_tags_move_to_next (notmuch_tags_t *tags);
|
||
|
void
|
||
|
notmuch_tags_destroy (notmuch_tags_t *tags);
|
||
|
|
||
|
notmuch_bool_t
|
||
|
notmuch_filenames_valid (notmuch_filenames_t *filenames);
|
||
|
const char *
|
||
|
notmuch_filenames_get (notmuch_filenames_t *filenames);
|
||
|
void
|
||
|
notmuch_filenames_move_to_next (notmuch_filenames_t *filenames);
|
||
|
void
|
||
|
notmuch_filenames_destroy (notmuch_filenames_t *filenames);
|
||
|
"""
|
||
|
)
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
ffibuilder.compile(verbose=True)
|