X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=cnotmuch%2Fdatabase.py;h=dde7da16eecea67fec9e513d27c16588a1abccf8;hp=c815e440364e0af2983bbb1aafb10fd1b6f16db3;hb=63c5a6d77d2b51104305e91676720099f4667e92;hpb=0b57cb8ed9850d1315a60ff23113e343b531170e diff --git a/cnotmuch/database.py b/cnotmuch/database.py index c815e440..dde7da16 100644 --- a/cnotmuch/database.py +++ b/cnotmuch/database.py @@ -297,6 +297,7 @@ class Database(object): """Returns a :class:`Query` derived from this database This is a shorthand method for doing:: + # short version # Automatically frees the Database() when 'q' is deleted @@ -313,7 +314,7 @@ class Database(object): # Raise a NotmuchError if not initialized self._verify_initialized_db() - return Query(self._db, querystring) + return Query(self, querystring) def __repr__(self): return "'Notmuch DB " + self.get_path() + "'" @@ -713,7 +714,13 @@ class Messages(object): """len(:class:`Messages`) returns the number of contained messages .. note:: As this iterates over the messages, we will not be able to - iterate over them again (as in retrieve them)! + iterate over them again! So this will fail:: + + #THIS FAILS + msgs = Database().create_query('').search_message() + if len(msgs) > 0: #this 'exhausts' msgs + # next line raises NotmuchError(STATUS.NOT_INITIALIZED)!!! + for msg in msgs: print msg """ if self._msgs is None: raise NotmuchError(STATUS.NOT_INITIALIZED) @@ -753,6 +760,10 @@ class Message(object): _get_thread_id = nmlib.notmuch_message_get_thread_id _get_thread_id.restype = c_char_p + """notmuch_message_get_replies""" + _get_replies = nmlib.notmuch_message_get_replies + _get_replies.restype = c_void_p + """notmuch_message_get_tags (notmuch_message_t *message)""" _get_tags = nmlib.notmuch_message_get_tags _get_tags.restype = c_void_p @@ -810,6 +821,33 @@ class Message(object): return Message._get_thread_id (self._msg); + def get_replies(self): + """Gets all direct replies to this message as :class:`Messages` iterator + + .. note:: This call only makes sense if 'message' was + ultimately obtained from a :class:`Thread` object, (such as + by coming directly from the result of calling + :meth:`Thread.get_toplevel_messages` or by any number of + subsequent calls to :meth:`get_replies`). If this message was + obtained through some non-thread means, (such as by a call + to :meth:`Query.search_messages`), then this function will + return `None`. + + :returns: :class:`Messages` or `None` if there are no replies to + this message. + :exception: :exc:`NotmuchError` STATUS.NOT_INITIALIZED if the message + is not initialized. + """ + if self._msg is None: + raise NotmuchError(STATUS.NOT_INITIALIZED) + + msgs_p = Message._get_replies(self._msg); + + if msgs_p is None: + return None + + return Messages(msgs_p,self) + def get_date(self): """Returns time_t of the message date @@ -1070,7 +1108,9 @@ class Message(object): msg['from'] = self.get_header('from') msg['tags'] = str(self.get_tags()) msg['date'] = date.fromtimestamp(self.get_date()) - return "%(from)s (%(date)s) (%(tags)s)" % (msg) + replies = self.get_replies() + msg['replies'] = len(replies) if replies is not None else -1 + return "%(from)s (%(date)s) (%(tags)s) (%(replies)d) replies" % (msg) def format_as_text(self): """Output like notmuch show (Not implemented)"""