From cbcdeaa037a986ce4277c4b2f9256bce21bc9e91 Mon Sep 17 00:00:00 2001
From: itdominator <1itdominator@gmail.com>
Date: Thu, 23 Feb 2023 23:03:29 -0600
Subject: [PATCH] WIP implimentig new files widget, updated settings, broke
keybindings
---
README.md | 2 +-
plugins/translate/plugin.py | 47 +-
plugins/vod_thumbnailer/plugin.py | 2 +-
src/debs/solarfm-0-0-1-x64/bin/solarfm | Bin 14392 -> 326 bytes
.../SolarFM/solarfm/utils/settings.py | 181 ---
.../solarfm-0.0.1/SolarFM_exec_bin.cpp | 10 -
src/versions/solarfm-0.0.1/compile_bin.sh | 6 -
.../{SolarFM => }/create-binary.sh | 0
.../{SolarFM => }/create-standalone.sh | 0
.../solarfm-0.0.1/{SolarFM => }/debugger.sh | 0
.../solarfm-0.0.1/{SolarFM => }/setup.py | 0
.../solarfm-0.0.1/{SolarFM => }/solarfm.toml | 0
.../{SolarFM => }/solarfm/__builtins__.py | 21 +-
.../{SolarFM => }/solarfm/__init__.py | 0
.../{SolarFM => }/solarfm/__main__.py | 0
.../{SolarFM => }/solarfm/app.py | 27 +-
.../{SolarFM => }/solarfm/core/__init__.py | 0
.../{SolarFM => }/solarfm/core/controller.py | 27 +-
.../solarfm/core/controller_data.py | 30 +-
.../solarfm/core/fs_actions/__init__.py | 0
.../solarfm/core/fs_actions/crud_mixin.py | 0
.../core/fs_actions/file_system_actions.py | 8 +-
.../solarfm/core/fs_actions/handler_mixin.py | 5 -
.../solarfm/core/mixins/__init__.py | 0
.../solarfm/core/mixins/signals/__init__.py | 0
.../signals/file_action_signals_mixin.py | 0
.../core/mixins/signals/ipc_signals_mixin.py | 0
.../mixins/signals/keyboard_signals_mixin.py | 5 +-
.../solarfm/core/mixins/signals_mixins.py | 0
.../solarfm/core/mixins/ui/__init__.py | 0
.../solarfm/core/mixins/ui/grid_mixin.py | 0
.../solarfm/core/mixins/ui/pane_mixin.py | 0
.../solarfm/core/mixins/ui/tab_mixin.py | 0
.../solarfm/core/mixins/ui/window_mixin.py | 16 +-
.../{SolarFM => }/solarfm/core/ui_mixin.py | 0
.../solarfm/core/widgets/__init__.py | 0
.../core/widgets/context_menu_widget.py | 2 +-
.../solarfm/core/widgets/dialogs/__init__.py | 0
.../core/widgets/dialogs/about_widget.py | 2 +-
.../core/widgets/dialogs/appchooser_widget.py | 0
.../widgets/dialogs/file_exists_widget.py | 2 +-
.../core/widgets/dialogs/message_widget.py | 0
.../core/widgets/dialogs/new_file_widget.py | 0
.../core/widgets/dialogs/rename_widget.py | 2 +-
.../core/widgets/dialogs/save_load_widget.py | 0
.../core/widgets/fm_widget/__init__.py | 3 +
.../core/widgets/fm_widget/file_view.py | 71 +
.../core/widgets/fm_widget/files_widget.py | 149 ++
.../core/widgets/fm_widget/icon_view.py | 146 ++
.../widgets/fm_widget/signals/__init__.py | 3 +
.../signals/icon_view_signals_mixin.py | 183 +++
.../solarfm/core/widgets/icon_grid_widget.py | 0
.../solarfm/core/widgets/icon_tree_widget.py | 0
.../solarfm/core/widgets/io_widget.py | 4 +-
.../solarfm/core/widgets/popups/__init__.py | 0
.../core/widgets/popups/io_popup_widget.py | 9 +-
.../widgets/popups/message_popup_widget.py | 1 -
.../widgets/popups/path_menu_popup_widget.py | 0
.../widgets/popups/plugins_popup_widget.py | 1 -
.../solarfm/core/widgets/tab_header_widget.py | 0
.../solarfm-0.0.1/solarfm/core/window.py | 95 ++
.../solarfm/factories/__init__.py | 3 +
.../solarfm/factories/split_view_widget.py | 33 +
.../{SolarFM => }/solarfm/plugins/__init__.py | 0
.../{SolarFM => }/solarfm/plugins/manifest.py | 4 +-
.../solarfm/plugins/plugin_base.py | 3 +-
.../solarfm/plugins/plugins_controller.py | 15 +-
.../{SolarFM => }/solarfm/shellfm/__init__.py | 0
.../solarfm/shellfm/windows/__init__.py | 0
.../solarfm/shellfm/windows/controller.py | 0
.../solarfm/shellfm/windows/tabs/__init__.py | 0
.../shellfm/windows/tabs/icons/__init__.py | 0
.../shellfm/windows/tabs/icons/icon.py | 0
.../windows/tabs/icons/mixins/__init__.py | 0
.../tabs/icons/mixins/desktopiconmixin.py | 0
.../tabs/icons/mixins/meshsiconmixin.py | 0
.../tabs/icons/mixins/videoiconmixin.py | 0
.../tabs/icons/mixins/xdg/BaseDirectory.py | 0
.../windows/tabs/icons/mixins/xdg/Config.py | 0
.../tabs/icons/mixins/xdg/DesktopEntry.py | 0
.../tabs/icons/mixins/xdg/Exceptions.py | 0
.../tabs/icons/mixins/xdg/IconTheme.py | 0
.../windows/tabs/icons/mixins/xdg/IniFile.py | 0
.../windows/tabs/icons/mixins/xdg/Locale.py | 0
.../windows/tabs/icons/mixins/xdg/Menu.py | 0
.../tabs/icons/mixins/xdg/MenuEditor.py | 0
.../windows/tabs/icons/mixins/xdg/Mime.py | 0
.../tabs/icons/mixins/xdg/RecentFiles.py | 0
.../windows/tabs/icons/mixins/xdg/__init__.py | 0
.../windows/tabs/icons/mixins/xdg/util.py | 0
.../solarfm/shellfm/windows/tabs/path.py | 0
.../solarfm/shellfm/windows/tabs/tab.py | 0
.../shellfm/windows/tabs/utils/__init__.py | 0
.../shellfm/windows/tabs/utils/filehandler.py | 0
.../shellfm/windows/tabs/utils/launcher.py | 0
.../shellfm/windows/tabs/utils/settings.py | 0
.../solarfm/shellfm/windows/window.py | 0
.../{SolarFM => }/solarfm/utils/__init__.py | 0
.../solarfm/utils/endpoint_registry.py | 0
.../solarfm/utils/event_system.py | 0
.../{SolarFM => }/solarfm/utils/ipc_server.py | 0
.../solarfm/utils/keybindings.py | 0
.../{SolarFM => }/solarfm/utils/logger.py | 0
.../solarfm/utils/settings/__init__.py | 4 +
.../solarfm/utils/settings/settings.py | 159 ++
.../utils/settings/start_check_mixin.py | 50 +
user_config/bin/solarfm | 17 +
user_config/usr/bin/solarfm | 17 +
.../usr/share/solarfm/Main_Window.glade | 1284 ++++++++---------
user_config/usr/share/solarfm/settings.json | 10 +-
110 files changed, 1720 insertions(+), 939 deletions(-)
delete mode 100644 src/versions/solarfm-0.0.1/SolarFM/solarfm/utils/settings.py
delete mode 100644 src/versions/solarfm-0.0.1/SolarFM_exec_bin.cpp
delete mode 100755 src/versions/solarfm-0.0.1/compile_bin.sh
rename src/versions/solarfm-0.0.1/{SolarFM => }/create-binary.sh (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/create-standalone.sh (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/debugger.sh (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/setup.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm.toml (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/__builtins__.py (67%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/__init__.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/__main__.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/app.py (51%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/__init__.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/controller.py (92%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/controller_data.py (89%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/fs_actions/__init__.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/fs_actions/crud_mixin.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/fs_actions/file_system_actions.py (94%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/fs_actions/handler_mixin.py (94%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/mixins/__init__.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/mixins/signals/__init__.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/mixins/signals/file_action_signals_mixin.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/mixins/signals/ipc_signals_mixin.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/mixins/signals/keyboard_signals_mixin.py (94%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/mixins/signals_mixins.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/mixins/ui/__init__.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/mixins/ui/grid_mixin.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/mixins/ui/pane_mixin.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/mixins/ui/tab_mixin.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/mixins/ui/window_mixin.py (95%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/ui_mixin.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/widgets/__init__.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/widgets/context_menu_widget.py (98%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/widgets/dialogs/__init__.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/widgets/dialogs/about_widget.py (97%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/widgets/dialogs/appchooser_widget.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/widgets/dialogs/file_exists_widget.py (99%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/widgets/dialogs/message_widget.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/widgets/dialogs/new_file_widget.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/widgets/dialogs/rename_widget.py (98%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/widgets/dialogs/save_load_widget.py (100%)
create mode 100644 src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/__init__.py
create mode 100644 src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/file_view.py
create mode 100644 src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/files_widget.py
create mode 100644 src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/icon_view.py
create mode 100644 src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/signals/__init__.py
create mode 100644 src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/signals/icon_view_signals_mixin.py
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/widgets/icon_grid_widget.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/widgets/icon_tree_widget.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/widgets/io_widget.py (93%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/widgets/popups/__init__.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/widgets/popups/io_popup_widget.py (78%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/widgets/popups/message_popup_widget.py (99%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/widgets/popups/path_menu_popup_widget.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/widgets/popups/plugins_popup_widget.py (98%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/core/widgets/tab_header_widget.py (100%)
create mode 100644 src/versions/solarfm-0.0.1/solarfm/core/window.py
create mode 100644 src/versions/solarfm-0.0.1/solarfm/factories/__init__.py
create mode 100644 src/versions/solarfm-0.0.1/solarfm/factories/split_view_widget.py
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/plugins/__init__.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/plugins/manifest.py (96%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/plugins/plugin_base.py (98%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/plugins/plugins_controller.py (89%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/shellfm/__init__.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/shellfm/windows/__init__.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/shellfm/windows/controller.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/shellfm/windows/tabs/__init__.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/shellfm/windows/tabs/icons/__init__.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/shellfm/windows/tabs/icons/icon.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/shellfm/windows/tabs/icons/mixins/__init__.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/shellfm/windows/tabs/icons/mixins/desktopiconmixin.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/shellfm/windows/tabs/icons/mixins/meshsiconmixin.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/shellfm/windows/tabs/icons/mixins/videoiconmixin.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/shellfm/windows/tabs/icons/mixins/xdg/BaseDirectory.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/shellfm/windows/tabs/icons/mixins/xdg/Config.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/shellfm/windows/tabs/icons/mixins/xdg/DesktopEntry.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/shellfm/windows/tabs/icons/mixins/xdg/Exceptions.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/shellfm/windows/tabs/icons/mixins/xdg/IconTheme.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/shellfm/windows/tabs/icons/mixins/xdg/IniFile.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/shellfm/windows/tabs/icons/mixins/xdg/Locale.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/shellfm/windows/tabs/icons/mixins/xdg/Menu.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/shellfm/windows/tabs/icons/mixins/xdg/MenuEditor.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/shellfm/windows/tabs/icons/mixins/xdg/Mime.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/shellfm/windows/tabs/icons/mixins/xdg/RecentFiles.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/shellfm/windows/tabs/icons/mixins/xdg/__init__.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/shellfm/windows/tabs/icons/mixins/xdg/util.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/shellfm/windows/tabs/path.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/shellfm/windows/tabs/tab.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/shellfm/windows/tabs/utils/__init__.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/shellfm/windows/tabs/utils/filehandler.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/shellfm/windows/tabs/utils/launcher.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/shellfm/windows/tabs/utils/settings.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/shellfm/windows/window.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/utils/__init__.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/utils/endpoint_registry.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/utils/event_system.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/utils/ipc_server.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/utils/keybindings.py (100%)
rename src/versions/solarfm-0.0.1/{SolarFM => }/solarfm/utils/logger.py (100%)
create mode 100644 src/versions/solarfm-0.0.1/solarfm/utils/settings/__init__.py
create mode 100644 src/versions/solarfm-0.0.1/solarfm/utils/settings/settings.py
create mode 100644 src/versions/solarfm-0.0.1/solarfm/utils/settings/start_check_mixin.py
create mode 100755 user_config/bin/solarfm
create mode 100755 user_config/usr/bin/solarfm
diff --git a/README.md b/README.md
index 5073190..610d008 100644
--- a/README.md
+++ b/README.md
@@ -9,7 +9,7 @@ Copy the share/solarfm folder to your user .config/ directory too.
Install Setup
```
-sudo apt-get install python3.8 wget python3-setproctitle python3-gi ffmpegthumbnailer steamcmd
+sudo apt-get install python3.8 python3-setproctitle python3-gi wget ffmpegthumbnailer steamcmd
```
# Known Issues
diff --git a/plugins/translate/plugin.py b/plugins/translate/plugin.py
index 84d83b5..8d12ed5 100644
--- a/plugins/translate/plugin.py
+++ b/plugins/translate/plugin.py
@@ -31,7 +31,7 @@ class Plugin(PluginBase):
# where self.name should not be needed for message comms
self._GLADE_FILE = f"{self.path}/translate.glade"
- self._link = "https://duckduckgo.com/translation.js?vqd=4-79469202070473384659389009732578528471&query=translate&to=en"
+ self._link = "https://duckduckgo.com/translation.js?"
self._headers = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:106.0) Gecko/20100101 Firefox/106.0',
'Accept': '*/*',
@@ -50,8 +50,19 @@ class Plugin(PluginBase):
'Cache-Control': 'no-cache'
}
+ self.vqd_link = "https://duckduckgo.com/"
+ self.vqd_data = {"q": "translate", "ia":"web"}
+ self.vqd_headers = {
+ 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:106.0) Gecko/20100101 Firefox/106.0',
+ "Referer": "https://duckduckgo.com/"
+ }
+
self._queue_translate = False
self._watcher_running = False
+ self._vqd_attrib = None
+ self.from_trans = "jp"
+ self.to_trans = "en"
+ self.translate_tries = 0
def generate_reference_ui_element(self):
@@ -71,6 +82,9 @@ class Plugin(PluginBase):
self._translate_to_buffer = self._builder.get_object("translate_to_buffer")
self._detected_language_lbl = self._builder.get_object("detected_language_lbl")
+ self._detected_language_lbl.set_label(f"Selected Language: {self.from_trans}")
+ self.get_vqd()
+
@threaded
def _show_translate_page(self, widget=None, eve=None):
@@ -116,20 +130,43 @@ class Plugin(PluginBase):
break
def _translate(self):
- start_itr, end_itr = self._translate_from_buffer.get_bounds()
- from_translate = self._translate_from_buffer.get_text(start_itr, end_itr, True).encode('utf-8')
+ start_itr, end_itr = self._translate_from_buffer.get_bounds()
+ from_translate = self._translate_from_buffer.get_text(start_itr, end_itr, True).encode('utf-8')
if from_translate in ("", None) or self._queue_translate:
return
- response = requests.post(self._link, headers=self._headers, data=from_translate)
+ self.translate_tries += 1
+ tlink = f"https://duckduckgo.com/translation.js?vqd={self._vqd_attrib}&query=translate&from={self.from_trans}&to={self.to_trans}"
+ response = requests.post(self.tlink, headers=self._headers, data=from_translate)
+
if response.status_code == 200:
data = response.json()
self._translate_to_buffer.set_text(data["translated"])
+ self.translate_tries = 0
if "detected_language" in data.keys():
self._detected_language_lbl.set_label(f"Detected Language: {data['detected_language']}")
+ else:
+ self._detected_language_lbl.set_label(f"Selected Language: {self.from_trans}")
+ elif response.status_code >= 400 or response.status_code < 500:
+ self.get_vqd()
+ if not self.translate_tries > 4:
+ self._translate()
else:
msg = f"Could not translate... Response Code: {response.status_code}"
self._translate_to_buffer.set_text(msg)
- self._detected_language_lbl.set_label(f"Detected Language:")
+
+
+ def get_vqd(self):
+ response = requests.post(self.vqd_link, headers=self.vqd_headers, data=self.vqd_data, timeout=10)
+ if response.status_code == 200:
+ data = response.content
+ vqd_start_index = data.index(b"vqd='") + 5
+ vqd_end_index = data.index(b"'", vqd_start_index)
+ self._vqd_attrib = data[vqd_start_index:vqd_end_index].decode("utf-8")
+
+ print(f"Translation VQD: {self._vqd_attrib}")
+ else:
+ msg = f"Could not get VQS attribute... Response Code: {response.status_code}"
+ self._translate_to_buffer.set_text(msg)
diff --git a/plugins/vod_thumbnailer/plugin.py b/plugins/vod_thumbnailer/plugin.py
index 9fd51bc..9fea674 100644
--- a/plugins/vod_thumbnailer/plugin.py
+++ b/plugins/vod_thumbnailer/plugin.py
@@ -58,7 +58,7 @@ class Plugin(PluginBase):
self._file_hash = self._builder.get_object("file_hash")
def generate_reference_ui_element(self):
- pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(f"{self.path}/../../icons/video.png", 16, 16, True)
+ pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(f"/usr/share/solarfm/icons/video.png", 16, 16, True)
icon = Gtk.Image.new_from_pixbuf(pixbuf)
item = Gtk.ImageMenuItem(self.name)
diff --git a/src/debs/solarfm-0-0-1-x64/bin/solarfm b/src/debs/solarfm-0-0-1-x64/bin/solarfm
index 01ad8f972eef2d3639866b30c019c92d0ca71211..8cca2db418e5733f204533e12ba2ac6628b0c92a 100755
GIT binary patch
literal 326
zcmY+7Jx{|h5QcaEiWjFtJCN)kBqR`s1r{Vm>NuC?L~2`S2MSgHJ9dH)+;kt$`&@O_
zwCtMJ#6hVFHEy0B?;h^!WsH?r}(BEMcjt!m~$5?X*L*!Xd>R{2@t%4xIjy^Xwh+
z$;&@-awS!2an2<7FnBk@rX2|!A=HzQv(%xT5}Z%vnNq5soK2j~d&6$M!BG{JHRJdi
zOd77X;iKCwyAFDF{Jos?yd^t$=oc?<>~^?ixq!xMol_e%1K~3bS>O1On&?L({l5O<
PkX_eWom6={_m}D$i%wxN
literal 14392
zcmeHOU2GIp6u!Gle-zqXK(tV_69Wbao&Eq#l^_F!c51*ZP##Rg?X9A(I5ZJAL%12ju^y*7Su>wl
zBW|t4XKTm;3vH#<9?y>wKW>O{LzK^Y7v;0YF;EU%bL0PHyeQ!eLv|w!!;%fw8RMD_20hM{`T40sdMYrbPtZc
zi#d24*eB+opbs||jPb_4JJHpUv}}RI9pEz-@Z%T@nzeRNH>D<{CYc`wBEwk-Sn?{Xu=>&AwpUGvZyO>H{Fi{9NPjF5`u*V}tZiBL3o==0TQg`85+W;~2
zefa9@FfD_k1(QK8ZnvbyxvF}QrWp75Y0AmK6_1~8UD7|{@z0z0mL=oJJ6*EUuJri5
z^Fs#pPBWkx&Gy|Fe&46Y=Ge8Xd5`N&Oee{P)`{lAr4MNy2jJd(mxPA1q%A(9D
zZTTGBrL|wcK3r!(3+*JvrY1@tYd=LBzv@nngNgk$UGE&d{FFWVjeYd$bhK-C(^%6b
z`@)5mr2t=X0MdW$GsAVy%luYINE@cVoMKZYE?0&fAx7xhtWEo2KfaihAe^*Xss{8%bIgbBMUBIs*`?GNzrv#&K6g6%l?Fea)a?bS7pg%>|vIU=^N+PY!W
zng`L1ec`jj!%)L|bnK{(91FHpmB(Q~w6$mkGy|Fe&46Y=GoTsJ3}^;41Db*VDFco0
z@Kp+FUYlqruUJBw*F#s4-A(x`$>#OTwPf>etyN@C(|Tq6eTKsE-)@z1Xpe;~RBA0Y
z=;MnlH07FS)DslH8x4?SN{Pj!Ye=sk&5GATPSU!`AO+-aNNDr#Qd~EQa-UM-beSbv
z?2nSob$3%9Ec%qfTD)fEHQ@-%i>e?`Ug#
z#8?NbkJlSbxaJo4Gz-asn|GZaVWzUM)OJ9a*_@j&`?G`QKt4B+$h*THSI=MyR#B(o
zbv)*<3g-lO6g`_a!!`Z@cMrk*%B8LI
z<}#T?*7ei$w{4uyI9GU{*3i7?_aXTD;f{G;vArA`IA->5Bzr~59c|Nln|AX=3
zdA&cs2Y~;>ct!sI<8eF;Z7=>5)qjdEM8lJdO+UT^e80mr!u9igVT|y6{N>b-zy5vT
zM-Ca!_l*g{zehN%5xHYLU%yX)4^tV>_o3rdDBpJ=MT(z)2fTRAGoG*WYWgD!*Vm(P
z{hY@-3o*Qhu+8@ogYbOc^4Bjrh21l-VX2Jg`&N|j-4H|J@%_jDBE%5C6O%yrK6u(U
zKH~9S>BqkcKIDY^=g$p(kA*)UAVrG*{J#QTFW#X0j}cM%eEiB%{~uzT!r~2Rd-43f
zQj`+H81x9^*!31Pymt3od`16nR{q?^?c;+LL@uP+%Q=^7d0{Qg{pFj2$p@DOhE*HU{>-?UKKc8*ZUjjDl!Sm<-G`+XP
zd5|K7ZPs6b7v~O-&!12H-V?vyg!3PTaeN-Hf)9_M@%-M!#Rkk4!jSv99phO~LCA~e
z?+ufLUpEJpEyl6_*@urzPNr|zlLHEp2v|+*kP?+`4bHE
eQTl9%@yljCs=;`#=CQr0&D3EzCsNR7ioXD*sPNwa
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/utils/settings.py b/src/versions/solarfm-0.0.1/SolarFM/solarfm/utils/settings.py
deleted file mode 100644
index 6e8d0bd..0000000
--- a/src/versions/solarfm-0.0.1/SolarFM/solarfm/utils/settings.py
+++ /dev/null
@@ -1,181 +0,0 @@
-# Python imports
-import os
-import json
-from os import path
-
-# Gtk imports
-import gi, cairo
-gi.require_version('Gtk', '3.0')
-gi.require_version('Gdk', '3.0')
-from gi.repository import Gtk
-from gi.repository import GLib
-from gi.repository import Gdk
-
-# Application imports
-from .logger import Logger
-from .keybindings import Keybindings
-
-
-
-
-class Settings:
- def __init__(self):
- self._SCRIPT_PTH = os.path.dirname(os.path.realpath(__file__))
- self._USER_HOME = path.expanduser('~')
- self._CONFIG_PATH = f"{self._USER_HOME}/.config/{app_name.lower()}"
- self._UI_WIDEGTS_PATH = f"{self._CONFIG_PATH}/ui_widgets"
- self._PLUGINS_PATH = f"{self._CONFIG_PATH}/plugins"
- self._USR_SOLARFM = f"/usr/share/{app_name.lower()}"
-
- self._CSS_FILE = f"{self._CONFIG_PATH}/stylesheet.css"
- self._GLADE_FILE = f"{self._CONFIG_PATH}/Main_Window.glade"
- self._KEY_BINDINGS = f"{self._CONFIG_PATH}/key-bindings.json"
- self._DEFAULT_ICONS = f"{self._CONFIG_PATH}/icons"
- self._WINDOW_ICON = f"{self._DEFAULT_ICONS}/{app_name.lower()}.png"
- self._CONTEXT_MENU = f"{self._CONFIG_PATH}/contexct_menu.json"
- self._PID_FILE = f"{self._CONFIG_PATH}/{app_name.lower()}.pid"
- self._ICON_THEME = Gtk.IconTheme.get_default()
- self._TRASH_FILES_PATH = f"{GLib.get_user_data_dir()}/Trash/files"
- self._TRASH_INFO_PATH = f"{GLib.get_user_data_dir()}/Trash/info"
-
- if not os.path.exists(self._CONFIG_PATH):
- os.mkdir(self._CONFIG_PATH)
- if not os.path.exists(self._PLUGINS_PATH):
- os.mkdir(self._PLUGINS_PATH)
-
- if not os.path.exists(self._GLADE_FILE):
- self._GLADE_FILE = f"{self._USR_SOLARFM}/Main_Window.glade"
- if not os.path.exists(self._CONTEXT_MENU):
- self._CONTEXT_MENU = f"{self._USR_SOLARFM}/contexct_menu.json"
- if not os.path.exists(self._KEY_BINDINGS):
- self._KEY_BINDINGS = f"{self._USR_SOLARFM}/key-bindings.json"
- if not os.path.exists(self._CSS_FILE):
- self._CSS_FILE = f"{self._USR_SOLARFM}/stylesheet.css"
- if not os.path.exists(self._WINDOW_ICON):
- self._WINDOW_ICON = f"{self._USR_SOLARFM}/icons/{app_name.lower()}.png"
- if not os.path.exists(self._DEFAULT_ICONS):
- self._DEFAULT_ICONS = f"{self._USR_SOLARFM}/icons"
-
- self._success_color = "#88cc27"
- self._warning_color = "#ffa800"
- self._error_color = "#ff0000"
-
- self._keybindings = Keybindings()
- with open(self._KEY_BINDINGS) as file:
- keybindings = json.load(file)["keybindings"]
- self._keybindings.configure(keybindings)
-
- with open(self._CONTEXT_MENU) as file:
- self._context_menu_data = json.load(file)
-
- self._main_window = None
- self._logger = Logger(self._CONFIG_PATH, _fh_log_lvl=20).get_logger()
- self._builder = Gtk.Builder()
- self._builder.add_from_file(self._GLADE_FILE)
-
- self._trace_debug = False
- self._debug = False
- self._dirty_start = False
-
-
- def do_dirty_start_check(self):
- if not os.path.exists(self._PID_FILE):
- self._write_new_pid()
- else:
- with open(self._PID_FILE, "r") as _pid:
- pid = _pid.readline().strip()
- if pid not in ("", None):
- self._check_alive_status(int(pid))
- else:
- self._write_new_pid()
-
- """ Check For the existence of a unix pid. """
- def _check_alive_status(self, pid):
- print(f"PID Found: {pid}")
- try:
- os.kill(pid, 0)
- except OSError:
- print(f"{app_name} is starting dirty...")
- self._dirty_start = True
- self._write_new_pid()
- return
-
- print("PID is alive... Let downstream errors (sans debug args) handle app closure propigation.")
-
- def _write_new_pid(self):
- pid = os.getpid()
- self._write_pid(pid)
-
- def _clean_pid(self):
- os.unlink(self._PID_FILE)
-
- def _write_pid(self, pid):
- with open(self._PID_FILE, "w") as _pid:
- _pid.write(f"{pid}")
-
-
- def create_window(self) -> None:
- # Get window and connect signals
- self._main_window = self._builder.get_object("main_window")
- self._set_window_data()
-
- def _set_window_data(self) -> None:
- self._main_window.set_icon_from_file(self._WINDOW_ICON)
- screen = self._main_window.get_screen()
- visual = screen.get_rgba_visual()
-
- if visual != None and screen.is_composited():
- self._main_window.set_visual(visual)
- self._main_window.set_app_paintable(True)
- self._main_window.connect("draw", self._area_draw)
-
- # bind css file
- cssProvider = Gtk.CssProvider()
- cssProvider.load_from_path(self._CSS_FILE)
- screen = Gdk.Screen.get_default()
- styleContext = Gtk.StyleContext()
- styleContext.add_provider_for_screen(screen, cssProvider, Gtk.STYLE_PROVIDER_PRIORITY_USER)
-
- def _area_draw(self, widget: Gtk.ApplicationWindow, cr: cairo.Context) -> None:
- cr.set_source_rgba(0, 0, 0, 0.54)
- cr.set_operator(cairo.OPERATOR_SOURCE)
- cr.paint()
- cr.set_operator(cairo.OPERATOR_OVER)
-
- def get_monitor_data(self) -> list:
- screen = self._builder.get_object("main_window").get_screen()
- monitors = []
- for m in range(screen.get_n_monitors()):
- monitors.append(screen.get_monitor_geometry(m))
- print("{}x{}+{}+{}".format(monitor.width, monitor.height, monitor.x, monitor.y))
-
- return monitors
-
-
- def get_main_window(self) -> Gtk.ApplicationWindow: return self._main_window
- def get_builder(self) -> Gtk.Builder: return self._builder
- def get_context_menu_data(self) -> str: return self._context_menu_data
- def get_ui_widgets_path(self) -> str: return self._UI_WIDEGTS_PATH
- def get_trash_files_path(self) -> str: return self._TRASH_FILES_PATH
- def get_trash_info_path(self) -> str: return self._TRASH_INFO_PATH
- def get_plugins_path(self) -> str: return self._PLUGINS_PATH
-
- def get_logger(self) -> Logger: return self._logger
- def get_keybindings(self) -> Keybindings: return self._keybindings
- def get_icon_theme(self) -> str: return self._ICON_THEME
-
- def get_success_color(self) -> str: return self._success_color
- def get_warning_color(self) -> str: return self._warning_color
- def get_error_color(self) -> str: return self._error_color
-
- def is_trace_debug(self) -> bool: return self._trace_debug
- def is_debug(self) -> bool: return self._debug
- def is_dirty_start(self) -> bool: return self._dirty_start
- def clear_pid(self): self._clean_pid()
-
-
- def set_trace_debug(self, trace_debug: bool):
- self._trace_debug = trace_debug
-
- def set_debug(self, debug: bool):
- self._debug = debug
diff --git a/src/versions/solarfm-0.0.1/SolarFM_exec_bin.cpp b/src/versions/solarfm-0.0.1/SolarFM_exec_bin.cpp
deleted file mode 100644
index 9dc7c0b..0000000
--- a/src/versions/solarfm-0.0.1/SolarFM_exec_bin.cpp
+++ /dev/null
@@ -1,10 +0,0 @@
-#include
-#include
-#include
-using namespace std;
-
-int main() {
- chdir("/opt/");
- system("python solarfm.zip");
-return 0;
-}
diff --git a/src/versions/solarfm-0.0.1/compile_bin.sh b/src/versions/solarfm-0.0.1/compile_bin.sh
deleted file mode 100755
index c6efca6..0000000
--- a/src/versions/solarfm-0.0.1/compile_bin.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/bash
-
-function main() {
- gcc -no-pie -s SolarFM_exec_bin.cpp -o solarfm
-}
-main;
diff --git a/src/versions/solarfm-0.0.1/SolarFM/create-binary.sh b/src/versions/solarfm-0.0.1/create-binary.sh
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/create-binary.sh
rename to src/versions/solarfm-0.0.1/create-binary.sh
diff --git a/src/versions/solarfm-0.0.1/SolarFM/create-standalone.sh b/src/versions/solarfm-0.0.1/create-standalone.sh
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/create-standalone.sh
rename to src/versions/solarfm-0.0.1/create-standalone.sh
diff --git a/src/versions/solarfm-0.0.1/SolarFM/debugger.sh b/src/versions/solarfm-0.0.1/debugger.sh
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/debugger.sh
rename to src/versions/solarfm-0.0.1/debugger.sh
diff --git a/src/versions/solarfm-0.0.1/SolarFM/setup.py b/src/versions/solarfm-0.0.1/setup.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/setup.py
rename to src/versions/solarfm-0.0.1/setup.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm.toml b/src/versions/solarfm-0.0.1/solarfm.toml
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm.toml
rename to src/versions/solarfm-0.0.1/solarfm.toml
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/__builtins__.py b/src/versions/solarfm-0.0.1/solarfm/__builtins__.py
similarity index 67%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/__builtins__.py
rename to src/versions/solarfm-0.0.1/solarfm/__builtins__.py
index 797381c..82d031d 100644
--- a/src/versions/solarfm-0.0.1/SolarFM/solarfm/__builtins__.py
+++ b/src/versions/solarfm-0.0.1/solarfm/__builtins__.py
@@ -1,12 +1,15 @@
# Python imports
import builtins
import threading
+import sys
# Lib imports
# Application imports
from utils.event_system import EventSystem
from utils.endpoint_registry import EndpointRegistry
+from utils.keybindings import Keybindings
+from utils.logger import Logger
from utils.settings import Settings
@@ -35,12 +38,26 @@ def sizeof_fmt_def(num, suffix="B"):
# NOTE: Just reminding myself we can add to builtins two different ways...
# __builtins__.update({"event_system": Builtins()})
builtins.app_name = "SolarFM"
-builtins.settings = Settings()
-builtins.logger = settings.get_logger()
+builtins.keybindings = Keybindings()
builtins.event_system = EventSystem()
builtins.endpoint_registry = EndpointRegistry()
+builtins.settings = Settings()
+builtins.logger = Logger(settings.get_home_config_path(), \
+ _ch_log_lvl=settings.get_ch_log_lvl(), \
+ _fh_log_lvl=settings.get_fh_log_lvl()).get_logger()
builtins.threaded = threaded_wrapper
builtins.daemon_threaded = daemon_threaded_wrapper
builtins.sizeof_fmt = sizeof_fmt_def
builtins.event_sleep_time = 0.05
+
+
+def custom_except_hook(exc_type, exc_value, exc_traceback):
+ if issubclass(exc_type, KeyboardInterrupt):
+ sys.__excepthook__(exc_type, exc_value, exc_traceback)
+ return
+
+ logger.error("Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback))
+
+
+sys.excepthook = custom_except_hook
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/__init__.py b/src/versions/solarfm-0.0.1/solarfm/__init__.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/__init__.py
rename to src/versions/solarfm-0.0.1/solarfm/__init__.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/__main__.py b/src/versions/solarfm-0.0.1/solarfm/__main__.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/__main__.py
rename to src/versions/solarfm-0.0.1/solarfm/__main__.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/app.py b/src/versions/solarfm-0.0.1/solarfm/app.py
similarity index 51%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/app.py
rename to src/versions/solarfm-0.0.1/solarfm/app.py
index 19eb2c6..1ae5858 100644
--- a/src/versions/solarfm-0.0.1/SolarFM/solarfm/app.py
+++ b/src/versions/solarfm-0.0.1/solarfm/app.py
@@ -7,14 +7,12 @@ import inspect
# Application imports
from utils.ipc_server import IPCServer
-from core.controller import Controller
+from core.window import Window
class AppLaunchException(Exception):
...
-class ControllerStartException(Exception):
- ...
class Application(IPCServer):
@@ -38,25 +36,4 @@ class Application(IPCServer):
raise AppLaunchException(f"{app_name} IPC Server Exists: Will send path(s) to it and close...")
-
- settings.create_window()
- self._load_controller_and_builder()
-
- def _load_controller_and_builder(self):
- controller = Controller(self.args, self.unknownargs)
- if not controller:
- raise ControllerStartException("Controller exited and doesn't exist...")
-
- # Gets the methods from the classes and sets to handler.
- # Then, builder connects to any signals it needs.
- classes = [controller]
- handlers = {}
- for c in classes:
- methods = None
- try:
- methods = inspect.getmembers(c, predicate=inspect.ismethod)
- handlers.update(methods)
- except AppLaunchException as e:
- print(repr(e))
-
- settings.get_builder().connect_signals(handlers)
+ Window(args, unknownargs)
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/__init__.py b/src/versions/solarfm-0.0.1/solarfm/core/__init__.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/__init__.py
rename to src/versions/solarfm-0.0.1/solarfm/core/__init__.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/controller.py b/src/versions/solarfm-0.0.1/solarfm/core/controller.py
similarity index 92%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/controller.py
rename to src/versions/solarfm-0.0.1/solarfm/core/controller.py
index 4439a26..869af17 100644
--- a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/controller.py
+++ b/src/versions/solarfm-0.0.1/solarfm/core/controller.py
@@ -37,12 +37,13 @@ class Controller(UIMixin, SignalsMixins, Controller_Data):
""" Controller coordinates the mixins and is somewhat the root hub of it all. """
def __init__(self, args, unknownargs):
+ self.setup_controller_data()
+
self._setup_styling()
self._setup_signals()
self._subscribe_to_events()
self._load_widgets()
- self.setup_controller_data()
self.generate_windows(self.fm_controller_data)
if args.no_plugins == "false":
@@ -69,6 +70,20 @@ class Controller(UIMixin, SignalsMixins, Controller_Data):
event_system.subscribe("do_action_from_menu_controls", self.do_action_from_menu_controls)
event_system.subscribe("set_clipboard_data", self.set_clipboard_data)
+ def _load_glade_file(self):
+ self.builder = Gtk.Builder()
+ self.builder.add_from_file(settings.get_glade_file())
+ self.builder.expose_object("main_window", self.window)
+
+ self.core_widget = self.builder.get_object("core_widget")
+
+ settings.set_builder(self.builder)
+ settings.register_signals_to_builder([self,])
+
+ def get_core_widget(self):
+ return self.core_widget
+
+
# NOTE: Really we will move these to the UI/(New) Window 'base' controller
# after we're done cleaning and refactoring to use fewer mixins.
def _load_widgets(self):
@@ -87,14 +102,6 @@ class Controller(UIMixin, SignalsMixins, Controller_Data):
self.message_dialog = MessageWidget()
- def tear_down(self, widget=None, eve=None):
- if not settings.is_trace_debug():
- self.fm_controller.save_state()
-
- settings.clear_pid()
- time.sleep(event_sleep_time)
- Gtk.main_quit()
-
def reload_plugins(self, widget=None, eve=None):
self.plugins.reload_plugins()
@@ -143,6 +150,8 @@ class Controller(UIMixin, SignalsMixins, Controller_Data):
event_system.emit("show_plugins_popup")
if action == "messages_popup":
event_system.emit("show_messages_popup")
+ if action == "tear_down":
+ event_system.emit("tear_down")
@endpoint_registry.register(rule="go_home")
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/controller_data.py b/src/versions/solarfm-0.0.1/solarfm/core/controller_data.py
similarity index 89%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/controller_data.py
rename to src/versions/solarfm-0.0.1/solarfm/core/controller_data.py
index e3f8886..4e70ae8 100644
--- a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/controller_data.py
+++ b/src/versions/solarfm-0.0.1/solarfm/core/controller_data.py
@@ -1,7 +1,6 @@
# Python imports
import sys
import os
-import signal
import subprocess
from dataclasses import dataclass
@@ -9,12 +8,13 @@ from dataclasses import dataclass
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
-from gi.repository import GLib
# Application imports
from shellfm.windows.controller import WindowController
from plugins.plugins_controller import PluginsController
+# from factories.split_view_widget import SplitViewWidget
+
@@ -40,14 +40,21 @@ class Controller_Data:
__slots__ = "settings", "builder", "logger", "keybindings", "trashman", "fm_controller", "window", "window1", "window2", "window3", "window4"
def setup_controller_data(self) -> None:
- self.builder = settings.get_builder()
- self.keybindings = settings.get_keybindings()
+ self.window = settings.get_main_window()
+ self.builder = None
+ self.core_widget = None
+ self._load_glade_file()
self.fm_controller = WindowController()
self.plugins = PluginsController()
self.fm_controller_data = self.fm_controller.get_state_from_file()
- self.window = settings.get_main_window()
+
+ # self.pane_master = self.builder.get_object("pane_master")
+ # self.pane_master.pack1(SplitViewWidget(), True, True)
+ # self.pane_master.pack2(SplitViewWidget(), True, True)
+
+
self.window1 = self.builder.get_object("window_1")
self.window2 = self.builder.get_object("window_2")
self.window3 = self.builder.get_object("window_3")
@@ -77,14 +84,19 @@ class Controller_Data:
self.alt_down = False
# sys.excepthook = self.custom_except_hook
- self.window.connect("delete-event", self.tear_down)
- GLib.unix_signal_add(GLib.PRIORITY_DEFAULT, signal.SIGINT, self.tear_down)
-
- self.window.show()
if settings.is_debug():
self.window.set_interactive_debugging(True)
+ def custom_except_hook(self, exc_type, exc_value, exc_traceback):
+ if issubclass(exc_type, KeyboardInterrupt):
+ sys.__excepthook__(exc_type, exc_value, exc_traceback)
+ return
+
+ logger.error("Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback))
+
+
+
def get_current_state(self) -> State:
'''
Returns the state info most useful for any given context and action intent.
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/fs_actions/__init__.py b/src/versions/solarfm-0.0.1/solarfm/core/fs_actions/__init__.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/fs_actions/__init__.py
rename to src/versions/solarfm-0.0.1/solarfm/core/fs_actions/__init__.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/fs_actions/crud_mixin.py b/src/versions/solarfm-0.0.1/solarfm/core/fs_actions/crud_mixin.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/fs_actions/crud_mixin.py
rename to src/versions/solarfm-0.0.1/solarfm/core/fs_actions/crud_mixin.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/fs_actions/file_system_actions.py b/src/versions/solarfm-0.0.1/solarfm/core/fs_actions/file_system_actions.py
similarity index 94%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/fs_actions/file_system_actions.py
rename to src/versions/solarfm-0.0.1/solarfm/core/fs_actions/file_system_actions.py
index 71b327c..79db4b6 100644
--- a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/fs_actions/file_system_actions.py
+++ b/src/versions/solarfm-0.0.1/solarfm/core/fs_actions/file_system_actions.py
@@ -88,7 +88,13 @@ class FileSystemActions(HandlerMixin, CRUDMixin):
def open_with_files(self, app_info):
state = event_system.emit_and_await("get_current_state")
- state.tab.app_chooser_exec(app_info, state.uris_raw)
+ uris = state.uris_raw
+
+ if not state.uris_raw:
+ uris = [f"file://{state.tab.get_current_directory()}"]
+
+ state.tab.app_chooser_exec(app_info, uris)
+
def execute_files(self, in_terminal=False):
state = event_system.emit_and_await("get_current_state")
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/fs_actions/handler_mixin.py b/src/versions/solarfm-0.0.1/solarfm/core/fs_actions/handler_mixin.py
similarity index 94%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/fs_actions/handler_mixin.py
rename to src/versions/solarfm-0.0.1/solarfm/core/fs_actions/handler_mixin.py
index 3c06a32..b9bb236 100644
--- a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/fs_actions/handler_mixin.py
+++ b/src/versions/solarfm-0.0.1/solarfm/core/fs_actions/handler_mixin.py
@@ -70,9 +70,6 @@ class HandlerMixin:
type = _file.query_file_type(flags=Gio.FileQueryInfoFlags.NONE)
if type == Gio.FileType.DIRECTORY:
- # wid, tid = self.fm_controller.get_active_wid_and_tid()
- # tab = self.get_fm_window(wid).get_tab_by_id(tid)
- # tab.delete_file( _file.get_path() )
state = event_system.emit_and_await("get_current_state")
state.tab.delete_file( _file.get_path() )
else:
@@ -98,8 +95,6 @@ class HandlerMixin:
type = file.query_file_type(flags=Gio.FileQueryInfoFlags.NONE)
if type == Gio.FileType.DIRECTORY:
- # wid, tid = self.fm_controller.get_active_wid_and_tid()
- # tab = self.get_fm_window(wid).get_tab_by_id(tid)
state = event_system.emit_and_await("get_current_state")
tab = state.tab
fPath = file.get_path()
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/mixins/__init__.py b/src/versions/solarfm-0.0.1/solarfm/core/mixins/__init__.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/mixins/__init__.py
rename to src/versions/solarfm-0.0.1/solarfm/core/mixins/__init__.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/mixins/signals/__init__.py b/src/versions/solarfm-0.0.1/solarfm/core/mixins/signals/__init__.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/mixins/signals/__init__.py
rename to src/versions/solarfm-0.0.1/solarfm/core/mixins/signals/__init__.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/mixins/signals/file_action_signals_mixin.py b/src/versions/solarfm-0.0.1/solarfm/core/mixins/signals/file_action_signals_mixin.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/mixins/signals/file_action_signals_mixin.py
rename to src/versions/solarfm-0.0.1/solarfm/core/mixins/signals/file_action_signals_mixin.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/mixins/signals/ipc_signals_mixin.py b/src/versions/solarfm-0.0.1/solarfm/core/mixins/signals/ipc_signals_mixin.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/mixins/signals/ipc_signals_mixin.py
rename to src/versions/solarfm-0.0.1/solarfm/core/mixins/signals/ipc_signals_mixin.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/mixins/signals/keyboard_signals_mixin.py b/src/versions/solarfm-0.0.1/solarfm/core/mixins/signals/keyboard_signals_mixin.py
similarity index 94%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/mixins/signals/keyboard_signals_mixin.py
rename to src/versions/solarfm-0.0.1/solarfm/core/mixins/signals/keyboard_signals_mixin.py
index 50029a0..62508ab 100644
--- a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/mixins/signals/keyboard_signals_mixin.py
+++ b/src/versions/solarfm-0.0.1/solarfm/core/mixins/signals/keyboard_signals_mixin.py
@@ -46,7 +46,7 @@ class KeyboardSignalsMixin:
if "alt" in keyname:
self.alt_down = False
- mapping = self.keybindings.lookup(event)
+ mapping = keybindings.lookup(event)
if mapping:
# See if in filemanager scope
try:
@@ -62,8 +62,7 @@ class KeyboardSignalsMixin:
self.handle_plugin_key_event(sender, eve_type)
else:
- if settings.is_debug():
- print(f"on_global_key_release_controller > key > {keyname}")
+ logger.debug(f"on_global_key_release_controller > key > {keyname}")
if self.ctrl_down:
if keyname in ["1", "kp_1", "2", "kp_2", "3", "kp_3", "4", "kp_4"]:
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/mixins/signals_mixins.py b/src/versions/solarfm-0.0.1/solarfm/core/mixins/signals_mixins.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/mixins/signals_mixins.py
rename to src/versions/solarfm-0.0.1/solarfm/core/mixins/signals_mixins.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/mixins/ui/__init__.py b/src/versions/solarfm-0.0.1/solarfm/core/mixins/ui/__init__.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/mixins/ui/__init__.py
rename to src/versions/solarfm-0.0.1/solarfm/core/mixins/ui/__init__.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/mixins/ui/grid_mixin.py b/src/versions/solarfm-0.0.1/solarfm/core/mixins/ui/grid_mixin.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/mixins/ui/grid_mixin.py
rename to src/versions/solarfm-0.0.1/solarfm/core/mixins/ui/grid_mixin.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/mixins/ui/pane_mixin.py b/src/versions/solarfm-0.0.1/solarfm/core/mixins/ui/pane_mixin.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/mixins/ui/pane_mixin.py
rename to src/versions/solarfm-0.0.1/solarfm/core/mixins/ui/pane_mixin.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/mixins/ui/tab_mixin.py b/src/versions/solarfm-0.0.1/solarfm/core/mixins/ui/tab_mixin.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/mixins/ui/tab_mixin.py
rename to src/versions/solarfm-0.0.1/solarfm/core/mixins/ui/tab_mixin.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/mixins/ui/window_mixin.py b/src/versions/solarfm-0.0.1/solarfm/core/mixins/ui/window_mixin.py
similarity index 95%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/mixins/ui/window_mixin.py
rename to src/versions/solarfm-0.0.1/solarfm/core/mixins/ui/window_mixin.py
index 8f0e4e5..0121f7f 100644
--- a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/mixins/ui/window_mixin.py
+++ b/src/versions/solarfm-0.0.1/solarfm/core/mixins/ui/window_mixin.py
@@ -23,6 +23,12 @@ class WindowMixin(TabMixin):
"""docstring for WindowMixin"""
def generate_windows(self, session_json = None):
+ # for session in session_json:
+ # nickname = session["window"]["Nickname"]
+ # tabs = session["window"]["tabs"]
+ # isHidden = True if session["window"]["isHidden"] == "True" else False
+ # event_system.emit("load-window-state", (nickname, tabs))
+
if session_json:
for j, value in enumerate(session_json):
i = j + 1
@@ -54,8 +60,8 @@ class WindowMixin(TabMixin):
icon_grid.event(Gdk.Event().new(type=Gdk.EventType.BUTTON_RELEASE))
icon_grid.event(Gdk.Event().new(type=Gdk.EventType.BUTTON_RELEASE))
except WindowException as e:
- print("\n: The saved session might be missing window data! :\nLocation: ~/.config/solarfm/session.json\nFix: Back it up and delete it to reset.\n")
- print(repr(e))
+ logger.info("\n: The saved session might be missing window data! :\nLocation: ~/.config/solarfm/session.json\nFix: Back it up and delete it to reset.\n")
+ logger.debug(repr(e))
else:
for j in range(0, 4):
i = j + 1
@@ -115,9 +121,7 @@ class WindowMixin(TabMixin):
file_size = file_info.get_size()
combined_size += file_size
except WindowException as e:
- if settings.is_debug():
- print(repr(e))
-
+ logger.debug(repr(e))
formatted_size = sizeof_fmt(combined_size)
if tab.is_hiding_hidden():
@@ -204,7 +208,7 @@ class WindowMixin(TabMixin):
event_system.emit("show_context_menu")
except WindowException as e:
- print(repr(e))
+ logger.info(repr(e))
self.display_message(settings.get_error_color(), f"{repr(e)}")
def grid_icon_double_click(self, icons_grid, item, data=None):
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/ui_mixin.py b/src/versions/solarfm-0.0.1/solarfm/core/ui_mixin.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/ui_mixin.py
rename to src/versions/solarfm-0.0.1/solarfm/core/ui_mixin.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/__init__.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/__init__.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/__init__.py
rename to src/versions/solarfm-0.0.1/solarfm/core/widgets/__init__.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/context_menu_widget.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/context_menu_widget.py
similarity index 98%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/context_menu_widget.py
rename to src/versions/solarfm-0.0.1/solarfm/core/widgets/context_menu_widget.py
index 358961c..0d47e76 100644
--- a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/context_menu_widget.py
+++ b/src/versions/solarfm-0.0.1/solarfm/core/widgets/context_menu_widget.py
@@ -41,7 +41,7 @@ class ContextMenuWidget(Gtk.Menu):
methods = inspect.getmembers(c, predicate=inspect.ismethod)
handlers.update(methods)
except Exception as e:
- print(repr(e))
+ logger.debug(repr(e))
self._builder.connect_signals(handlers)
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/dialogs/__init__.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/__init__.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/dialogs/__init__.py
rename to src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/__init__.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/dialogs/about_widget.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/about_widget.py
similarity index 97%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/dialogs/about_widget.py
rename to src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/about_widget.py
index b633623..5997a6f 100644
--- a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/dialogs/about_widget.py
+++ b/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/about_widget.py
@@ -45,7 +45,7 @@ class AboutWidget:
methods = inspect.getmembers(c, predicate=inspect.ismethod)
handlers.update(methods)
except Exception as e:
- print(repr(e))
+ logger.debug(repr(e))
self._builder.connect_signals(handlers)
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/dialogs/appchooser_widget.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/appchooser_widget.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/dialogs/appchooser_widget.py
rename to src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/appchooser_widget.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/dialogs/file_exists_widget.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/file_exists_widget.py
similarity index 99%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/dialogs/file_exists_widget.py
rename to src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/file_exists_widget.py
index 2b79c9a..5c8abce 100644
--- a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/dialogs/file_exists_widget.py
+++ b/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/file_exists_widget.py
@@ -59,7 +59,7 @@ class FileExistsWidget:
methods = inspect.getmembers(c, predicate=inspect.ismethod)
handlers.update(methods)
except Exception as e:
- print(repr(e))
+ logger.debug(repr(e))
self._builder.connect_signals(handlers)
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/dialogs/message_widget.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/message_widget.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/dialogs/message_widget.py
rename to src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/message_widget.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/dialogs/new_file_widget.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/new_file_widget.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/dialogs/new_file_widget.py
rename to src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/new_file_widget.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/dialogs/rename_widget.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/rename_widget.py
similarity index 98%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/dialogs/rename_widget.py
rename to src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/rename_widget.py
index 567a438..2347fa9 100644
--- a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/dialogs/rename_widget.py
+++ b/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/rename_widget.py
@@ -51,7 +51,7 @@ class RenameWidget:
methods = inspect.getmembers(c, predicate=inspect.ismethod)
handlers.update(methods)
except Exception as e:
- print(repr(e))
+ logger.debug(repr(e))
self._builder.connect_signals(handlers)
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/dialogs/save_load_widget.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/save_load_widget.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/dialogs/save_load_widget.py
rename to src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/save_load_widget.py
diff --git a/src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/__init__.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/__init__.py
new file mode 100644
index 0000000..06e9c95
--- /dev/null
+++ b/src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/__init__.py
@@ -0,0 +1,3 @@
+"""
+ FileView module
+"""
diff --git a/src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/file_view.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/file_view.py
new file mode 100644
index 0000000..5fd9931
--- /dev/null
+++ b/src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/file_view.py
@@ -0,0 +1,71 @@
+# Python imports
+
+# Lib imports
+import gi
+gi.require_version('Gtk', '3.0')
+from gi.repository import Gtk
+
+# Application imports
+from shellfm.windows.tabs.tab import Tab
+from .icon_view import IconView
+
+
+
+
+class FileView(Gtk.ScrolledWindow):
+ """docstring for FileView."""
+
+ def __init__(self):
+ super(FileView, self).__init__()
+ self.tab_state = Tab()
+ self.icon_view = IconView(self.tab_state)
+ self.tab_widget = self.create_tab_widget()
+
+ self._setup_styling()
+ self._setup_signals()
+
+ self.add(self.icon_view)
+ self.show_all()
+
+
+ def _setup_styling(self):
+ self.set_hexpand(True)
+ self.set_vexpand(True)
+
+ def _setup_signals(self):
+ # self.connect("update-tab-title", self._update_tab_title)
+ ...
+
+ def _update_tab_title(self, widget=None, eve=None):
+ label = self.tab_widget.get_children()[0]
+ label.set_label(f"{self.tab_state.get_end_of_path()}")
+ label.set_width_chars( len(self.tab_state.get_end_of_path()) )
+
+ def set_path(self, path):
+ if path:
+ self.tab_state.set_path(path)
+ self.icon_view.load_store()
+ self._update_tab_title()
+
+ def create_tab_widget(self):
+ button_box = Gtk.ButtonBox()
+ label = Gtk.Label()
+ close = Gtk.Button()
+ icon = Gtk.Image(stock=Gtk.STOCK_CLOSE)
+
+ label.set_label(f"{self.tab_state.get_end_of_path()}")
+ label.set_width_chars(len(self.tab_state.get_end_of_path()))
+ label.set_xalign(0.0)
+
+ close.add(icon)
+ button_box.add(label)
+ button_box.add(close)
+
+ close.connect("released", self.close_tab)
+
+ button_box.show_all()
+ return button_box
+
+
+ def close_tab(self, widget, eve=None):
+ self.get_parent().emit('close-view', (self,))
diff --git a/src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/files_widget.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/files_widget.py
new file mode 100644
index 0000000..0073177
--- /dev/null
+++ b/src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/files_widget.py
@@ -0,0 +1,149 @@
+# Python imports
+
+# Lib imports
+import gi
+gi.require_version('Gtk', '3.0')
+from gi.repository import Gtk
+
+# Application imports
+from .file_view import FileView
+
+
+
+
+class FilesWidget(Gtk.Notebook):
+ """docstring for FilesWidget."""
+
+ ccount = 0
+
+ def __new__(cls, *args, **kwargs):
+ obj = super(FilesWidget, cls).__new__(cls)
+ cls.ccount += 1
+
+ return obj
+
+ def __init__(self):
+ super(FilesWidget, self).__init__()
+
+ self.set_group_name("file_window")
+
+ self.NAME = f"window_{self.ccount}"
+ builder = settings.get_builder()
+ builder.expose_object(self.NAME, self)
+
+ self._add_action_widgets()
+ self._setup_styling()
+ self._setup_signals()
+
+ self.show_all()
+
+
+ def _setup_styling(self):
+ self.set_scrollable(True)
+ self.set_show_tabs(True)
+ self.set_show_border(False)
+ self.set_hexpand(True)
+
+ self.set_margin_top(5)
+ self.set_margin_bottom(5)
+ self.set_margin_start(5)
+ self.set_margin_end(5)
+
+ def _setup_signals(self):
+ # self.connect("close-view", self.close_view)
+ event_system.subscribe("load-window-state", self.load_window_state)
+
+ def _add_action_widgets(self):
+ start_box = Gtk.Box()
+ end_box = Gtk.Box()
+
+ search = Gtk.SearchEntry()
+ search.set_placeholder_text("Search...")
+ search.connect("changed", self._do_query)
+
+ home_btn = Gtk.Button()
+ home_btn.set_image( Gtk.Image.new_from_icon_name("gtk-home", 4) )
+ home_btn.set_always_show_image(True)
+ home_btn.connect("released", self.do_action, ("go_home_dir"))
+
+ up_btn = Gtk.Button()
+ up_btn.set_image( Gtk.Image.new_from_icon_name("up", 4) )
+ up_btn.set_always_show_image(True)
+ up_btn.connect("released", self.do_action, ("go_up_dir"))
+
+ refresh_btn = Gtk.Button()
+ refresh_btn.set_image( Gtk.Image.new_from_icon_name("gtk-refresh", 4) )
+ refresh_btn.set_always_show_image(True)
+ refresh_btn.connect("released", self.do_action, ("refresh_dir"))
+
+ add_btn = Gtk.Button()
+ add_btn.set_image( Gtk.Image.new_from_icon_name("add", 4) )
+ add_btn.set_always_show_image(True)
+ add_btn.connect("released", self.create_view)
+
+ start_box.add(home_btn)
+ start_box.add(add_btn)
+ end_box.add(search)
+ end_box.add(up_btn)
+ end_box.add(refresh_btn)
+
+ start_box.show_all()
+ end_box.show_all()
+
+ # PACKTYPE: 0 Start, 1 = End
+ self.set_action_widget(start_box, 0)
+ self.set_action_widget(end_box, 1)
+
+ def _do_query(self, widget):
+ text = widget.get_text()
+ page = self.get_nth_page( self.get_current_page() )
+ page.icon_view.search_filter(text)
+
+
+ def load_window_state(self, win_name=None, tabs=None):
+ if win_name == self.NAME:
+ if len(tabs) > 0:
+ for tab in tabs:
+ self.create_view()
+ self.load_tab(tab)
+ else:
+ self.create_view()
+
+ def create_view(self, widget = None):
+ file_view = FileView()
+ index = self.append_page(file_view, file_view.tab_widget)
+ self.set_current_page(index)
+
+ return file_view
+
+ def load_tab(self, path = None):
+ if path:
+ file_view = self.get_nth_page( self.get_current_page() )
+ file_view.set_path(path)
+
+
+ def do_action(self, widget = None, action = None):
+ file_view = self.get_nth_page( self.get_current_page() )
+
+ if action == "refresh_dir":
+ file_view.icon_view.refresh_dir()
+
+ if action == "go_up_dir":
+ file_view.icon_view.go_up_dir()
+
+ if action == "go_home_dir":
+ file_view.icon_view.go_home_dir()
+
+
+ def close_view(self, parent, data = None):
+ widget = data[0]
+ page = self.page_num(widget)
+
+ # watcher = widget.tab_state.get_dir_watcher()
+ # watcher.cancel()
+ if self.get_n_pages() > 1:
+ self.remove_page(page)
+
+ # NOTE: Will prob try and call a window custom signal...
+ # self.fm_controller.save_state()
+ # self.set_window_title()
diff --git a/src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/icon_view.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/icon_view.py
new file mode 100644
index 0000000..072a0f5
--- /dev/null
+++ b/src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/icon_view.py
@@ -0,0 +1,146 @@
+# Python imports
+
+# Lib imports
+import gi
+gi.require_version('Gtk', '3.0')
+gi.require_version('Gdk', '3.0')
+from gi.repository import Gtk
+from gi.repository import Gdk
+from gi.repository import GdkPixbuf
+from gi.repository import Gio
+
+# Application imports
+from .signals.icon_view_signals_mixin import IconViewSignalsMixin
+
+
+
+
+class IconView(IconViewSignalsMixin, Gtk.FlowBox):
+ """docstring for IconView."""
+
+ def __init__(self, _tab_state):
+ super(IconView, self).__init__()
+ self.tab_state = _tab_state
+ self.selected_files = []
+ self.icon_theme = settings.get_icon_theme()
+
+ self._setup_styling()
+ self._setup_signals()
+ # self._setup_dnd()
+ self.load_store()
+
+ self.show_all()
+
+
+ def _emmit_signal_to_file_view(self, signal_type):
+ self.get_parent().get_parent().emit(signal_type, None)
+
+ def _setup_styling(self):
+ self.set_selection_mode(Gtk.SelectionMode.MULTIPLE)
+ self.set_valign(Gtk.Align.START)
+ self.set_column_spacing(15)
+ self.set_row_spacing(15)
+ self.set_homogeneous(True)
+
+ def _setup_signals(self):
+ self.set_activate_on_single_click(False)
+ self.connect("child-activated", self.icon_double_click)
+
+ # self.connect("drag-data-get", self.on_drag_set)
+ # self.connect("drag-data-received", self.on_drag_data_received)
+ # self.connect("drag-motion", self.on_drag_motion)
+
+
+ # NOTE: This gets called by a txt box which then shows/hides the flowbox child
+ # https://stackoverflow.com/questions/55828169/how-to-filter-gtk-flowbox-children-with-gtk-entrysearch
+ def search_filter(self, text):
+ def filter_func(fb_child, text):
+ if text.lower() in fb_child.get_name().lower():
+ return True
+ else:
+ return False
+
+ self.set_filter_func(filter_func, text)
+
+
+ def _setup_dnd(self):
+ URI_TARGET_TYPE = 80
+ uri_target = Gtk.TargetEntry.new('text/uri-list', Gtk.TargetFlags(0), URI_TARGET_TYPE)
+ targets = [ uri_target ]
+ action = Gdk.DragAction.COPY
+ self.enable_model_drag_dest(targets, action)
+ self.enable_model_drag_source(0, targets, action)
+
+ def _clear_children(self, widget: type) -> None:
+ ''' Clear children of a gtk widget. '''
+ for child in widget.get_children():
+ widget.remove(child)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# class IconView(IconViewSignalsMixin, Gtk.IconView):
+# """docstring for IconView."""
+#
+# def __init__(self, _tab_state):
+# super(IconView, self).__init__()
+# self.store = None
+# self.tab_state = _tab_state
+# self.selected_files = []
+# self.icon_theme = Gtk.IconTheme.get_default()
+#
+# self._setup_store()
+# self._setup_styling()
+# self._setup_signals()
+# self._setup_dnd()
+# self.load_store()
+#
+# self.show_all()
+#
+#
+# def _setup_store(self):
+# self.store = Gtk.ListStore(GdkPixbuf.Pixbuf or GdkPixbuf.PixbufAnimation or None, str or None)
+# self.set_model(self.store)
+# self.set_pixbuf_column(0)
+# self.set_text_column(1)
+#
+# def _setup_styling(self):
+# self.set_item_orientation(1)
+# self.set_selection_mode(3)
+# self.set_item_width(96)
+# self.set_item_padding(8)
+# self.set_margin(12)
+# self.set_row_spacing(18)
+# self.set_columns(-1)
+# self.set_spacing(12)
+# self.set_column_spacing(18)
+#
+# def _setup_signals(self):
+# # self.connect("button_release_event", self.icon_single_click)
+# self.connect("item-activated", self.icon_double_click)
+# self.connect("selection-changed", self.set_selected_items)
+# # self.connect("drag-data-get", self.on_drag_set)
+# # self.connect("drag-data-received", self.on_drag_data_received)
+# # self.connect("drag-motion", self.on_drag_motion)
+# pass
+#
+# def _setup_dnd(self):
+# URI_TARGET_TYPE = 80
+# uri_target = Gtk.TargetEntry.new('text/uri-list', Gtk.TargetFlags(0), URI_TARGET_TYPE)
+# targets = [ uri_target ]
+# action = Gdk.DragAction.COPY
+# self.enable_model_drag_dest(targets, action)
+# self.enable_model_drag_source(0, targets, action)
+#
+# def set_selected_items(self, icons_grid):
+# self.selected_files = self.get_selected_items()
diff --git a/src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/signals/__init__.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/signals/__init__.py
new file mode 100644
index 0000000..03c3ec2
--- /dev/null
+++ b/src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/signals/__init__.py
@@ -0,0 +1,3 @@
+"""
+ Signals module
+"""
diff --git a/src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/signals/icon_view_signals_mixin.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/signals/icon_view_signals_mixin.py
new file mode 100644
index 0000000..19fc16f
--- /dev/null
+++ b/src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/signals/icon_view_signals_mixin.py
@@ -0,0 +1,183 @@
+# Python imports
+import os
+import traceback
+import threading
+import subprocess
+import time
+from os.path import isdir
+
+# Lib imports
+import gi
+
+gi.require_version("Gtk", "3.0")
+gi.require_version('Gdk', '3.0')
+from gi.repository import Gtk
+from gi.repository import GLib
+from gi.repository import Gdk
+from gi.repository import GdkPixbuf
+from gi.repository import Gio
+
+
+# Application imports
+
+
+
+
+class FileView(Gtk.Box):
+ """docstring for FileView."""
+
+ def __init__(self, _icon = None, _label = None):
+ super(FileView, self).__init__()
+ self.icon = None
+ self.label = _label
+
+ self.label.set_line_wrap(True)
+ self.label.set_selectable(True)
+ self.label.set_max_width_chars(20)
+ self.label.set_justify(2)
+ self.label.set_line_wrap_mode(2)
+
+ self.add(self.label)
+ self.set_orientation(1)
+
+ self.show_all()
+
+ def set_img(self, img):
+ self.icon = img
+ self.add(img)
+ self.reorder_child(self.icon, 0)
+
+
+
+class IconViewSignalsMixin:
+ """docstring for WidgetMixin"""
+
+ def load_store(self):
+ self._clear_children(self)
+ self.search_filter("")
+
+ dir = self.tab_state.get_current_directory()
+ files = self.tab_state.get_files()
+
+ for i, file in enumerate(files):
+ label = Gtk.Label(label=file[0])
+ child = Gtk.FlowBoxChild()
+ child.set_name(file[0])
+
+ file_view = FileView(_label=label)
+ child.add( file_view )
+ self.add(child)
+ self.create_icon(file_view, dir, file[0])
+
+ @threaded
+ def create_icon(self, file_view, dir, file):
+ icon = self.tab_state.create_icon(dir, file)
+ GLib.idle_add(self.update_store, *(file_view, icon, dir, file,))
+
+ def update_store(self, file_view, icon, dir, file):
+ if not icon:
+ path = f"{dir}/{file}"
+ icon = self.get_system_thumbnail(path, self.tab_state.sys_icon_wh[0])
+
+ if not icon:
+ icon = GdkPixbuf.Pixbuf.new_from_file(self.tab_state.DEFAULT_ICON)
+
+ img = Gtk.Image.new_from_pixbuf(icon)
+ img.show()
+ file_view.set_img(img)
+ self.show_all()
+
+
+ def get_system_thumbnail(self, filename, size):
+ try:
+ gio_file = Gio.File.new_for_path(filename)
+ info = gio_file.query_info('standard::icon' , 0, None)
+ icon = info.get_icon().get_names()[0]
+ icon_path = self.icon_theme.lookup_icon(icon , size , 0).get_filename()
+
+ return GdkPixbuf.Pixbuf.new_from_file(icon_path)
+ except Exception:
+ ...
+
+ return None
+
+
+ def icon_double_click(self, icons_grid, item, data=None):
+ try:
+ file_view = item.get_children()[0]
+ file_name = file_view.label.get_label()
+ dir = self.tab_state.get_current_directory()
+ file = f"{dir}/{file_name}"
+
+ if isdir(file):
+ self.tab_state.set_path(file)
+ self.load_store()
+ self._emmit_signal_to_file_view('update-tab-title')
+ else:
+ event_system.emit("open_files", (self, file))
+ except Exception as e:
+ traceback.print_exc()
+
+
+ def go_up_dir(self):
+ self.tab_state.pop_from_path()
+ self.load_store()
+ self._emmit_signal_to_file_view('update-tab-title')
+
+ def go_home_dir(self):
+ self.tab_state.set_to_home()
+ self.load_store()
+ self._emmit_signal_to_file_view('update-tab-title')
+
+ def go_to_path(self, path):
+ self.tab_state.set_path(path)
+ self.load_store()
+ self._emmit_signal_to_file_view('update-tab-title')
+
+ def refresh_dir(self):
+ self.tab_state.load_directory()
+ self.load_store()
+
+ # def on_drag_set(self, icons_grid, drag_context, data, info, time):
+ # action = icons_grid.get_name()
+ # wid, tid = action.split("|")
+ # store = icons_grid.get_model()
+ # treePaths = icons_grid.get_selected_items()
+ # # NOTE: Need URIs as URI format for DnD to work. Will strip 'file://'
+ # # further down call chain when doing internal fm stuff.
+ # uris = self.format_to_uris(store, wid, tid, treePaths)
+ # uris_text = '\n'.join(uris)
+ #
+ # data.set_uris(uris)
+ # data.set_text(uris_text, -1)
+ #
+ # def on_drag_motion(self, icons_grid, drag_context, x, y, data):
+ # current = '|'.join(self.fm_controller.get_active_wid_and_tid())
+ # target = icons_grid.get_name()
+ # wid, tid = target.split("|")
+ # store = icons_grid.get_model()
+ # treePath = icons_grid.get_drag_dest_item().path
+ #
+ # if treePath:
+ # uri = self.format_to_uris(store, wid, tid, treePath)[0].replace("file://", "")
+ # self.override_drop_dest = uri if isdir(uri) else None
+ #
+ # if target not in current:
+ # self.fm_controller.set_wid_and_tid(wid, tid)
+ #
+ #
+ # def on_drag_data_received(self, widget, drag_context, x, y, data, info, time):
+ # if info == 80:
+ # wid, tid = self.fm_controller.get_active_wid_and_tid()
+ # notebook = self.builder.get_object(f"window_{wid}")
+ # store, tab_label = self.get_store_and_label_from_notebook(notebook, f"{wid}|{tid}")
+ # tab = self.get_fm_window(wid).get_tab_by_id(tid)
+ #
+ # uris = data.get_uris()
+ # dest = f"{tab.get_current_directory()}" if not self.override_drop_dest else self.override_drop_dest
+ # if len(uris) == 0:
+ # uris = data.get_text().split("\n")
+ #
+ # from_uri = '/'.join(uris[0].replace("file://", "").split("/")[:-1])
+ # if from_uri != dest:
+ # self.move_files(uris, dest)
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/icon_grid_widget.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/icon_grid_widget.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/icon_grid_widget.py
rename to src/versions/solarfm-0.0.1/solarfm/core/widgets/icon_grid_widget.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/icon_tree_widget.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/icon_tree_widget.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/icon_tree_widget.py
rename to src/versions/solarfm-0.0.1/solarfm/core/widgets/icon_tree_widget.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/io_widget.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/io_widget.py
similarity index 93%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/io_widget.py
rename to src/versions/solarfm-0.0.1/solarfm/core/widgets/io_widget.py
index f83ede2..2b81388 100644
--- a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/io_widget.py
+++ b/src/versions/solarfm-0.0.1/solarfm/core/widgets/io_widget.py
@@ -60,7 +60,7 @@ class IOWidget(Gtk.Box):
self.add(stats)
def do_cancel(self, widget, container, eve):
- print(f"Canceling: [{self._action}] of {self._basename} ...")
+ logger.info(f"Canceling: [{self._action}] of {self._basename} ...")
eve.cancel()
def update_progress(self, current, total, eve=None):
@@ -75,7 +75,7 @@ class IOWidget(Gtk.Box):
if status:
self.delete_self()
else:
- print(f"{self._action} of {self._basename} failed...")
+ logger.info(f"{self._action} of {self._basename} failed...")
def delete_self(self, widget=None, eve=None):
self.get_parent().remove(self)
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/popups/__init__.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/popups/__init__.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/popups/__init__.py
rename to src/versions/solarfm-0.0.1/solarfm/core/widgets/popups/__init__.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/popups/io_popup_widget.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/popups/io_popup_widget.py
similarity index 78%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/popups/io_popup_widget.py
rename to src/versions/solarfm-0.0.1/solarfm/core/widgets/popups/io_popup_widget.py
index 9883dd1..eaf1360 100644
--- a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/popups/io_popup_widget.py
+++ b/src/versions/solarfm-0.0.1/solarfm/core/widgets/popups/io_popup_widget.py
@@ -16,18 +16,17 @@ class IOPopupWidget(Gtk.Popover):
def __init__(self):
super(IOPopupWidget, self).__init__()
- self.builder = settings.get_builder()
+ self._builder = settings.get_builder()
- self.builder.expose_object(f"io_popup", self)
+ self._builder.expose_object(f"io_popup", self)
self._setup_styling()
self._setup_signals()
self._load_widgets()
- self.show_all()
def _setup_styling(self):
- io_button = self.builder.get_object(f"io_button")
+ io_button = self._builder.get_object(f"io_button")
self.set_relative_to(io_button)
self.set_modal(True)
self.set_position(Gtk.PositionType.BOTTOM)
@@ -40,7 +39,7 @@ class IOPopupWidget(Gtk.Popover):
vbox = Gtk.Box()
vbox.set_orientation(Gtk.Orientation.VERTICAL)
- self.builder.expose_object(f"io_list", vbox)
+ self._builder.expose_object(f"io_list", vbox)
self.add(vbox)
def show_io_popup(self, widget=None, eve=None):
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/popups/message_popup_widget.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/popups/message_popup_widget.py
similarity index 99%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/popups/message_popup_widget.py
rename to src/versions/solarfm-0.0.1/solarfm/core/widgets/popups/message_popup_widget.py
index fad7717..b89611e 100644
--- a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/popups/message_popup_widget.py
+++ b/src/versions/solarfm-0.0.1/solarfm/core/widgets/popups/message_popup_widget.py
@@ -28,7 +28,6 @@ class MessagePopupWidget(Gtk.Popover):
self._setup_styling()
self._setup_signals()
self._load_widgets()
- self.show_all()
def _setup_styling(self):
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/popups/path_menu_popup_widget.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/popups/path_menu_popup_widget.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/popups/path_menu_popup_widget.py
rename to src/versions/solarfm-0.0.1/solarfm/core/widgets/popups/path_menu_popup_widget.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/popups/plugins_popup_widget.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/popups/plugins_popup_widget.py
similarity index 98%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/popups/plugins_popup_widget.py
rename to src/versions/solarfm-0.0.1/solarfm/core/widgets/popups/plugins_popup_widget.py
index 48bd1e7..b8b11e5 100644
--- a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/popups/plugins_popup_widget.py
+++ b/src/versions/solarfm-0.0.1/solarfm/core/widgets/popups/plugins_popup_widget.py
@@ -23,7 +23,6 @@ class PluginsPopupWidget(Gtk.Popover):
self._setup_styling()
self._setup_signals()
self._load_widgets()
- self.show_all()
def _setup_styling(self):
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/tab_header_widget.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/tab_header_widget.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/core/widgets/tab_header_widget.py
rename to src/versions/solarfm-0.0.1/solarfm/core/widgets/tab_header_widget.py
diff --git a/src/versions/solarfm-0.0.1/solarfm/core/window.py b/src/versions/solarfm-0.0.1/solarfm/core/window.py
new file mode 100644
index 0000000..92c91f4
--- /dev/null
+++ b/src/versions/solarfm-0.0.1/solarfm/core/window.py
@@ -0,0 +1,95 @@
+# Python imports
+import time
+import signal
+
+# Lib imports
+import gi
+import cairo
+gi.require_version('Gtk', '3.0')
+gi.require_version('Gdk', '3.0')
+from gi.repository import Gtk
+from gi.repository import Gdk
+from gi.repository import GLib
+
+# Application imports
+from core.controller import Controller
+
+
+
+
+class Window(Gtk.ApplicationWindow):
+ """docstring for Window."""
+
+ def __init__(self, args, unknownargs):
+ super(Window, self).__init__()
+
+ self._controller = None
+ settings.set_main_window(self)
+
+ self._set_window_data()
+ self._setup_styling()
+ self._setup_signals()
+ self._subscribe_to_events()
+
+ self._load_widgets(args, unknownargs)
+
+ self.show()
+
+
+ def _setup_styling(self):
+ self.set_default_size(1670, 830)
+ self.set_title(f"{app_name}")
+ self.set_icon_from_file( settings.get_window_icon() )
+ self.set_gravity(5) # 5 = CENTER
+ self.set_position(1) # 1 = CENTER, 4 = CENTER_ALWAYS
+
+ def _setup_signals(self):
+ self.connect("delete-event", self._tear_down)
+
+ # self.connect("focus-out-event", self._controller.unset_keys_and_data)
+ # self.connect("key-press-event", self._controller.on_global_key_press_controller)
+ # self.connect("key-release-event", self._controller.on_global_key_release_controller)
+
+ GLib.unix_signal_add(GLib.PRIORITY_DEFAULT, signal.SIGINT, self._tear_down)
+
+ def _subscribe_to_events(self):
+ event_system.subscribe("tear_down", self._tear_down)
+
+ def _load_widgets(self, args, unknownargs):
+ self._controller = Controller(args, unknownargs)
+
+ if not self._controller:
+ raise ControllerStartException("Controller exited and doesn't exist...")
+
+ self.add( self._controller.get_core_widget() )
+
+ def _set_window_data(self) -> None:
+ screen = self.get_screen()
+ visual = screen.get_rgba_visual()
+
+ if visual != None and screen.is_composited():
+ self.set_visual(visual)
+ self.set_app_paintable(True)
+ self.connect("draw", self._area_draw)
+
+ # bind css file
+ cssProvider = Gtk.CssProvider()
+ cssProvider.load_from_path( settings.get_css_file() )
+ screen = Gdk.Screen.get_default()
+ styleContext = Gtk.StyleContext()
+ styleContext.add_provider_for_screen(screen, cssProvider, Gtk.STYLE_PROVIDER_PRIORITY_USER)
+
+ def _area_draw(self, widget: Gtk.ApplicationWindow, cr: cairo.Context) -> None:
+ cr.set_source_rgba(0, 0, 0, 0.54)
+ cr.set_operator(cairo.OPERATOR_SOURCE)
+ cr.paint()
+ cr.set_operator(cairo.OPERATOR_OVER)
+
+
+ def _tear_down(self, widget=None, eve=None):
+ if not settings.is_trace_debug():
+ self._controller.fm_controller.save_state()
+
+ settings.clear_pid()
+ time.sleep(event_sleep_time)
+ Gtk.main_quit()
diff --git a/src/versions/solarfm-0.0.1/solarfm/factories/__init__.py b/src/versions/solarfm-0.0.1/solarfm/factories/__init__.py
new file mode 100644
index 0000000..c24aa05
--- /dev/null
+++ b/src/versions/solarfm-0.0.1/solarfm/factories/__init__.py
@@ -0,0 +1,3 @@
+"""
+ Factories Module
+"""
diff --git a/src/versions/solarfm-0.0.1/solarfm/factories/split_view_widget.py b/src/versions/solarfm-0.0.1/solarfm/factories/split_view_widget.py
new file mode 100644
index 0000000..9492370
--- /dev/null
+++ b/src/versions/solarfm-0.0.1/solarfm/factories/split_view_widget.py
@@ -0,0 +1,33 @@
+# Python imports
+
+# Lib imports
+import gi
+gi.require_version('Gtk', '3.0')
+from gi.repository import Gtk
+
+# Application imports
+from core.widgets.fm_widget.files_widget import FilesWidget
+
+
+
+
+class SplitViewWidget(Gtk.Paned):
+ def __init__(self):
+ super(SplitViewWidget, self).__init__()
+
+ self._setup_styling()
+ self._setup_signals()
+ self._load_widgets()
+
+ self.show_all()
+
+
+ def _setup_styling(self):
+ self.set_wide_handle(True)
+
+ def _setup_signals(self):
+ ...
+
+ def _load_widgets(self):
+ self.pack1(FilesWidget(), resize=False, shrink=False)
+ self.pack2(FilesWidget(), resize=True, shrink=False)
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/plugins/__init__.py b/src/versions/solarfm-0.0.1/solarfm/plugins/__init__.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/plugins/__init__.py
rename to src/versions/solarfm-0.0.1/solarfm/plugins/__init__.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/plugins/manifest.py b/src/versions/solarfm-0.0.1/solarfm/plugins/manifest.py
similarity index 96%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/plugins/manifest.py
rename to src/versions/solarfm-0.0.1/solarfm/plugins/manifest.py
index 3caf564..008df15 100644
--- a/src/versions/solarfm-0.0.1/SolarFM/solarfm/plugins/manifest.py
+++ b/src/versions/solarfm-0.0.1/solarfm/plugins/manifest.py
@@ -82,8 +82,8 @@ class ManifestProcessor:
for ui_id in requests["pass_ui_objects"]:
try:
loading_data["pass_ui_objects"].append( self._builder.get_object(ui_id) )
- except Exception as e:
- print(repr(e))
+ except ManifestProcessorException as e:
+ logger.error(repr(e))
if "bind_keys" in keys:
if isinstance(requests["bind_keys"], list):
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/plugins/plugin_base.py b/src/versions/solarfm-0.0.1/solarfm/plugins/plugin_base.py
similarity index 98%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/plugins/plugin_base.py
rename to src/versions/solarfm-0.0.1/solarfm/plugins/plugin_base.py
index 4abb857..1c1613f 100644
--- a/src/versions/solarfm-0.0.1/SolarFM/solarfm/plugins/plugin_base.py
+++ b/src/versions/solarfm-0.0.1/solarfm/plugins/plugin_base.py
@@ -24,7 +24,6 @@ class PluginBase:
self._event_system = None
-
def set_fm_event_system(self, fm_event_system):
"""
Requests Key: 'pass_fm_events': "true"
@@ -76,7 +75,7 @@ class PluginBase:
methods = inspect.getmembers(c, predicate=inspect.ismethod)
handlers.update(methods)
except Exception as e:
- print(repr(e))
+ logger.debug(repr(e))
builder.connect_signals(handlers)
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/plugins/plugins_controller.py b/src/versions/solarfm-0.0.1/solarfm/plugins/plugins_controller.py
similarity index 89%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/plugins/plugins_controller.py
rename to src/versions/solarfm-0.0.1/solarfm/plugins/plugins_controller.py
index 4a54cd3..71c7092 100644
--- a/src/versions/solarfm-0.0.1/SolarFM/solarfm/plugins/plugins_controller.py
+++ b/src/versions/solarfm-0.0.1/solarfm/plugins/plugins_controller.py
@@ -32,7 +32,6 @@ class PluginsController:
self._builder = settings.get_builder()
self._plugins_path = settings.get_plugins_path()
- self._keybindings = settings.get_keybindings()
self._plugins_dir_watcher = None
self._plugin_collection = []
@@ -54,7 +53,7 @@ class PluginsController:
self.reload_plugins(file)
def load_plugins(self, file: str = None) -> None:
- print(f"Loading plugins...")
+ logger.info(f"Loading plugins...")
parent_path = os.getcwd()
for path, folder in [[join(self._plugins_path, item), item] if os.path.isdir(join(self._plugins_path, item)) else None for item in os.listdir(self._plugins_path)]:
@@ -63,14 +62,14 @@ class PluginsController:
manifest = ManifestProcessor(path, self._builder)
if not os.path.exists(target):
- raise InvalidPluginException("Invalid Plugin Structure: Plugin doesn't have 'plugin.py'. Aboarting load...")
+ raise FileNotFoundError("Invalid Plugin Structure: Plugin doesn't have 'plugin.py'. Aboarting load...")
plugin, loading_data = manifest.get_loading_data()
module = self.load_plugin_module(path, folder, target)
self.execute_plugin(module, plugin, loading_data)
- except Exception as e:
- print(f"Malformed Plugin: Not loading -->: '{folder}' !")
- traceback.print_exc()
+ except InvalidPluginException as e:
+ logger.info(f"Malformed Plugin: Not loading -->: '{folder}' !")
+ logger.debug("Trace: ", traceback.print_exc())
os.chdir(parent_path)
@@ -111,13 +110,13 @@ class PluginsController:
plugin.reference.subscribe_to_events()
if "bind_keys" in keys:
- self._keybindings.append_bindings( loading_data["bind_keys"] )
+ keybindings.append_bindings( loading_data["bind_keys"] )
plugin.reference.run()
self._plugin_collection.append(plugin)
def reload_plugins(self, file: str = None) -> None:
- print(f"Reloading plugins...")
+ logger.info(f"Reloading plugins...")
parent_path = os.getcwd()
for plugin in self._plugin_collection:
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/__init__.py b/src/versions/solarfm-0.0.1/solarfm/shellfm/__init__.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/__init__.py
rename to src/versions/solarfm-0.0.1/solarfm/shellfm/__init__.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/__init__.py b/src/versions/solarfm-0.0.1/solarfm/shellfm/windows/__init__.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/__init__.py
rename to src/versions/solarfm-0.0.1/solarfm/shellfm/windows/__init__.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/controller.py b/src/versions/solarfm-0.0.1/solarfm/shellfm/windows/controller.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/controller.py
rename to src/versions/solarfm-0.0.1/solarfm/shellfm/windows/controller.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/__init__.py b/src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/__init__.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/__init__.py
rename to src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/__init__.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/__init__.py b/src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/__init__.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/__init__.py
rename to src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/__init__.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/icon.py b/src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/icon.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/icon.py
rename to src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/icon.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/mixins/__init__.py b/src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/mixins/__init__.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/mixins/__init__.py
rename to src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/mixins/__init__.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/mixins/desktopiconmixin.py b/src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/mixins/desktopiconmixin.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/mixins/desktopiconmixin.py
rename to src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/mixins/desktopiconmixin.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/mixins/meshsiconmixin.py b/src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/mixins/meshsiconmixin.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/mixins/meshsiconmixin.py
rename to src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/mixins/meshsiconmixin.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/mixins/videoiconmixin.py b/src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/mixins/videoiconmixin.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/mixins/videoiconmixin.py
rename to src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/mixins/videoiconmixin.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/mixins/xdg/BaseDirectory.py b/src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/mixins/xdg/BaseDirectory.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/mixins/xdg/BaseDirectory.py
rename to src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/mixins/xdg/BaseDirectory.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/mixins/xdg/Config.py b/src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/mixins/xdg/Config.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/mixins/xdg/Config.py
rename to src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/mixins/xdg/Config.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/mixins/xdg/DesktopEntry.py b/src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/mixins/xdg/DesktopEntry.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/mixins/xdg/DesktopEntry.py
rename to src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/mixins/xdg/DesktopEntry.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/mixins/xdg/Exceptions.py b/src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/mixins/xdg/Exceptions.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/mixins/xdg/Exceptions.py
rename to src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/mixins/xdg/Exceptions.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/mixins/xdg/IconTheme.py b/src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/mixins/xdg/IconTheme.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/mixins/xdg/IconTheme.py
rename to src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/mixins/xdg/IconTheme.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/mixins/xdg/IniFile.py b/src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/mixins/xdg/IniFile.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/mixins/xdg/IniFile.py
rename to src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/mixins/xdg/IniFile.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/mixins/xdg/Locale.py b/src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/mixins/xdg/Locale.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/mixins/xdg/Locale.py
rename to src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/mixins/xdg/Locale.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/mixins/xdg/Menu.py b/src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/mixins/xdg/Menu.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/mixins/xdg/Menu.py
rename to src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/mixins/xdg/Menu.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/mixins/xdg/MenuEditor.py b/src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/mixins/xdg/MenuEditor.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/mixins/xdg/MenuEditor.py
rename to src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/mixins/xdg/MenuEditor.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/mixins/xdg/Mime.py b/src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/mixins/xdg/Mime.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/mixins/xdg/Mime.py
rename to src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/mixins/xdg/Mime.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/mixins/xdg/RecentFiles.py b/src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/mixins/xdg/RecentFiles.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/mixins/xdg/RecentFiles.py
rename to src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/mixins/xdg/RecentFiles.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/mixins/xdg/__init__.py b/src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/mixins/xdg/__init__.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/mixins/xdg/__init__.py
rename to src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/mixins/xdg/__init__.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/mixins/xdg/util.py b/src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/mixins/xdg/util.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/icons/mixins/xdg/util.py
rename to src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/mixins/xdg/util.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/path.py b/src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/path.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/path.py
rename to src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/path.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/tab.py b/src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/tab.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/tab.py
rename to src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/tab.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/utils/__init__.py b/src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/utils/__init__.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/utils/__init__.py
rename to src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/utils/__init__.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/utils/filehandler.py b/src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/utils/filehandler.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/utils/filehandler.py
rename to src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/utils/filehandler.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/utils/launcher.py b/src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/utils/launcher.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/utils/launcher.py
rename to src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/utils/launcher.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/utils/settings.py b/src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/utils/settings.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/tabs/utils/settings.py
rename to src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/utils/settings.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/window.py b/src/versions/solarfm-0.0.1/solarfm/shellfm/windows/window.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/shellfm/windows/window.py
rename to src/versions/solarfm-0.0.1/solarfm/shellfm/windows/window.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/utils/__init__.py b/src/versions/solarfm-0.0.1/solarfm/utils/__init__.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/utils/__init__.py
rename to src/versions/solarfm-0.0.1/solarfm/utils/__init__.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/utils/endpoint_registry.py b/src/versions/solarfm-0.0.1/solarfm/utils/endpoint_registry.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/utils/endpoint_registry.py
rename to src/versions/solarfm-0.0.1/solarfm/utils/endpoint_registry.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/utils/event_system.py b/src/versions/solarfm-0.0.1/solarfm/utils/event_system.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/utils/event_system.py
rename to src/versions/solarfm-0.0.1/solarfm/utils/event_system.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/utils/ipc_server.py b/src/versions/solarfm-0.0.1/solarfm/utils/ipc_server.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/utils/ipc_server.py
rename to src/versions/solarfm-0.0.1/solarfm/utils/ipc_server.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/utils/keybindings.py b/src/versions/solarfm-0.0.1/solarfm/utils/keybindings.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/utils/keybindings.py
rename to src/versions/solarfm-0.0.1/solarfm/utils/keybindings.py
diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/utils/logger.py b/src/versions/solarfm-0.0.1/solarfm/utils/logger.py
similarity index 100%
rename from src/versions/solarfm-0.0.1/SolarFM/solarfm/utils/logger.py
rename to src/versions/solarfm-0.0.1/solarfm/utils/logger.py
diff --git a/src/versions/solarfm-0.0.1/solarfm/utils/settings/__init__.py b/src/versions/solarfm-0.0.1/solarfm/utils/settings/__init__.py
new file mode 100644
index 0000000..e07c5a0
--- /dev/null
+++ b/src/versions/solarfm-0.0.1/solarfm/utils/settings/__init__.py
@@ -0,0 +1,4 @@
+"""
+ Settings module
+"""
+from .settings import Settings
diff --git a/src/versions/solarfm-0.0.1/solarfm/utils/settings/settings.py b/src/versions/solarfm-0.0.1/solarfm/utils/settings/settings.py
new file mode 100644
index 0000000..eadffca
--- /dev/null
+++ b/src/versions/solarfm-0.0.1/solarfm/utils/settings/settings.py
@@ -0,0 +1,159 @@
+# Python imports
+import os
+import inspect
+import json
+from os import path
+
+# Gtk imports
+import gi
+gi.require_version('Gtk', '3.0')
+from gi.repository import Gtk
+from gi.repository import GLib
+
+# Application imports
+from .start_check_mixin import StartCheckMixin
+
+
+
+class Settings(StartCheckMixin):
+ def __init__(self):
+ self._SCRIPT_PTH = os.path.dirname(os.path.realpath(__file__))
+ self._USER_HOME = path.expanduser('~')
+ self._USR_PATH = f"/usr/share/{app_name.lower()}"
+
+ self._USR_CONFIG_FILE = f"{self._USR_PATH}/settings.json"
+ self._HOME_CONFIG_PATH = f"{self._USER_HOME}/.config/{app_name.lower()}"
+ self._PLUGINS_PATH = f"{self._HOME_CONFIG_PATH}/plugins"
+ self._DEFAULT_ICONS = f"{self._HOME_CONFIG_PATH}/icons"
+ self._CONFIG_FILE = f"{self._HOME_CONFIG_PATH}/settings.json"
+ self._GLADE_FILE = f"{self._HOME_CONFIG_PATH}/Main_Window.glade"
+ self._CSS_FILE = f"{self._HOME_CONFIG_PATH}/stylesheet.css"
+ self._KEY_BINDINGS_FILE = f"{self._HOME_CONFIG_PATH}/key-bindings.json"
+ self._PID_FILE = f"{self._HOME_CONFIG_PATH}/{app_name.lower()}.pid"
+ self._WINDOW_ICON = f"{self._DEFAULT_ICONS}/icons/{app_name.lower()}.png"
+
+ if not os.path.exists(self._HOME_CONFIG_PATH):
+ os.mkdir(self._HOME_CONFIG_PATH)
+ if not os.path.exists(self._PLUGINS_PATH):
+ os.mkdir(self._PLUGINS_PATH)
+
+ if not os.path.exists(self._CONFIG_FILE):
+ import shutil
+ try:
+ shutil.copyfile(self._USR_CONFIG_FILE, self._CONFIG_FILE)
+ except Exception as e:
+ raise
+
+ if not os.path.exists(self._DEFAULT_ICONS):
+ self._DEFAULT_ICONS = f"{self._USR_PATH}/icons"
+ if not os.path.exists(self._GLADE_FILE):
+ self._GLADE_FILE = f"{self._USR_PATH}/Main_Window.glade"
+ if not os.path.exists(self._KEY_BINDINGS_FILE):
+ self._KEY_BINDINGS_FILE = f"{self._USR_PATH}/key-bindings.json"
+ if not os.path.exists(self._CSS_FILE):
+ self._CSS_FILE = f"{self._USR_PATH}/stylesheet.css"
+ if not os.path.exists(self._WINDOW_ICON):
+ self._WINDOW_ICON = f"{self._USR_PATH}/icons/{app_name.lower()}.png"
+
+
+ self._UI_WIDEGTS_PATH = f"{self._USR_PATH}/ui_widgets"
+ self._CONTEXT_MENU = f"{self._USR_PATH}/contexct_menu.json"
+ self._TRASH_FILES_PATH = f"{GLib.get_user_data_dir()}/Trash/files"
+ self._TRASH_INFO_PATH = f"{GLib.get_user_data_dir()}/Trash/info"
+ self._ICON_THEME = Gtk.IconTheme.get_default()
+
+ if not os.path.exists(self._CONTEXT_MENU):
+ self._CONTEXT_MENU = f"{self._USR_PATH}/contexct_menu.json"
+
+ with open(self._KEY_BINDINGS_FILE) as file:
+ bindings = json.load(file)["keybindings"]
+ keybindings.configure(bindings)
+
+ with open(self._CONTEXT_MENU) as file:
+ self._context_menu_data = json.load(file)
+
+ self._main_window = None
+ self._builder = None
+
+ self._trace_debug = False
+ self._debug = False
+ self._dirty_start = False
+
+ self.load_settings()
+
+
+ def register_signals_to_builder(self, classes=None):
+ handlers = {}
+
+ for c in classes:
+ methods = None
+ try:
+ methods = inspect.getmembers(c, predicate=inspect.ismethod)
+ handlers.update(methods)
+ except Exception as e:
+ print(repr(e))
+
+ self._builder.connect_signals(handlers)
+
+
+ def get_monitor_data(self) -> list:
+ screen = self._main_window.get_screen()
+ monitors = []
+ for m in range(screen.get_n_monitors()):
+ monitors.append(screen.get_monitor_geometry(m))
+ print("{}x{}+{}+{}".format(monitor.width, monitor.height, monitor.x, monitor.y))
+
+ return monitors
+
+ def set_builder(self, builder) -> any: self._builder = builder
+ def set_main_window(self, window): self._main_window = window
+
+ def get_main_window(self) -> Gtk.ApplicationWindow: return self._main_window
+ def get_builder(self) -> Gtk.Builder: return self._builder
+ def get_glade_file(self) -> str: return self._GLADE_FILE
+ def get_icon_theme(self) -> str: return self._ICON_THEME
+ def get_css_file(self) -> str: return self._CSS_FILE
+ def get_home_config_path(self) -> str: return self._HOME_CONFIG_PATH
+ def get_window_icon(self) -> str: return self._WINDOW_ICON
+
+ def get_context_menu_data(self) -> str: return self._context_menu_data
+ def get_ui_widgets_path(self) -> str: return self._UI_WIDEGTS_PATH
+ def get_trash_files_path(self) -> str: return self._TRASH_FILES_PATH
+ def get_trash_info_path(self) -> str: return self._TRASH_INFO_PATH
+ def get_plugins_path(self) -> str: return self._PLUGINS_PATH
+
+ # Filter returns
+ def get_office_filter(self) -> tuple: return tuple(self._settings["filters"]["office"])
+ def get_vids_filter(self) -> tuple: return tuple(self._settings["filters"]["videos"])
+ def get_text_filter(self) -> tuple: return tuple(self._settings["filters"]["text"])
+ def get_music_filter(self) -> tuple: return tuple(self._settings["filters"]["music"])
+ def get_images_filter(self) -> tuple: return tuple(self._settings["filters"]["images"])
+ def get_pdf_filter(self) -> tuple: return tuple(self._settings["filters"]["pdf"])
+
+ def get_success_color(self) -> str: return self._theming["success_color"]
+ def get_warning_color(self) -> str: return self._theming["warning_color"]
+ def get_error_color(self) -> str: return self._theming["error_color"]
+
+ def is_trace_debug(self) -> bool: return self._trace_debug
+ def is_debug(self) -> bool: return self._debug
+
+ def get_ch_log_lvl(self) -> str: return self._settings["debugging"]["ch_log_lvl"]
+ def get_fh_log_lvl(self) -> str: return self._settings["debugging"]["fh_log_lvl"]
+
+
+ def set_trace_debug(self, trace_debug: bool):
+ self._trace_debug = trace_debug
+
+ def set_debug(self, debug: bool):
+ self._debug = debug
+
+
+ def load_settings(self):
+ with open(self._CONFIG_FILE) as f:
+ self._settings = json.load(f)
+ self._config = self._settings["config"]
+ self._theming = self._settings["theming"]
+
+ def save_settings(self):
+ with open(self._CONFIG_FILE, 'w') as outfile:
+ json.dump(self._settings, outfile, separators=(',', ':'), indent=4)
diff --git a/src/versions/solarfm-0.0.1/solarfm/utils/settings/start_check_mixin.py b/src/versions/solarfm-0.0.1/solarfm/utils/settings/start_check_mixin.py
new file mode 100644
index 0000000..7fba503
--- /dev/null
+++ b/src/versions/solarfm-0.0.1/solarfm/utils/settings/start_check_mixin.py
@@ -0,0 +1,50 @@
+# Python imports
+import os
+import json
+import inspect
+
+# Lib imports
+
+# Application imports
+
+
+
+
+class StartCheckMixin:
+ def is_dirty_start(self) -> bool: return self._dirty_start
+ def clear_pid(self): self._clean_pid()
+
+ def do_dirty_start_check(self):
+ if not os.path.exists(self._PID_FILE):
+ self._write_new_pid()
+ else:
+ with open(self._PID_FILE, "r") as _pid:
+ pid = _pid.readline().strip()
+ if pid not in ("", None):
+ self._check_alive_status(int(pid))
+ else:
+ self._write_new_pid()
+
+ """ Check For the existence of a unix pid. """
+ def _check_alive_status(self, pid):
+ print(f"PID Found: {pid}")
+ try:
+ os.kill(pid, 0)
+ except OSError:
+ print(f"{app_name} is starting dirty...")
+ self._dirty_start = True
+ self._write_new_pid()
+ return
+
+ print("PID is alive... Let downstream errors (sans debug args) handle app closure propigation.")
+
+ def _write_new_pid(self):
+ pid = os.getpid()
+ self._write_pid(pid)
+
+ def _clean_pid(self):
+ os.unlink(self._PID_FILE)
+
+ def _write_pid(self, pid):
+ with open(self._PID_FILE, "w") as _pid:
+ _pid.write(f"{pid}")
diff --git a/user_config/bin/solarfm b/user_config/bin/solarfm
new file mode 100755
index 0000000..8cca2db
--- /dev/null
+++ b/user_config/bin/solarfm
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+# . CONFIG.sh
+
+# set -o xtrace ## To debug scripts
+# set -o errexit ## To exit on error
+# set -o errunset ## To exit if a variable is referenced but not set
+
+
+function main() {
+ call_path=`pwd`
+ cd "${call_path}"
+ echo "Working Dir: " $(pwd)
+
+ python /opt/solarfm.zip "$@"
+}
+main "$@";
diff --git a/user_config/usr/bin/solarfm b/user_config/usr/bin/solarfm
new file mode 100755
index 0000000..8cca2db
--- /dev/null
+++ b/user_config/usr/bin/solarfm
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+# . CONFIG.sh
+
+# set -o xtrace ## To debug scripts
+# set -o errexit ## To exit on error
+# set -o errunset ## To exit if a variable is referenced but not set
+
+
+function main() {
+ call_path=`pwd`
+ cd "${call_path}"
+ echo "Working Dir: " $(pwd)
+
+ python /opt/solarfm.zip "$@"
+}
+main "$@";
diff --git a/user_config/usr/share/solarfm/Main_Window.glade b/user_config/usr/share/solarfm/Main_Window.glade
index 597d9be..f6b118c 100644
--- a/user_config/usr/share/solarfm/Main_Window.glade
+++ b/user_config/usr/share/solarfm/Main_Window.glade
@@ -61,453 +61,308 @@
gtk-apply
3
-