diff options
Diffstat (limited to 'lib/notmuch/messages.go')
-rw-r--r-- | lib/notmuch/messages.go | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/lib/notmuch/messages.go b/lib/notmuch/messages.go new file mode 100644 index 00000000..22cc0094 --- /dev/null +++ b/lib/notmuch/messages.go @@ -0,0 +1,58 @@ +//go:build notmuch +// +build notmuch + +package notmuch + +/* +#cgo LDFLAGS: -lnotmuch + +#include <notmuch.h> + +*/ +import "C" + +type Messages struct { + message *C.notmuch_message_t + messages *C.notmuch_messages_t +} + +// Next advances the Messages iterator to the next message. Next returns false if +// no more messages are available +func (m *Messages) Next() bool { + if C.notmuch_messages_valid(m.messages) == 0 { + return false + } + m.message = C.notmuch_messages_get(m.messages) + C.notmuch_messages_move_to_next(m.messages) + return true +} + +// Message returns the current message in the iterator +func (m *Messages) Message() Message { + return Message{ + message: m.message, + } +} + +// Close frees memory associated with a Messages iterator. This method is not +// strictly necessary to call, as the resources will be freed when the Query +// associated with the Messages object is freed. +func (m *Messages) Close() { + C.notmuch_messages_destroy(m.messages) +} + +// Tags returns a slice of all tags in the message list. WARNING: After calling +// tags, the message list can no longer be iterated; a new list must be created +// to iterate after calling Tags +func (m *Messages) Tags() []string { + cTags := C.notmuch_messages_collect_tags(m.messages) + defer C.notmuch_tags_destroy(cTags) + + tags := []string{} + for C.notmuch_tags_valid(cTags) > 0 { + tag := C.notmuch_tags_get(cTags) + tags = append(tags, C.GoString(tag)) + C.notmuch_tags_move_to_next(cTags) + } + return tags +} |