From 4899b78ce301935c5ab1585894ea0236bf59f04b Mon Sep 17 00:00:00 2001 From: lovetox <philipp@hoerist.com> Date: Sat, 5 Dec 2020 20:15:24 +0100 Subject: [PATCH] Add custom module load for GUI --- gajim/gajim.py | 10 ++++++++-- gajim/gui/__init__.py | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 gajim/gui/__init__.py diff --git a/gajim/gajim.py b/gajim/gajim.py index 4ff6125480..5ec56ed5d8 100644 --- a/gajim/gajim.py +++ b/gajim/gajim.py @@ -24,8 +24,10 @@ from ctypes.util import find_library from packaging.version import Version as V +import gajim.gui from gajim.common import i18n + _MIN_NBXMPP_VER = '1.99.0' _MIN_GTK_VER = '3.22.27' _MIN_CAIRO_VER = '1.16.0' @@ -102,13 +104,16 @@ def _disable_csd(): def _init_gtk(): - from gajim.gtk import exception + gajim.gui.init('gtk') + + from gajim.gui import exception exception.init() i18n.initialize_direction_mark() - from gajim.application import GajimApplication +def _run_app(): + from gajim.application import GajimApplication application = GajimApplication() _install_sginal_handlers(application) application.run(sys.argv) @@ -152,3 +157,4 @@ def main(): _set_proc_title() _disable_csd() _init_gui('GTK') + _run_app() diff --git a/gajim/gui/__init__.py b/gajim/gui/__init__.py new file mode 100644 index 0000000000..680f53cf2b --- /dev/null +++ b/gajim/gui/__init__.py @@ -0,0 +1,38 @@ + +import sys +import importlib +from pathlib import Path + + +class GUIFinder(importlib.abc.MetaPathFinder): + + def __init__(self, name, fallback=None): + self._path = Path(__file__).parent.parent / name + + self._fallback_path = None + if fallback is not None: + self._fallback_path = Path(__file__).parent.parent / fallback + + self._suffix = 'pyc' if sys.platform == 'win32' else 'py' + + def find_spec(self, fullname, _path, _target=None): + if not fullname.startswith('gajim.gui'): + return None + + _namespace, module_name = fullname.rsplit('.', 1) + module_path = self._path / f'{module_name}.{self._suffix}' + + if not module_path.exists(): + if self._fallback_path is None: + return None + + module_path = self._fallback_path / f'{module_name}.{self._suffix}' + if not module_path.exists(): + return None + + spec = importlib.util.spec_from_file_location(fullname, module_path) + + return spec + +def init(name, fallback=None): + sys.meta_path.append(GUIFinder(name, fallback=fallback)) -- GitLab