From f14058634c215cc4e59319ef9e1147c99539c602 Mon Sep 17 00:00:00 2001 From: itdominator <1itdominator@gmail.com> Date: Sat, 13 Nov 2021 23:19:09 -0600 Subject: [PATCH] Attempting threaded thumbnailing update --- .../pyfm-0.0.1/PyFM/new/pyfm/__builtins__.py | 2 +- .../new/pyfm/shellfm/windows/view/View.py | 1 + .../PyFM/new/pyfm/signal_classes/Signals.py | 9 +--- .../pyfm/signal_classes/mixins/TabMixin.py | 5 +- .../pyfm/signal_classes/mixins/WidgetMixin.py | 48 +++++++++++++++++-- 5 files changed, 49 insertions(+), 16 deletions(-) diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/__builtins__.py b/src/versions/pyfm-0.0.1/PyFM/new/pyfm/__builtins__.py index f1ab9f6..22164e0 100644 --- a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/__builtins__.py +++ b/src/versions/pyfm-0.0.1/PyFM/new/pyfm/__builtins__.py @@ -53,4 +53,4 @@ class Builtins: # NOTE: Just reminding myself we can add to builtins two different ways... # __builtins__.update({"event_system": Builtins()}) builtins.event_system = Builtins() -builtins.event_sleep_time = 1 +builtins.event_sleep_time = 0.2 diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/View.py b/src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/View.py index 3d5eed1..76a5101 100644 --- a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/View.py +++ b/src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/View.py @@ -152,6 +152,7 @@ class View(Settings, Launcher, Icon, Path): return data + def get_gtk_icon_str_combo(self): data = [] dir = self.get_current_directory() diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/Signals.py b/src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/Signals.py index dc0624e..2f5cee8 100644 --- a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/Signals.py +++ b/src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/Signals.py @@ -8,7 +8,6 @@ from gi.repository import Gtk as gtk # Application imports from .mixins import * -# from pyfm.shellfm.windows import WindowController from shellfm import WindowController @@ -35,12 +34,6 @@ class Signals(WindowMixin, PaneMixin): self.window4 = self.builder.get_object("window4") self.notebooks = [self.window1, self.window2, self.window3, self.window4] - event_system.push_gui_event(["update", "window_1", []]) - event_system.push_gui_event(["update", "window_2", []]) - event_system.push_fm_event(["update", "window_fm_1", []]) - event_system.push_fm_event(["update", "window_fm_2", []]) - - self.single_click_open = False self.is_pane1_hidden = False self.is_pane2_hidden = False @@ -60,7 +53,7 @@ class Signals(WindowMixin, PaneMixin): time.sleep(event_sleep_time) event = event_system.consume_gui_event() if event: - print(event) + type, target, data = event def tear_down(self, widget, eve): diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/mixins/TabMixin.py b/src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/mixins/TabMixin.py index 1352665..67cf8df 100644 --- a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/mixins/TabMixin.py +++ b/src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/mixins/TabMixin.py @@ -27,10 +27,8 @@ class TabMixin(WidgetMixin): tab = self.create_tab_widget(view) scroll, store = self.create_grid_iconview_widget(view, wid) - index = notebook.append_page(scroll, tab) - # scroll, store = self.create_grid_treeview_widget(view, wid) - self.load_store(view, store, save_state) + index = notebook.append_page(scroll, tab) self.window_controller.set_active_data(wid, view.get_tab_id()) path_entry.set_text(view.get_current_directory()) @@ -39,6 +37,7 @@ class TabMixin(WidgetMixin): # FIXME: set_tab_reorderable doesn't seem to work... # notebook.set_tab_reorderable(tab, True) + self.load_store(view, store, save_state) def close_tab(self, widget, eve): notebook = widget.get_parent().get_parent() diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/mixins/WidgetMixin.py b/src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/mixins/WidgetMixin.py index 1f28634..635c463 100644 --- a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/mixins/WidgetMixin.py +++ b/src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/mixins/WidgetMixin.py @@ -1,27 +1,67 @@ # Python imports +import threading, subprocess # Lib imports import gi gi.require_version("Gtk", "3.0") from gi.repository import Gtk +from gi.repository import GLib from gi.repository import GdkPixbuf # Application imports +def threaded(fn): + def wrapper(*args, **kwargs): + threading.Thread(target=fn, args=args, kwargs=kwargs).start() + return wrapper + + + class WidgetMixin: # This feels ugly but I don't see a better option than itterating over the list. + # @threaded + # def load_store(self, view, store, save_state=True): + # store.clear() + # files = view.get_pixbuf_icon_str_combo() + # + # for data in files: + # store.append(data) + # + # if save_state: + # self.window_controller.save_state() + + + + def load_store(self, view, store, save_state=True): store.clear() - files = view.get_pixbuf_icon_str_combo() - - for data in files: - store.append(data) + files = view.get_files() + dir = view.get_current_directory() + for file in files: + try: + self.create_icon(view, store, dir, file[0]) + except Exception as e: + pass if save_state: self.window_controller.save_state() + + @threaded + def create_icon(self, view, store, dir, file): + icon = view.create_icon(dir, file).get_pixbuf() + data = [icon, file] + GLib.idle_add(self.update_store, (store, data,)) + + def update_store(self, item): + store, data = item + store.append(data) + + + + def create_tab_widget(self, view): tab = Gtk.Box() label = Gtk.Label()