From 597ac2b06a3bb9fe69d6fbf8a3a3cb8cc3edaa03 Mon Sep 17 00:00:00 2001 From: itdominator <1itdominator@gmail.com> Date: Thu, 26 Feb 2026 02:00:36 -0600 Subject: [PATCH] Fixed multi file ipc load speeds --- src/app.py | 15 +++--- src/core/controllers/base_controller.py | 1 + src/core/widgets/code/code_base.py | 11 ++--- src/core/widgets/code/mini_view_widget.py | 48 ------------------- .../code/mixins/source_view_dnd_mixin.py | 1 + src/libs/ipc_server.py | 10 ++++ src/libs/mixins/ipc_signals_mixin.py | 6 +++ 7 files changed, 31 insertions(+), 61 deletions(-) delete mode 100644 src/core/widgets/code/mini_view_widget.py diff --git a/src/app.py b/src/app.py index 1f9d5e9..261c8a6 100644 --- a/src/app.py +++ b/src/app.py @@ -2,6 +2,7 @@ from contextlib import suppress import signal import os +import json # Lib imports @@ -44,25 +45,25 @@ class Application: return True logger.warning(f"{APP_NAME} IPC Server Exists: Have sent path(s) to it and closing...") + files: list = [] for arg in unknownargs + [args.new_tab,]: if os.path.isfile(arg): - message = f"FILE|{arg}" - ipc_server.send_ipc_message(message) + files.append(f"file://{arg}") if os.path.isdir(arg): message = f"DIR|{arg}" ipc_server.send_ipc_message(message) + if files: + message = f"FILES|{json.dumps(files)}" + ipc_server.send_ipc_message(message) + return False def ipc_realization_check(self, ipc_server): try: ipc_server.create_ipc_listener() - except (OSError, PermissionError) as e: - logger.info(f"IPC listener creation failed: {e}, falling back to test message") - ipc_server.send_test_ipc_message() - except Exception as e: - logger.error(f"Unexpected IPC setup error: {e}") + except Exception: ipc_server.send_test_ipc_message() def setup_debug_hook(self): diff --git a/src/core/controllers/base_controller.py b/src/core/controllers/base_controller.py index c95c9da..5e95dd0 100644 --- a/src/core/controllers/base_controller.py +++ b/src/core/controllers/base_controller.py @@ -59,6 +59,7 @@ class BaseController(IPCSignalsMixin, KeyboardSignalsMixin, BaseControllerMixin) def _subscribe_to_events(self): event_system.subscribe("shutting-down", lambda: print("Shutting down...")) event_system.subscribe("handle-file-from-ipc", self.handle_file_from_ipc) + event_system.subscribe("handle-files-from-ipc", self.handle_files_from_ipc) event_system.subscribe("handle-dir-from-ipc", self.handle_dir_from_ipc) event_system.subscribe("tggl-top-main-menubar", self._tggl_top_main_menubar) diff --git a/src/core/widgets/code/code_base.py b/src/core/widgets/code/code_base.py index 85974ea..c60650d 100644 --- a/src/core/widgets/code/code_base.py +++ b/src/core/widgets/code/code_base.py @@ -13,8 +13,6 @@ from .controllers.commands_controller import CommandsController from .controllers.completion_controller import CompletionController from .controllers.views.source_views_controller import SourceViewsController -from .mini_view_widget import MiniViewWidget - class CodeBase: @@ -22,7 +20,6 @@ class CodeBase: super(CodeBase, self).__init__() self.controller_manager: ControllerManager = ControllerManager() - self.miniview_widget: MiniViewWidget = MiniViewWidget() self._subscribe_to_events() self._load_controllers() @@ -30,6 +27,7 @@ class CodeBase: def _subscribe_to_events(self): event_system.subscribe("handle-file", self._load_ipc_file) + event_system.subscribe("handle-files", self._load_ipc_files) def _load_controllers(self): files_controller = FilesController() @@ -50,9 +48,6 @@ class CodeBase: def get_tabs_widget(self): return self.controller_manager["tabs"].get_tabs_widget() - def get_mini_view_widget(self): - return self.miniview_widget - def create_source_view(self): source_view = self.controller_manager["source_views"].create_source_view() self.controller_manager["completion"].register_completer( @@ -68,3 +63,7 @@ class CodeBase: active_view = self.controller_manager["source_views"].signal_mapper.active_view uris = [ f"file://{fpath}" ] active_view._on_uri_data_received(uris) + + def _load_ipc_files(self, uris: list): + active_view = self.controller_manager["source_views"].signal_mapper.active_view + active_view._on_uri_data_received(uris) diff --git a/src/core/widgets/code/mini_view_widget.py b/src/core/widgets/code/mini_view_widget.py deleted file mode 100644 index da77c6a..0000000 --- a/src/core/widgets/code/mini_view_widget.py +++ /dev/null @@ -1,48 +0,0 @@ -# Python imports - -# Lib imports -import gi -gi.require_version('GtkSource', '4') -from gi.repository.GtkSource import Map -from gi.repository import Pango - -# Application imports - - - -class MiniViewWidget(Map): - def __init__(self): - super(MiniViewWidget, self).__init__() - - self._setup_styling() - self._setup_signals() - self._subscribe_to_events() - self._load_widgets() - - - def _setup_styling(self): - ctx = self.get_style_context() - ctx.add_class("mini-view") - - self.set_hexpand(False) - self._set_font_desc() - - def _setup_signals(self): - ... - - def _subscribe_to_events(self): - event_system.subscribe(f"set-mini-view", self.set_smini_view) - - def _load_widgets(self): - ... - - def _set_font_desc(self): - default_font = 'Monospace 1' - desc = Pango.FontDescription(default_font) - - desc.set_size(Pango.SCALE) # Set size to 1pt - desc.set_family('BuilderBlocks,' + desc.get_family()) - self.set_property('font-desc', desc) - - def set_smini_view(self, source_view): - self.set_view(source_view) \ No newline at end of file diff --git a/src/core/widgets/code/mixins/source_view_dnd_mixin.py b/src/core/widgets/code/mixins/source_view_dnd_mixin.py index 72d47c8..b92e350 100644 --- a/src/core/widgets/code/mixins/source_view_dnd_mixin.py +++ b/src/core/widgets/code/mixins/source_view_dnd_mixin.py @@ -33,6 +33,7 @@ class SourceViewDnDMixin: def _on_uri_data_received(self, uris: []): uri = uris.pop(0) + self.command.exec_with_args("dnd_load_file_to_buffer", self, uri) if not uris: return diff --git a/src/libs/ipc_server.py b/src/libs/ipc_server.py index 0ee8e8f..e9803ef 100644 --- a/src/libs/ipc_server.py +++ b/src/libs/ipc_server.py @@ -87,6 +87,16 @@ class IPCServer(Singleton): conn.close() break + if "FILES|" in msg: + import json + data = msg.split("FILES|")[1].strip() + files = json.loads(data) + if files: + event_system.emit("handle-files-from-ipc", (files,)) + + conn.close() + break + if "DIR|" in msg: file = msg.split("DIR|")[1].strip() if file: diff --git a/src/libs/mixins/ipc_signals_mixin.py b/src/libs/mixins/ipc_signals_mixin.py index 880266d..30bd167 100644 --- a/src/libs/mixins/ipc_signals_mixin.py +++ b/src/libs/mixins/ipc_signals_mixin.py @@ -21,6 +21,12 @@ class IPCSignalsMixin: self.broadcast_message, "handle-file", (fpath,) ) + def handle_files_from_ipc(self, uris: list) -> None: + logger.debug(f"Files From IPC: {uris}") + GLib.idle_add( + self.broadcast_message, "handle-files", (uris,) + ) + def handle_dir_from_ipc(self, fpath: str) -> None: logger.debug(f"Dir From IPC: {fpath}") GLib.idle_add(