Fixed electrum logic (settings).

- Fixed empty arrays to fall back to default servers.
- Fixed RPC/Electrum settings logic.
- Added option set electrum servers before switch RPC -> Electrum mode.
- Fixed "No servers discovered", some servers don't support peer discovery.
This commit is contained in:
gerlofvanek
2026-01-29 11:50:51 +01:00
parent 60dd5d43e7
commit 8f1382d00d
3 changed files with 46 additions and 8 deletions

View File

@@ -72,6 +72,39 @@
connectionTypeSelects.forEach(select => { connectionTypeSelects.forEach(select => {
const originalValue = select.dataset.originalValue || select.value; const originalValue = select.dataset.originalValue || select.value;
this.originalConnectionTypes[select.name] = originalValue; this.originalConnectionTypes[select.name] = originalValue;
select.addEventListener('change', (e) => {
const coinName = select.name.replace('connection_type_', '');
const electrumSection = document.getElementById(`electrum-section-${coinName}`);
const fundTransferSection = document.getElementById(`fund-transfer-section-${coinName}`);
const originalValue = this.originalConnectionTypes[select.name];
if (e.target.value === 'electrum') {
if (electrumSection) {
electrumSection.classList.remove('hidden');
const clearnetTextarea = document.getElementById(`electrum_clearnet_${coinName}`);
const onionTextarea = document.getElementById(`electrum_onion_${coinName}`);
if (clearnetTextarea && !clearnetTextarea.value.trim()) {
clearnetTextarea.value = electrumSection.dataset.defaultClearnet || '';
}
if (onionTextarea && !onionTextarea.value.trim()) {
onionTextarea.value = electrumSection.dataset.defaultOnion || '';
}
}
if (fundTransferSection) {
fundTransferSection.classList.add('hidden');
}
} else {
if (electrumSection) {
electrumSection.classList.add('hidden');
}
if (fundTransferSection && originalValue === 'electrum') {
fundTransferSection.classList.remove('hidden');
}
}
});
}); });
this.setupWalletModeModal(); this.setupWalletModeModal();
@@ -561,7 +594,8 @@
} }
if (!data.clearnet_servers?.length && !data.onion_servers?.length) { if (!data.clearnet_servers?.length && !data.onion_servers?.length) {
html = '<div class="text-sm text-gray-500 dark:text-gray-400 py-4 text-center">No servers discovered. The connected server may not support peer discovery.</div>'; const serverName = data.current_server ? `${data.current_server.host}:${data.current_server.port}` : 'The connected server';
html = `<div class="text-sm text-gray-500 dark:text-gray-400 py-4 text-center">No servers discovered. <span class="font-mono">${serverName}</span> does not return peer lists.</div>`;
} else { } else {
html += `<div class="text-xs text-gray-500 dark:text-gray-400 pt-3 border-t border-gray-200 dark:border-gray-600">Click a server to add it to your list</div>`; html += `<div class="text-xs text-gray-500 dark:text-gray-400 pt-3 border-t border-gray-200 dark:border-gray-600">Click a server to add it to your list</div>`;
} }

View File

@@ -204,8 +204,10 @@
</div> </div>
</div> </div>
{% if c.connection_type == 'electrum' %} {% if c.supports_electrum %}
<div class="mb-6"> <div id="electrum-section-{{ c.name }}" class="mb-6 {% if c.connection_type != 'electrum' %}hidden{% endif %}"
data-default-clearnet="{{ c.clearnet_servers_text }}"
data-default-onion="{{ c.onion_servers_text }}">
<h4 class="text-sm font-medium text-gray-900 dark:text-white mb-4"> <h4 class="text-sm font-medium text-gray-900 dark:text-white mb-4">
Electrum Servers Electrum Servers
</h4> </h4>
@@ -213,7 +215,7 @@
<div class="mb-6"> <div class="mb-6">
<h5 class="text-xs font-medium text-gray-600 dark:text-gray-400 mb-3">Clearnet</h5> <h5 class="text-xs font-medium text-gray-600 dark:text-gray-400 mb-3">Clearnet</h5>
<div class="bg-gray-50 dark:bg-gray-700 rounded-lg p-4"> <div class="bg-gray-50 dark:bg-gray-700 rounded-lg p-4">
<textarea class="hover:border-blue-500 bg-gray-50 text-gray-900 appearance-none dark:bg-gray-700 dark:text-white border border-gray-300 dark:border-gray-600 dark:placeholder-gray-400 text-sm rounded-lg outline-none focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 focus:ring-1 focus:outline-none font-mono" name="electrum_clearnet_{{ c.name }}" id="electrum_clearnet_{{ c.name }}" rows="3" placeholder="electrum.blockstream.info:50002&#10;electrum.emzy.de:50002">{{ c.clearnet_servers_text }}</textarea> <textarea class="hover:border-blue-500 bg-gray-50 text-gray-900 appearance-none dark:bg-gray-700 dark:text-white border border-gray-300 dark:border-gray-600 dark:placeholder-gray-400 text-sm rounded-lg outline-none focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 focus:ring-1 focus:outline-none font-mono" name="electrum_clearnet_{{ c.name }}" id="electrum_clearnet_{{ c.name }}" rows="3" placeholder="electrum.blockstream.info:50002&#10;electrum.emzy.de:50002">{% if c.connection_type == 'electrum' %}{{ c.clearnet_servers_text }}{% endif %}</textarea>
<p class="text-xs text-gray-500 dark:text-gray-400 mt-1">One per line. Format: host:port (50002=SSL, 50001=non-SSL)</p> <p class="text-xs text-gray-500 dark:text-gray-400 mt-1">One per line. Format: host:port (50002=SSL, 50001=non-SSL)</p>
</div> </div>
</div> </div>
@@ -221,7 +223,7 @@
<div class="mb-4 pt-2"> <div class="mb-4 pt-2">
<h5 class="text-xs font-medium text-gray-600 dark:text-gray-400 mb-3">TOR (.onion)</h5> <h5 class="text-xs font-medium text-gray-600 dark:text-gray-400 mb-3">TOR (.onion)</h5>
<div class="bg-gray-50 dark:bg-gray-700 rounded-lg p-4"> <div class="bg-gray-50 dark:bg-gray-700 rounded-lg p-4">
<textarea class="hover:border-blue-500 bg-gray-50 text-gray-900 appearance-none dark:bg-gray-700 dark:text-white border border-gray-300 dark:border-gray-600 dark:placeholder-gray-400 text-sm rounded-lg outline-none focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 focus:ring-1 focus:outline-none font-mono text-xs" name="electrum_onion_{{ c.name }}" id="electrum_onion_{{ c.name }}" rows="3" placeholder="explorerzyd...onion:110&#10;lksvbmwwi2b...onion:50001">{{ c.onion_servers_text }}</textarea> <textarea class="hover:border-blue-500 bg-gray-50 text-gray-900 appearance-none dark:bg-gray-700 dark:text-white border border-gray-300 dark:border-gray-600 dark:placeholder-gray-400 text-sm rounded-lg outline-none focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 focus:ring-1 focus:outline-none font-mono text-xs" name="electrum_onion_{{ c.name }}" id="electrum_onion_{{ c.name }}" rows="3" placeholder="explorerzyd...onion:110&#10;lksvbmwwi2b...onion:50001">{% if c.connection_type == 'electrum' %}{{ c.onion_servers_text }}{% endif %}</textarea>
<p class="text-xs text-gray-500 dark:text-gray-400 mt-1">One per line. Used when TOR is enabled.</p> <p class="text-xs text-gray-500 dark:text-gray-400 mt-1">One per line. Used when TOR is enabled.</p>
</div> </div>
</div> </div>
@@ -253,8 +255,10 @@
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="mb-6">
<div id="fund-transfer-section-{{ c.name }}" class="mb-6 hidden">
<h4 class="text-sm font-medium text-gray-900 dark:text-white mb-4"> <h4 class="text-sm font-medium text-gray-900 dark:text-white mb-4">
Fund Transfer Fund Transfer
</h4> </h4>

View File

@@ -266,10 +266,10 @@ def page_settings(self, url_split, post_string):
clearnet_servers = c.get("electrum_clearnet_servers", None) clearnet_servers = c.get("electrum_clearnet_servers", None)
onion_servers = c.get("electrum_onion_servers", None) onion_servers = c.get("electrum_onion_servers", None)
if clearnet_servers is None: if not clearnet_servers:
default_clearnet = DEFAULT_ELECTRUM_SERVERS.get(name, []) default_clearnet = DEFAULT_ELECTRUM_SERVERS.get(name, [])
clearnet_servers = [f"{s['host']}:{s['port']}" for s in default_clearnet] clearnet_servers = [f"{s['host']}:{s['port']}" for s in default_clearnet]
if onion_servers is None: if not onion_servers:
default_onion = DEFAULT_ONION_SERVERS.get(name, []) default_onion = DEFAULT_ONION_SERVERS.get(name, [])
onion_servers = [f"{s['host']}:{s['port']}" for s in default_onion] onion_servers = [f"{s['host']}:{s['port']}" for s in default_onion]