diff --git a/src/sakia/app.py b/src/sakia/app.py index a6654f940640841f04d48bdc0da1a35717a8e155..997b88a4c132d4775174b89c195a40635beb21a3 100644 --- a/src/sakia/app.py +++ b/src/sakia/app.py @@ -88,9 +88,7 @@ class Application(QObject): app_data = AppDataFile.in_config_path(options.config_path).load_or_init() app = cls(qapp, loop, options, app_data, None, None, options.currency, None) #app.set_proxy() - app.get_last_version() app.load_profile(options.profile) - app.start_coroutines() app.documents_service = DocumentsService.instanciate(app) app.switch_language() return app diff --git a/src/sakia/helpers.py b/src/sakia/helpers.py index d7a0fd4a03238f8fa006386bb3553abad1a6e1e4..ad1c10c65dc94dc91fbffbf7fcbf7e518c62f935 100644 --- a/src/sakia/helpers.py +++ b/src/sakia/helpers.py @@ -1,4 +1,5 @@ import re +import hashlib from PyQt5.QtCore import QSharedMemory from PyQt5.QtWidgets import QApplication @@ -17,8 +18,11 @@ def detect_non_printable(data): return True -def single_instance_lock(): - sharedMemory = QSharedMemory("77rWEV37vupNhQs6ktDREthqSciyV77OYrqPBSwV755JFIhl9iOywB7G5DkAKU8Y") +def single_instance_lock(currency): + key = hashlib.sha256(currency.encode('utf-8') + + "77rWEV37vupNhQs6ktDREthqSciyV77OYrqPBSwV755JFIhl9iOywB7G5DkAKU8Y".encode('utf-8'))\ + .hexdigest() + sharedMemory = QSharedMemory(key) if sharedMemory.attach(QSharedMemory.ReadOnly): sharedMemory.detach() return None diff --git a/src/sakia/main.py b/src/sakia/main.py index 599cbdfc2d066246c810b94adc940d8ad977a127..c94962f0be38d83984b36d421a369dcda428c6cd 100755 --- a/src/sakia/main.py +++ b/src/sakia/main.py @@ -82,15 +82,6 @@ if __name__ == '__main__': signal.signal(signal.SIGINT, signal.SIG_DFL) sakia = QApplication(sys.argv) - lock = single_instance_lock() - if not lock: - lock = single_instance_lock() - if not lock: - QMessageBox.critical(None, "Sakia", - "Sakia is already running.") - - sys.exit(1) - sys.excepthook = exception_handler sakia.setStyle('Fusion') @@ -100,7 +91,17 @@ if __name__ == '__main__': with loop: app = Application.startup(sys.argv, sakia, loop) + + lock = single_instance_lock(app.currency) + if not lock: + lock = single_instance_lock(app.currency) + if not lock: + QMessageBox.critical(None, "Sakia", + "Sakia is already running.") + + sys.exit(1) app.start_coroutines() + app.get_last_version() keep_trying = True while not app.blockchain_service.initialized(): try: