@@ -25,10 +25,7 @@ def __init__(self, path, file_name):
25
25
else :
26
26
name = "folder"
27
27
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 )
32
29
super ().__init__ (icon_name = name )
33
30
34
31
self .path = path
@@ -38,6 +35,89 @@ def __init__(self, path, file_name):
38
35
self .drag_source .connect ("prepare" , self .move )
39
36
self .add_controller (self .drag_source )
40
37
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
+
41
121
def move (self , drag_source , x , y ):
42
122
snapshot = Gtk .Snapshot .new ()
43
123
self .do_snapshot (self , snapshot )
0 commit comments