rename show_messages to print_messages and fix up the arg parsing for notmuch show a bit

This commit is contained in:
Sebastian Spaeth 2010-03-25 16:22:59 +01:00
parent 5c4af8ce39
commit 62a73f7eb0
2 changed files with 33 additions and 23 deletions

View file

@ -172,14 +172,19 @@ class Messages(object):
self._msgs = None self._msgs = None
return i return i
def __del__(self): def __del__(self):
"""Close and free the notmuch Messages""" """Close and free the notmuch Messages"""
if self._msgs is not None: if self._msgs is not None:
nmlib.notmuch_messages_destroy (self._msgs) nmlib.notmuch_messages_destroy (self._msgs)
def show_messages(self, format, indent=0, entire_thread=True): def print_messages(self, format, indent=0, entire_thread=False):
"""Outputs messages as needed for 'notmuch show' to sys.stdout
:param format: A string of either 'text' or 'json'.
:param indent: A number indicating the reply depth of these messages.
:param entire_thread: A bool, indicating whether we want to output
whole threads or only the matching messages.
"""
if format.lower() == "text": if format.lower() == "text":
set_start = "" set_start = ""
set_end = "" set_end = ""
@ -195,6 +200,7 @@ class Messages(object):
sys.stdout.write(set_start) sys.stdout.write(set_start)
# iterate through all toplevel messages in this thread
for msg in self: for msg in self:
# if not msg: # if not msg:
# break # break
@ -221,8 +227,7 @@ class Messages(object):
# break # break
if not replies is None: if not replies is None:
sys.stdout.write(set_sep) sys.stdout.write(set_sep)
replies.show_messages(format, next_indent, entire_thread) replies.print_messages(format, next_indent, entire_thread)
sys.stdout.write(set_end) sys.stdout.write(set_end)
sys.stdout.write(set_end) sys.stdout.write(set_end)
@ -720,13 +725,12 @@ class Message(object):
% (format['id'], indent, format['match'], format['filename']) % (format['id'], indent, format['match'], format['filename'])
output += "\n\fheader{" output += "\n\fheader{"
#Todo: this date is supposed to be cleaned up, as in the index. #Todo: this date is supposed to be prettified, as in the index.
output += "\n%s (%s) (" % (format["headers"]["from"], output += "\n%s (%s) (" % (format["headers"]["from"],
format["headers"]["date"]) format["headers"]["date"])
output += ", ".join(format["tags"]) output += ", ".join(format["tags"])
output += ")\n" output += ")\n"
output += "\nSubject: %s" % format["headers"]["subject"] output += "\nSubject: %s" % format["headers"]["subject"]
output += "\nFrom: %s" % format["headers"]["from"] output += "\nFrom: %s" % format["headers"]["from"]
output += "\nTo: %s" % format["headers"]["to"] output += "\nTo: %s" % format["headers"]["to"]
@ -763,7 +767,6 @@ class Message(object):
return output return output
def __del__(self): def __del__(self):
"""Close and free the notmuch Message""" """Close and free the notmuch Message"""
if self._msg is not None: if self._msg is not None:

29
notmuch
View file

@ -302,24 +302,31 @@ if __name__ == '__main__':
print(str(thread)) print(str(thread))
#------------------------------------- #-------------------------------------
elif sys.argv[1] == 'show': elif sys.argv[1] == 'show':
entire_thread = False
db = Database() db = Database()
out_format="text" out_format="text"
if len(sys.argv) == 2:
#no further search term
querystr='' querystr=''
elif sys.argv[2].startswith("--format="): first_search_term = None
out_format = sys.argv[2].split("=")[1].strip()
#ugly homegrown option parsing
#TODO: use OptionParser
for (i, arg) in enumerate(sys.argv[1:]):
if arg == '--entire-thread':
entire_thread = True
elif arg.startswith("--format="):
out_format = arg.split("=")[1]
if out_format == 'json':
#for compatibility use --entire-thread for json
entire_thread = True
if not out_format in ("json", "text"): if not out_format in ("json", "text"):
raise Exception("unknown format") raise Exception("unknown format")
elif not arg.startswith('--'):
#save the position of the first sys.argv that is a search term
first_search_term = i+1
if len(sys.argv) == 3: if first_search_term:
querystr = ''
else:
querystr = quote_query_line(sys.argv[3:])
else:
#mangle arguments wrapping terms with spaces in quotes #mangle arguments wrapping terms with spaces in quotes
querystr = quote_query_line(sys.argv[2:]) querystr = quote_query_line(sys.argv[first_search_term:])
logging.debug("show "+querystr) logging.debug("show "+querystr)
t = Query(db,querystr).search_threads() t = Query(db,querystr).search_threads()
@ -337,7 +344,7 @@ if __name__ == '__main__':
first_toplevel = False first_toplevel = False
msgs.show_messages(out_format, 0, True) msgs.print_messages(out_format, 0, True)
if out_format.lower() == "json": if out_format.lower() == "json":
sys.stdout.write("]") sys.stdout.write("]")