Fixed app icon error; created .pkg

This commit is contained in:
Thomas Wilczynski 2025-11-22 14:56:29 -08:00
commit 4fea9596f9
8 changed files with 127 additions and 6 deletions

2
.gitignore vendored
View file

@ -4,5 +4,5 @@ venv/
venv_linux/
build/
dist/
Finch Filer.spec
finch_filer.spec
test.bat

BIN
Finch Filer Normal file

Binary file not shown.

View file

@ -1,4 +1,4 @@
# Finch Filer V1.0.1
# Finch Filer V1.0.2
---
@ -80,6 +80,10 @@ Email: thomas.j.wilc@gmail.com
## Changelog
1.0.2
- Fixed fatal error when running on GNU/Linux
1.0.1
- Improved directory structure

View file

@ -46,14 +46,14 @@
"action": "ignore",
"active": true,
"destination": "~/Downloads/",
"extensions": ["*.exe", "*.msi", "*.elf"],
"extensions": ["*.exe", "*.msi", "*.dmg", "*.pkg", "*.deb", "*.elf"],
"name": "Programs"
},
"archive": {
"action": "ignore",
"active": true,
"destination": "~/Downloads/",
"extensions": ["*.zip", "*.rar", "*.tar", "*.iso", "*.gz", "*.lz", "*.rz", "*.7z", "*.dmg"],
"extensions": ["*.zip", "*.rar", "*.tar", "*.iso", "*.gz", "*.lz", "*.rz", "*.xz", "*.7z"],
"name": "Archives"
},
"other": {

98
icon.svg Normal file
View file

@ -0,0 +1,98 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="256"
height="256"
viewBox="0 0 67.733332 67.733333"
version="1.1"
id="svg1"
inkscape:export-filename="icon3x.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
sodipodi:docname="finchfiler.svg"
xml:space="preserve"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview1"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:document-units="px"
inkscape:zoom="1.5385097"
inkscape:cx="-57.198209"
inkscape:cy="124.4711"
inkscape:window-width="1920"
inkscape:window-height="1009"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" /><defs
id="defs1"><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath5"><circle
style="fill:#000000;fill-opacity:1;stroke-width:3.18082"
id="circle5"
cx="33.866665"
cy="33.866665"
r="33.866665" /></clipPath><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath6"><circle
style="fill:#000000;fill-opacity:1;stroke-width:3.18082"
id="circle6"
cx="26.569826"
cy="29.612404"
r="33.866665" /></clipPath><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath7"><circle
style="fill:#000000;fill-opacity:1;stroke-width:3.18082"
id="circle7"
cx="33.866665"
cy="33.866665"
r="33.866665" /></clipPath><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath8"><circle
style="fill:#000000;fill-opacity:1;stroke-width:3.18082"
id="circle8"
cx="33.866665"
cy="33.866665"
r="33.866665" /></clipPath></defs><g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"><circle
style="fill:#000000;fill-opacity:1;stroke-width:3.18082"
id="path1"
cx="33.866665"
cy="33.866665"
r="33.866665" /><circle
style="fill:#121829;fill-opacity:1;stroke-width:2.94787"
id="path1-3"
cx="31.38636"
cy="36.34697"
r="31.38636"
clip-path="url(#clipPath8)" /><circle
style="fill:#243055;fill-opacity:1;stroke-width:2.7149"
id="path1-3-6"
cx="28.905964"
cy="38.827366"
r="28.905964"
clip-path="url(#clipPath7)" /><g
id="g3"
transform="translate(7.2968372,4.2542602)"
clip-path="url(#clipPath6)"><path
style="fill:#4799eb;fill-opacity:1;stroke:none;stroke-width:0.87448;stroke-dasharray:none;stroke-opacity:0.25"
d="m 21.369517,71.713268 -33.916606,0.120981 -0.05787,-40.546304 c 0,0 8.4360406,-8.929081 14.0267803,-12.584561 5.5907354,-3.655482 10.4824687,-5.945767 17.3934427,-5.907877 6.728855,0.03688 9.66495,2.941316 11.952518,5.564649 2.112684,2.422781 2.428291,7.337052 2.428291,7.337052 0,0 3.402655,0.371994 6.066254,1.867798 2.65653,1.491828 5.621298,4.528638 5.621298,4.528638 0,0 -3.131617,1.663512 -6.107621,2.925805 -3.097648,1.313889 -5.149874,1.633396 -6.8701,3.78368 -1.720227,2.150287 -3.313462,4.889424 -3.70542,9.409069 -0.379414,4.375022 -1.756455,9.401798 -2.732385,13.168902 -0.979997,3.782797 -4.098582,10.332168 -4.098582,10.332168 z"
id="path2-4"
sodipodi:nodetypes="cccssscscssssc" /><circle
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.192216;stroke-dasharray:none;stroke-opacity:0.25"
id="path3"
cx="20.932432"
cy="23.50864"
r="3.175" /></g></g></svg>

After

Width:  |  Height:  |  Size: 4 KiB

View file

@ -1,2 +1,2 @@
__version__ = "1.0.1"
__version__ = "1.0.2"
__author__ = "Gull"

View file

@ -54,12 +54,17 @@ class App(tk.Tk):
super().__init__()
self.title(APP_NAME)
self.option_add('*tearOff', tk.FALSE)
self.iconbitmap(ut.parse_dir("#/icon.ico"))
self.fm = fm.Manager(True) # Main file manager object
self.log = list() # Running list of all logs
self.temp = {"column": "", "reverse": False} # Temporary data
self.current_mode = "all"
self.custom_rules_path = RULES_PATH
try:
self.iconbitmap(ut.get_icon_file())
except Exception as error:
log.warning("Failed to load icon!")
self.gui() # User interface
self.load_config() # File rules configuration
self.prep() # Ready state

View file

@ -53,6 +53,20 @@ def save_json_file(filepath, data, raw=False):
except Exception as error:
raise error
def get_icon_file():
"""Attempts to return a valid icon file."""
if os.name == "nt":
path = ""
try:
path = sys._MEIPASS # For PyInstaller
except Exception:
path = os.path.dirname(os.path.abspath(__file__))
return pathlib.Path(path).parent.parent / "icon.ico"
else:
path = os.path.dirname(os.path.abspath(__file__))
return pathlib.Path(path).parent.parent / "icon.svg"
def parse_dir(path="", ignore_mkdir=False):
"""Converts and creates a directory (can be full file path)."""
if path[0] == "~": # Denotes the current user directory