diff options
author | Anton Khirnov <anton@khirnov.net> | 2020-03-02 18:14:13 +0100 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2020-03-02 18:14:13 +0100 |
commit | ce1861c4c938ec2833a5b334ecb4be362a4429a8 (patch) | |
tree | ae7f5191a32ca3b66d0cf0ea48a974f6b930502a | |
parent | cd4a20552b33355f790379dcb4275f9105aea1b3 (diff) |
db/message: do not delay loading the email file
This simplifies the following refactorings. It will be made asynchronous
later.
-rw-r--r-- | alot/db/message.py | 36 |
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): |