diff options
-rwxr-xr-x | gmvault-notmuch.py | 53 |
1 files changed, 38 insertions, 15 deletions
diff --git a/gmvault-notmuch.py b/gmvault-notmuch.py index 36d7ba3..1a9cce4 100755 --- a/gmvault-notmuch.py +++ b/gmvault-notmuch.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python2 # (C) Copyright 2013 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved. @@ -11,6 +11,8 @@ import os.path import os import json import notmuch +import sys +from progressbar import * def main(): try: @@ -22,6 +24,22 @@ def main(): database.upgrade() destination = database.get_path() + print("Counting emails...") + total = 0 + for root, dirs, files in os.walk(destination): + for name in files: + filename = os.path.join(root, name) + base, ext = os.path.splitext(filename) + if ext != ".eml": + continue + metafile = base + ".meta" + if not os.path.exists(metafile): + continue + total += 1 + + progress = create_progressbar("Scanning messages", total) + progress.start() + i = 0 for root, dirs, files in os.walk(destination): for name in files: filename = os.path.join(root, name) @@ -30,34 +48,35 @@ def main(): continue metafile = base + ".meta" if not os.path.exists(metafile): - print("Strange: %s has no metafile" % filename) continue metafile = open(metafile, "r") metadata = json.load(metafile) metafile.close() - process_message(database, filename, metadata) + i += 1 + try: + progress.update(i) + except: + pass #Files were added since we started counting + progress.finish() database.close() def process_message(database, filename, metadata): - print("[*] Processing %s" % filename) labels = filter_labels(metadata["labels"] + metadata["flags"]) - database.begin_atomic() - message, status = database.add_message(filename, False) - if status == notmuch.STATUS.SUCCESS: - print(" [+] New message.") - elif status == notmuch.STATUS.DUPLICATE_MESSAGE_ID: - print(" [ ] Old message.") + message = database.find_message_by_filename(filename) + if message is not None: + if set(labels) == set(message.get_tags()): + return + database.begin_atomic() + else: + database.begin_atomic() + message, status = database.add_message(filename, False) + tag_message(message, labels) database.end_atomic() - def tag_message(message, labels): - if set(labels) == set(message.get_tags()): - print(" [ ] No new tags.") - return - print(" [+] Adding tags.") message.freeze() message.remove_all_tags(False) for tag in labels: @@ -96,8 +115,12 @@ def filter_labels(labels): ret.remove("") return ret +def create_progressbar(text, total): + return ProgressBar(maxval=total, widgets=[text + ": ", SimpleProgress(), Bar(), Percentage(), " ", ETA(), " ", FileTransferSpeed(unit="emails")]) + if __name__ == '__main__': try: main() except KeyboardInterrupt: + print("") sys.exit(1) |