diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/context/controller.py b/src/versions/solarfm-0.0.1/SolarFM/solarfm/context/controller.py index 705ae3e..77043aa 100644 --- a/src/versions/solarfm-0.0.1/SolarFM/solarfm/context/controller.py +++ b/src/versions/solarfm-0.0.1/SolarFM/solarfm/context/controller.py @@ -101,7 +101,7 @@ class Controller(UIMixin, KeyboardSignalsMixin, IPCSignalsMixin, ExceptionHookMi self.fm_controller.save_state(path) elif action == "load_session": path = f"{save_load_dialog.get_file().get_path()}" - session_json = self.fm_controller.load_state(path) + session_json = self.fm_controller.get_state_from_file(path) self.load_session(session_json) if (response == Gtk.ResponseType.CANCEL) or (response == Gtk.ResponseType.DELETE_EVENT): pass diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/context/controller_data.py b/src/versions/solarfm-0.0.1/SolarFM/solarfm/context/controller_data.py index f4a9345..fe4be1e 100644 --- a/src/versions/solarfm-0.0.1/SolarFM/solarfm/context/controller_data.py +++ b/src/versions/solarfm-0.0.1/SolarFM/solarfm/context/controller_data.py @@ -56,8 +56,8 @@ class Controller_Data: self.bottom_file_count_label = self.builder.get_object("bottom_file_count_label") self.bottom_path_label = self.builder.get_object("bottom_path_label") - self.trash_files_path = GLib.get_user_data_dir() + "/Trash/files" - self.trash_info_path = GLib.get_user_data_dir() + "/Trash/info" + self.trash_files_path = f"{GLib.get_user_data_dir()}/Trash/files" + self.trash_info_path = f"{GLib.get_user_data_dir()}/Trash/info" # In compress commands: # %n: First selected filename/dir to archive diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/context/mixins/ui/tab_mixin.py b/src/versions/solarfm-0.0.1/SolarFM/solarfm/context/mixins/ui/tab_mixin.py index 85f8c2c..819ae43 100644 --- a/src/versions/solarfm-0.0.1/SolarFM/solarfm/context/mixins/ui/tab_mixin.py +++ b/src/versions/solarfm-0.0.1/SolarFM/solarfm/context/mixins/ui/tab_mixin.py @@ -15,9 +15,9 @@ from .widget_mixin import WidgetMixin class TabMixin(WidgetMixin): """docstring for TabMixin""" - def create_tab(self, wid=None, path=None): + def create_tab(self, wid=None, tid=None, path=None): if not wid: - wid, _tid = self.fm_controller.get_active_wid_and_tid() + wid, tid = self.fm_controller.get_active_wid_and_tid() notebook = self.builder.get_object(f"window_{wid}") path_entry = self.builder.get_object(f"path_entry") @@ -25,7 +25,12 @@ class TabMixin(WidgetMixin): tab.logger = self.logger tab.set_wid(wid) - if path: tab.set_path(path) + if not path: + if wid and tid: + _tab = self.get_fm_window(wid).get_tab_by_id(tid) + tab.set_path(_tab.get_current_directory()) + else: + tab.set_path(path) tab_widget = self.create_tab_widget(tab) scroll, store = self.create_icon_grid_widget(tab, wid) @@ -123,7 +128,7 @@ class TabMixin(WidgetMixin): if action == "create_tab": dir = tab.get_current_directory() - self.create_tab(wid, dir) + self.create_tab(wid, None, dir) self.fm_controller.save_state() return if action == "go_up": diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/context/mixins/ui/widget_mixin.py b/src/versions/solarfm-0.0.1/SolarFM/solarfm/context/mixins/ui/widget_mixin.py index 6f496f4..2fa3d0c 100644 --- a/src/versions/solarfm-0.0.1/SolarFM/solarfm/context/mixins/ui/widget_mixin.py +++ b/src/versions/solarfm-0.0.1/SolarFM/solarfm/context/mixins/ui/widget_mixin.py @@ -27,8 +27,14 @@ class WidgetMixin: dir = tab.get_current_directory() files = tab.get_files() - for i, file in enumerate(files): + # NOTE: We insure all indecies exist before calling threads that update + # icon positions. In addition, adding the name allows us to see + # the "file" during long or heavy number of icon updates. + for file in files: store.append([None, file[0]]) + + # Now we update as fast as possible the icons. + for i, file in enumerate(files): self.create_icon(i, tab, store, dir, file[0]) # NOTE: Not likely called often from here but it could be useful @@ -37,27 +43,12 @@ class WidgetMixin: @threaded def create_icon(self, i, tab, store, dir, file): - icon = tab.create_icon(dir, file) + icon = tab.create_icon(dir, file) + GLib.idle_add(self.update_store, *(i, store, icon, tab, dir, file,)) + + def update_store(self, i, store, icon, tab, dir, file): fpath = f"{dir}/{file}" - GLib.idle_add(self.update_store, (i, store, icon, tab, fpath,)) - - # NOTE: Might need to keep an eye on this throwing invalid iters when too - # many updates are happening to a folder. Example: /tmp - def update_store(self, item): - i, store, icon, tab, fpath = item - itr = None - - try: - itr = store.get_iter(i) - except Exception as e: - try: - time.sleep(0.2) - itr = store.get_iter(i) - except Exception as e: - print(":Invalid Itr detected: (Potential race condition...)") - print(f"Index Requested: {i}") - print(f"Store Size: {len(store)}") - return + itr = store.get_iter(i) if not icon: icon = self.get_system_thumbnail(fpath, tab.SYS_ICON_WH[0]) @@ -69,7 +60,6 @@ class WidgetMixin: store.set_value(itr, 0, icon) - def get_system_thumbnail(self, filename, size): try: if os.path.exists(filename): @@ -115,7 +105,7 @@ class WidgetMixin: def create_icon_grid_widget(self, tab, wid): scroll = Gtk.ScrolledWindow() grid = Gtk.IconView() - store = Gtk.ListStore(GdkPixbuf.Pixbuf or GdkPixbuf.PixbufAnimation or None, str) + store = Gtk.ListStore(GdkPixbuf.Pixbuf or GdkPixbuf.PixbufAnimation or None, str or None) grid.set_model(store) grid.set_pixbuf_column(0) @@ -157,7 +147,7 @@ class WidgetMixin: def create_icon_tree_widget(self, tab, wid): scroll = Gtk.ScrolledWindow() grid = Gtk.TreeView() - store = Gtk.TreeStore(GdkPixbuf.Pixbuf or GdkPixbuf.PixbufAnimation or None, str) + store = Gtk.TreeStore(GdkPixbuf.Pixbuf or GdkPixbuf.PixbufAnimation or None, str or None) column = Gtk.TreeViewColumn("Icons") icon = Gtk.CellRendererPixbuf() name = Gtk.CellRendererText() diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/context/mixins/ui/window_mixin.py b/src/versions/solarfm-0.0.1/SolarFM/solarfm/context/mixins/ui/window_mixin.py index 5482dd2..1ff7379 100644 --- a/src/versions/solarfm-0.0.1/SolarFM/solarfm/context/mixins/ui/window_mixin.py +++ b/src/versions/solarfm-0.0.1/SolarFM/solarfm/context/mixins/ui/window_mixin.py @@ -256,4 +256,4 @@ class WindowMixin(TabMixin): def create_new_tab_notebook(self, widget=None, wid=None, path=None): - self.create_tab(wid, path) + self.create_tab(wid, None, path)