From 1a42e5e123201d7733b1496d92294b3f5cc833f5 Mon Sep 17 00:00:00 2001 From: tecnovert Date: Sun, 8 Jun 2025 19:58:10 +0200 Subject: [PATCH] net: Workaround error specifying server to simplex-chat twice. --- basicswap/network/simplex_chat.py | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/basicswap/network/simplex_chat.py b/basicswap/network/simplex_chat.py index 05cf2af..1a8b0c5 100644 --- a/basicswap/network/simplex_chat.py +++ b/basicswap/network/simplex_chat.py @@ -7,6 +7,7 @@ import os import select +import sqlite3 import subprocess import time @@ -77,17 +78,36 @@ def startSimplexClient( if not os.path.exists(data_path): os.makedirs(data_path) - db_path = os.path.join(data_path, "simplex_client_data") - args = [bin_path, "-d", db_path, "-s", server_address, "-p", str(websocket_port)] + simplex_data_prefix = os.path.join(data_path, "simplex_client_data") + simplex_db_path = simplex_data_prefix + "_chat.db" + args = [bin_path, "-d", simplex_data_prefix, "-p", str(websocket_port)] if socks_proxy: args += ["--socks-proxy", socks_proxy] - if not os.path.exists(db_path + "_chat.db"): + if not os.path.exists(simplex_db_path): # Need to set initial profile through CLI # TODO: Must be a better way? init_args = args + ["-e", "/help"] # Run command to exit client + init_args += ["-s", server_address] initSimplexClient(init_args, logger, delay_event) + else: + # Workaround to avoid error: + # SQLite3 returned ErrorConstraint while attempting to perform step: UNIQUE constraint failed: protocol_servers.user_id, protocol_servers.host, protocol_servers.port + # TODO: Remove? + with sqlite3.connect(simplex_db_path) as con: + c = con.cursor() + if ":" in server_address: + host, port = server_address.split(":") + else: + host = server_address + port = "" + query: str = ( + "SELECT COUNT(*) FROM protocol_servers WHERE host = :host and port = :port" + ) + q = c.execute(query, {"host": host, "port": port}).fetchone() + if q[0] < 1: + args += ["-s", server_address] args += ["-l", log_level]