summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xgmvault-notmuch.py53
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)