Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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