summaryrefslogtreecommitdiff
path: root/alot/db
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2020-03-02 18:14:13 +0100
committerAnton Khirnov <anton@khirnov.net>2020-03-02 18:14:13 +0100
commitce1861c4c938ec2833a5b334ecb4be362a4429a8 (patch)
treeae7f5191a32ca3b66d0cf0ea48a974f6b930502a /alot/db
parentcd4a20552b33355f790379dcb4275f9105aea1b3 (diff)
db/message: do not delay loading the email file
This simplifies the following refactorings. It will be made asynchronous later.
Diffstat (limited to 'alot/db')
-rw-r--r--alot/db/message.py36
1 files changed, 20 insertions, 16 deletions
diff --git a/alot/db/message.py b/alot/db/message.py
index d9866384..f20e3af6 100644
--- a/alot/db/message.py
+++ b/alot/db/message.py
@@ -78,14 +78,15 @@ class Message:
raise ValueError('No filenames for a message returned')
self.filenames = filenames
- self._email = None # will be read upon first use
- self._attachments = None # will be read upon first use
- self._tags = set(msg.get_tags())
-
- self._session_keys = []
+ session_keys = []
for name, value in msg.get_properties("session-key", exact=True):
if name == "session-key":
- self._session_keys.append(value)
+ session_keys.append(value)
+
+ self._email = self._load_email(session_keys)
+
+ self._attachments = None # will be read upon first use
+ self._tags = set(msg.get_tags())
try:
sender = decode_header(msg.get_header('From'))
@@ -121,18 +122,21 @@ class Message:
def filename(self):
return self.filenames[0]
- def get_email(self):
- """returns :class:`email.email.EmailMessage` for this message"""
+ def _load_email(self, session_keys):
warning = "Subject: Caution!\n"\
"Message file is no longer accessible:\n%s" % self.filename
- if not self._email:
- try:
- with open(self.filename, 'rb') as f:
- self._email = utils.decrypted_message_from_bytes(
- f.read(), self._session_keys)
- except IOError:
- self._email = email.message_from_string(
- warning, policy=email.policy.SMTP)
+ try:
+ with open(self.filename, 'rb') as f:
+ email = utils.decrypted_message_from_bytes(
+ f.read(), session_keys)
+ except IOError:
+ email = email.message_from_string(
+ warning, policy=email.policy.SMTP)
+
+ return email
+
+ def get_email(self):
+ """returns :class:`email.email.EmailMessage` for this message"""
return self._email
def get_message_parts(self):