[tor-commits] [nyx/master] Drop lock when setting config values
atagar at torproject.org
atagar at torproject.org
Mon Jan 4 17:43:06 UTC 2016
commit a7452858b0a89cc57fc1d27951877f26d9bfa8f2
Author: Damian Johnson <atagar at torproject.org>
Date: Sat Jan 2 17:05:46 2016 -0800
Drop lock when setting config values
Doesn't seem as though it's needed in practice. We already lock when awaiting
input.
---
nyx/config_panel.py | 65 +++++++++++++++++----------------------------------
1 file changed, 22 insertions(+), 43 deletions(-)
diff --git a/nyx/config_panel.py b/nyx/config_panel.py
index 0395baa..0083923 100644
--- a/nyx/config_panel.py
+++ b/nyx/config_panel.py
@@ -147,18 +147,11 @@ class ConfigPanel(panel.Panel):
continue
self._contents.append(ConfigEntry(name, value_type, manual))
+
+ self._contents = sorted(self._contents, key = lambda entry: [entry.sort_value(field) for field in self._sort_order])
except stem.ControllerError as exc:
log.warn('Unable to determine the configuration options tor supports: %s' % exc)
- self._contents = sorted(self._contents, key = lambda entry: [entry.sort_value(field) for field in self._sort_order])
-
- def get_selection(self):
- """
- Provides the currently selected entry.
- """
-
- return self._scroller.get_cursor_selection(self._get_config_options())
-
def show_sort_dialog(self):
"""
Provides the dialog for sorting our configuration options.
@@ -179,40 +172,26 @@ class ConfigPanel(panel.Panel):
if is_changed:
self.redraw(True)
elif key.is_selection():
- # Prompts the user to edit the selected configuration value. The
- # interface is locked to prevent updates between setting the value
- # and showing any errors.
-
- with panel.CURSES_LOCK:
- selection = self.get_selection()
- config_option = selection.name
+ selection = self._scroller.get_cursor_selection(self._get_config_options())
+ initial_value = selection.value() if selection.is_set() else ''
+ new_value = nyx.popups.input_prompt('%s Value (esc to cancel): ' % selection.name, initial_value)
- initial_value = '' if not selection.is_set() else selection.value()
- prompt_msg = '%s Value (esc to cancel): ' % config_option
- new_value = nyx.popups.input_prompt(prompt_msg, initial_value)
-
- if new_value is not None and new_value != initial_value:
- try:
- if selection.value_type == 'Boolean':
- # if the value's a boolean then allow for 'true' and 'false' inputs
-
- if new_value.lower() == 'true':
- new_value = '1'
- elif new_value.lower() == 'false':
- new_value = '0'
- elif selection.value_type == 'LineList':
- # set_option accepts list inputs when there's multiple values
- new_value = new_value.split(',')
-
- tor_controller().set_conf(config_option, new_value)
-
- # forces the label to be remade with the new value
-
- selection.label_cache = None
-
- self.redraw(True)
- except Exception as exc:
- nyx.popups.show_msg('%s (press any key)' % exc)
+ if new_value != initial_value:
+ try:
+ if selection.value_type == 'Boolean':
+ # if the value's a boolean then allow for 'true' and 'false' inputs
+
+ if new_value.lower() == 'true':
+ new_value = '1'
+ elif new_value.lower() == 'false':
+ new_value = '0'
+ elif selection.value_type == 'LineList':
+ new_value = new_value.split(',') # set_conf accepts list inputs
+
+ tor_controller().set_conf(selection.name, new_value)
+ self.redraw(True)
+ except Exception as exc:
+ nyx.popups.show_msg('%s (press any key)' % exc)
elif key.match('a'):
self._show_all = not self._show_all
self.redraw(True)
@@ -331,7 +310,7 @@ class ConfigPanel(panel.Panel):
contents = self._get_config_options()
scroll_location = self._scroller.get_scroll_location(contents, height - DETAILS_HEIGHT - 2)
- cursor_selection = self.get_selection()
+ cursor_selection = self._scroller.get_cursor_selection(contents)
is_scrollbar_visible = len(contents) > height - DETAILS_HEIGHT - 2
if cursor_selection is not None:
More information about the tor-commits
mailing list