Update email plugin for multiple windows.

This commit is contained in:
Neil Booth 2015-09-04 13:29:33 +09:00
parent 73de35aa56
commit 8e7bcfeeb9
2 changed files with 18 additions and 22 deletions

View File

@ -697,7 +697,7 @@ class ElectrumWindow(QMainWindow):
item = self.receive_list.itemAt(position) item = self.receive_list.itemAt(position)
addr = str(item.text(2)) addr = str(item.text(2))
req = self.wallet.receive_requests[addr] req = self.wallet.receive_requests[addr]
menu = QMenu() menu = QMenu(self)
menu.addAction(_("Copy Address"), lambda: self.view_and_paste(_('Address'), '', addr)) menu.addAction(_("Copy Address"), lambda: self.view_and_paste(_('Address'), '', addr))
menu.addAction(_("Copy URI"), lambda: self.view_and_paste('URI', '', self.get_request_URI(addr))) menu.addAction(_("Copy URI"), lambda: self.view_and_paste('URI', '', self.get_request_URI(addr)))
menu.addAction(_("Save as BIP70 file"), lambda: self.export_payment_request(addr)) menu.addAction(_("Save as BIP70 file"), lambda: self.export_payment_request(addr))

View File

@ -22,8 +22,6 @@ import socket
import time import time
import threading import threading
import base64 import base64
import re
import platform
from decimal import Decimal from decimal import Decimal
from Queue import Queue from Queue import Queue
@ -114,7 +112,7 @@ class Plugin(BasePlugin):
def is_available(self): def is_available(self):
return True return True
def __init__(self, parent, config, name) def __init__(self, parent, config, name):
BasePlugin.__init__(self, parent, config, name) BasePlugin.__init__(self, parent, config, name)
self.imap_server = self.config.get('email_server', '') self.imap_server = self.config.get('email_server', '')
self.username = self.config.get('email_username', '') self.username = self.config.get('email_username', '')
@ -122,31 +120,28 @@ class Plugin(BasePlugin):
if self.imap_server and self.username and self.password: if self.imap_server and self.username and self.password:
self.processor = Processor(self.imap_server, self.username, self.password, self.on_receive) self.processor = Processor(self.imap_server, self.username, self.password, self.on_receive)
self.processor.start() self.processor.start()
self.win = None self.obj = QObject()
self.obj.connect(self.obj, SIGNAL('email:new_invoice'), self.new_invoice)
def on_receive(self, pr_str): def on_receive(self, pr_str):
self.print_error('received payment request') self.print_error('received payment request')
self.pr = PaymentRequest(pr_str) self.pr = PaymentRequest(pr_str)
if self.win: self.obj.emit(SIGNAL('email:new_invoice'))
self.win.emit(SIGNAL('email:new_invoice'))
def new_invoice(self): def new_invoice(self):
self.win.invoices.add(self.pr) if self.parent.windows:
self.win.update_invoices_list() window = self.parent.windows[0]
window.invoices.add(self.pr)
@hook window.update_invoices_list()
def init_qt(self, gui):
from electrum_gui.qt.util import ThreadedButton
self.win = gui.main_window
self.win.connect(self.win, SIGNAL('email:new_invoice'), self.new_invoice)
@hook @hook
def receive_list_menu(self, menu, addr): def receive_list_menu(self, menu, addr):
menu.addAction(_("Send via e-mail"), lambda: self.send(addr)) window = menu.parentWidget()
menu.addAction(_("Send via e-mail"), lambda: self.send(window, addr))
def send(self, addr): def send(self, window, addr):
from electrum import paymentrequest from electrum import paymentrequest
r = self.wallet.receive_requests.get(addr) r = window.wallet.receive_requests.get(addr)
message = r.get('memo', '') message = r.get('memo', '')
if r.get('signature'): if r.get('signature'):
pr = paymentrequest.serialize_request(r) pr = paymentrequest.serialize_request(r)
@ -154,7 +149,7 @@ class Plugin(BasePlugin):
pr = paymentrequest.make_request(self.config, r) pr = paymentrequest.make_request(self.config, r)
if not pr: if not pr:
return return
recipient, ok = QtGui.QInputDialog.getText(self.win, 'Send request', 'Email invoice to:') recipient, ok = QtGui.QInputDialog.getText(window, 'Send request', 'Email invoice to:')
if not ok: if not ok:
return return
recipient = str(recipient) recipient = str(recipient)
@ -163,22 +158,23 @@ class Plugin(BasePlugin):
try: try:
self.processor.send(recipient, message, payload) self.processor.send(recipient, message, payload)
except BaseException as e: except BaseException as e:
self.win.show_message(str(e)) window.show_message(str(e))
return return
self.win.show_message(_('Request sent.')) window.show_message(_('Request sent.'))
def requires_settings(self): def requires_settings(self):
return True return True
def settings_widget(self, window): def settings_widget(self, window):
self.settings_window = window
return EnterButton(_('Settings'), self.settings_dialog) return EnterButton(_('Settings'), self.settings_dialog)
def settings_dialog(self, x): def settings_dialog(self, x):
from electrum_gui.qt.util import Buttons, CloseButton, OkButton from electrum_gui.qt.util import Buttons, CloseButton, OkButton
d = QDialog(self.window) d = QDialog(self.settings_window)
d.setWindowTitle("Email settings") d.setWindowTitle("Email settings")
d.setMinimumSize(500, 200) d.setMinimumSize(500, 200)