summaryrefslogtreecommitdiff
path: root/alot/commands/envelope.py
diff options
context:
space:
mode:
Diffstat (limited to 'alot/commands/envelope.py')
-rw-r--r--alot/commands/envelope.py66
1 files changed, 65 insertions, 1 deletions
diff --git a/alot/commands/envelope.py b/alot/commands/envelope.py
index c906bef4..70547075 100644
--- a/alot/commands/envelope.py
+++ b/alot/commands/envelope.py
@@ -1,3 +1,4 @@
+import argparse
import os
import re
import glob
@@ -8,8 +9,10 @@ from twisted.internet.defer import inlineCallbacks
import datetime
from alot.account import SendingMailFailed
+from alot.errors import GPGProblem
from alot import buffers
from alot import commands
+from alot import crypto
from alot.commands import Command, registerCommand
from alot.commands import globals
from alot.helper import string_decode
@@ -130,9 +133,20 @@ class SendCommand(Command):
else:
account = settings.get_accounts()[0]
+ clearme = ui.notify(u'constructing mail (GPG, attachments)\u2026',
+ timeout=-1)
+
+ try:
+ mail = envelope.construct_mail()
+ except GPGProblem, e:
+ ui.clear_notify([clearme])
+ ui.notify(e.message, priority='error')
+ return
+
+ ui.clear_notify([clearme])
+
# send
clearme = ui.notify('sending..', timeout=-1)
- mail = envelope.construct_mail()
def afterwards(returnvalue):
logging.debug('mail sent successfully')
@@ -317,3 +331,53 @@ class ToggleHeaderCommand(Command):
"""toggle display of all headers"""
def apply(self, ui):
ui.current_buffer.toggle_all_headers()
+
+
+@registerCommand(MODE, 'sign', forced={'action': 'sign'}, arguments=[
+ (['keyid'], {'nargs':argparse.REMAINDER, 'help':'which key id to use'})],
+ help='mark mail to be signed before sending')
+@registerCommand(MODE, 'unsign', forced={'action': 'unsign'},
+ help='mark mail not to be signed before sending')
+@registerCommand(MODE, 'togglesign', forced={'action': 'toggle'}, arguments=[
+ (['keyid'], {'nargs':argparse.REMAINDER, 'help':'which key id to use'})],
+ help='toggle sign status')
+class SignCommand(Command):
+ """toggle signing this email"""
+ def __init__(self, action=None, keyid=None, **kwargs):
+ """
+ :param action: whether to sign/unsign/toggle
+ :type action: str
+ :param keyid: which key id to use
+ :type keyid: str
+ """
+ self.action = action
+ self.keyid = keyid
+ Command.__init__(self, **kwargs)
+
+ def apply(self, ui):
+ sign = None
+ key = None
+ envelope = ui.current_buffer.envelope
+ # sign status
+ if self.action == 'sign':
+ sign = True
+ elif self.action == 'unsign':
+ sign = False
+ elif self.action == 'toggle':
+ sign = not envelope.sign
+ envelope.sign = sign
+
+ # try to find key if hint given as parameter
+ if sign:
+ if len(self.keyid) > 0:
+ keyid = str(' '.join(self.keyid))
+ try:
+ key = crypto.CryptoContext().get_key(keyid)
+ except GPGProblem, e:
+ envelope.sign = False
+ ui.notify(e.message, priority='error')
+ return
+ envelope.sign_key = key
+
+ # reload buffer
+ ui.current_buffer.rebuild()