summaryrefslogtreecommitdiff
path: root/alot/commands/envelope.py
diff options
context:
space:
mode:
authorPatrick Totzke <patricktotzke@gmail.com>2012-05-17 15:47:23 +0100
committerPatrick Totzke <patricktotzke@gmail.com>2012-05-17 15:47:23 +0100
commit08c2ee1d88e69aa5df27b74d1cebd3c0c8be68f6 (patch)
tree2dde7d7db9146918242f2c289c64e587706b3f09 /alot/commands/envelope.py
parent138f13c682f6a63da67cced1f0c267b5f6f349b8 (diff)
parent56b0b8a0f310403d4664649ab9b69d3cd765dbe5 (diff)
Merge branch '0.3-feature-pyme' into staging
Conflicts: alot/settings/__init__.py alot/settings/checks.py docs/source/generate_configs.py
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()