# Copyright (C) 2011-2019 Patrick Totzke # This file is released under the GNU GPL, version 3 or a later revision. # For further details see the COPYING file from .completer import Completer from ..addressbook import AddressbookError from ..helper import formataddr from ..errors import CompletionError class AbooksCompleter(Completer): """Complete a contact from given address books.""" def __init__(self, abooks, addressesonly=False): """ :param abooks: used to look up email addresses :type abooks: list of :class:`~alot.account.AddresBook` :param addressesonly: only insert address, not the realname of the contact :type addressesonly: bool """ self.abooks = abooks self.addressesonly = addressesonly super().__init__() def complete(self, original, pos): if not self.abooks: return [] prefix = original[:pos] res = [] for abook in self.abooks: try: res = res + abook.lookup(prefix) except AddressbookError as e: raise CompletionError(e) if self.addressesonly: returnlist = [(addr, len(addr)) for (name, addr) in res] else: returnlist = [] for name, addr in res: newtext = formataddr((name, addr)) returnlist.append((newtext, len(newtext))) return returnlist