summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormathieui <mathieui@mathieui.net>2015-01-28 09:46:51 +0100
committermathieui <mathieui@mathieui.net>2015-01-28 09:54:30 +0100
commit3c46d49704de86635508439f524c684903dc81d3 (patch)
tree0c8e02a7a6f4d7e50e2d8842c86ce294e5189627
parent0a7b4360adb26b102d85f3191f1061ce7f8dceb6 (diff)
downloadpoezio-3c46d49704de86635508439f524c684903dc81d3.tar.gz
poezio-3c46d49704de86635508439f524c684903dc81d3.tar.bz2
poezio-3c46d49704de86635508439f524c684903dc81d3.tar.xz
poezio-3c46d49704de86635508439f524c684903dc81d3.zip
Minor fixes to the certificate warning prompt (#2949)
- slightly lower the CPU usage (callback instead of active waiting w/ sleep) - make the terminal beep so the user knows something happened - prevent the user “escaping” the prompt by pressing /, s, or S
-rw-r--r--src/core/handlers.py28
-rw-r--r--src/tabs/rostertab.py6
-rw-r--r--src/windows/input_placeholders.py5
3 files changed, 21 insertions, 18 deletions
diff --git a/src/core/handlers.py b/src/core/handlers.py
index 03a6d32d..b16b8c0f 100644
--- a/src/core/handlers.py
+++ b/src/core/handlers.py
@@ -1196,20 +1196,7 @@ def validate_ssl(self, pem):
self.information('New certificate found (sha-2 hash:'
' %s)\nPlease validate or abort' % sha2_found_cert,
'Warning')
- input = windows.YesNoInput(text="WARNING! Server certificate has changed, accept? (y/n)")
- self.current_tab().input = input
- input.resize(1, self.current_tab().width, self.current_tab().height-1, 0)
- input.refresh()
- self.doupdate()
- old_loop = asyncio.get_event_loop()
- new_loop = asyncio.new_event_loop()
- asyncio.set_event_loop(new_loop)
- new_loop.add_reader(sys.stdin, self.on_input_readable)
- future = asyncio.Future()
- @asyncio.coroutine
- def check_input(future):
- while input.value is None:
- yield from asyncio.sleep(0.01)
+ def check_input():
self.current_tab().input = saved_input
self.paused = False
if input.value:
@@ -1222,10 +1209,17 @@ def validate_ssl(self, pem):
self.disconnect()
new_loop.stop()
asyncio.set_event_loop(old_loop)
- asyncio.async(check_input(future))
+ input = windows.YesNoInput(text="WARNING! Server certificate has changed, accept? (y/n)", callback=check_input)
+ self.current_tab().input = input
+ input.resize(1, self.current_tab().width, self.current_tab().height-1, 0)
+ input.refresh()
+ self.doupdate()
+ old_loop = asyncio.get_event_loop()
+ new_loop = asyncio.new_event_loop()
+ asyncio.set_event_loop(new_loop)
+ new_loop.add_reader(sys.stdin, self.on_input_readable)
+ curses.beep()
new_loop.run_forever()
-
-
else:
log.debug('First time. Setting certificate to %s', sha2_found_cert)
if not config.silent_set('certificate', sha2_found_cert):
diff --git a/src/tabs/rostertab.py b/src/tabs/rostertab.py
index e923bef9..349058a3 100644
--- a/src/tabs/rostertab.py
+++ b/src/tabs/rostertab.py
@@ -1012,6 +1012,8 @@ class RosterInfoTab(Tab):
"""
'/' is pressed, we enter "input mode"
"""
+ if isinstance(self.input, windows.YesNoInput):
+ return
curses.curs_set(1)
self.input = windows.CommandInput("", self.reset_help_message, self.execute_slash_command)
self.input.resize(1, self.width, self.height-1, 0)
@@ -1187,6 +1189,8 @@ class RosterInfoTab(Tab):
Start the search. The input should appear with a short instruction
in it.
"""
+ if isinstance(self.input, windows.YesNoInput):
+ return
curses.curs_set(1)
self.input = windows.CommandInput("[Search]", self.on_search_terminate, self.on_search_terminate, self.set_roster_filter)
self.input.resize(1, self.width, self.height-1, 0)
@@ -1197,6 +1201,8 @@ class RosterInfoTab(Tab):
@refresh_wrapper.always
def start_search_slow(self):
+ if isinstance(self.input, windows.YesNoInput):
+ return
curses.curs_set(1)
self.input = windows.CommandInput("[Search]", self.on_search_terminate, self.on_search_terminate, self.set_roster_filter_slow)
self.input.resize(1, self.width, self.height-1, 0)
diff --git a/src/windows/input_placeholders.py b/src/windows/input_placeholders.py
index 4a6c6d72..496417d1 100644
--- a/src/windows/input_placeholders.py
+++ b/src/windows/input_placeholders.py
@@ -41,7 +41,7 @@ class YesNoInput(Win):
A Window just displaying a Yes/No input
Used to ask a confirmation
"""
- def __init__(self, text=''):
+ def __init__(self, text='', callback=None):
Win.__init__(self)
self.key_func = {
'y' : self.on_yes,
@@ -49,6 +49,7 @@ class YesNoInput(Win):
}
self.txt = text
self.value = None
+ self.callback = callback
def on_yes(self):
self.value = True
@@ -68,6 +69,8 @@ class YesNoInput(Win):
def do_command(self, key, raw=False):
if key.lower() in self.key_func:
self.key_func[key]()
+ if self.value is not None and self.callback is not None:
+ return self.callback()
def on_delete(self):
return