add help text to channel backup QR code

This commit is contained in:
ThomasV 2020-06-16 18:48:04 +02:00
parent 83cabccdb5
commit 661ecb2cf5
6 changed files with 32 additions and 18 deletions

View file

@ -462,7 +462,7 @@ class ElectrumWindow(App):
self.invoice_popup = InvoiceDialog('Invoice', data, key) self.invoice_popup = InvoiceDialog('Invoice', data, key)
self.invoice_popup.open() self.invoice_popup.open()
def qr_dialog(self, title, data, show_text=False, text_for_clipboard=None): def qr_dialog(self, title, data, show_text=False, text_for_clipboard=None, help_text=None):
from .uix.dialogs.qr_dialog import QRDialog from .uix.dialogs.qr_dialog import QRDialog
def on_qr_failure(): def on_qr_failure():
popup.dismiss() popup.dismiss()
@ -471,8 +471,11 @@ class ElectrumWindow(App):
msg += '\n' + _('Text copied to clipboard.') msg += '\n' + _('Text copied to clipboard.')
self._clipboard.copy(text_for_clipboard) self._clipboard.copy(text_for_clipboard)
Clock.schedule_once(lambda dt: self.show_info(msg)) Clock.schedule_once(lambda dt: self.show_info(msg))
popup = QRDialog(title, data, show_text, failure_cb=on_qr_failure, popup = QRDialog(
text_for_clipboard=text_for_clipboard) title, data, show_text,
failure_cb=on_qr_failure,
text_for_clipboard=text_for_clipboard,
help_text=help_text)
popup.open() popup.open()
def scan_qr(self, on_complete): def scan_qr(self, on_complete):

View file

@ -373,7 +373,13 @@ class ChannelDetailsPopup(Popup):
def export_backup(self): def export_backup(self):
text = self.app.wallet.lnworker.export_channel_backup(self.chan.channel_id) text = self.app.wallet.lnworker.export_channel_backup(self.chan.channel_id)
self.app.qr_dialog(_("Channel Backup " + self.chan.short_id_for_GUI()), 'channel_backup:'+text) # TODO: some messages are duplicated between Kivy and Qt.
help_text = ' '.join([
_("Channel backups can be imported in another instance of the same wallet, by scanning this QR code."),
_("Please note that channel backups cannot be used to restore your channels."),
_("If you lose your wallet file, the only thing you can do with a backup is to request your channel to be closed, so that your funds will be sent on-chain."),
])
self.app.qr_dialog(_("Channel Backup " + self.chan.short_id_for_GUI()), 'channel_backup:'+text, help_text=help_text)
def force_close(self): def force_close(self):
Question(_('Force-close channel?'), self._force_close).open() Question(_('Force-close channel?'), self._force_close).open()

View file

@ -13,7 +13,7 @@ Builder.load_string('''
title: '' title: ''
data: '' data: ''
shaded: False shaded: False
show_text: False help_text: ''
AnchorLayout: AnchorLayout:
anchor_x: 'center' anchor_x: 'center'
BoxLayout: BoxLayout:
@ -29,7 +29,7 @@ Builder.load_string('''
touch = args[1] touch = args[1]
if self.collide_point(*touch.pos): self.shaded = not self.shaded if self.collide_point(*touch.pos): self.shaded = not self.shaded
TopLabel: TopLabel:
text: root.data if root.show_text else '' text: root.help_text
Widget: Widget:
size_hint: 1, 0.2 size_hint: 1, 0.2
BoxLayout: BoxLayout:
@ -56,12 +56,12 @@ Builder.load_string('''
class QRDialog(Factory.Popup): class QRDialog(Factory.Popup):
def __init__(self, title, data, show_text, *, def __init__(self, title, data, show_text, *,
failure_cb=None, text_for_clipboard=None): failure_cb=None, text_for_clipboard=None, help_text=None):
Factory.Popup.__init__(self) Factory.Popup.__init__(self)
self.app = App.get_running_app() self.app = App.get_running_app()
self.title = title self.title = title
self.data = data self.data = data
self.show_text = show_text self.help_text = data if show_text else help_text
self.failure_cb = failure_cb self.failure_cb = failure_cb
self.text_for_clipboard = text_for_clipboard if text_for_clipboard else data self.text_for_clipboard = text_for_clipboard if text_for_clipboard else data

View file

@ -126,8 +126,13 @@ class ChannelsList(MyTreeView):
self.lnbackups.remove_channel_backup(channel_id) self.lnbackups.remove_channel_backup(channel_id)
def export_channel_backup(self, channel_id): def export_channel_backup(self, channel_id):
msg = ' '.join([
_("Channel backups can be imported in another instance of the same wallet, by scanning this QR code."),
_("Please note that channel backups cannot be used to restore your channels."),
_("If you lose your wallet file, the only thing you can do with a backup is to request your channel to be closed, so that your funds will be sent on-chain."),
])
data = self.lnworker.export_channel_backup(channel_id) data = self.lnworker.export_channel_backup(channel_id)
self.main_window.show_qrcode('channel_backup:' + data, 'channel backup') self.main_window.show_qrcode('channel_backup:' + data, 'channel backup', help_text=msg)
def request_force_close(self, channel_id): def request_force_close(self, channel_id):
def task(): def task():

View file

@ -2372,10 +2372,10 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger):
d = SeedDialog(self, seed, passphrase) d = SeedDialog(self, seed, passphrase)
d.exec_() d.exec_()
def show_qrcode(self, data, title = _("QR code"), parent=None): def show_qrcode(self, data, title = _("QR code"), parent=None, help_text=None):
if not data: if not data:
return return
d = QRDialog(data, parent or self, title) d = QRDialog(data, parent or self, title, help_text=help_text)
d.exec_() d.exec_()
@protected @protected

View file

@ -10,7 +10,7 @@ from PyQt5.QtWidgets import (
from electrum.i18n import _ from electrum.i18n import _
from .util import WindowModalDialog, get_parent_main_window from .util import WindowModalDialog, get_parent_main_window, WWLabel
class QRCodeWidget(QWidget): class QRCodeWidget(QWidget):
@ -93,17 +93,17 @@ class QRCodeWidget(QWidget):
class QRDialog(WindowModalDialog): class QRDialog(WindowModalDialog):
def __init__(self, data, parent=None, title = "", show_text=False): def __init__(self, data, parent=None, title = "", show_text=False, help_text=None):
WindowModalDialog.__init__(self, parent, title) WindowModalDialog.__init__(self, parent, title)
vbox = QVBoxLayout() vbox = QVBoxLayout()
qrw = QRCodeWidget(data) qrw = QRCodeWidget(data)
vbox.addWidget(qrw, 1) vbox.addWidget(qrw, 1)
if show_text: help_text = data if show_text else help_text
text = QTextEdit() if help_text:
text.setText(data) text_label = WWLabel()
text.setReadOnly(True) text_label.setText(help_text)
vbox.addWidget(text) vbox.addWidget(text_label)
hbox = QHBoxLayout() hbox = QHBoxLayout()
hbox.addStretch(1) hbox.addStretch(1)