summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorPierre-Yves Chibon <pingou@pingoured.fr>2012-03-18 09:13:28 +0100
committerPierre-Yves Chibon <pingou@pingoured.fr>2012-03-18 09:13:28 +0100
commit91ee2716b2e6a01b1565c5585f0279b77cbb8644 (patch)
tree3dc07876ce3fda80265c711bf6fbd7409bf500f5 /lib
parent4929af3058061c655f462be4a47991fc5f0e28cb (diff)
downloadhyperkitty-91ee2716b2e6a01b1565c5585f0279b77cbb8644.tar.gz
hyperkitty-91ee2716b2e6a01b1565c5585f0279b77cbb8644.tar.xz
hyperkitty-91ee2716b2e6a01b1565c5585f0279b77cbb8644.zip
Remove notmuch lib
Diffstat (limited to 'lib')
-rw-r--r--lib/notmuch.py105
1 files changed, 0 insertions, 105 deletions
diff --git a/lib/notmuch.py b/lib/notmuch.py
deleted file mode 100644
index d2869bc..0000000
--- a/lib/notmuch.py
+++ /dev/null
@@ -1,105 +0,0 @@
-#-*- coding: utf-8 -*-
-
-from __future__ import absolute_import
-
-from calendar import timegm
-from datetime import datetime, timedelta
-import json
-import os
-
-import bunch
-import notmuch
-
-from hyperkitty.lib import gravatar_url
-
-# Used to remove tags that notmuch added automatically that we don't want
-IGNORED_TAGS = (u'inbox', u'unread', u'signed')
-
-def get_ro_db(path):
- # Instead of throwing an exception, notmuch bindings tend to segfault if
- # the database path doesn't exist.
-
- # Does the notmuch db exist?
- actual_db_dir = os.path.join(path, '.notmuch')
- if os.access(actual_db_dir, os.W_OK|os.X_OK) and os.path.isdir(actual_db_dir):
- return notmuch.Database(path,
- mode=notmuch.Database.MODE.READ_ONLY)
-
- raise IOError('Notmuch database not present in %(path)s' %
- {'path': path})
-
-def get_thread_info(thread):
- thread_info = bunch.Bunch()
-
- #
- # Get information about the first email of a thread
- #
-
- first_email = tuple(thread.get_toplevel_messages())[0]
- for tag in (tg for tg in first_email.get_tags() if tg.startswith('=msgid=')):
- thread_info.email_id = tag.split('=msgid=', 1)[-1]
- break
- first_email_data = json.loads(first_email.format_message_as_json())
-
- # Python-3.3 has ''.rsplit(maxsplit=1) (keyword arg). Until then, we need
- # rsplit(None, 1) to get the desired behaviour
- author = first_email_data['headers']['From'].rsplit(None, 1)
- if author[-1].startswith('<'):
- author[-1] = author[-1][1:]
- if author[-1].endswith('>'):
- author[-1] = author[-1][:-1]
- # This accounts for From lines without a real name, just email address
- name = author[0]
- email = author[-1]
- thread_info.author = name
- thread_info.avatar = gravatar_url(email)
-
- for body_part in first_email_data['body']:
- try:
- # The body may have many parts. We only want the part that we
- # can guess is the actual text of an email message.
- # For this prototype, that is defined as
- # has a content-type and content keys. and the content-type
- # is text/plain. When this is not a prototype, the heuristic
- # should be more advanced
- if body_part['content-type'] == u'text/plain':
- thread_info.body = body_part['content']
- break
- except KeyError:
- continue
-
- #
- # Get meta info about the thread itself
- #
-
- # Used for sorting threads
- thread_info.most_recent = thread.get_newest_date()
- date_as_offset = timegm(datetime.utcnow().timetuple()) - thread_info.most_recent
- thread_info.age = str(timedelta(seconds=date_as_offset))
- thread_info.title = thread.get_subject()
- # Because notmuch doesn't allow us to extend the schema, everything is
- # in a tag. Extract those tags that have special meaning to us
- thread_info.tags = []
- thread_info.answers = []
- thread_info.liked = 0
- for tag in thread.get_tags():
- if tag.startswith('=msgid='):
- msgid = tag.split('=msgid=', 1)[-1]
- # The first email doesn't count as a reply :-)
- if msgid != thread_info.email_id:
- thread_info.answers.append(tag.split('=msgid=', 1)[-1])
- elif tag.startswith('=threadlike='):
- thread_info.liked = int(tag.split('=threadlike=', 1)[-1])
- elif tag.startswith('=topic='):
- thread_info.category = tag.split('=topic=', 1)[-1]
- print thread_info.category
- elif tag in IGNORED_TAGS:
- continue
- else:
- thread_info.tags.append(tag)
- # notmuch has this nice method call to give us the info but it returns
- # it as a string instead of a list
- thread_info.participants = set(thread.get_authors().replace(u'| ', u', ', 1).split(u', '))
-
-
- return thread_info