From 7d197ce829600e308dd0e85aeb1a4ac9376ff286 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Thu, 8 Nov 2018 17:56:21 -0200 Subject: [PATCH] Start: Use default file icon if mime-based one is unavailable for some reason --- src/Mod/Start/StartPage/StartPage.py | 33 ++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/src/Mod/Start/StartPage/StartPage.py b/src/Mod/Start/StartPage/StartPage.py index 5e6ca74139..8e1bf2c051 100644 --- a/src/Mod/Start/StartPage/StartPage.py +++ b/src/Mod/Start/StartPage/StartPage.py @@ -34,6 +34,7 @@ FreeCADGui.updateLocale() iconprovider = QtGui.QFileIconProvider() iconbank = {} # to store already created icons so we don't overpollute the temp dir tempfolder = None # store icons inside a subfolder in temp dir +defaulticon = None # store a default icon for problematic file types def gethexcolor(color): @@ -142,14 +143,19 @@ def getInfo(filename): if not image: i = QtCore.QFileInfo(filename) t = iconprovider.type(i) + if not t: + t = "Unknown" if t in iconbank: image = iconbank[t] else: icon = iconprovider.icon(i) - preferred = icon.actualSize(QtCore.QSize(128,128)) - px = icon.pixmap(preferred) - image = tempfile.mkstemp(dir=tempfolder,suffix='.png')[1] - px.save(image) + if icon.availableSizes(): + preferred = icon.actualSize(QtCore.QSize(128,128)) + px = icon.pixmap(preferred) + image = tempfile.mkstemp(dir=tempfolder,suffix='.png')[1] + px.save(image) + else: + image = getDefaultIcon() iconbank[t] = image return [image,size,author,ctime,mtime,descr,company,lic] @@ -158,6 +164,25 @@ def getInfo(filename): +def getDefaultIcon(): + + "retrieves or creates a default file icon" + + global defaulticon + + if not defaulticon: + i = QtCore.QFileInfo("Unknown") + icon = iconprovider.icon(i) + preferred = icon.actualSize(QtCore.QSize(128,128)) + px = icon.pixmap(preferred) + image = tempfile.mkstemp(dir=tempfolder,suffix='.png')[1] + px.save(image) + defaulticon = image + + return defaulticon + + + def buildCard(filename,method,arg=None): "builds a html
  • element representing a file. method is a script + a keyword, for ex. url.py?key="