Skip to content

Commit 64d5267

Browse files
Add more file icons
1 parent 977a242 commit 64d5267

File tree

1 file changed

+84
-4
lines changed

1 file changed

+84
-4
lines changed

src/ui/widgets/file.py

Lines changed: 84 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,7 @@ def __init__(self, path, file_name):
2525
else:
2626
name = "folder"
2727
else:
28-
if file_name[len(file_name) - 4:len(file_name)] in [".png", ".jpg"]:
29-
name = "image-x-generic"
30-
else:
31-
name = "text-x-generic"
28+
name = self._get_file_icon(file_name)
3229
super().__init__(icon_name=name)
3330

3431
self.path = path
@@ -38,6 +35,89 @@ def __init__(self, path, file_name):
3835
self.drag_source.connect("prepare", self.move)
3936
self.add_controller(self.drag_source)
4037

38+
def _get_file_icon(self, file_name):
39+
"""Determine the appropriate icon for a file based on its extension."""
40+
if '.' not in file_name:
41+
return "text-x-generic"
42+
43+
extension = file_name.lower().split('.')[-1]
44+
45+
# Image files
46+
image_extensions = ['png', 'jpg', 'jpeg', 'gif', 'bmp', 'tiff', 'tif', 'svg', 'webp', 'ico', 'xpm']
47+
if extension in image_extensions:
48+
return "image-x-generic"
49+
50+
# Video files
51+
video_extensions = ['mp4', 'avi', 'mkv', 'mov', 'wmv', 'flv', 'webm', 'm4v', '3gp', 'ogv']
52+
if extension in video_extensions:
53+
return "video-x-generic"
54+
55+
# Audio files
56+
audio_extensions = ['mp3', 'wav', 'flac', 'ogg', 'aac', 'm4a', 'wma', 'opus']
57+
if extension in audio_extensions:
58+
return "audio-x-generic"
59+
60+
# Document files
61+
if extension == 'pdf':
62+
return "application-pdf"
63+
64+
doc_extensions = ['doc', 'docx', 'odt', 'rtf']
65+
if extension in doc_extensions:
66+
return "x-office-document"
67+
68+
spreadsheet_extensions = ['xls', 'xlsx', 'ods', 'csv']
69+
if extension in spreadsheet_extensions:
70+
return "x-office-spreadsheet"
71+
72+
presentation_extensions = ['ppt', 'pptx', 'odp']
73+
if extension in presentation_extensions:
74+
return "x-office-presentation"
75+
76+
# Archive files
77+
archive_extensions = ['zip', 'rar', '7z', 'tar', 'gz', 'bz2', 'xz', 'deb', 'rpm']
78+
if extension in archive_extensions:
79+
return "package-x-generic"
80+
81+
# Code files
82+
code_extensions = ['py', 'js', 'html', 'css', 'cpp', 'c', 'h', 'java', 'php', 'rb', 'go', 'rs']
83+
if extension in code_extensions:
84+
return "text-x-script"
85+
86+
# Web files
87+
if extension in ['html', 'htm']:
88+
return "text-html"
89+
90+
if extension in ['css']:
91+
return "text-css"
92+
93+
# Configuration files
94+
config_extensions = ['conf', 'cfg', 'ini', 'json', 'xml', 'yaml', 'yml', 'toml']
95+
if extension in config_extensions:
96+
return "text-x-generic-template"
97+
98+
# Executable files
99+
executable_extensions = ['exe', 'msi', 'deb', 'rpm', 'appimage', 'flatpak', 'snap']
100+
if extension in executable_extensions:
101+
return "application-x-executable"
102+
103+
# Script files
104+
script_extensions = ['sh', 'bash', 'zsh', 'fish', 'bat', 'cmd', 'ps1']
105+
if extension in script_extensions:
106+
return "text-x-script"
107+
108+
# Text files
109+
text_extensions = ['txt', 'md', 'rst', 'log', 'readme']
110+
if extension in text_extensions:
111+
return "text-x-generic"
112+
113+
# Font files
114+
font_extensions = ['ttf', 'otf', 'woff', 'woff2', 'eot']
115+
if extension in font_extensions:
116+
return "font-x-generic"
117+
118+
# Default fallback
119+
return "text-x-generic"
120+
41121
def move(self, drag_source, x, y):
42122
snapshot = Gtk.Snapshot.new()
43123
self.do_snapshot(self, snapshot)

0 commit comments

Comments
 (0)