From 4f18844fd2b31b6bb4127e45ad5a9636bf7bae35 Mon Sep 17 00:00:00 2001
From: itdominator <1itdominator@gmail.com>
Date: Sun, 28 Nov 2021 16:01:29 -0600
Subject: [PATCH] Renaming to SolarFM
---
README.md | 17 +-
bin/REMOVE.txt | 1 +
bin/pytop-0-0-1-x64.deb | Bin 20764 -> 0 bytes
src/debs/pyFfm-0-0-1-x64/DEBIAN/postrm | 11 -
src/debs/pyFfm-0-0-1-x64/bin/pytop | Bin 6168 -> 0 bytes
src/debs/pyFfm-0-0-1-x64/opt/PyFM/PyFM.py | 36 -
.../opt/PyFM/resources/PyTop.glade | 305 ---
.../opt/PyFM/utils/Settings.py | 139 --
.../DEBIAN/control | 2 +-
src/debs/solarfm-0-0-1-x64/DEBIAN/postrm | 11 +
src/debs/solarfm-0-0-1-x64/bin/solarfm | Bin 0 -> 14416 bytes
.../opt/SolarFM}/__builtins__.py | 0
.../opt/SolarFM}/__init__.py | 0
.../opt/SolarFM}/__main__.py | 2 +-
.../opt/SolarFM}/resources/Main_Window.glade | 15 +-
.../opt/SolarFM/resources/solarfm-64x64.png} | Bin
.../opt/SolarFM/resources/solarfm.png} | Bin
.../opt/SolarFM}/resources/stylesheet.css | 0
.../opt/SolarFM}/shellfm/__init__.py | 0
.../opt/SolarFM}/shellfm/windows/Window.py | 0
.../shellfm/windows/WindowController.py | 2 +-
.../opt/SolarFM}/shellfm/windows/__init__.py | 0
.../opt/SolarFM}/shellfm/windows/view/Path.py | 0
.../opt/SolarFM}/shellfm/windows/view/View.py | 0
.../SolarFM}/shellfm/windows/view/__init__.py | 0
.../shellfm/windows/view/icons/Icon.py | 0
.../shellfm/windows/view/icons/__init__.py | 0
.../view/icons/mixins/DesktopIconMixin.py | 0
.../view/icons/mixins/VideoIconMixin.py | 0
.../windows/view/icons/mixins/__init__.py | 0
.../view/icons/mixins/xdg/BaseDirectory.py | 0
.../windows/view/icons/mixins/xdg/Config.py | 0
.../view/icons/mixins/xdg/DesktopEntry.py | 0
.../view/icons/mixins/xdg/Exceptions.py | 0
.../view/icons/mixins/xdg/IconTheme.py | 0
.../windows/view/icons/mixins/xdg/IniFile.py | 0
.../windows/view/icons/mixins/xdg/Locale.py | 0
.../windows/view/icons/mixins/xdg/Menu.py | 0
.../view/icons/mixins/xdg/MenuEditor.py | 0
.../windows/view/icons/mixins/xdg/Mime.py | 0
.../view/icons/mixins/xdg/RecentFiles.py | 0
.../windows/view/icons/mixins/xdg/__init__.py | 0
.../windows/view/icons/mixins/xdg/util.py | 0
.../shellfm/windows/view/utils/FileHandler.py | 0
.../shellfm/windows/view/utils/Launcher.py | 0
.../shellfm/windows/view/utils/Settings.py | 2 +-
.../shellfm/windows/view/utils/__init__.py | 0
.../opt/SolarFM}/signal_classes/Controller.py | 0
.../signal_classes/Controller_Data.py | 0
.../signal_classes/DBusControllerMixin.py | 4 +-
.../signal_classes/KeyboardSignalsMixin.py | 2 +-
.../SolarFM}/signal_classes/ShowHideMixin.py | 0
.../opt/SolarFM}/signal_classes/__init__.py | 0
.../signal_classes/mixins/PaneMixin.py | 0
.../signal_classes/mixins/TabMixin.py | 0
.../mixins/WidgetFileActionMixin.py | 0
.../signal_classes/mixins/WidgetMixin.py | 0
.../signal_classes/mixins/WindowMixin.py | 2 +-
.../signal_classes/mixins/__init__.py | 0
.../solarfm-0-0-1-x64/opt/SolarFM/solarfm} | 2 +-
.../opt/SolarFM}/utils/Logger.py | 0
.../opt/SolarFM}/utils/Settings.py | 0
.../opt/SolarFM}/utils/__init__.py | 0
.../usr/share/doc/solarfm}/copyright | 6 +-
.../new/pyfm/resources/appchooserdlg.glade | 331 ----
.../new/pyfm/resources/file_properties.glade | 858 ---------
src/versions/pyfm-0.0.1/PyFM/old/PyFM.sh | 12 -
.../PyFM/old/resources/stylesheet.css | 88 -
.../pyfm-0.0.1/PyFM/old/utils/Dragging.py | 79 -
.../pyfm-0.0.1/PyFM/old/utils/Events.py | 72 -
.../pyfm-0.0.1/PyFM/old/utils/FileHandler.py | 93 -
.../pyfm-0.0.1/PyFM/old/utils/Grid.py | 214 ---
.../pyfm-0.0.1/PyFM/old/utils/Icon.py | 167 --
.../pyfm-0.0.1/PyFM/old/utils/__init__.py | 6 -
src/versions/pyfm-0.0.1/compileBin.sh | 6 -
.../SolarFM}/new/setup.py | 4 +-
.../SolarFM/new/solarfm.sh} | 2 +-
.../SolarFM/new/solarfm.toml} | 0
.../SolarFM/new/solarfm/__builtins__.py | 66 +
.../SolarFM/new/solarfm/__init__.py | 49 +
.../SolarFM/new/solarfm/__main__.py | 39 +
.../new/solarfm/resources/Main_Window.glade | 1653 +++++++++++++++++
.../new/solarfm/resources/solarfm-64x64.png | Bin 0 -> 16172 bytes
.../SolarFM/new/solarfm/resources/solarfm.png | Bin 0 -> 40783 bytes
.../new/solarfm/resources/stylesheet.css | 67 +
.../SolarFM/new/solarfm/shellfm/__init__.py | 1 +
.../new/solarfm/shellfm/windows/Window.py | 66 +
.../shellfm/windows/WindowController.py | 179 ++
.../new/solarfm/shellfm/windows/__init__.py | 2 +
.../new/solarfm/shellfm/windows/view/Path.py | 59 +
.../new/solarfm/shellfm/windows/view/View.py | 227 +++
.../solarfm/shellfm/windows/view/__init__.py | 5 +
.../shellfm/windows/view/icons/Icon.py | 76 +
.../shellfm/windows/view/icons/__init__.py | 4 +
.../view/icons/mixins/DesktopIconMixin.py | 65 +
.../view/icons/mixins/VideoIconMixin.py | 53 +
.../windows/view/icons/mixins/__init__.py | 4 +
.../view/icons/mixins/xdg/BaseDirectory.py | 160 ++
.../windows/view/icons/mixins/xdg/Config.py | 39 +
.../view/icons/mixins/xdg/DesktopEntry.py | 435 +++++
.../view/icons/mixins/xdg/Exceptions.py | 84 +
.../view/icons/mixins/xdg/IconTheme.py | 445 +++++
.../windows/view/icons/mixins/xdg/IniFile.py | 419 +++++
.../windows/view/icons/mixins/xdg/Locale.py | 79 +
.../windows/view/icons/mixins/xdg/Menu.py | 1125 +++++++++++
.../view/icons/mixins/xdg/MenuEditor.py | 541 ++++++
.../windows/view/icons/mixins/xdg/Mime.py | 780 ++++++++
.../view/icons/mixins/xdg/RecentFiles.py | 181 ++
.../windows/view/icons/mixins/xdg/__init__.py | 3 +
.../windows/view/icons/mixins/xdg/util.py | 75 +
.../shellfm/windows/view/utils/FileHandler.py | 80 +
.../shellfm/windows/view/utils/Launcher.py | 95 +
.../shellfm/windows/view/utils/Settings.py | 94 +
.../shellfm/windows/view/utils/__init__.py | 3 +
.../new/solarfm/signal_classes/Controller.py | 150 ++
.../solarfm/signal_classes/Controller_Data.py | 53 +
.../signal_classes/DBusControllerMixin.py | 63 +
.../signal_classes/KeyboardSignalsMixin.py | 78 +
.../solarfm/signal_classes/ShowHideMixin.py | 65 +
.../new/solarfm/signal_classes/__init__.py | 9 +
.../signal_classes/mixins/PaneMixin.py | 59 +
.../solarfm/signal_classes/mixins/TabMixin.py | 178 ++
.../mixins/WidgetFileActionMixin.py | 258 +++
.../signal_classes/mixins/WidgetMixin.py | 213 +++
.../signal_classes/mixins/WindowMixin.py | 159 ++
.../solarfm/signal_classes/mixins/__init__.py | 5 +
.../solarfm-0.0.1/SolarFM/new/solarfm/solarfm | 18 +
.../SolarFM/new/solarfm/utils/Logger.py | 56 +
.../SolarFM/new/solarfm/utils/Settings.py | 69 +
.../SolarFM/new/solarfm/utils/__init__.py | 6 +
.../SolarFM}/old/PyFM.py | 0
.../solarfm-0.0.1/SolarFM/old}/PyFM.sh | 0
.../SolarFM}/old/resources/PyFM.glade | 0
.../SolarFM/old}/resources/icons/archive.png | Bin
.../SolarFM/old}/resources/icons/audio.png | Bin
.../SolarFM/old}/resources/icons/bin.png | Bin
.../SolarFM/old}/resources/icons/dir.png | Bin
.../SolarFM/old}/resources/icons/doc.png | Bin
.../SolarFM/old}/resources/icons/pdf.png | Bin
.../old}/resources/icons/presentation.png | Bin
.../old}/resources/icons/spreadsheet.png | Bin
.../SolarFM/old}/resources/icons/text.png | Bin
.../SolarFM/old}/resources/icons/video.png | Bin
.../SolarFM/old}/resources/icons/web.png | Bin
.../SolarFM/old}/resources/stylesheet.css | 0
.../SolarFM/old}/utils/Dragging.py | 0
.../SolarFM/old}/utils/Events.py | 0
.../SolarFM/old}/utils/FileHandler.py | 0
.../solarfm-0.0.1/SolarFM/old}/utils/Grid.py | 0
.../solarfm-0.0.1/SolarFM/old}/utils/Icon.py | 0
.../SolarFM}/old/utils/Settings.py | 0
.../SolarFM/old}/utils/__init__.py | 0
.../SolarFM_exec_bin.cpp} | 4 +-
.../clear_pycache_dirs.sh | 0
src/versions/solarfm-0.0.1/compileBin.sh | 6 +
.../solarfm.desktop} | 8 +-
user_config/pyfm/icons/archive.png | Bin 1670 -> 0 bytes
user_config/pyfm/icons/audio.png | Bin 1544 -> 0 bytes
user_config/pyfm/icons/bin.png | Bin 858 -> 0 bytes
user_config/pyfm/icons/dir.png | Bin 850 -> 0 bytes
user_config/pyfm/icons/doc.png | Bin 702 -> 0 bytes
user_config/pyfm/icons/pdf.png | Bin 925 -> 0 bytes
user_config/pyfm/icons/presentation.png | Bin 882 -> 0 bytes
user_config/pyfm/icons/spreadsheet.png | Bin 707 -> 0 bytes
user_config/pyfm/icons/text.png | Bin 798 -> 0 bytes
user_config/pyfm/icons/video.png | Bin 1313 -> 0 bytes
user_config/pyfm/icons/web.png | Bin 1845 -> 0 bytes
.../{pyfm => solarfm}/ffmpegthumbnailer | Bin
.../solarfm}/icons/archive.png | Bin
.../solarfm}/icons/audio.png | Bin
.../solarfm}/icons/bin.png | Bin
.../solarfm}/icons/dir.png | Bin
.../solarfm}/icons/doc.png | Bin
.../solarfm}/icons/pdf.png | Bin
.../solarfm}/icons/presentation.png | Bin
.../solarfm}/icons/spreadsheet.png | Bin
.../solarfm}/icons/text.png | Bin
user_config/{pyfm => solarfm}/icons/trash.png | Bin
.../solarfm}/icons/video.png | Bin
.../solarfm}/icons/web.png | Bin
user_config/{pyfm => solarfm}/settings.json | 2 +-
181 files changed, 8751 insertions(+), 2452 deletions(-)
create mode 100644 bin/REMOVE.txt
delete mode 100644 bin/pytop-0-0-1-x64.deb
delete mode 100755 src/debs/pyFfm-0-0-1-x64/DEBIAN/postrm
delete mode 100755 src/debs/pyFfm-0-0-1-x64/bin/pytop
delete mode 100644 src/debs/pyFfm-0-0-1-x64/opt/PyFM/PyFM.py
delete mode 100644 src/debs/pyFfm-0-0-1-x64/opt/PyFM/resources/PyTop.glade
delete mode 100644 src/debs/pyFfm-0-0-1-x64/opt/PyFM/utils/Settings.py
rename src/debs/{pyFfm-0-0-1-x64 => solarfm-0-0-1-x64}/DEBIAN/control (77%)
create mode 100755 src/debs/solarfm-0-0-1-x64/DEBIAN/postrm
create mode 100755 src/debs/solarfm-0-0-1-x64/bin/solarfm
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/__builtins__.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/__init__.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/__main__.py (96%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/resources/Main_Window.glade (99%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm/resources/pyfm-64x64.png => debs/solarfm-0-0-1-x64/opt/SolarFM/resources/solarfm-64x64.png} (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm/resources/pyfm.png => debs/solarfm-0-0-1-x64/opt/SolarFM/resources/solarfm.png} (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/resources/stylesheet.css (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/shellfm/__init__.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/shellfm/windows/Window.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/shellfm/windows/WindowController.py (98%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/shellfm/windows/__init__.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/shellfm/windows/view/Path.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/shellfm/windows/view/View.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/shellfm/windows/view/__init__.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/shellfm/windows/view/icons/Icon.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/shellfm/windows/view/icons/__init__.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/shellfm/windows/view/icons/mixins/DesktopIconMixin.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/shellfm/windows/view/icons/mixins/VideoIconMixin.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/shellfm/windows/view/icons/mixins/__init__.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/shellfm/windows/view/icons/mixins/xdg/BaseDirectory.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/shellfm/windows/view/icons/mixins/xdg/Config.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/shellfm/windows/view/icons/mixins/xdg/DesktopEntry.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/shellfm/windows/view/icons/mixins/xdg/Exceptions.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/shellfm/windows/view/icons/mixins/xdg/IconTheme.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/shellfm/windows/view/icons/mixins/xdg/IniFile.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/shellfm/windows/view/icons/mixins/xdg/Locale.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/shellfm/windows/view/icons/mixins/xdg/Menu.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/shellfm/windows/view/icons/mixins/xdg/MenuEditor.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/shellfm/windows/view/icons/mixins/xdg/Mime.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/shellfm/windows/view/icons/mixins/xdg/RecentFiles.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/shellfm/windows/view/icons/mixins/xdg/__init__.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/shellfm/windows/view/icons/mixins/xdg/util.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/shellfm/windows/view/utils/FileHandler.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/shellfm/windows/view/utils/Launcher.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/shellfm/windows/view/utils/Settings.py (98%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/shellfm/windows/view/utils/__init__.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/signal_classes/Controller.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/signal_classes/Controller_Data.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/signal_classes/DBusControllerMixin.py (95%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/signal_classes/KeyboardSignalsMixin.py (97%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/signal_classes/ShowHideMixin.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/signal_classes/__init__.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/signal_classes/mixins/PaneMixin.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/signal_classes/mixins/TabMixin.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/signal_classes/mixins/WidgetFileActionMixin.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/signal_classes/mixins/WidgetMixin.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/signal_classes/mixins/WindowMixin.py (99%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/signal_classes/mixins/__init__.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM/solarfm} (94%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/utils/Logger.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/utils/Settings.py (100%)
rename src/{versions/pyfm-0.0.1/PyFM/new/pyfm => debs/solarfm-0-0-1-x64/opt/SolarFM}/utils/__init__.py (100%)
rename src/debs/{pyFfm-0-0-1-x64/usr/share/doc/pytop => solarfm-0-0-1-x64/usr/share/doc/solarfm}/copyright (87%)
delete mode 100644 src/versions/pyfm-0.0.1/PyFM/new/pyfm/resources/appchooserdlg.glade
delete mode 100644 src/versions/pyfm-0.0.1/PyFM/new/pyfm/resources/file_properties.glade
delete mode 100755 src/versions/pyfm-0.0.1/PyFM/old/PyFM.sh
delete mode 100644 src/versions/pyfm-0.0.1/PyFM/old/resources/stylesheet.css
delete mode 100644 src/versions/pyfm-0.0.1/PyFM/old/utils/Dragging.py
delete mode 100644 src/versions/pyfm-0.0.1/PyFM/old/utils/Events.py
delete mode 100644 src/versions/pyfm-0.0.1/PyFM/old/utils/FileHandler.py
delete mode 100644 src/versions/pyfm-0.0.1/PyFM/old/utils/Grid.py
delete mode 100644 src/versions/pyfm-0.0.1/PyFM/old/utils/Icon.py
delete mode 100644 src/versions/pyfm-0.0.1/PyFM/old/utils/__init__.py
delete mode 100755 src/versions/pyfm-0.0.1/compileBin.sh
rename src/versions/{pyfm-0.0.1/PyFM => solarfm-0.0.1/SolarFM}/new/setup.py (74%)
rename src/versions/{pyfm-0.0.1/PyFM/new/pyfm.sh => solarfm-0.0.1/SolarFM/new/solarfm.sh} (95%)
rename src/versions/{pyfm-0.0.1/PyFM/new/pyfm.toml => solarfm-0.0.1/SolarFM/new/solarfm.toml} (100%)
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/__builtins__.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/__init__.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/__main__.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/resources/Main_Window.glade
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/resources/solarfm-64x64.png
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/resources/solarfm.png
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/resources/stylesheet.css
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/shellfm/__init__.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/shellfm/windows/Window.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/shellfm/windows/WindowController.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/shellfm/windows/__init__.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/shellfm/windows/view/Path.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/shellfm/windows/view/View.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/shellfm/windows/view/__init__.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/shellfm/windows/view/icons/Icon.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/shellfm/windows/view/icons/__init__.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/shellfm/windows/view/icons/mixins/DesktopIconMixin.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/shellfm/windows/view/icons/mixins/VideoIconMixin.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/shellfm/windows/view/icons/mixins/__init__.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/shellfm/windows/view/icons/mixins/xdg/BaseDirectory.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/shellfm/windows/view/icons/mixins/xdg/Config.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/shellfm/windows/view/icons/mixins/xdg/DesktopEntry.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/shellfm/windows/view/icons/mixins/xdg/Exceptions.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/shellfm/windows/view/icons/mixins/xdg/IconTheme.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/shellfm/windows/view/icons/mixins/xdg/IniFile.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/shellfm/windows/view/icons/mixins/xdg/Locale.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/shellfm/windows/view/icons/mixins/xdg/Menu.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/shellfm/windows/view/icons/mixins/xdg/MenuEditor.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/shellfm/windows/view/icons/mixins/xdg/Mime.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/shellfm/windows/view/icons/mixins/xdg/RecentFiles.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/shellfm/windows/view/icons/mixins/xdg/__init__.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/shellfm/windows/view/icons/mixins/xdg/util.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/shellfm/windows/view/utils/FileHandler.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/shellfm/windows/view/utils/Launcher.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/shellfm/windows/view/utils/Settings.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/shellfm/windows/view/utils/__init__.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/signal_classes/Controller.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/signal_classes/Controller_Data.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/signal_classes/DBusControllerMixin.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/signal_classes/KeyboardSignalsMixin.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/signal_classes/ShowHideMixin.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/signal_classes/__init__.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/signal_classes/mixins/PaneMixin.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/signal_classes/mixins/TabMixin.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/signal_classes/mixins/WidgetFileActionMixin.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/signal_classes/mixins/WidgetMixin.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/signal_classes/mixins/WindowMixin.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/signal_classes/mixins/__init__.py
create mode 100755 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/solarfm
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/utils/Logger.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/utils/Settings.py
create mode 100644 src/versions/solarfm-0.0.1/SolarFM/new/solarfm/utils/__init__.py
rename src/versions/{pyfm-0.0.1/PyFM => solarfm-0.0.1/SolarFM}/old/PyFM.py (100%)
rename src/{debs/pyFfm-0-0-1-x64/opt/PyFM => versions/solarfm-0.0.1/SolarFM/old}/PyFM.sh (100%)
mode change 100644 => 100755
rename src/versions/{pyfm-0.0.1/PyFM => solarfm-0.0.1/SolarFM}/old/resources/PyFM.glade (100%)
rename src/{debs/pyFfm-0-0-1-x64/opt/PyFM => versions/solarfm-0.0.1/SolarFM/old}/resources/icons/archive.png (100%)
rename src/{debs/pyFfm-0-0-1-x64/opt/PyFM => versions/solarfm-0.0.1/SolarFM/old}/resources/icons/audio.png (100%)
rename src/{debs/pyFfm-0-0-1-x64/opt/PyFM => versions/solarfm-0.0.1/SolarFM/old}/resources/icons/bin.png (100%)
rename src/{debs/pyFfm-0-0-1-x64/opt/PyFM => versions/solarfm-0.0.1/SolarFM/old}/resources/icons/dir.png (100%)
rename src/{debs/pyFfm-0-0-1-x64/opt/PyFM => versions/solarfm-0.0.1/SolarFM/old}/resources/icons/doc.png (100%)
rename src/{debs/pyFfm-0-0-1-x64/opt/PyFM => versions/solarfm-0.0.1/SolarFM/old}/resources/icons/pdf.png (100%)
rename src/{debs/pyFfm-0-0-1-x64/opt/PyFM => versions/solarfm-0.0.1/SolarFM/old}/resources/icons/presentation.png (100%)
rename src/{debs/pyFfm-0-0-1-x64/opt/PyFM => versions/solarfm-0.0.1/SolarFM/old}/resources/icons/spreadsheet.png (100%)
rename src/{debs/pyFfm-0-0-1-x64/opt/PyFM => versions/solarfm-0.0.1/SolarFM/old}/resources/icons/text.png (100%)
rename src/{debs/pyFfm-0-0-1-x64/opt/PyFM => versions/solarfm-0.0.1/SolarFM/old}/resources/icons/video.png (100%)
rename src/{debs/pyFfm-0-0-1-x64/opt/PyFM => versions/solarfm-0.0.1/SolarFM/old}/resources/icons/web.png (100%)
rename src/{debs/pyFfm-0-0-1-x64/opt/PyFM => versions/solarfm-0.0.1/SolarFM/old}/resources/stylesheet.css (100%)
rename src/{debs/pyFfm-0-0-1-x64/opt/PyFM => versions/solarfm-0.0.1/SolarFM/old}/utils/Dragging.py (100%)
rename src/{debs/pyFfm-0-0-1-x64/opt/PyFM => versions/solarfm-0.0.1/SolarFM/old}/utils/Events.py (100%)
rename src/{debs/pyFfm-0-0-1-x64/opt/PyFM => versions/solarfm-0.0.1/SolarFM/old}/utils/FileHandler.py (100%)
rename src/{debs/pyFfm-0-0-1-x64/opt/PyFM => versions/solarfm-0.0.1/SolarFM/old}/utils/Grid.py (100%)
rename src/{debs/pyFfm-0-0-1-x64/opt/PyFM => versions/solarfm-0.0.1/SolarFM/old}/utils/Icon.py (100%)
rename src/versions/{pyfm-0.0.1/PyFM => solarfm-0.0.1/SolarFM}/old/utils/Settings.py (100%)
rename src/{debs/pyFfm-0-0-1-x64/opt/PyFM => versions/solarfm-0.0.1/SolarFM/old}/utils/__init__.py (100%)
rename src/versions/{pyfm-0.0.1/PyFM_exec_bin.cpp => solarfm-0.0.1/SolarFM_exec_bin.cpp} (67%)
rename src/versions/{pyfm-0.0.1 => solarfm-0.0.1}/clear_pycache_dirs.sh (100%)
create mode 100755 src/versions/solarfm-0.0.1/compileBin.sh
rename src/versions/{pyfm-0.0.1/pyfm.desktop => solarfm-0.0.1/solarfm.desktop} (75%)
delete mode 100644 user_config/pyfm/icons/archive.png
delete mode 100644 user_config/pyfm/icons/audio.png
delete mode 100644 user_config/pyfm/icons/bin.png
delete mode 100644 user_config/pyfm/icons/dir.png
delete mode 100644 user_config/pyfm/icons/doc.png
delete mode 100644 user_config/pyfm/icons/pdf.png
delete mode 100644 user_config/pyfm/icons/presentation.png
delete mode 100644 user_config/pyfm/icons/spreadsheet.png
delete mode 100644 user_config/pyfm/icons/text.png
delete mode 100644 user_config/pyfm/icons/video.png
delete mode 100644 user_config/pyfm/icons/web.png
rename user_config/{pyfm => solarfm}/ffmpegthumbnailer (100%)
rename {src/versions/pyfm-0.0.1/PyFM/old/resources => user_config/solarfm}/icons/archive.png (100%)
rename {src/versions/pyfm-0.0.1/PyFM/old/resources => user_config/solarfm}/icons/audio.png (100%)
rename {src/versions/pyfm-0.0.1/PyFM/old/resources => user_config/solarfm}/icons/bin.png (100%)
rename {src/versions/pyfm-0.0.1/PyFM/old/resources => user_config/solarfm}/icons/dir.png (100%)
rename {src/versions/pyfm-0.0.1/PyFM/old/resources => user_config/solarfm}/icons/doc.png (100%)
rename {src/versions/pyfm-0.0.1/PyFM/old/resources => user_config/solarfm}/icons/pdf.png (100%)
rename {src/versions/pyfm-0.0.1/PyFM/old/resources => user_config/solarfm}/icons/presentation.png (100%)
rename {src/versions/pyfm-0.0.1/PyFM/old/resources => user_config/solarfm}/icons/spreadsheet.png (100%)
rename {src/versions/pyfm-0.0.1/PyFM/old/resources => user_config/solarfm}/icons/text.png (100%)
rename user_config/{pyfm => solarfm}/icons/trash.png (100%)
rename {src/versions/pyfm-0.0.1/PyFM/old/resources => user_config/solarfm}/icons/video.png (100%)
rename {src/versions/pyfm-0.0.1/PyFM/old/resources => user_config/solarfm}/icons/web.png (100%)
rename user_config/{pyfm => solarfm}/settings.json (93%)
diff --git a/README.md b/README.md
index b27e603..ac9688d 100644
--- a/README.md
+++ b/README.md
@@ -1,15 +1,22 @@
-# PyFM
+# SolarFM
-# PyFM
-PyFM is a Gtk + Python file manager.
+# SolarFM
+SolarFM is a Gtk + Python file manager.
# Notes
```sudo apt-get install python3 wget steamcmd```
# TODO
+- Add prompt guards for actions.
+- Add path bar search dropdown.
+- Add "execute" and "execute in terminal" context options.
+- Add "go to trash" and "delete all trash" options.
+- Add save button for "show errors" dropdown.
+- Add simpleish plugin system to run bash/python scripts.
+- Add DnD context awareness for over folder drop.
# Images
-![1 PyFM showing different directories. ](images/pic1.png)
-![1 PyFM themed dark and made transparent. ](images/pic2.png)
+![1 SolarFM showing different directories. ](images/pic1.png)
+![1 SolarFM themed dark and made transparent. ](images/pic2.png)
diff --git a/bin/REMOVE.txt b/bin/REMOVE.txt
new file mode 100644
index 0000000..f95d44d
--- /dev/null
+++ b/bin/REMOVE.txt
@@ -0,0 +1 @@
+Remove me...
diff --git a/bin/pytop-0-0-1-x64.deb b/bin/pytop-0-0-1-x64.deb
deleted file mode 100644
index e6ad1ca4fab3144141d9d3aa2f801ffd562b7b7e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 20764
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%0Ar
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
diff --git a/src/debs/pyFfm-0-0-1-x64/opt/PyFM/PyFM.py b/src/debs/pyFfm-0-0-1-x64/opt/PyFM/PyFM.py
deleted file mode 100644
index 99795ce..0000000
--- a/src/debs/pyFfm-0-0-1-x64/opt/PyFM/PyFM.py
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/usr/bin/python3
-
-# Gtk Imports
-import gi, faulthandler
-gi.require_version('Gtk', '3.0')
-gi.require_version('WebKit2', '4.0')
-
-from gi.repository import Gtk as gtk
-from gi.repository import Gdk as gdk
-from gi.repository import WebKit2 as webkit
-
-# Python imports
-from utils import Settings, Events
-
-gdk.threads_init()
-class Main:
- def __init__(self):
- faulthandler.enable()
- webkit.WebView() # Needed for glade file to load...
-
- self.builder = gtk.Builder()
- self.settings = Settings()
- self.settings.attachBuilder(self.builder)
- self.builder.connect_signals(Events(self.settings))
-
- window = self.settings.createWindow()
- window.fullscreen()
- window.show_all()
-
-
-if __name__ == "__main__":
- try:
- main = Main()
- gtk.main()
- except Exception as e:
- print(e)
diff --git a/src/debs/pyFfm-0-0-1-x64/opt/PyFM/resources/PyTop.glade b/src/debs/pyFfm-0-0-1-x64/opt/PyFM/resources/PyTop.glade
deleted file mode 100644
index d2d2d35..0000000
--- a/src/debs/pyFfm-0-0-1-x64/opt/PyFM/resources/PyTop.glade
+++ /dev/null
@@ -1,305 +0,0 @@
-
-
-
-
-
-
-
-
-
- False
- popOutBttn
- bottom
-
-
- True
- False
- vertical
-
-
- 300
- 26
- True
- True
- gtk-edit
-
-
- False
- True
- 0
-
-
-
-
- True
- False
-
-
- gtk-copy
- True
- True
- True
- True
- True
-
-
- False
- True
- 0
-
-
-
-
- gtk-cut
- True
- True
- True
- True
- True
-
-
- False
- True
- 1
-
-
-
-
- gtk-paste
- True
- True
- True
- True
- True
-
-
- False
- True
- 2
-
-
-
-
- gtk-delete
- True
- True
- True
- 65
- True
- True
-
-
- False
- True
- end
- 3
-
-
-
-
- False
- True
- 1
-
-
-
-
-
-
- False
- True
- True
- popOutBttn
- bottom
-
-
- True
- False
- vertical
-
-
- True
- False
-
-
- gtk-home
- True
- True
- True
- True
- True
-
-
-
- False
- True
- 0
-
-
-
-
- gtk-refresh
- True
- True
- True
- True
- True
-
-
-
- False
- True
- 1
-
-
-
-
- True
- True
- edit-find-symbolic
- False
- False
-
-
-
- True
- True
- 2
-
-
-
-
- False
- True
- 0
-
-
-
-
- True
- True
-
-
-
-
-
-
- False
- True
- 1
-
-
-
-
-
-
diff --git a/src/debs/pyFfm-0-0-1-x64/opt/PyFM/utils/Settings.py b/src/debs/pyFfm-0-0-1-x64/opt/PyFM/utils/Settings.py
deleted file mode 100644
index 6c612f5..0000000
--- a/src/debs/pyFfm-0-0-1-x64/opt/PyFM/utils/Settings.py
+++ /dev/null
@@ -1,139 +0,0 @@
-
-# Gtk Imports
-import gi, cairo, os
-gi.require_version('Gtk', '3.0')
-gi.require_version('Gdk', '3.0')
-
-from gi.repository import Gtk as gtk
-from gi.repository import Gdk as gdk
-
-class Settings:
- def __init__(self):
- self.builder = None
- self.hideHiddenFiles = True
-
-
- self.GTK_ORIENTATION = 1 # HORIZONTAL (0) VERTICAL (1)
- self.THUMB_GENERATOR = "ffmpegthumbnailer"
- self.DEFAULTCOLOR = gdk.RGBA(0.0, 0.0, 0.0, 0.0) # ~#00000000
- self.MOUSEOVERCOLOR = gdk.RGBA(0.0, 0.9, 1.0, 0.64) # ~#00e8ff
- self.SELECTEDCOLOR = gdk.RGBA(0.4, 0.5, 0.1, 0.84)
-
- self.ColumnSize = 8
- self.usrHome = os.path.expanduser('~')
- self.desktopPath = self.usrHome + "/Desktop"
- self.webHome = 'http://webfm.com/'
- self.iconContainerWxH = [128, 128]
- self.systemIconImageWxH = [72, 72]
- self.viIconWxH = [256, 128]
- self.vidsExtensionList = ('.mkv', '.avi', '.flv', '.mov', '.m4v', '.mpg', '.wmv', '.mpeg', '.mp4', '.webm')
- self.imagesExtensionList = ('.png', '.jpg', '.jpeg', '.gif', '.ico', '.tga')
-
-
- def attachBuilder(self, builder):
- self.builder = builder
- self.builder.add_from_file("resources/PyTop.glade")
-
- def createWindow(self):
- # Get window and connect signals
- window = self.builder.get_object("Window")
- window.connect("delete-event", gtk.main_quit)
- self.setWindowData(window)
- return window
-
- def setWindowData(self, window):
- screen = window.get_screen()
- visual = screen.get_rgba_visual()
- if visual != None and screen.is_composited():
- window.set_visual(visual)
-
- # bind css file
- cssProvider = gtk.CssProvider()
- cssProvider.load_from_path('resources/stylesheet.css')
- screen = gdk.Screen.get_default()
- styleContext = gtk.StyleContext()
- styleContext.add_provider_for_screen(screen, cssProvider, gtk.STYLE_PROVIDER_PRIORITY_USER)
-
- window.set_app_paintable(True)
- monitors = self.getMonitorData(screen)
- window.resize(monitors[0].width, monitors[0].height)
-
- def getMonitorData(self, screen):
- monitors = []
- for m in range(screen.get_n_monitors()):
- monitors.append(screen.get_monitor_geometry(m))
-
- for monitor in monitors:
- print(str(monitor.width) + "x" + str(monitor.height) + "+" + str(monitor.x) + "+" + str(monitor.y))
-
- return monitors
-
-
- def returnBuilder(self): return self.builder
- def returnUserHome(self): return self.usrHome
- def returnDesktopPath(self): return self.usrHome + "/Desktop"
- def returnIconImagePos(self): return self.GTK_ORIENTATION
- def getThumbnailGenerator(self): return self.THUMB_GENERATOR
- def returnColumnSize(self): return self.ColumnSize
- def returnContainerWH(self): return self.iconContainerWxH
- def returnSystemIconImageWH(self): return self.systemIconImageWxH
- def returnVIIconWH(self): return self.viIconWxH
- def returnWebHome(self): return self.webHome
- def isHideHiddenFiles(self): return self.hideHiddenFiles
- def returnVidsExtensionList(self): return self.vidsExtensionList
- def returnImagesExtensionList(self): return self.imagesExtensionList
-
- def setDefaultWebviewSettings(self, widget, settings=None):
- # Usability
- settings.set_property('enable-fullscreen', True)
- settings.set_property('print-backgrounds', True)
- settings.set_property('enable-frame-flattening', False)
- settings.set_property('enable-plugins', True)
- settings.set_property('enable-java', False)
- settings.set_property('enable-resizable-text-areas', True)
- settings.set_property('zoom-text-only', False)
- settings.set_property('enable-smooth-scrolling', True)
- settings.set_property('enable-back-forward-navigation-gestures', False)
- settings.set_property('media-playback-requires-user-gesture', False)
- settings.set_property('enable-tabs-to-links', True)
- settings.set_property('enable-caret-browsing', False)
-
- # Security
- settings.set_property('user-agent','Mozilla/5.0 (X11; Generic; Linux x86-64) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.0 Safari/605.1.15')
- settings.set_property('enable-private-browsing', False)
- settings.set_property('enable-xss-auditor', True)
- settings.set_property('enable-hyperlink-auditing', False)
- settings.set_property('enable-site-specific-quirks', True)
- settings.set_property('enable-offline-web-application-cache', True)
- settings.set_property('enable-page-cache', True)
- settings.set_property('allow-modal-dialogs', False)
- settings.set_property('enable-html5-local-storage', True)
- settings.set_property('enable-html5-database', True)
- settings.set_property('allow-file-access-from-file-urls', False)
- settings.set_property('allow-universal-access-from-file-urls', False)
- settings.set_property('enable-dns-prefetching', False)
-
- # Media stuff
- # settings.set_property('hardware-acceleration-policy', 'on-demand')
- settings.set_property('enable-webgl', False)
- settings.set_property('enable-webaudio', True)
- settings.set_property('enable-accelerated-2d-canvas', True)
- settings.set_property('auto-load-images', True)
- settings.set_property('enable-media-capabilities', True)
- settings.set_property('enable-media-stream', True)
- settings.set_property('enable-mediasource', True)
- settings.set_property('enable-encrypted-media', True)
- settings.set_property('media-playback-allows-inline', True)
-
- # JS
- settings.set_property('enable-javascript', True)
- settings.set_property('enable-javascript-markup', True)
- settings.set_property('javascript-can-access-clipboard', False)
- settings.set_property('javascript-can-open-windows-automatically', False)
-
- # Debugging
- settings.set_property('enable-developer-extras', False)
- settings.set_property('enable-write-console-messages-to-stdout', False)
- settings.set_property('draw-compositing-indicators', False)
- settings.set_property('enable-mock-capture-devices', False)
- settings.set_property('enable-spatial-navigation', False)
diff --git a/src/debs/pyFfm-0-0-1-x64/DEBIAN/control b/src/debs/solarfm-0-0-1-x64/DEBIAN/control
similarity index 77%
rename from src/debs/pyFfm-0-0-1-x64/DEBIAN/control
rename to src/debs/solarfm-0-0-1-x64/DEBIAN/control
index e22da34..6be221d 100644
--- a/src/debs/pyFfm-0-0-1-x64/DEBIAN/control
+++ b/src/debs/solarfm-0-0-1-x64/DEBIAN/control
@@ -5,4 +5,4 @@ Priority: optional
Architecture: amd64
Depends: ffmpegthumbnailer (>= 2.0.10-0.1)
Maintainer: Maxim Stewart <1itdominator@gmail.com>
-Description: Pytop is a custom desktop GUI.
+Description: SolarFM is a Gtk + Python file manager.
diff --git a/src/debs/solarfm-0-0-1-x64/DEBIAN/postrm b/src/debs/solarfm-0-0-1-x64/DEBIAN/postrm
new file mode 100755
index 0000000..eb94f1c
--- /dev/null
+++ b/src/debs/solarfm-0-0-1-x64/DEBIAN/postrm
@@ -0,0 +1,11 @@
+#!/bin/bash
+#postrm (script executed after uninstalling the package)
+#set -e
+
+if [ -f /bin/solarfm ]; then
+ rm /bin/solarfm
+fi
+
+if [ -d /opt/SolarFM ]; then
+ rm -rf /opt/SolarFM
+fi
diff --git a/src/debs/solarfm-0-0-1-x64/bin/solarfm b/src/debs/solarfm-0-0-1-x64/bin/solarfm
new file mode 100755
index 0000000000000000000000000000000000000000..53fc165187094749ddc4709298192b44977877a6
GIT binary patch
literal 14416
zcmeHOU2GIp6u!G{X;ql6RN_J#J5ezO?X*Q~7UgHQE$x&PgHRNsux!~aU9;V7cBk6<
z6Ke{{DpiaR@}P-{KA0Hae9#vy)_`w9VhoWOtAS8du;3pt!g|iV=agXr0evyXdy_lg
zJwM;QXU^Q2-I=-b?CP%eU?3p41jR~$(z=i>RcZ@zlN3o85p#qsYDBe|1)5T*wzMFs
z7UPkiGB8$Xd!cd^n|4Z;ZJ#U^APipUEQFGT)~hiE)T&L_r*HA4A}
zl-MAltWa(7_^9IN4H0jM{2ANGpApBvvf;R!_$TA7BVLUuyAd^}EgOu>m0B?Jcn<(i
z=9BDK13t{_X}l{P2f_I#r1Xl0bgHL$X+t_upH5{4hw6tS&GpSot$fy6B8SGf8lmEx
z>bQTS2#$zx)G~TY2mj!hsWN#8GUd+
zuutg&h&rrX(8iT@*MiO9WM0M*`nNiM!bISyfC@N%GESaHg9}pE3Gi4fy@i-uWy==M$pGmP
zraXG@ahmq%=@KPb=RA7v{0`f;v}4}AahV=HowCwTZ*&H926P5=26P5=26P5=26P6l
zB?CWK-tvbt`eTLjV%fJ1LO46e-C*&MGx}-8grpbm`3}^@g~wo9S!+WJiiyR^ZmHf}oaz7Y0@SF{+A_6TKImF`kd4|8u7$6sDd1r&l@q&y_fV
z1J2y(TIq=ax`cT){idXLvBKlxw;mhd8&cd(J
z?r7o9jm}v84p49CT67+d!BiIe*?+#ot!+9=@pTo>b`?&y6;4EpH+|!bP6V7~Uk`qd
z$LEpF(MO}3qg$deZ;UdZv|sYL&KyY$NEe*}odKNzodKNzodKNzodKNzodKNzoq_*r
z1_JPQsUbVyHf+eI=4Ps!}?aO9Nc>f%zF1arPiNW_$rPIaY(|}6>y8#n`_!MBl
znPTy6z&5~70pACl4Nn8`-6od6lj}ubC={rkU0$&l^!Prl2I`TYibcHX7H#Dr)HOo=
z1$6vw>~=Ik9RVHMgb`{t!fPsTc%ouNtXgp2;=6CZ71h{R8fpgOS%iwH5!w}Ooii%|
z1A>Ts?14H2_9UQaH$pE5JB{#5C94f{taPx&n#Om@6q!@~AoFBG#VkC)g8YK=DF?ot~?
zdGCohN%reefbx_AaRXtPa2_GU%o<5}dyFM0x9WZqn|z;&>nyR{tU&B5vt^6*5t2FX
zt>g!bLS^Cc;SH|bpD_8u%Va5YUg7pp%B5r{`o9LeuG}9$Gp&zrC-mDpT3hcm>tI##
zBD1N%S-OBgn-JBcm5mqV#t8oW}mC3qEYkOwU8pve_k~w$Sqv{zhC#
z&U!b#T}b!7c)m|qiQ!CsxL={0Q{xkQM8EtgEkkwC41w2M)sVCyD_VA~4<
z*s_VZ8y8lxFV>rj_a|e03E;A%7_oRR7l%NR!ENX`-k;hAqh_Hm*jRD^)mcwIFRX3Z
z{{Cdf^{44?%Q&BLuJAk!)4b>JB>4Q{j(J|OTm=oBv&`r9|NLEm&5ndTpILneG`xKN
z4uHQ8z~?gFQtB0;y$q_C|2oD0I-Q87&)?7Q0Q+xnj&S^ZT^J`m??11V_Q(GK@G*zX
z=j+BK@!z5GF-FWC^ZERJ7Wacf4PF0
zt$+Lv!GiJg_?t{y`ff5Mh$#g#TRwiQn1BY(Q9513%y&!hJQ$1LpJm3+!KV@`^D9=`
zAOY_h`A5MQ=MMAv_lduU;_set{$t^B`8XZ}9qvE#`8$ot2J{xfl-r9N<};oIlb0`S
zTRAr>s8cYrWgg>Muz2}(#IGYh$H^TqkL7dFKpn@A>)NnHi0}8uvApFx2&g0X858s8
Y&S+GF`CjC)y{>Dh!&&S|MxQAD0_eLY3jhEB
literal 0
HcmV?d00001
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/__builtins__.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/__builtins__.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/__builtins__.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/__builtins__.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/__init__.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/__init__.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/__init__.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/__init__.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/__main__.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/__main__.py
similarity index 96%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/__main__.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/__main__.py
index b808f3e..91e7ad6 100644
--- a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/__main__.py
+++ b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/__main__.py
@@ -20,7 +20,7 @@ from __init__ import Main
if __name__ == "__main__":
try:
- setproctitle('PyFM')
+ setproctitle('solarfm')
faulthandler.enable() # For better debug info
parser = argparse.ArgumentParser()
# Add long and short arguments
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/resources/Main_Window.glade b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/resources/Main_Window.glade
similarity index 99%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/resources/Main_Window.glade
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/resources/Main_Window.glade
index 55386e8..a146017 100644
--- a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/resources/Main_Window.glade
+++ b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/resources/Main_Window.glade
@@ -6,15 +6,15 @@
False
5
center-on-parent
- pyfm.png
+ solarfm.png
dialog
center
- PyFM
+ SolarFM
0.0.1
Copyright (C) 2021 GPL2
by ITDominator
- https://code.itdominator.com/itdominator/PyFM
- PyFM - Copyright (C) 2021 ITDominator GPL2
+ https://code.itdominator.com/itdominator/SolarFM
+ SolarFM - Copyright (C) 2021 ITDominator GPL2
GNU GENERAL PUBLIC LICENSE
@@ -361,10 +361,9 @@ Public License instead of this License.
ITDominator <1itdominator@gmail.com>
-PyFM is developed on Atom, git, and using Python 3+ with Gtk GObject introspection.
-
+SolarFM is developed on Atom, git, and using Python 3+ with Gtk GObject introspection.
translator-credits
- pyfm-64x64.png
+ solarfm-64x64.png
True
custom
@@ -798,7 +797,7 @@ PyFM is developed on Atom, git, and using Python 3+ with Gtk GObject introspecti
center
1670
830
- pyfm.png
+ solarfm.png
center
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/resources/pyfm-64x64.png b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/resources/solarfm-64x64.png
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/resources/pyfm-64x64.png
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/resources/solarfm-64x64.png
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/resources/pyfm.png b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/resources/solarfm.png
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/resources/pyfm.png
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/resources/solarfm.png
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/resources/stylesheet.css b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/resources/stylesheet.css
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/resources/stylesheet.css
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/resources/stylesheet.css
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/__init__.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/__init__.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/__init__.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/__init__.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/Window.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/Window.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/Window.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/Window.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/WindowController.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/WindowController.py
similarity index 98%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/WindowController.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/WindowController.py
index f1c8e26..0cd271e 100644
--- a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/WindowController.py
+++ b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/WindowController.py
@@ -17,7 +17,7 @@ def threaded(fn):
class WindowController:
def __init__(self):
USER_HOME = path.expanduser('~')
- CONFIG_PATH = USER_HOME + "/.config/pyfm"
+ CONFIG_PATH = USER_HOME + "/.config/solarfm"
self.session_file = CONFIG_PATH + "/session.json"
self._event_sleep_time = 1
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/__init__.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/__init__.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/__init__.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/__init__.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/Path.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/Path.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/Path.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/Path.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/View.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/View.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/View.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/View.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/__init__.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/__init__.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/__init__.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/__init__.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/icons/Icon.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/icons/Icon.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/icons/Icon.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/icons/Icon.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/icons/__init__.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/icons/__init__.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/icons/__init__.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/icons/__init__.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/icons/mixins/DesktopIconMixin.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/icons/mixins/DesktopIconMixin.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/icons/mixins/DesktopIconMixin.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/icons/mixins/DesktopIconMixin.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/icons/mixins/VideoIconMixin.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/icons/mixins/VideoIconMixin.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/icons/mixins/VideoIconMixin.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/icons/mixins/VideoIconMixin.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/icons/mixins/__init__.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/icons/mixins/__init__.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/icons/mixins/__init__.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/icons/mixins/__init__.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/icons/mixins/xdg/BaseDirectory.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/icons/mixins/xdg/BaseDirectory.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/icons/mixins/xdg/BaseDirectory.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/icons/mixins/xdg/BaseDirectory.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/icons/mixins/xdg/Config.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/icons/mixins/xdg/Config.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/icons/mixins/xdg/Config.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/icons/mixins/xdg/Config.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/icons/mixins/xdg/DesktopEntry.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/icons/mixins/xdg/DesktopEntry.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/icons/mixins/xdg/DesktopEntry.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/icons/mixins/xdg/DesktopEntry.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/icons/mixins/xdg/Exceptions.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/icons/mixins/xdg/Exceptions.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/icons/mixins/xdg/Exceptions.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/icons/mixins/xdg/Exceptions.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/icons/mixins/xdg/IconTheme.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/icons/mixins/xdg/IconTheme.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/icons/mixins/xdg/IconTheme.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/icons/mixins/xdg/IconTheme.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/icons/mixins/xdg/IniFile.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/icons/mixins/xdg/IniFile.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/icons/mixins/xdg/IniFile.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/icons/mixins/xdg/IniFile.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/icons/mixins/xdg/Locale.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/icons/mixins/xdg/Locale.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/icons/mixins/xdg/Locale.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/icons/mixins/xdg/Locale.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/icons/mixins/xdg/Menu.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/icons/mixins/xdg/Menu.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/icons/mixins/xdg/Menu.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/icons/mixins/xdg/Menu.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/icons/mixins/xdg/MenuEditor.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/icons/mixins/xdg/MenuEditor.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/icons/mixins/xdg/MenuEditor.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/icons/mixins/xdg/MenuEditor.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/icons/mixins/xdg/Mime.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/icons/mixins/xdg/Mime.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/icons/mixins/xdg/Mime.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/icons/mixins/xdg/Mime.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/icons/mixins/xdg/RecentFiles.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/icons/mixins/xdg/RecentFiles.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/icons/mixins/xdg/RecentFiles.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/icons/mixins/xdg/RecentFiles.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/icons/mixins/xdg/__init__.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/icons/mixins/xdg/__init__.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/icons/mixins/xdg/__init__.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/icons/mixins/xdg/__init__.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/icons/mixins/xdg/util.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/icons/mixins/xdg/util.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/icons/mixins/xdg/util.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/icons/mixins/xdg/util.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/utils/FileHandler.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/utils/FileHandler.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/utils/FileHandler.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/utils/FileHandler.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/utils/Launcher.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/utils/Launcher.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/utils/Launcher.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/utils/Launcher.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/utils/Settings.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/utils/Settings.py
similarity index 98%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/utils/Settings.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/utils/Settings.py
index 7dac2b9..408bc42 100644
--- a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/utils/Settings.py
+++ b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/utils/Settings.py
@@ -14,7 +14,7 @@ class Settings:
logger = None
USER_HOME = path.expanduser('~')
- CONFIG_PATH = USER_HOME + "/.config/pyfm"
+ CONFIG_PATH = USER_HOME + "/.config/solarfm"
CONFIG_FILE = CONFIG_PATH + "/settings.json"
HIDE_HIDDEN_FILES = True
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/utils/__init__.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/utils/__init__.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/shellfm/windows/view/utils/__init__.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/shellfm/windows/view/utils/__init__.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/Controller.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/signal_classes/Controller.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/Controller.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/signal_classes/Controller.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/Controller_Data.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/signal_classes/Controller_Data.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/Controller_Data.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/signal_classes/Controller_Data.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/DBusControllerMixin.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/signal_classes/DBusControllerMixin.py
similarity index 95%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/DBusControllerMixin.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/signal_classes/DBusControllerMixin.py
index 2f8f955..ce49ee7 100644
--- a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/DBusControllerMixin.py
+++ b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/signal_classes/DBusControllerMixin.py
@@ -17,7 +17,7 @@ class DBusControllerMixin:
@threaded
def create_ipc_server(self):
- listener = Listener(('127.0.0.1', 4848), authkey=b'pyfm-ipc')
+ listener = Listener(('127.0.0.1', 4848), authkey=b'solarfm-ipc')
self.is_ipc_alive = True
while event_system.keep_ipc_alive:
conn = listener.accept()
@@ -56,7 +56,7 @@ class DBusControllerMixin:
def send_ipc_message(self, message="Empty Data..."):
try:
- conn = Client(('127.0.0.1', 4848), authkey=b'pyfm-ipc')
+ conn = Client(('127.0.0.1', 4848), authkey=b'solar-ipc')
conn.send(message)
conn.send('close connection')
except Exception as e:
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/KeyboardSignalsMixin.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/signal_classes/KeyboardSignalsMixin.py
similarity index 97%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/KeyboardSignalsMixin.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/signal_classes/KeyboardSignalsMixin.py
index 181f636..657753b 100644
--- a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/KeyboardSignalsMixin.py
+++ b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/signal_classes/KeyboardSignalsMixin.py
@@ -40,7 +40,7 @@ class KeyboardSignalsMixin:
self.tear_down()
if (self.ctrlDown and keyname == "slash") or keyname == "home":
self.builder.get_object("go_home").released()
- if self.ctrlDown and keyname == "r":
+ if (self.ctrlDown and keyname == "r") or keyname == "f5":
self.builder.get_object("refresh_view").released()
if (self.ctrlDown and keyname == "up") or (self.ctrlDown and keyname == "u"):
self.builder.get_object("go_up").released()
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/ShowHideMixin.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/signal_classes/ShowHideMixin.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/ShowHideMixin.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/signal_classes/ShowHideMixin.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/__init__.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/signal_classes/__init__.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/__init__.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/signal_classes/__init__.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/mixins/PaneMixin.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/signal_classes/mixins/PaneMixin.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/mixins/PaneMixin.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/signal_classes/mixins/PaneMixin.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/mixins/TabMixin.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/signal_classes/mixins/TabMixin.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/mixins/TabMixin.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/signal_classes/mixins/TabMixin.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/mixins/WidgetFileActionMixin.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/signal_classes/mixins/WidgetFileActionMixin.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/mixins/WidgetFileActionMixin.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/signal_classes/mixins/WidgetFileActionMixin.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/mixins/WidgetMixin.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/signal_classes/mixins/WidgetMixin.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/mixins/WidgetMixin.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/signal_classes/mixins/WidgetMixin.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/mixins/WindowMixin.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/signal_classes/mixins/WindowMixin.py
similarity index 99%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/mixins/WindowMixin.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/signal_classes/mixins/WindowMixin.py
index 2441b46..9aab631 100644
--- a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/mixins/WindowMixin.py
+++ b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/signal_classes/mixins/WindowMixin.py
@@ -63,7 +63,7 @@ class WindowMixin(TabMixin):
ctx = notebook.get_style_context()
ctx.add_class("notebook-selected-focus")
- self.window.set_title("PyFM ~ " + dir)
+ self.window.set_title("SolarFM ~ " + dir)
self.set_bottom_labels(view)
def set_path_text(self, wid, tid):
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/mixins/__init__.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/signal_classes/mixins/__init__.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/signal_classes/mixins/__init__.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/signal_classes/mixins/__init__.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/pyfm b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/solarfm
similarity index 94%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/pyfm
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/solarfm
index fa3604b..40cd1fd 100755
--- a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/pyfm
+++ b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/solarfm
@@ -13,6 +13,6 @@ function main() {
echo "Working Dir: " $(pwd)
source "/home/abaddon/Portable_Apps/py-venvs/flask-apps-venv/venv/bin/activate"
- python ../pyfm "$@"
+ python ../solarfm "$@"
}
main "$@";
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/utils/Logger.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/utils/Logger.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/utils/Logger.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/utils/Logger.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/utils/Settings.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/utils/Settings.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/utils/Settings.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/utils/Settings.py
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/utils/__init__.py b/src/debs/solarfm-0-0-1-x64/opt/SolarFM/utils/__init__.py
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm/utils/__init__.py
rename to src/debs/solarfm-0-0-1-x64/opt/SolarFM/utils/__init__.py
diff --git a/src/debs/pyFfm-0-0-1-x64/usr/share/doc/pytop/copyright b/src/debs/solarfm-0-0-1-x64/usr/share/doc/solarfm/copyright
similarity index 87%
rename from src/debs/pyFfm-0-0-1-x64/usr/share/doc/pytop/copyright
rename to src/debs/solarfm-0-0-1-x64/usr/share/doc/solarfm/copyright
index 04b188e..b293cfe 100644
--- a/src/debs/pyFfm-0-0-1-x64/usr/share/doc/pytop/copyright
+++ b/src/debs/solarfm-0-0-1-x64/usr/share/doc/solarfm/copyright
@@ -1,7 +1,7 @@
-Pytop is copyright 2019 Maxim Stewart.
-Pytop is currently developed by ITDominator <1itdominator@gmail.com>.
+SolarFM is copyright 2021 Maxim Stewart.
+SolarFM is currently developed by ITDominator <1itdominator@gmail.com>.
-License: GPLv2+
+License: GPLv2
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/resources/appchooserdlg.glade b/src/versions/pyfm-0.0.1/PyFM/new/pyfm/resources/appchooserdlg.glade
deleted file mode 100644
index 8d596cb..0000000
--- a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/resources/appchooserdlg.glade
+++ /dev/null
@@ -1,331 +0,0 @@
-
-
-
-
-
- False
- 6
- Choose Application
- 420
- dialog
-
-
- True
- False
- 12
-
-
- True
- False
- end
-
-
- gtk-cancel
- True
- True
- True
- False
- True
-
-
- True
- True
- 0
-
-
-
-
- gtk-ok
- True
- True
- True
- True
- False
- True
-
-
- True
- True
- 1
-
-
-
-
- False
- False
- end
- 0
-
-
-
-
- True
- False
- 4
- 4
- Please choose an application or enter a command:
- True
- 0
-
-
- False
- False
- 1
- 1
-
-
-
-
- True
- False
- 6
-
-
- True
- False
- 4
- 0
- File Type:
- 0
-
-
- False
- False
- 0
-
-
-
-
- True
- False
- True
-
-
- False
- False
- 2
-
-
-
-
- False
- True
- 2
- 3
-
-
-
-
- True
- True
-
-
-
- True
- True
- in
-
-
- True
- True
- True
- False
-
-
-
-
-
-
-
-
-
- True
- False
- _Associated Apps
- True
-
-
- False
-
-
-
-
- True
- True
- in
-
-
- True
- True
- False
-
-
-
-
-
-
-
- 1
-
-
-
-
- True
- False
- A_ll Apps
- True
-
-
- 1
- False
-
-
-
-
- False
- True
- 4
-
-
-
-
- True
- False
- 4
- 12
-
-
- True
- False
- _Command:
- True
- cmdline
-
-
- False
- False
- 0
-
-
-
-
- True
- True
- True
-
-
- True
- True
- 1
-
-
-
-
- True
- True
- False
-
-
-
- True
- False
- 0
- 0
-
-
- True
- False
- 2
-
-
- True
- False
- gtk-open
-
-
- False
- False
- 0
-
-
-
-
- True
- False
- _Browse
- True
-
-
- False
- False
- 1
-
-
-
-
-
-
-
-
- False
- False
- 2
-
-
-
-
- False
- True
- 5
-
-
-
-
- True
- False
- 6
-
-
- Opened in Terminal
- False
- True
- False
- True
- True
-
-
- False
- False
- 0
-
-
-
-
- _Set as default application for this file type
- True
- True
- False
- True
- True
-
-
- False
- False
- 1
-
-
-
-
- False
- True
- 6
-
-
-
-
-
- cancelbutton
- okbutton
-
-
-
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/resources/file_properties.glade b/src/versions/pyfm-0.0.1/PyFM/new/pyfm/resources/file_properties.glade
deleted file mode 100644
index aa8e891..0000000
--- a/src/versions/pyfm-0.0.1/PyFM/new/pyfm/resources/file_properties.glade
+++ /dev/null
@@ -1,858 +0,0 @@
-
-
-
-
-
- False
- 6
- File Properties
- center-on-parent
- 360
- dialog
- center
-
-
-
- True
- False
- 12
-
-
- True
- False
- end
-
-
- gtk-cancel
- True
- True
- True
- False
- True
-
-
-
- True
- True
- 0
-
-
-
-
- gtk-ok
- True
- True
- True
- False
- True
-
-
-
- True
- True
- 1
-
-
-
-
- False
- False
- end
- 0
-
-
-
-
- True
- True
- 6
-
-
- True
- False
- 6
- 6
- 12
-
-
- True
- False
- 4
- 9
- 2
- 12
- 6
-
-
- True
- False
- <b>File _Name:</b>
- True
- True
- file_name
- 0
-
-
- GTK_FILL
-
-
-
-
-
- True
- True
-
-
- 1
- 2
-
-
-
-
-
- True
- False
- <b>_Location:</b>
- True
- True
- location
- 0
-
-
- 1
- 2
- GTK_FILL
-
-
-
-
-
- True
- True
-
-
- 1
- 2
- 1
- 2
- GTK_FILL
-
-
-
-
-
- False
- <b>Link _Target:</b>
- True
- True
- target
- 0
-
-
- 2
- 3
- GTK_FILL
-
-
-
-
-
- True
-
-
- 1
- 2
- 2
- 3
- GTK_FILL
-
-
-
-
-
- True
- False
- <b>Type:</b>
- True
- True
- 0
- 0
-
-
- 3
- 4
- GTK_FILL
- GTK_FILL
-
-
-
-
- True
- True
- True
- end
- 0
- 0
-
-
- 1
- 2
- 3
- 4
- GTK_FILL
-
-
-
-
-
- True
- False
- <b>Opens _With:</b>
- True
- True
- open_with
- 0
-
-
- 4
- 5
- GTK_FILL
-
-
-
-
-
- True
- False
-
-
- 1
- 2
- 4
- 5
- GTK_FILL
- GTK_FILL
-
-
-
-
- True
- False
- <b>Total Size:</b>
- True
- True
- 0
-
-
- 5
- 6
- GTK_FILL
-
-
-
-
-
- True
- True
- True
- 0
-
-
- 1
- 2
- 5
- 6
- GTK_FILL
-
-
-
-
-
- True
- False
- <b>Size On Disk:</b>
- True
- True
- 0
-
-
- 6
- 7
- GTK_FILL
-
-
-
-
-
- True
- True
- True
- 0
-
-
- 1
- 2
- 6
- 7
- GTK_FILL
-
-
-
-
-
- True
- False
- <b>Count:</b>
- True
- True
- 0
-
-
- 7
- 8
- GTK_FILL
-
-
-
-
-
- True
- True
- True
- 0
-
-
- 1
- 2
- 7
- 8
- GTK_FILL
-
-
-
-
-
- True
- False
- <b>_Modified:</b>
- True
- True
- mtime
- 0
-
-
- 8
- 9
- GTK_FILL
-
-
-
-
-
- True
- True
-
-
- 1
- 2
- 8
- 9
- GTK_FILL
-
-
-
-
-
- True
- False
- <b>_Accessed:</b>
- True
- True
- atime
- 0
-
-
- 9
- 10
- GTK_FILL
-
-
-
-
-
- True
- True
-
-
- 1
- 2
- 9
- 10
- GTK_FILL
-
-
-
-
-
-
-
-
-
- True
- False
- _Info
- True
-
-
- False
-
-
-
-
- True
- False
- 6
- 6
- 12
-
-
- True
- False
- 6
-
-
- True
- False
- 2
- 2
- 2
- 12
- 6
-
-
- True
- False
- <b>_Owner:</b>
- True
- True
- owner
- 0
-
-
- GTK_FILL
-
-
-
-
-
- True
- False
- <b>_Group:</b>
- True
- True
- group
- 0
-
-
- 1
- 2
- GTK_FILL
-
-
-
-
-
- True
- True
-
-
- 1
- 2
-
-
-
-
-
- True
- True
-
-
- 1
- 2
- 1
- 2
-
-
-
-
-
- False
- False
- 0
-
-
-
-
- True
- False
-
-
- False
- False
- 1
-
-
-
-
- True
- False
- 4
- 3
- 6
- 12
- 6
-
-
- True
- False
- <b>Owner:</b>
- True
- True
- 0
-
-
- GTK_FILL
-
-
-
-
-
- True
- False
- <b>Group:</b>
- True
- True
- 0
-
-
- 1
- 2
- GTK_FILL
-
-
-
-
-
- True
- False
- <b>Other:</b>
- True
- True
- 0
-
-
- 2
- 3
- GTK_FILL
-
-
-
-
-
- Read
- True
- True
- False
- 2
- True
- True
-
-
- 1
- 2
- GTK_FILL
-
-
-
-
-
- Read
- True
- True
- False
- 2
- True
- True
-
-
- 1
- 2
- 1
- 2
- GTK_FILL
-
-
-
-
-
- Read
- True
- True
- False
- 2
- True
- True
-
-
- 1
- 2
- 2
- 3
- GTK_FILL
-
-
-
-
-
- Write
- True
- True
- False
- 2
- True
- True
-
-
- 2
- 3
- GTK_FILL
-
-
-
-
-
- Write
- True
- True
- False
- 2
- True
- True
-
-
- 2
- 3
- 1
- 2
- GTK_FILL
-
-
-
-
-
- Write
- True
- True
- False
- 2
- True
- True
-
-
- 2
- 3
- 2
- 3
- GTK_FILL
-
-
-
-
-
- Execute
- True
- True
- False
- 2
- True
- True
-
-
- 3
- 4
- GTK_FILL
-
-
-
-
-
- Execute
- True
- True
- False
- 2
- True
- True
-
-
- 3
- 4
- 1
- 2
- GTK_FILL
-
-
-
-
-
- Execute
- True
- True
- False
- 2
- True
- True
-
-
- 3
- 4
- 2
- 3
- GTK_FILL
-
-
-
-
-
- Set UID
- True
- True
- False
- 2
- True
- True
-
-
- 5
- 6
- GTK_FILL
-
-
-
-
-
- Set GID
- True
- True
- False
- 2
- True
- True
-
-
- 5
- 6
- 1
- 2
- GTK_FILL
-
-
-
-
-
- Sticky
- True
- True
- False
- 2
- True
- True
-
-
- 5
- 6
- 2
- 3
- GTK_FILL
-
-
-
-
-
- True
- False
-
-
- 4
- 5
- 3
- GTK_FILL
- GTK_FILL
-
-
-
-
- False
- True
- 2
-
-
-
-
- True
- False
-
-
- False
- False
- 3
-
-
-
-
- Recursive (apply changes to folders and their contents)
- True
- True
- False
- True
-
-
- False
- True
- 4
-
-
-
-
-
-
- 1
-
-
-
-
- True
- False
- _Permissions
- True
-
-
- 1
- False
-
-
-
-
- False
- True
- 2
-
-
-
-
-
- cancel_button
- ok_button
-
-
-
diff --git a/src/versions/pyfm-0.0.1/PyFM/old/PyFM.sh b/src/versions/pyfm-0.0.1/PyFM/old/PyFM.sh
deleted file mode 100755
index de59af8..0000000
--- a/src/versions/pyfm-0.0.1/PyFM/old/PyFM.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/bash
-
-# 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() {
- # GTK_DEBUG=interactive python3 ./PyFM.py
- python3 ./PyFM.py
-}
-main $@;
diff --git a/src/versions/pyfm-0.0.1/PyFM/old/resources/stylesheet.css b/src/versions/pyfm-0.0.1/PyFM/old/resources/stylesheet.css
deleted file mode 100644
index 9addcfa..0000000
--- a/src/versions/pyfm-0.0.1/PyFM/old/resources/stylesheet.css
+++ /dev/null
@@ -1,88 +0,0 @@
-viewport,
-treeview,
-treeview > header,
-notebook > stack,
-notebook > header {
- background-color: rgba(0, 0, 0, 0.24);
-}
-
-
-notebook > header {
- background-color: rgba(0, 0, 0, 0.24);
- border-color: rgba(0, 232, 255, 0.64);
-}
-
-box,
-iconview {
- background-color: rgba(0, 0, 0, 0.2);
- background: rgba(0, 0, 0, 0.2);
-}
-
-treeview,
-treeview.view {
- background: rgba(0, 0, 0, 0.2);
- background-color: rgba(0, 0, 0, 0.2);
-}
-
-cell {
- margin: 0em;
- padding: 0em;
- /* float: left; */
-}
-
-cell:focus {
- outline-style: solid;
- outline-color: rgba(0, 232, 255, 0.64);
-}
-
-
-/* Ivonview and children default color */
-.view {
- background-color: rgba(0, 0, 0, 0.22);
- color: #ebebeb;
-}
-
-
-/* Hover over color when not selected */
-.view:hover {
- box-shadow: inset 0 0 0 9999px alpha(rgba(0, 232, 255, 0.64), 0.54);
-}
-
-/* Handles the icon selection hover and selected hover color. */
-.view:selected,
-.view:selected:hover {
- box-shadow: inset 0 0 0 9999px rgba(15, 134, 13, 0.49);
-}
-
-/* Rubberband coloring */
-.rubberband,
-rubberband,
-flowbox rubberband,
-treeview.view rubberband,
-.content-view rubberband,
-.content-view .rubberband,
-XfdesktopIconView.view .rubberband {
- border: 1px solid #6c6c6c;
- background-color: rgba(21, 158, 167, 0.57);
-}
-
-XfdesktopIconView.view:active {
- background-color: rgba(172, 102, 21, 1);
-}
-
-
-XfdesktopIconView.view {
- border-radius: 4px;
- background-color: transparent;
- color: white;
- text-shadow: 0 1px 1px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);
-}
-
-XfdesktopIconView.view:active {
- box-shadow: none;
- text-shadow: none;
-}
-
-XfdesktopIconView.view .rubberband {
- border-radius: 0;
-}
diff --git a/src/versions/pyfm-0.0.1/PyFM/old/utils/Dragging.py b/src/versions/pyfm-0.0.1/PyFM/old/utils/Dragging.py
deleted file mode 100644
index a0b2856..0000000
--- a/src/versions/pyfm-0.0.1/PyFM/old/utils/Dragging.py
+++ /dev/null
@@ -1,79 +0,0 @@
-import os, gi
-
-gi.require_version('Gdk', '3.0')
-
-from gi.repository import Gdk
-from gi.repository import GObject
-
-
-class Dragging:
- def __init__(self):
- # higher values make movement more performant
- # lower values make movement smoother
- self.SENSITIVITY = 1
- self.desktop = None
- self.EvMask = Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.BUTTON1_MOTION_MASK
- self.offsetx = 0
- self.offsety = 0
- self.px = 0
- self.py = 0
- self.maxx = 0
- self.maxy = 0
-
- def connectEvents(self, desktop, widget):
- self.desktop = desktop
- widget.set_events(self.EvMask)
- widget.connect("button_press_event", self.press_event)
- widget.connect("motion_notify_event", self.draggingEvent)
- widget.show()
-
- def press_event(self, w, event):
- if event.button == 1:
- p = w.get_parent()
- # offset == distance of parent widget from edge of screen ...
- self.offsetx, self.offsety = p.get_window().get_position()
- # plus distance from pointer to edge of widget
- self.offsetx += event.x
- self.offsety += event.y
- # self.maxx, self.maxy both relative to the parent
- # note that we're rounding down now so that these max values don't get
- # rounded upward later and push the widget off the edge of its parent.
- self.maxx = self.RoundDownToMultiple(p.get_allocation().width - w.get_allocation().width, self.SENSITIVITY)
- self.maxy = self.RoundDownToMultiple(p.get_allocation().height - w.get_allocation().height, self.SENSITIVITY)
-
-
- def draggingEvent(self, widget, event):
- # x_root,x_root relative to screen
- # x,y relative to parent (fixed widget)
- # self.px,self.py stores previous values of x,y
-
- # get starting values for x,y
- x = event.x_root - self.offsetx
- y = event.y_root - self.offsety
- # make sure the potential coordinates x,y:
- # 1) will not push any part of the widget outside of its parent container
- # 2) is a multiple of self.SENSITIVITY
- x = self.RoundToNearestMultiple(self.Max(self.Min(x, self.maxx), 0), self.SENSITIVITY)
- y = self.RoundToNearestMultiple(self.Max(self.Min(y, self.maxy), 0), self.SENSITIVITY)
- if x != self.px or y != self.py:
- self.px = x
- self.py = y
- self.desktop.move(widget, x, y)
-
- def Min(self, a, b):
- if b < a:
- return b
- return a
-
- def Max(self, a, b):
- if b > a:
- return b
- return a
-
- def RoundDownToMultiple(self, i, m):
- return i/m*m
-
- def RoundToNearestMultiple(self, i, m):
- if i % m > m / 2:
- return (i/m+1)*m
- return i/m*m
diff --git a/src/versions/pyfm-0.0.1/PyFM/old/utils/Events.py b/src/versions/pyfm-0.0.1/PyFM/old/utils/Events.py
deleted file mode 100644
index fbd3962..0000000
--- a/src/versions/pyfm-0.0.1/PyFM/old/utils/Events.py
+++ /dev/null
@@ -1,72 +0,0 @@
-
-# Gtk Imports
-
-# Python imports
-from .Grid import Grid
-from .Dragging import Dragging
-
-class Events:
- def __init__(self, settings):
- self.settings = settings
- self.builder = self.settings.returnBuilder()
- self.desktop = self.builder.get_object("Desktop")
- self.webview = self.builder.get_object("webview")
- self.desktopPath = self.settings.returnDesktopPath()
-
- self.settings.setDefaultWebviewSettings(self.webview, self.webview.get_settings())
- self.webview.load_uri(self.settings.returnWebHome())
-
- # Add filter to allow only folders to be selected
- selectedDirDialog = self.builder.get_object("selectedDirDialog")
- filefilter = self.builder.get_object("Folders")
- selectedDirDialog.add_filter(filefilter)
- selectedDirDialog.set_filename(self.desktopPath)
-
- self.grid = None
- self.setIconViewDir(selectedDirDialog)
-
- def setIconViewDir(self, widget, data=None):
- newPath = widget.get_filename()
- Grid(self.desktop, self.settings, newPath)
-
-
-
- # File control events
- def createFile(self):
- pass
-
- def updateFile(self, widget, data=None):
- newName = widget.get_text().strip()
- if data and data.keyval == 65293: # Enter key event
- self.grid.updateFile(newName)
- elif data == None: # Save button 'event'
- self.grid.updateFile(newName)
-
- def deleteFile(self, widget, data=None):
- self.grid.deleteFile()
-
- def copyFile(self):
- pass
-
- def cutFile(self):
- pass
-
- def pasteFile(self):
- pass
-
- # Webview events
- def showWebview(self, widget):
- self.builder.get_object("webViewer").popup()
-
- def loadHome(self, widget):
- self.webview.load_uri(self.settings.returnWebHome())
-
- def runSearchWebview(self, widget, data=None):
- if data.keyval == 65293:
- self.webview.load_uri(widget.get_text().strip())
-
- def refreshPage(self, widget, data=None):
- self.webview.load_uri(self.webview.get_uri())
-
- def setUrlBar(self, widget, data=None):
- self.builder.get_object("webviewSearch").set_text(widget.get_uri())
diff --git a/src/versions/pyfm-0.0.1/PyFM/old/utils/FileHandler.py b/src/versions/pyfm-0.0.1/PyFM/old/utils/FileHandler.py
deleted file mode 100644
index c4dfa3b..0000000
--- a/src/versions/pyfm-0.0.1/PyFM/old/utils/FileHandler.py
+++ /dev/null
@@ -1,93 +0,0 @@
-
-import os, shutil, subprocess, threading
-
-
-def threaded(fn):
- def wrapper(*args, **kwargs):
- threading.Thread(target=fn, args=args, kwargs=kwargs).start()
- return wrapper
-
-class FileHandler:
- def __init__(self):
- # 'Filters'
- self.office = ('.doc', '.docx', '.xls', '.xlsx', '.xlt', '.xltx' '.xlm', '.ppt', 'pptx', '.pps', '.ppsx', '.odt', '.rtf')
- self.vids = ('.mkv', '.avi', '.flv', '.mov', '.m4v', '.mpg', '.wmv', '.mpeg', '.mp4', '.webm')
- self.txt = ('.txt', '.text', '.sh', '.cfg', '.conf')
- self.music = ('.psf', '.mp3', '.ogg' , '.flac')
- self.images = ('.png', '.jpg', '.jpeg', '.gif')
- self.pdf = ('.pdf')
-
- # Args
- self.MEDIAPLAYER = "mpv";
- self.IMGVIEWER = "mirage";
- self.MUSICPLAYER = "/opt/deadbeef/bin/deadbeef";
- self.OFFICEPROG = "libreoffice";
- self.TEXTVIEWER = "leafpad";
- self.PDFVIEWER = "evince";
- self.FILEMANAGER = "spacefm";
- self.MPLAYER_WH = " -xy 1600 -geometry 50%:50% ";
- self.MPV_WH = " -geometry 50%:50% ";
-
- @threaded
- def openFile(self, file):
- print("Opening: " + file)
- if file.lower().endswith(self.vids):
- subprocess.Popen([self.MEDIAPLAYER, self.MPV_WH, file])
- elif file.lower().endswith(self.music):
- subprocess.Popen([self.MUSICPLAYER, file])
- elif file.lower().endswith(self.images):
- subprocess.Popen([self.IMGVIEWER, file])
- elif file.lower().endswith(self.txt):
- subprocess.Popen([self.TEXTVIEWER, file])
- elif file.lower().endswith(self.pdf):
- subprocess.Popen([self.PDFVIEWER, file])
- elif file.lower().endswith(self.office):
- subprocess.Popen([self.OFFICEPROG, file])
- else:
- subprocess.Popen(['xdg-open', file])
-
-
- def createFile(self, newFileName):
- pass
-
- def updateFile(self, oldFileName, newFileName):
- try:
- print("Renaming...")
- print(oldFileName + " --> " + newFileName)
- os.rename(oldFileName, newFileName)
- return 0
- except Exception as e:
- print("An error occured renaming the file:")
- print(e)
- return 1
-
- def deleteFile(self, toDeleteFile):
- try:
- print("Deleting...")
- print(toDeleteFile)
- if os.path.exists(toDeleteFile):
- if os.path.isfile(toDeleteFile):
- os.remove(toDeleteFile)
- elif os.path.isdir(toDeleteFile):
- shutil.rmtree(toDeleteFile)
- else:
- print("An error occured deleting the file:")
- return 1
- else:
- print("The folder/file does not exist")
- return 1
- except Exception as e:
- print("An error occured deleting the file:")
- print(e)
- return 1
-
- return 0
-
- def copyFile(self):
- pass
-
- def cutFile(self):
- pass
-
- def pasteFile(self):
- pass
diff --git a/src/versions/pyfm-0.0.1/PyFM/old/utils/Grid.py b/src/versions/pyfm-0.0.1/PyFM/old/utils/Grid.py
deleted file mode 100644
index 392de55..0000000
--- a/src/versions/pyfm-0.0.1/PyFM/old/utils/Grid.py
+++ /dev/null
@@ -1,214 +0,0 @@
-
-
-# Gtk Imports
-import gi
-gi.require_version('Gtk', '3.0')
-gi.require_version('Gdk', '3.0')
-
-from gi.repository import Gtk as gtk
-from gi.repository import Gdk as gdk
-from gi.repository import GLib as glib
-from gi.repository import GdkPixbuf
-
-# Python imports
-import os, threading, time
-from os.path import isdir, isfile, join
-from os import listdir
-from .Icon import Icon
-from .FileHandler import FileHandler
-
-
-def threaded(fn):
- def wrapper(*args, **kwargs):
- threading.Thread(target=fn, args=args, kwargs=kwargs).start()
- return wrapper
-
-class Grid:
- def __init__(self, desktop, settings, newPath):
- self.desktop = desktop
- self.settings = settings
- self.filehandler = FileHandler()
-
- self.store = gtk.ListStore(GdkPixbuf.Pixbuf, str)
- self.usrHome = settings.returnUserHome()
- self.builder = settings.returnBuilder()
- self.ColumnSize = settings.returnColumnSize()
- self.currentPath = ""
- self.selectedFile = ""
-
- self.desktop.set_model(self.store)
- self.desktop.set_pixbuf_column(0)
- self.desktop.set_text_column(1)
- self.desktop.connect("item-activated", self.iconLeftClickEventManager)
- self.desktop.connect("button_press_event", self.iconRightClickEventManager, (self.desktop,))
- self.desktop.connect("selection-changed", self.setIconSelectionArray, (self.desktop,))
-
- self.vidsList = settings.returnVidsExtensionList()
- self.imagesList = settings.returnImagesExtensionList()
- self.gtkLock = False # Thread checks for gtkLock
- self.threadLock = False # Gtk checks for thread lock
- self.helperThread = None # Helper thread object
- self.toWorkPool = [] # Thread fills pool and gtk empties it
- self.copyCutArry = []
-
- self.setIconViewDir(newPath)
-
- def setIconViewDir(self, path):
- self.store.clear()
-
- self.currentPath = path
- dirPaths = ['.', '..']
- vids = []
- images = []
- desktop = []
- files = []
-
- for f in listdir(path):
- file = join(path, f)
- if self.settings.isHideHiddenFiles():
- if f.startswith('.'):
- continue
- if isfile(file):
- if file.lower().endswith(self.vidsList):
- vids.append(f)
- elif file.lower().endswith(self.imagesList):
- images.append(f)
- elif file.lower().endswith((".desktop",)):
- desktop.append(f)
- else:
- files.append(f)
- else:
- dirPaths.append(f)
-
- dirPaths.sort()
- vids.sort()
- images.sort()
- desktop.sort()
- files.sort()
- files = dirPaths + vids + images + desktop + files
-
- if self.helperThread:
- self.helperThread.terminate()
- self.helperThread = None
-
- # Run helper thread...
- self.threadLock = True
- self.helperThread = threading.Thread(target=self.generateDirectoryGridIcon, args=(path, files)).start()
- glib.idle_add(self.addToGrid, (file,)) # This must stay in the main thread b/c
- # gtk isn't thread safe/aware So, we
- # make a sad lil thread hot potato 'game'
- # out of this process.
-
-
- # @threaded
- def generateDirectoryGridIcon(self, dirPath, files):
- # NOTE: We'll be passing pixbuf after retreval to keep Icon.py file more
- # universaly usable. We can just remove get_pixbuf to get a gtk.Image type
- for file in files:
- image = Icon(self.settings).createIcon(dirPath, file)
- self.toWorkPool.append([image.get_pixbuf(), file])
- self.threadLock = False
- self.gtkLock = True
-
-
- def addToGrid(self, args):
- # NOTE: Returning true tells gtk to check again in the future when idle.
- # False ends checks and "continues normal flow"
- files = args[0]
-
- if len(self.toWorkPool) > 0:
- for dataSet in self.toWorkPool:
- self.store.append(dataSet)
-
- if len(self.store) == len(files): # Confirm processed all files and cleanup
- self.gtkLock = False
- self.threadLock = False
- self.toWorkPool.clear()
- return False
- # Check again when idle; If nothing else is updating, this function
- # gets called immediatly. So, we play hot potato by passing lock to Thread
- else:
- self.toWorkPool.clear()
- self.gtkLock = False
- self.threadLock = True
- time.sleep(.005) # Fixes refresh and up icon not being added.
- return True
-
- def setIconSelectionArray(self, widget, data=None):
- pass
- # os.system('cls||clear')
- # print(data)
-
- def iconLeftClickEventManager(self, widget, item):
- try:
- model = widget.get_model()
- fileName = model[item][1]
- dir = self.currentPath
- file = dir + "/" + fileName
-
- if fileName == ".":
- self.setIconViewDir(dir)
- elif fileName == "..":
- parentDir = os.path.abspath(os.path.join(dir, os.pardir))
- self.currentPath = parentDir
- self.setIconViewDir(parentDir)
- elif isdir(file):
- self.currentPath = file
- self.setIconViewDir(self.currentPath)
- elif isfile(file):
- self.filehandler.openFile(file)
- except Exception as e:
- print(e)
-
- def iconRightClickEventManager(self, widget, eve, params):
- try:
- if eve.type == gdk.EventType.BUTTON_PRESS and eve.button == 3:
- popover = self.builder.get_object("iconControlsWindow")
- popover.show_all()
- popover.popup()
- # # NOTE: Need to change name of listview box...
- # children = widget.get_children()[0].get_children()
- # fileName = children[1].get_text()
- # dir = self.currentPath
- # file = dir + "/" + fileName
- #
- # input = self.builder.get_object("iconRenameInput")
- # popover = self.builder.get_object("iconControlsWindow")
- # self.selectedFile = file # Used for return to caller
- #
- # input.set_text(fileName)
- # popover.set_relative_to(widget)
- # popover.set_position(gtk.PositionType.RIGHT)
- # popover.show_all()
- # popover.popup()
- except Exception as e:
- print(e)
-
-
- # Passthrough file control events
- def createFile(arg):
- pass
-
- def updateFile(self, file):
- newName = self.currentPath + "/" + file
- status = self.filehandler.updateFile(self.selectedFile, newName)
-
- if status == 0:
- self.selectedFile = newName
- self.setIconViewDir(self.currentPath)
-
- def deleteFile(self):
- status = self.filehandler.deleteFile(self.selectedFile)
-
- if status == 0:
- self.selectedFile = ""
- self.setIconViewDir(self.currentPath)
-
- def copyFile(self):
- pass
-
- def cutFile(self):
- pass
-
- def pasteFile(self):
- pass
diff --git a/src/versions/pyfm-0.0.1/PyFM/old/utils/Icon.py b/src/versions/pyfm-0.0.1/PyFM/old/utils/Icon.py
deleted file mode 100644
index 826e408..0000000
--- a/src/versions/pyfm-0.0.1/PyFM/old/utils/Icon.py
+++ /dev/null
@@ -1,167 +0,0 @@
-
-# Gtk Imports
-import gi
-gi.require_version('Gtk', '3.0')
-gi.require_version('Gdk', '3.0')
-
-from gi.repository import Gtk as gtk
-from gi.repository import Gio as gio
-from gi.repository import GdkPixbuf
-from xdg.DesktopEntry import DesktopEntry
-
-# Python Imports
-import os, subprocess, hashlib, threading
-
-from os.path import isdir, isfile, join
-
-
-
-def threaded(fn):
- def wrapper(*args, **kwargs):
- threading.Thread(target=fn, args=args, kwargs=kwargs).start()
- return wrapper
-
-class Icon:
- def __init__(self, settings):
- self.settings = settings
- self.thubnailGen = settings.getThumbnailGenerator()
- self.vidsList = settings.returnVidsExtensionList()
- self.imagesList = settings.returnImagesExtensionList()
- self.GTK_ORIENTATION = settings.returnIconImagePos()
- self.usrHome = settings.returnUserHome()
- self.iconContainerWH = settings.returnContainerWH()
- self.systemIconImageWH = settings.returnSystemIconImageWH()
- self.viIconWH = settings.returnVIIconWH()
-
-
- def createIcon(self, dir, file):
- fullPath = dir + "/" + file
- return self.getIconImage(file, fullPath)
-
-
- def getIconImage(self, file, fullPath):
- try:
- thumbnl = None
-
- # Video thumbnail
- if file.lower().endswith(self.vidsList):
- fileHash = hashlib.sha256(str.encode(fullPath)).hexdigest()
- hashImgPth = self.usrHome + "/.thumbnails/normal/" + fileHash + ".png"
-
- if isfile(hashImgPth) == False:
- self.generateVideoThumbnail(fullPath, hashImgPth)
-
- thumbnl = self.createIconImageBuffer(hashImgPth, self.viIconWH)
- # Image Icon
- elif file.lower().endswith(self.imagesList):
- thumbnl = self.createIconImageBuffer(fullPath, self.viIconWH)
- # .desktop file parsing
- elif fullPath.lower().endswith( ('.desktop',) ):
- thumbnl = self.parseDesktopFiles(fullPath)
- # System icons
- else:
- thumbnl = self.getSystemThumbnail(fullPath, self.systemIconImageWH[0])
-
- if thumbnl == None: # If no icon, try stock file icon...
- thumbnl = gtk.Image.new_from_icon_name("gtk-file", gtk.IconSize.LARGE_TOOLBAR)
-
- if thumbnl == None: # If no icon whatsoever, return internal default
- thumbnl = gtk.Image.new_from_file("resources/icons/bin.png")
-
- return thumbnl
- except Exception as e:
- print(e)
- return gtk.Image.new_from_file("resources/icons/bin.png")
-
-
- def parseDesktopFiles(self, fullPath):
- try:
- xdgObj = DesktopEntry(fullPath)
- icon = xdgObj.getIcon()
- iconsDirs = "/usr/share/icons"
- altIconPath = ""
-
- if "steam" in icon:
- steamIconsDir = self.usrHome + "/.thumbnails/steam_icons/"
- name = xdgObj.getName()
- fileHash = hashlib.sha256(str.encode(name)).hexdigest()
-
- if isdir(steamIconsDir) == False:
- os.mkdir(steamIconsDir)
-
- hashImgPth = steamIconsDir + fileHash + ".jpg"
- if isfile(hashImgPth) == True:
- # Use video sizes since headers are bigger
- return self.createIconImageBuffer(hashImgPth, self.viIconWH)
-
- execStr = xdgObj.getExec()
- parts = execStr.split("steam://rungameid/")
- id = parts[len(parts) - 1]
-
- # NOTE: Can try this logic instead...
- # if command exists use it instead of header image
- # if "steamcmd app_info_print id":
- # proc = subprocess.Popen(["steamcmd", "app_info_print", id])
- # proc.wait()
- # else:
- # use the bottom logic
-
- imageLink = "https://steamcdn-a.akamaihd.net/steam/apps/" + id + "/header.jpg"
- proc = subprocess.Popen(["wget", "-O", hashImgPth, imageLink])
- proc.wait()
-
- # Use video sizes since headers are bigger
- return self.createIconImageBuffer(hashImgPth, self.viIconWH)
- elif os.path.exists(icon):
- return self.createIconImageBuffer(icon, self.systemIconImageWH)
- else:
- for (dirpath, dirnames, filenames) in os.walk(iconsDirs):
- for file in filenames:
- appNM = "application-x-" + icon
- if appNM in file:
- altIconPath = dirpath + "/" + file
- break
-
- return self.createIconImageBuffer(altIconPath, self.systemIconImageWH)
- except Exception as e:
- print(e)
- return None
-
-
- def getSystemThumbnail(self, filename, size):
- try:
- iconPath = None
- if os.path.exists(filename):
- file = gio.File.new_for_path(filename)
- info = file.query_info('standard::icon' , 0 , gio.Cancellable())
- icon = info.get_icon().get_names()[0]
- iconTheme = gtk.IconTheme.get_default()
- iconFile = iconTheme.lookup_icon(icon , size , 0)
-
- if iconFile != None:
- iconPath = iconFile.get_filename()
- return self.createIconImageBuffer(iconPath, self.systemIconImageWH)
- else:
- return None
- else:
- return None
- except Exception as e:
- print(e)
- return None
-
-
- def createIconImageBuffer(self, path, wxh):
- try:
- pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(path, wxh[0], wxh[1], False)
- except Exception as e:
- return None
-
- return gtk.Image.new_from_pixbuf(pixbuf)
-
-
- def generateVideoThumbnail(self, fullPath, hashImgPth):
- try:
- proc = subprocess.Popen([self.thubnailGen, "-t", "65%", "-s", "300", "-c", "jpg", "-i", fullPath, "-o", hashImgPth])
- proc.wait()
- except Exception as e:
- print(e)
diff --git a/src/versions/pyfm-0.0.1/PyFM/old/utils/__init__.py b/src/versions/pyfm-0.0.1/PyFM/old/utils/__init__.py
deleted file mode 100644
index e291f0f..0000000
--- a/src/versions/pyfm-0.0.1/PyFM/old/utils/__init__.py
+++ /dev/null
@@ -1,6 +0,0 @@
-from utils.Dragging import Dragging
-from utils.Settings import Settings
-from utils.Events import Events
-from utils.Grid import Grid
-from utils.Icon import Icon
-from utils.FileHandler import FileHandler
diff --git a/src/versions/pyfm-0.0.1/compileBin.sh b/src/versions/pyfm-0.0.1/compileBin.sh
deleted file mode 100755
index 7b0e7b2..0000000
--- a/src/versions/pyfm-0.0.1/compileBin.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/bash
-
-function main() {
- gcc -no-pie -s PyFM_exec_bin.cpp -o pyfm
-}
-main;
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/setup.py b/src/versions/solarfm-0.0.1/SolarFM/new/setup.py
similarity index 74%
rename from src/versions/pyfm-0.0.1/PyFM/new/setup.py
rename to src/versions/solarfm-0.0.1/SolarFM/new/setup.py
index 5cd2885..17117f6 100644
--- a/src/versions/pyfm-0.0.1/PyFM/new/setup.py
+++ b/src/versions/solarfm-0.0.1/SolarFM/new/setup.py
@@ -1,9 +1,9 @@
from setuptools import setup
setup(
- name='pyfm',
+ name='SolarFM',
version='0.0.1',
- packages=['pyfm'],
+ packages=['solarfm'],
install_requires=[
'setproctitle',
'PyGobject',
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm.sh b/src/versions/solarfm-0.0.1/SolarFM/new/solarfm.sh
similarity index 95%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm.sh
rename to src/versions/solarfm-0.0.1/SolarFM/new/solarfm.sh
index a527c21..67de002 100755
--- a/src/versions/pyfm-0.0.1/PyFM/new/pyfm.sh
+++ b/src/versions/solarfm-0.0.1/SolarFM/new/solarfm.sh
@@ -13,6 +13,6 @@ function main() {
echo "Working Dir: " $(pwd)
source "/home/abaddon/Portable_Apps/py-venvs/flask-apps-venv/venv/bin/activate"
- python ./pyfm
+ python ./solarfm
}
main "$@";
diff --git a/src/versions/pyfm-0.0.1/PyFM/new/pyfm.toml b/src/versions/solarfm-0.0.1/SolarFM/new/solarfm.toml
similarity index 100%
rename from src/versions/pyfm-0.0.1/PyFM/new/pyfm.toml
rename to src/versions/solarfm-0.0.1/SolarFM/new/solarfm.toml
diff --git a/src/versions/solarfm-0.0.1/SolarFM/new/solarfm/__builtins__.py b/src/versions/solarfm-0.0.1/SolarFM/new/solarfm/__builtins__.py
new file mode 100644
index 0000000..ef1affd
--- /dev/null
+++ b/src/versions/solarfm-0.0.1/SolarFM/new/solarfm/__builtins__.py
@@ -0,0 +1,66 @@
+# Python imports
+import builtins
+
+# Gtk imports
+
+# Application imports
+from signal_classes.DBusControllerMixin import DBusControllerMixin
+
+
+class Builtins(DBusControllerMixin):
+ """Docstring for __builtins__ extender"""
+
+ def __init__(self):
+ # NOTE: The format used is list of [type, target, data]
+ # Where data may be any kind of data
+ self._gui_events = []
+ self._fm_events = []
+ self.monitor_events = True
+ self.keep_ipc_alive = True
+ self.is_ipc_alive = False
+
+ # Makeshift fake "events" type system FIFO
+ def _pop_gui_event(self):
+ if len(self._gui_events) > 0:
+ return self._gui_events.pop(0)
+ return None
+
+ def _pop_fm_event(self):
+ if len(self._fm_events) > 0:
+ return self._fm_events.pop(0)
+ return None
+
+
+ def push_gui_event(self, event):
+ if len(event) == 3:
+ self._gui_events.append(event)
+ return None
+
+ raise Exception("Invald event format! Please do: [type, target, data]")
+
+ def push_fm_event(self, event):
+ if len(event) == 3:
+ self._fm_events.append(event)
+ return None
+
+ raise Exception("Invald event format! Please do: [type, target, data]")
+
+ def read_gui_event(self):
+ return self._gui_events[0]
+
+ def read_fm_event(self):
+ return self._fm_events[0]
+
+ def consume_gui_event(self):
+ return self._pop_gui_event()
+
+ def consume_fm_event(self):
+ return self._pop_fm_event()
+
+
+
+# NOTE: Just reminding myself we can add to builtins two different ways...
+# __builtins__.update({"event_system": Builtins()})
+builtins.event_system = Builtins()
+builtins.event_sleep_time = 0.5
+builtins.debug = False
diff --git a/src/versions/solarfm-0.0.1/SolarFM/new/solarfm/__init__.py b/src/versions/solarfm-0.0.1/SolarFM/new/solarfm/__init__.py
new file mode 100644
index 0000000..14e08ac
--- /dev/null
+++ b/src/versions/solarfm-0.0.1/SolarFM/new/solarfm/__init__.py
@@ -0,0 +1,49 @@
+# Python imports
+import os, inspect, time
+
+# Gtk imports
+
+# Application imports
+from utils import Settings
+from signal_classes import Controller
+from __builtins__ import Builtins
+
+
+class Main(Builtins):
+ def __init__(self, args, unknownargs):
+ event_system.create_ipc_server()
+ time.sleep(0.5)
+ if not event_system.is_ipc_alive:
+ if unknownargs:
+ for arg in unknownargs:
+ if os.path.isdir(arg):
+ message = f"FILE|{arg}"
+ event_system.send_ipc_message(message)
+
+ if args.new_tab and os.path.isdir(args.new_tab):
+ message = f"FILE|{args.new_tab}"
+ event_system.send_ipc_message(message)
+
+ raise Exception("IPC Server Exists: Will send path(s) to it and close...")
+
+
+ settings = Settings()
+ settings.createWindow()
+
+ controller = Controller(args, unknownargs, settings)
+ if not controller:
+ raise Exception("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 Exception as e:
+ pass
+
+ settings.builder.connect_signals(handlers)
diff --git a/src/versions/solarfm-0.0.1/SolarFM/new/solarfm/__main__.py b/src/versions/solarfm-0.0.1/SolarFM/new/solarfm/__main__.py
new file mode 100644
index 0000000..91e7ad6
--- /dev/null
+++ b/src/versions/solarfm-0.0.1/SolarFM/new/solarfm/__main__.py
@@ -0,0 +1,39 @@
+#!/usr/bin/python3
+
+
+# Python imports
+import argparse
+from setproctitle import setproctitle
+
+import tracemalloc
+tracemalloc.start()
+
+
+# Gtk imports
+import gi, faulthandler, traceback
+gi.require_version('Gtk', '3.0')
+from gi.repository import Gtk
+
+# Application imports
+from __init__ import Main
+
+
+if __name__ == "__main__":
+ try:
+ setproctitle('solarfm')
+ faulthandler.enable() # For better debug info
+ parser = argparse.ArgumentParser()
+ # Add long and short arguments
+ parser.add_argument("--new-tab", "-t", default="", help="Open a file into new tab.")
+ parser.add_argument("--new-window", "-w", default="", help="Open a file into a new window.")
+
+ # Read arguments (If any...)
+ args, unknownargs = parser.parse_known_args()
+
+ Main(args, unknownargs)
+ Gtk.main()
+ except Exception as e:
+ print(repr(e))
+ event_system.keep_ipc_alive = False
+ if debug:
+ traceback.print_exc()
diff --git a/src/versions/solarfm-0.0.1/SolarFM/new/solarfm/resources/Main_Window.glade b/src/versions/solarfm-0.0.1/SolarFM/new/solarfm/resources/Main_Window.glade
new file mode 100644
index 0000000..a146017
--- /dev/null
+++ b/src/versions/solarfm-0.0.1/SolarFM/new/solarfm/resources/Main_Window.glade
@@ -0,0 +1,1653 @@
+
+
+
+
+
+ False
+ 5
+ center-on-parent
+ solarfm.png
+ dialog
+ center
+ SolarFM
+ 0.0.1
+ Copyright (C) 2021 GPL2
+ by ITDominator
+ https://code.itdominator.com/itdominator/SolarFM
+ SolarFM - Copyright (C) 2021 ITDominator GPL2
+
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
+
+ Lead Developer:
+ ITDominator <1itdominator@gmail.com>
+
+
+SolarFM is developed on Atom, git, and using Python 3+ with Gtk GObject introspection.
+ translator-credits
+ solarfm-64x64.png
+ True
+ custom
+
+
+ False
+
+
+ False
+
+
+ False
+ False
+ 0
+
+
+
+
+
+
+
+ True
+ False
+ gtk-new
+
+
+
+ True
+ False
+ gtk-justify-center
+
+
+
+ True
+ False
+ gtk-open
+
+
+ True
+ False
+ gtk-edit
+ 3
+
+
+ True
+ False
+ gtk-edit
+
+
+ True
+ False
+ gtk-media-forward
+
+
+
+ True
+ False
+ gtk-apply
+ 3
+
+
+ True
+ False
+ gtk-apply
+ 3
+
+
+ True
+ False
+ gtk-apply
+ 3
+
+
+ True
+ False
+ gtk-apply
+ 3
+
+
+ 800
+ 600
+ False
+ center
+ 1670
+ 830
+ solarfm.png
+ center
+
+
+
+
+ True
+ False
+ vertical
+ top
+
+
+ True
+ False
+
+
+
+ True
+ True
+ 0
+
+
+
+
+ True
+ False
+ 5
+ start
+
+
+ tggl_notebook_1
+ True
+ True
+ True
+ tggl_notebook_1_img
+ True
+
+
+
+ True
+ True
+ 0
+
+
+
+
+ tggl_notebook_2
+ True
+ True
+ True
+ tggl_notebook_2_img
+ True
+
+
+
+ True
+ True
+ 1
+
+
+
+
+ tggl_notebook_3
+ True
+ True
+ True
+ tggl_notebook_3_img
+ True
+
+
+
+ True
+ True
+ 2
+
+
+
+
+ tggl_notebook_4
+ True
+ True
+ True
+ tggl_notebook_4_img
+ True
+
+
+
+ True
+ True
+ 3
+
+
+
+
+ False
+ True
+ 1
+
+
+
+
+
+ True
+ False
+ False
+ False
+ False
+ False
+
+
+ True
+ True
+ 2
+
+
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ False
+
+
+ gtk-home
+ go_home
+ True
+ True
+ True
+ True
+ True
+
+
+
+ False
+ True
+ 0
+
+
+
+
+ gtk-refresh
+ refresh_view
+ True
+ True
+ True
+ True
+ True
+
+
+
+ False
+ True
+ 1
+
+
+
+
+ gtk-go-up
+ go_up
+ True
+ True
+ True
+ True
+ True
+
+
+
+ False
+ True
+ 2
+
+
+
+
+ path_entry
+ True
+ True
+ True
+ Path...
+
+
+
+ True
+ True
+ 3
+
+
+
+
+ gtk-add
+ create_tab
+ True
+ True
+ True
+ True
+ True
+
+
+
+ False
+ True
+ 4
+
+
+
+
+ False
+ True
+ 1
+
+
+
+
+ True
+ True
+ True
+ True
+ vertical
+ True
+
+
+ True
+ True
+ 5
+ True
+ True
+ True
+
+
+ notebook1
+ True
+ True
+ True
+ 5
+ 5
+ 5
+ 5
+ False
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+ True
+
+
+
+
+ notebook2
+ True
+ True
+ 5
+ 5
+ 5
+ 5
+ False
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+ True
+
+
+
+
+ True
+ True
+
+
+
+
+ True
+ True
+ 5
+ True
+ True
+ True
+
+
+ notebook3
+ True
+ True
+ 5
+ 5
+ 5
+ 5
+ False
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+ True
+
+
+
+
+ notebook4
+ True
+ True
+ 5
+ 5
+ 5
+ False
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+ True
+
+
+
+
+ True
+ True
+
+
+
+
+ True
+ True
+ 2
+
+
+
+
+ True
+ False
+ 10
+ 10
+ 10
+ 10
+ 6
+ 6
+ 15
+ top
+
+
+ True
+ False
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ False
+
+
+ False
+ True
+ 1
+
+
+
+
+ True
+ False
+
+
+ False
+ True
+ 2
+
+
+
+
+ False
+ True
+ 3
+
+
+
+
+
+
+ 320
+ False
+ True
+ controll_box
+ bottom
+
+
+ 600
+ True
+ True
+ True
+ in
+ False
+
+
+ message_view
+ True
+ True
+ True
+ False
+ False
+ message_buffer
+
+
+
+
+
+
+ True
+ False
+ user-trash
+
+
+
diff --git a/src/versions/solarfm-0.0.1/SolarFM/new/solarfm/resources/solarfm-64x64.png b/src/versions/solarfm-0.0.1/SolarFM/new/solarfm/resources/solarfm-64x64.png
new file mode 100644
index 0000000000000000000000000000000000000000..1a403ae3ca0be18c3661898bdcd9bfb5dfd2b80a
GIT binary patch
literal 16172
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
literal 0
HcmV?d00001
diff --git a/src/versions/solarfm-0.0.1/SolarFM/new/solarfm/resources/solarfm.png b/src/versions/solarfm-0.0.1/SolarFM/new/solarfm/resources/solarfm.png
new file mode 100644
index 0000000000000000000000000000000000000000..83974e113b0b1bb8b49937aed6fbbe6d86ec638b
GIT binary patch
literal 40783
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