From ed35dd7e1483dfabdf50ff69d27cdbfac3829ebf Mon Sep 17 00:00:00 2001 From: Aria Moradi Date: Sun, 24 Mar 2024 21:25:08 +0330 Subject: [PATCH] wrap windows apis, create stubs for linux --- cddagl/__main__.py | 12 ++----- cddagl/functions.py | 8 ++--- cddagl/launcher.py | 2 +- cddagl/platform/__init__.py | 7 ++++ cddagl/platform/linux.py | 46 ++++++++++++++++++++++++++ cddagl/platform/windows/__init__.py | 0 cddagl/platform/windows/lib.py | 12 +++++++ cddagl/{ => platform/windows}/win32.py | 0 cddagl/ui/views/backups.py | 2 +- cddagl/ui/views/dialogs.py | 2 +- cddagl/ui/views/main.py | 4 +-- cddagl/ui/views/settings.py | 2 +- cddagl/ui/views/tabbed.py | 4 +-- 13 files changed, 79 insertions(+), 22 deletions(-) create mode 100644 cddagl/platform/__init__.py create mode 100644 cddagl/platform/linux.py create mode 100644 cddagl/platform/windows/__init__.py create mode 100644 cddagl/platform/windows/lib.py rename cddagl/{ => platform/windows}/win32.py (100%) diff --git a/cddagl/__main__.py b/cddagl/__main__.py index 39a9e5d..9fffdc6 100644 --- a/cddagl/__main__.py +++ b/cddagl/__main__.py @@ -1,13 +1,5 @@ -def fix_pywin32_loading(): - try: - import pywintypes - except ImportError: - import sys - sys.path.append(r'win32') - sys.path.append(r'win32\lib') - import pywin32_bootstrap - -fix_pywin32_loading() +from cddagl.platform import prelaunch_platform_fix +prelaunch_platform_fix() import cddagl.launcher cddagl.launcher.run_cddagl() diff --git a/cddagl/functions.py b/cddagl/functions.py index fffbfef..12c5205 100644 --- a/cddagl/functions.py +++ b/cddagl/functions.py @@ -4,8 +4,8 @@ import traceback from io import StringIO -import winutils -from pywintypes import com_error +from cddagl.platform import winutils +from cddagl.platform import pywintypes_com_error import cddagl from cddagl.i18n import proxy_gettext as _ @@ -108,7 +108,7 @@ def delete_path(path): try: return winutils.delete(path, flags) - except com_error: + except pywintypes_com_error: return False def move_path(srcpath, dstpath): @@ -134,7 +134,7 @@ def move_path(srcpath, dstpath): try: return winutils.move(srcpath, dstpath, flags) - except com_error: + except pywintypes_com_error: return False def safe_humanize(arrow_date, other=None, locale='en_us', only_distance=False, granularity='auto'): diff --git a/cddagl/launcher.py b/cddagl/launcher.py index 63abc16..5175a71 100644 --- a/cddagl/launcher.py +++ b/cddagl/launcher.py @@ -23,7 +23,7 @@ from cddagl.sql.functions import init_config, get_config_value, config_true from cddagl.ui.views.dialogs import ExceptionWindow from cddagl.ui.views.tabbed import TabbedWindow -from cddagl.win32 import get_ui_locale, SingleInstance, write_named_pipe +from cddagl.platform import get_ui_locale, SingleInstance, write_named_pipe logger = logging.getLogger('cddagl') diff --git a/cddagl/platform/__init__.py b/cddagl/platform/__init__.py new file mode 100644 index 0000000..e19e8e1 --- /dev/null +++ b/cddagl/platform/__init__.py @@ -0,0 +1,7 @@ +import platform + +if platform.system() == "Linux": + from .linux import * +else: + from .windows.win32 import * + from .windows.lib import * diff --git a/cddagl/platform/linux.py b/cddagl/platform/linux.py new file mode 100644 index 0000000..40b179b --- /dev/null +++ b/cddagl/platform/linux.py @@ -0,0 +1,46 @@ +########## win32 ########## +find_process_with_file_handle = None +get_downloads_directory = None +activate_window = None +process_id_from_path = None +wait_for_pid = None +get_documents_directory = None +# get_ui_locale = None +# SimpleNamedPipe = None +# SingleInstance = None +write_named_pipe = None + +def get_ui_locale(): + return 'en_US' + +def get_documents_directory(): + return "/home/armor/tmp" + +class SingleInstance: + def __init__(self): + pass + + def aleradyrunning(self): + return False + +class SimpleNamedPipe: + def __init__(self, pipe_name): + pass + + def connect(self): + pass + + def read(self): + pass + + def write(self, data): + pass + +def prelaunch_platform_fix(): + pass + +########## lib ########## +pywintypes_error = None +pywintypes_com_error = None + +winutils = None \ No newline at end of file diff --git a/cddagl/platform/windows/__init__.py b/cddagl/platform/windows/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/cddagl/platform/windows/lib.py b/cddagl/platform/windows/lib.py new file mode 100644 index 0000000..fffbad7 --- /dev/null +++ b/cddagl/platform/windows/lib.py @@ -0,0 +1,12 @@ +from pywintypes import error as pywintypes_error, com_error as pywintypes_com_error +import winutils + +def prelaunch_platform_fix(): + # fix_pywin32_loading + try: + import pywintypes + except ImportError: + import sys + sys.path.append(r'win32') + sys.path.append(r'win32\lib') + import pywin32_bootstrap diff --git a/cddagl/win32.py b/cddagl/platform/windows/win32.py similarity index 100% rename from cddagl/win32.py rename to cddagl/platform/windows/win32.py diff --git a/cddagl/ui/views/backups.py b/cddagl/ui/views/backups.py index 9f49c8c..3597da9 100644 --- a/cddagl/ui/views/backups.py +++ b/cddagl/ui/views/backups.py @@ -22,7 +22,7 @@ from cddagl.functions import sizeof_fmt, safe_filename, alphanum_key, delete_path, safe_humanize from cddagl.i18n import proxy_gettext as _ from cddagl.sql.functions import get_config_value, set_config_value, config_true -from cddagl.win32 import find_process_with_file_handle +from cddagl.platform import find_process_with_file_handle logger = logging.getLogger('cddagl') diff --git a/cddagl/ui/views/dialogs.py b/cddagl/ui/views/dialogs.py index 195460d..dcb187f 100644 --- a/cddagl/ui/views/dialogs.py +++ b/cddagl/ui/views/dialogs.py @@ -17,7 +17,7 @@ from cddagl.constants import get_resource_path from cddagl.functions import clean_qt_path, bitness from cddagl.i18n import proxy_gettext as _ -from cddagl.win32 import get_downloads_directory +from cddagl.platform import get_downloads_directory import markdown2 diff --git a/cddagl/ui/views/main.py b/cddagl/ui/views/main.py index 46d841d..581d25e 100644 --- a/cddagl/ui/views/main.py +++ b/cddagl/ui/views/main.py @@ -32,7 +32,7 @@ ) from PyQt5.QtGui import QRegularExpressionValidator from babel.dates import format_datetime -from pywintypes import error as PyWinError +from cddagl.platform import pywintypes_error as PyWinError import cddagl.constants as cons from cddagl.constants import get_cddagl_path, get_cdda_uld_path @@ -46,7 +46,7 @@ get_config_value, set_config_value, new_version, get_build_from_sha256, new_build, config_true ) -from cddagl.win32 import ( +from cddagl.platform import ( find_process_with_file_handle, activate_window, process_id_from_path, wait_for_pid, get_documents_directory ) diff --git a/cddagl/ui/views/settings.py b/cddagl/ui/views/settings.py index 61c6aa7..3e4eaae 100644 --- a/cddagl/ui/views/settings.py +++ b/cddagl/ui/views/settings.py @@ -13,7 +13,7 @@ from cddagl.functions import clean_qt_path from cddagl.i18n import load_gettext_locale, get_available_locales, proxy_gettext as _ from cddagl.sql.functions import get_config_value, set_config_value, config_true -from cddagl.win32 import get_ui_locale +from cddagl.platform import get_ui_locale logger = logging.getLogger('cddagl') diff --git a/cddagl/ui/views/tabbed.py b/cddagl/ui/views/tabbed.py index 28a07fd..91d8e71 100644 --- a/cddagl/ui/views/tabbed.py +++ b/cddagl/ui/views/tabbed.py @@ -21,7 +21,7 @@ QAction, QDialog, QTabWidget, QCheckBox, QMessageBox, QMenu ) from PyQt5.QtGui import QDesktopServices -from pywintypes import error as PyWinError +from cddagl.platform import pywintypes_error as PyWinError import cddagl.constants as cons from cddagl import __version__ as version @@ -33,7 +33,7 @@ from cddagl.ui.views.main import MainTab from cddagl.ui.views.settings import SettingsTab from cddagl.ui.views.soundpacks import SoundpacksTab -from cddagl.win32 import SimpleNamedPipe +from cddagl.platform import SimpleNamedPipe logger = logging.getLogger('cddagl')