X-Git-Url: https://git.notmuchmail.org/git?a=blobdiff_plain;f=bindings%2Fpython%2Fnotmuch%2Fthread.py;h=c575c88dc185c0e55264656ad78c658d7f3730ed;hb=86b0aeb1ca0f12286e13b71d7f025ba8a59a808d;hp=5e08eb316901b70a3642c5e0b7f4a1d2571b4977;hpb=19daa117b90289d724392e04e3647ade6db4dd7b;p=notmuch diff --git a/bindings/python/notmuch/thread.py b/bindings/python/notmuch/thread.py index 5e08eb31..c575c88d 100644 --- a/bindings/python/notmuch/thread.py +++ b/bindings/python/notmuch/thread.py @@ -17,8 +17,10 @@ along with notmuch. If not, see . Copyright 2010 Sebastian Spaeth ' """ -from ctypes import c_char_p, c_void_p, c_long -from notmuch.globals import nmlib, STATUS, NotmuchError +from ctypes import c_char_p, c_long, c_int +from notmuch.globals import (nmlib, STATUS, + NotmuchError, NotmuchThreadP, NotmuchThreadsP, NotmuchMessagesP, + NotmuchTagsP,) from notmuch.message import Messages from notmuch.tag import Tags from datetime import date @@ -75,7 +77,8 @@ class Threads(object): #notmuch_threads_get _get = nmlib.notmuch_threads_get - _get.restype = c_void_p + _get.argtypes = [NotmuchThreadsP] + _get.restype = NotmuchThreadP def __init__(self, threads_p, parent=None): """ @@ -105,16 +108,24 @@ class Threads(object): """ Make Threads an iterator """ return self + _valid = nmlib.notmuch_threads_valid + _valid.argtypes = [NotmuchThreadsP] + _valid.restype = bool + + _move_to_next = nmlib.notmuch_threads_move_to_next + _move_to_next.argtypes = [NotmuchThreadsP] + _move_to_next.restype = None + def next(self): if self._threads is None: raise NotmuchError(STATUS.NOT_INITIALIZED) - if not nmlib.notmuch_threads_valid(self._threads): + if not self._valid(self._threads): self._threads = None raise StopIteration thread = Thread(Threads._get(self._threads), self) - nmlib.notmuch_threads_move_to_next(self._threads) + self._move_to_next(self._threads) return thread def __len__(self): @@ -134,8 +145,8 @@ class Threads(object): i = 0 # returns 'bool'. On out-of-memory it returns None - while nmlib.notmuch_threads_valid(self._threads): - nmlib.notmuch_threads_move_to_next(self._threads) + while self._valid(self._threads): + self._move_to_next(self._threads) i += 1 # reset self._threads to mark as "exhausted" self._threads = None @@ -153,12 +164,16 @@ class Threads(object): Iterator, False if not. None on a "Out-of-memory" error. """ return self._threads is not None and \ - nmlib.notmuch_threads_valid(self._threads) > 0 + self._valid(self._threads) > 0 + + _destroy = nmlib.notmuch_threads_destroy + _destroy.argtypes = [NotmuchThreadsP] + _destroy.argtypes = None def __del__(self): """Close and free the notmuch Threads""" if self._threads is not None: - nmlib.notmuch_messages_destroy(self._threads) + self._destroy(self._threads) class Thread(object): @@ -166,29 +181,36 @@ class Thread(object): """notmuch_thread_get_thread_id""" _get_thread_id = nmlib.notmuch_thread_get_thread_id + _get_thread_id.argtypes = [NotmuchThreadP] _get_thread_id.restype = c_char_p """notmuch_thread_get_authors""" _get_authors = nmlib.notmuch_thread_get_authors + _get_authors.argtypes = [NotmuchThreadP] _get_authors.restype = c_char_p """notmuch_thread_get_subject""" _get_subject = nmlib.notmuch_thread_get_subject + _get_subject.argtypes = [NotmuchThreadP] _get_subject.restype = c_char_p """notmuch_thread_get_toplevel_messages""" _get_toplevel_messages = nmlib.notmuch_thread_get_toplevel_messages - _get_toplevel_messages.restype = c_void_p + _get_toplevel_messages.argtypes = [NotmuchThreadP] + _get_toplevel_messages.restype = NotmuchMessagesP _get_newest_date = nmlib.notmuch_thread_get_newest_date + _get_newest_date.argtypes = [NotmuchThreadP] _get_newest_date.restype = c_long _get_oldest_date = nmlib.notmuch_thread_get_oldest_date + _get_oldest_date.argtypes = [NotmuchThreadP] _get_oldest_date.restype = c_long """notmuch_thread_get_tags""" _get_tags = nmlib.notmuch_thread_get_tags - _get_tags.restype = c_void_p + _get_tags.argtypes = [NotmuchThreadP] + _get_tags.restype = NotmuchTagsP def __init__(self, thread_p, parent=None): """ @@ -225,6 +247,10 @@ class Thread(object): raise NotmuchError(STATUS.NOT_INITIALIZED) return Thread._get_thread_id(self._thread) + _get_total_messages = nmlib.notmuch_thread_get_total_messages + _get_total_messages.argtypes = [NotmuchThreadP] + _get_total_messages.restype = c_int + def get_total_messages(self): """Get the total number of messages in 'thread' @@ -236,7 +262,7 @@ class Thread(object): """ if self._thread is None: raise NotmuchError(STATUS.NOT_INITIALIZED) - return nmlib.notmuch_thread_get_total_messages(self._thread) + return self._get_total_messages(self._thread) def get_toplevel_messages(self): """Returns a :class:`Messages` iterator for the top-level messages in @@ -267,6 +293,10 @@ class Thread(object): return Messages(msgs_p, self) + _get_matched_messages = nmlib.notmuch_thread_get_matched_messages + _get_matched_messages.argtypes = [NotmuchThreadP] + _get_matched_messages.restype = c_int + def get_matched_messages(self): """Returns the number of messages in 'thread' that matched the query @@ -278,7 +308,7 @@ class Thread(object): """ if self._thread is None: raise NotmuchError(STATUS.NOT_INITIALIZED) - return nmlib.notmuch_thread_get_matched_messages(self._thread) + return self._get_matched_messages(self._thread) def get_authors(self): """Returns the authors of 'thread' @@ -387,7 +417,11 @@ class Thread(object): thread['subject'], thread['tags']) + _destroy = nmlib.notmuch_thread_destroy + _destroy.argtypes = [NotmuchThreadP] + _destroy.restype = None + def __del__(self): """Close and free the notmuch Thread""" if self._thread is not None: - nmlib.notmuch_thread_destroy(self._thread) + self._destroy(self._thread)