#1 Le 22/03/2015, à 18:59
- Hizoka
[resolu] Icone d'un mimetype
Bonsoir,
je cherche un moyen relativement simple et rapide pour déterminer l'icone utilisée pour fichier en fonction de son mimetype.
J'ai trouvé le fichier /usr/share/mime/packages/freedesktop.org.xml qui permet de savoir en gros les icônes mais c'est bien lourd s'il faut passer par là ou me créer un dictionnaire depuis le fichier...
Avez vous une idée pour trouver simplement le nom de l'icone utiliser ?
EDIT : Je veux bien vos idées en bash ou en python3
ex :
import import magic
FileType = magic.open(magic.MAGIC_MIME)
FileType.load()
FileType.file("MKVFILE.mkv").split(";")[0]
=> video/x-matroska
Mais comment trouver quelle est son icone ?
Merci à vous !!
PS : Simplement changer le / en - ne fonctionne que pour quelques mimtetypes
video/x-matroska => video-x-matroska => n'existe pas
Dernière modification par Hizoka (Le 24/03/2015, à 19:45)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#2 Le 24/03/2015, à 19:45
- Hizoka
Re : [resolu] Icone d'un mimetype
Je propose cette solution en pyqt5 :
from PyQt5.QtCore import *
from PyQt5.QtGui import *
fichier = "/home/user/coincoin.mp4"
machin = QMimeDatabase().mimeTypeForFile(fichier)
icone = QIcon().fromTheme(QMimeType(machin).iconName(), QIcon().fromTheme(QMimeType(machin).genericIconName()))
Sinon j'avais fait ça mais pas aussi bien que ci-dessus :
import sys
from pathlib import Path
PapaIcon = {"application" : "application-x-executable", "video" : "video-x-generic","text" : "text-x-generic", "image" : "image-x-generic", "package" : "package-x-generic", "audio" : "audio-x-generic"}
def Coco(MimeType):
Icon = ""
SubClass = ""
Alias = ""
Link = Path("/usr/share/mime/", MimeType)
Text = ""
if Link.exists():
with Link.open() as MimeTypeFile:
for Line in MimeTypeFile:
if "generic-icon name" in Line:
Icon = Line.split('"')[1]
elif "sub-class-of" in Line:
SubClass = Line.split('"')[1]
elif "alias type" in Line:
Alias = Line.split('"')[1]
if Icon:
print("Icone de {} : {}".format(Link.name, Icon))
elif SubClass:
SubClassLink = Path(Link.parents[1], SubClass + ".xml")
print(MimeType, "est une sous classe de", SubClassLink)
Coco(SubClassLink)
else:
with Path("/usr/share/mime/generic-icons").open() as IconsFile:
for Line in IconsFile:
if MimeType in Line:
Icon = Line.split(":")[1]
if Icon:
print("Icone generique de {} : {}".format(Link.name, Icon))
else:
try:
papa = MimeType.split("/")[0]
print("utilisation de l'icone du papa :", PapaIcon[papa])
except:
print("aucune icone trouvée !")
else:
# Ce doit être un alias
with Path("/usr/share/mime/aliases").open() as AliasesFile:
for Line in AliasesFile:
a, b = Line.split(" ")
if MimeType == a:
Alias = Line.split(" ")[1].replace('\n','') + ".xml"
if Alias:
print(MimeType, "est un alias de", Alias)
Coco(Alias)
else:
print(MimeType, "n'existe pas et n'est pas un alias...")
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne