diff --git a/electrum/exchange_rate.py b/electrum/exchange_rate.py index 9266cf01a..8a0ac21e6 100644 --- a/electrum/exchange_rate.py +++ b/electrum/exchange_rate.py @@ -599,7 +599,7 @@ class FxThread(ThreadJob, EventListener): def set_currency(self, ccy: str): self.ccy = ccy - self.config.set_key('currency', ccy, True) + self.config.set_key('currency', ccy, save=True) self.trigger_update() self.on_quotes() @@ -611,7 +611,7 @@ class FxThread(ThreadJob, EventListener): class_ = globals().get(name) or globals().get(DEFAULT_EXCHANGE) self.logger.info(f"using exchange {name}") if self.config_exchange() != name: - self.config.set_key('use_exchange', name, True) + self.config.set_key('use_exchange', name, save=True) assert issubclass(class_, ExchangeBase), f"unexpected type {class_} for {name}" self.exchange = class_(self.on_quotes, self.on_history) # type: ExchangeBase # A new exchange means new fx quotes, initially empty. Force diff --git a/electrum/gui/kivy/main_window.py b/electrum/gui/kivy/main_window.py index 3a053373d..eb1a5fba5 100644 --- a/electrum/gui/kivy/main_window.py +++ b/electrum/gui/kivy/main_window.py @@ -196,7 +196,7 @@ class ElectrumWindow(App, Logger, EventListener): use_gossip = BooleanProperty(False) def on_use_gossip(self, instance, x): - self.electrum_config.set_key('use_gossip', self.use_gossip, True) + self.electrum_config.set_key('use_gossip', self.use_gossip, save=True) if self.network: if self.use_gossip: self.network.start_gossip() @@ -206,7 +206,7 @@ class ElectrumWindow(App, Logger, EventListener): enable_debug_logs = BooleanProperty(False) def on_enable_debug_logs(self, instance, x): - self.electrum_config.set_key('gui_enable_debug_logs', self.enable_debug_logs, True) + self.electrum_config.set_key('gui_enable_debug_logs', self.enable_debug_logs, save=True) use_change = BooleanProperty(False) def on_use_change(self, instance, x): @@ -217,11 +217,11 @@ class ElectrumWindow(App, Logger, EventListener): use_unconfirmed = BooleanProperty(False) def on_use_unconfirmed(self, instance, x): - self.electrum_config.set_key('confirmed_only', not self.use_unconfirmed, True) + self.electrum_config.set_key('confirmed_only', not self.use_unconfirmed, save=True) use_recoverable_channels = BooleanProperty(True) def on_use_recoverable_channels(self, instance, x): - self.electrum_config.set_key('use_recoverable_channels', self.use_recoverable_channels, True) + self.electrum_config.set_key('use_recoverable_channels', self.use_recoverable_channels, save=True) def switch_to_send_screen(func): # try until send_screen is available diff --git a/electrum/gui/kivy/uix/dialogs/fee_dialog.py b/electrum/gui/kivy/uix/dialogs/fee_dialog.py index 59b1a5784..af0ab98b8 100644 --- a/electrum/gui/kivy/uix/dialogs/fee_dialog.py +++ b/electrum/gui/kivy/uix/dialogs/fee_dialog.py @@ -99,15 +99,15 @@ class FeeSliderDialog: def save_config(self): value = int(self.slider.value) dynfees, mempool = self.get_method() - self.config.set_key('dynamic_fees', dynfees, False) - self.config.set_key('mempool_fees', mempool, False) + self.config.set_key('dynamic_fees', dynfees, save=False) + self.config.set_key('mempool_fees', mempool, save=False) if dynfees: if mempool: - self.config.set_key('depth_level', value, True) + self.config.set_key('depth_level', value, save=True) else: - self.config.set_key('fee_level', value, True) + self.config.set_key('fee_level', value, save=True) else: - self.config.set_key('fee_per_kb', self.config.static_fee(value), True) + self.config.set_key('fee_per_kb', self.config.static_fee(value), save=True) def update_text(self): pass diff --git a/electrum/gui/kivy/uix/dialogs/settings.py b/electrum/gui/kivy/uix/dialogs/settings.py index c5fc9da4b..7e5007464 100644 --- a/electrum/gui/kivy/uix/dialogs/settings.py +++ b/electrum/gui/kivy/uix/dialogs/settings.py @@ -159,7 +159,7 @@ class SettingsDialog(Factory.Popup): if self._language_dialog is None: l = self.config.get('language') or '' def cb(key): - self.config.set_key("language", key, True) + self.config.set_key("language", key, save=True) item.lang = self.get_language_name() self.app.language = key self._language_dialog = ChoiceDialog(_('Language'), languages, l, cb) diff --git a/electrum/gui/qml/qeconfig.py b/electrum/gui/qml/qeconfig.py index 93e45460d..7e032028b 100644 --- a/electrum/gui/qml/qeconfig.py +++ b/electrum/gui/qml/qeconfig.py @@ -55,7 +55,7 @@ class QEConfig(AuthMixin, QObject): @autoConnect.setter def autoConnect(self, auto_connect): - self.config.set_key('auto_connect', auto_connect, True) + self.config.set_key('auto_connect', auto_connect, save=True) self.autoConnectChanged.emit() # auto_connect is actually a tri-state, expose the undefined case @@ -70,7 +70,7 @@ class QEConfig(AuthMixin, QObject): @manualServer.setter def manualServer(self, oneserver): - self.config.set_key('oneserver', oneserver, True) + self.config.set_key('oneserver', oneserver, save=True) self.manualServerChanged.emit() baseUnitChanged = pyqtSignal() @@ -113,7 +113,7 @@ class QEConfig(AuthMixin, QObject): @spendUnconfirmed.setter def spendUnconfirmed(self, checked): - self.config.set_key('confirmed_only', not checked, True) + self.config.set_key('confirmed_only', not checked, save=True) self.spendUnconfirmedChanged.emit() requestExpiryChanged = pyqtSignal() @@ -136,12 +136,12 @@ class QEConfig(AuthMixin, QObject): if pin_code == '': self.pinCodeRemoveAuth() else: - self.config.set_key('pin_code', pin_code, True) + self.config.set_key('pin_code', pin_code, save=True) self.pinCodeChanged.emit() @auth_protect(method='wallet') def pinCodeRemoveAuth(self): - self.config.set_key('pin_code', '', True) + self.config.set_key('pin_code', '', save=True) self.pinCodeChanged.emit() useGossipChanged = pyqtSignal() diff --git a/electrum/gui/qml/qetxfinalizer.py b/electrum/gui/qml/qetxfinalizer.py index 73bd2e305..59e621007 100644 --- a/electrum/gui/qml/qetxfinalizer.py +++ b/electrum/gui/qml/qetxfinalizer.py @@ -110,15 +110,15 @@ class FeeSlider(QObject): def save_config(self): value = int(self._sliderPos) dynfees, mempool = self.get_method() - self._config.set_key('dynamic_fees', dynfees, False) - self._config.set_key('mempool_fees', mempool, False) + self._config.set_key('dynamic_fees', dynfees, save=False) + self._config.set_key('mempool_fees', mempool, save=False) if dynfees: if mempool: - self._config.set_key('depth_level', value, True) + self._config.set_key('depth_level', value, save=True) else: - self._config.set_key('fee_level', value, True) + self._config.set_key('fee_level', value, save=True) else: - self._config.set_key('fee_per_kb', self._config.static_fee(value), True) + self._config.set_key('fee_per_kb', self._config.static_fee(value), save=True) self.update_target() self.update() diff --git a/electrum/gui/qt/__init__.py b/electrum/gui/qt/__init__.py index e8d82d0ab..f06785a59 100644 --- a/electrum/gui/qt/__init__.py +++ b/electrum/gui/qt/__init__.py @@ -219,7 +219,7 @@ class ElectrumGui(BaseElectrumGui, Logger): if not self.tray: return self.dark_icon = not self.dark_icon - self.config.set_key("dark_icon", self.dark_icon, True) + self.config.set_key("dark_icon", self.dark_icon, save=True) self.tray.setIcon(self.tray_icon()) def tray_activated(self, reason): diff --git a/electrum/gui/qt/confirm_tx_dialog.py b/electrum/gui/qt/confirm_tx_dialog.py index 0845d5d66..ac0c118aa 100644 --- a/electrum/gui/qt/confirm_tx_dialog.py +++ b/electrum/gui/qt/confirm_tx_dialog.py @@ -127,11 +127,11 @@ class TxEditor(WindowModalDialog): def set_fee_config(self, dyn, pos, fee_rate): if dyn: if self.config.use_mempool_fees(): - self.config.set_key('depth_level', pos, False) + self.config.set_key('depth_level', pos, save=False) else: - self.config.set_key('fee_level', pos, False) + self.config.set_key('fee_level', pos, save=False) else: - self.config.set_key('fee_per_kb', fee_rate, False) + self.config.set_key('fee_per_kb', fee_rate, save=False) def update_tx(self, *, fallback_to_zero_fee: bool = False): # expected to set self.tx, self.message and self.error diff --git a/electrum/gui/qt/installwizard.py b/electrum/gui/qt/installwizard.py index 5168f464e..2ad1e73a1 100644 --- a/electrum/gui/qt/installwizard.py +++ b/electrum/gui/qt/installwizard.py @@ -746,10 +746,10 @@ class InstallWizard(QDialog, MessageBoxMixin, BaseWizard): nlayout = NetworkChoiceLayout(network, self.config, wizard=True) if self.exec_layout(nlayout.layout()): nlayout.accept() - self.config.set_key('auto_connect', network.auto_connect, True) + self.config.set_key('auto_connect', network.auto_connect, save=True) else: network.auto_connect = True - self.config.set_key('auto_connect', True, True) + self.config.set_key('auto_connect', True, save=True) @wizard_dialog def multisig_dialog(self, run_next): diff --git a/electrum/gui/qt/settings_dialog.py b/electrum/gui/qt/settings_dialog.py index 4a4f59759..2a25e876d 100644 --- a/electrum/gui/qt/settings_dialog.py +++ b/electrum/gui/qt/settings_dialog.py @@ -83,7 +83,7 @@ class SettingsDialog(QDialog, QtEventListener): def on_lang(x): lang_request = list(languages.keys())[lang_combo.currentIndex()] if lang_request != self.config.get('language'): - self.config.set_key("language", lang_request, True) + self.config.set_key("language", lang_request, save=True) self.need_restart = True lang_combo.currentIndexChanged.connect(on_lang) @@ -99,7 +99,7 @@ class SettingsDialog(QDialog, QtEventListener): value = nz.value() if self.config.num_zeros != value: self.config.num_zeros = value - self.config.set_key('num_zeros', value, True) + self.config.set_key('num_zeros', value, save=True) self.app.refresh_tabs_signal.emit() self.app.update_status_signal.emit() nz.valueChanged.connect(on_nz) @@ -211,7 +211,7 @@ class SettingsDialog(QDialog, QtEventListener): qr_combo.addItem(cam_desc, cam_path) index = qr_combo.findData(self.config.get("video_device")) qr_combo.setCurrentIndex(index) - on_video_device = lambda x: self.config.set_key("video_device", qr_combo.itemData(x), True) + on_video_device = lambda x: self.config.set_key("video_device", qr_combo.itemData(x), save=True) qr_combo.currentIndexChanged.connect(on_video_device) colortheme_combo = QComboBox() @@ -221,7 +221,7 @@ class SettingsDialog(QDialog, QtEventListener): colortheme_combo.setCurrentIndex(index) colortheme_label = QLabel(_('Color theme') + ':') def on_colortheme(x): - self.config.set_key('qt_gui_color_theme', colortheme_combo.itemData(x), True) + self.config.set_key('qt_gui_color_theme', colortheme_combo.itemData(x), save=True) self.need_restart = True colortheme_combo.currentIndexChanged.connect(on_colortheme) @@ -279,8 +279,8 @@ class SettingsDialog(QDialog, QtEventListener): on_be_edit() else: be_result = block_explorers[block_ex_combo.currentIndex()] - self.config.set_key('block_explorer_custom', None, False) - self.config.set_key('block_explorer', be_result, True) + self.config.set_key('block_explorer_custom', None, save=False) + self.config.set_key('block_explorer', be_result, save=True) showhide_block_ex_custom_e() block_ex_combo.currentIndexChanged.connect(on_be_combo) def on_be_edit(): @@ -429,7 +429,7 @@ class SettingsDialog(QDialog, QtEventListener): def on_alias_edit(self): self.alias_e.setStyleSheet("") alias = str(self.alias_e.text()) - self.config.set_key('alias', alias, True) + self.config.set_key('alias', alias, save=True) if alias: self.wallet.contacts.fetch_openalias(self.config) diff --git a/electrum/gui/qt/swap_dialog.py b/electrum/gui/qt/swap_dialog.py index a4686032c..1f47dc972 100644 --- a/electrum/gui/qt/swap_dialog.py +++ b/electrum/gui/qt/swap_dialog.py @@ -138,11 +138,11 @@ class SwapDialog(WindowModalDialog, QtEventListener): def fee_slider_callback(self, dyn, pos, fee_rate): if dyn: if self.config.use_mempool_fees(): - self.config.set_key('depth_level', pos, False) + self.config.set_key('depth_level', pos, save=False) else: - self.config.set_key('fee_level', pos, False) + self.config.set_key('fee_level', pos, save=False) else: - self.config.set_key('fee_per_kb', fee_rate, False) + self.config.set_key('fee_per_kb', fee_rate, save=False) if self.send_follows: self.on_recv_edited() else: diff --git a/electrum/gui/qt/util.py b/electrum/gui/qt/util.py index 653d35288..bfae00a88 100644 --- a/electrum/gui/qt/util.py +++ b/electrum/gui/qt/util.py @@ -1051,7 +1051,7 @@ def getOpenFileName(*, parent, title, filter="", config: 'SimpleConfig') -> Opti directory = config.get('io_dir', os.path.expanduser('~')) fileName, __ = QFileDialog.getOpenFileName(parent, title, directory, filter) if fileName and directory != os.path.dirname(fileName): - config.set_key('io_dir', os.path.dirname(fileName), True) + config.set_key('io_dir', os.path.dirname(fileName), save=True) return fileName @@ -1082,7 +1082,7 @@ def getSaveFileName( selected_path = file_dialog.selectedFiles()[0] if selected_path and directory != os.path.dirname(selected_path): - config.set_key('io_dir', os.path.dirname(selected_path), True) + config.set_key('io_dir', os.path.dirname(selected_path), save=True) return selected_path diff --git a/electrum/gui/text.py b/electrum/gui/text.py index 7fbad039f..b1d3eae75 100644 --- a/electrum/gui/text.py +++ b/electrum/gui/text.py @@ -747,7 +747,7 @@ class ElectrumGui(BaseElectrumGui, EventListener): if out: if out.get('Default fee'): fee = int(Decimal(out['Default fee']) * COIN) - self.config.set_key('fee_per_kb', fee, True) + self.config.set_key('fee_per_kb', fee, save=True) def password_dialog(self): out = self.run_dialog('Password', [ diff --git a/electrum/network.py b/electrum/network.py index 0def020ab..e1269899c 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -628,10 +628,10 @@ class Network(Logger, NetworkRetryManager[ServerAddr]): int(proxy['port']) except Exception: return - self.config.set_key('auto_connect', net_params.auto_connect, False) - self.config.set_key('oneserver', net_params.oneserver, False) - self.config.set_key('proxy', proxy_str, False) - self.config.set_key('server', str(server), True) + self.config.set_key('auto_connect', net_params.auto_connect, save=False) + self.config.set_key('oneserver', net_params.oneserver, save=False) + self.config.set_key('proxy', proxy_str, save=False) + self.config.set_key('server', str(server), save=True) # abort if changes were not allowed by config if self.config.get('server') != str(server) \ or self.config.get('proxy') != proxy_str \ diff --git a/electrum/plugin.py b/electrum/plugin.py index d080e7544..12a8cbae6 100644 --- a/electrum/plugin.py +++ b/electrum/plugin.py @@ -132,14 +132,14 @@ class Plugins(DaemonThread): self.remove_jobs(plugin.thread_jobs()) def enable(self, name: str) -> 'BasePlugin': - self.config.set_key('use_' + name, True, True) + self.config.set_key('use_' + name, True, save=True) p = self.get(name) if p: return p return self.load_plugin(name) def disable(self, name: str) -> None: - self.config.set_key('use_' + name, False, True) + self.config.set_key('use_' + name, False, save=True) p = self.get(name) if not p: return diff --git a/electrum/plugins/trustedcoin/qt.py b/electrum/plugins/trustedcoin/qt.py index 038fcbfe4..0aa918e4b 100644 --- a/electrum/plugins/trustedcoin/qt.py +++ b/electrum/plugins/trustedcoin/qt.py @@ -208,7 +208,7 @@ class Plugin(TrustedCoinPlugin): grid.addWidget(QLabel(window.format_amount(v/k) + ' ' + window.base_unit() + "/tx"), i, 1) b = QRadioButton() b.setChecked(k == n_prepay) - b.clicked.connect(lambda b, k=k: self.config.set_key('trustedcoin_prepay', k, True)) + b.clicked.connect(lambda b, k=k: self.config.set_key('trustedcoin_prepay', k, save=True)) grid.addWidget(b, i, 2) i += 1 diff --git a/electrum/simple_config.py b/electrum/simple_config.py index 181e7ba80..1a73bdbfa 100644 --- a/electrum/simple_config.py +++ b/electrum/simple_config.py @@ -158,7 +158,7 @@ class SimpleConfig(Logger): updated = True return updated - def set_key(self, key, value, save=True): + def set_key(self, key, value, *, save=True): if not self.is_modifiable(key): self.logger.warning(f"not changing config key '{key}' set on the command line") return @@ -168,9 +168,9 @@ class SimpleConfig(Logger): except Exception: self.logger.info(f"json error: cannot save {repr(key)} ({repr(value)})") return - self._set_key_in_user_config(key, value, save) + self._set_key_in_user_config(key, value, save=save) - def _set_key_in_user_config(self, key, value, save=True): + def _set_key_in_user_config(self, key, value, *, save=True): with self.lock: if value is not None: self.user_config[key] = value @@ -709,7 +709,7 @@ class SimpleConfig(Logger): def set_base_unit(self, unit): assert unit in base_units.keys() self.decimal_point = base_unit_name_to_decimal_point(unit) - self.set_key('decimal_point', self.decimal_point, True) + self.set_key('decimal_point', self.decimal_point, save=True) def get_decimal_point(self): return self.decimal_point