diff --git a/EDMarketConnector.py b/EDMarketConnector.py index 4ef5bc4c..7cfda5c2 100755 --- a/EDMarketConnector.py +++ b/EDMarketConnector.py @@ -9,7 +9,7 @@ import re import sys import webbrowser from builtins import object, str -from os import chdir, environ +from os import chdir, environ, getpid as os_getpid from os.path import dirname, isdir, join from sys import platform from time import localtime, strftime, time @@ -42,7 +42,8 @@ if __name__ == '__main__': args = parser.parse_args() if __name__ == "__main__": - journal_dir_lockfile = None + journal_dir = config.get('journaldir') or config.default_journal_dir + journal_dir_lockfile = open(join(journal_dir, 'edmc-journal-lock.txt'), mode='w+', encoding='utf-8') def no_other_instance_running() -> bool: # noqa: CCR001 """ @@ -50,11 +51,32 @@ if __name__ == "__main__": :returns: True if we are the single instance, else False. """ - journal_dir = config.get('journaldir') or config.default_journal_dir + print('no_other_instance_running(): Begin...') - if sys.platform == 'win32': - journal_dir_lockfile = open(join(journal_dir, 'edmc-journal-lock.txt'), mode='a+', encoding='utf-8') + if platform == 'win32': + print('no_other_instance_running(): win32') + import msvcrt + print(f'no_other_instance_running(): journal_dir_lockfile = {journal_dir_lockfile!r}') + + try: + msvcrt.locking(journal_dir_lockfile.fileno(), msvcrt.LK_NBLCK, 4096) + + except PermissionError as e: + print(f"PermissionError: Couldn't lock journal directory \"{journal_dir}\", assuming another process running\n{e}") + return False + + except OSError as e: + print(f"OSError: Couldn't lock journal directory \"{journal_dir}\", assuming another process running\n{e}") + return False + + except Exception as e: + print(f"other Exception: Couldn't lock journal directory \"{journal_dir}\", assuming another process running\n{e}") + return False + + journal_dir_lockfile.write(f"Path: {journal_dir}\nPID: {os_getpid()}\n") + + print('no_other_instance_running(): Done') return True def already_running_popup():