2016-05-30 12:37:58 +00:00
|
|
|
#!/usr/bin/env python
|
|
|
|
|
|
|
|
# Regenerate the icons in resources/linux/mime based on the mime files
|
|
|
|
# and the original icons in bitmaps_png. Must be run from the scripts
|
|
|
|
# folder for the relative paths to work.
|
|
|
|
#
|
|
|
|
# This script assumes Inkscape is installed and in the PATH
|
|
|
|
|
|
|
|
import os, glob
|
|
|
|
import xml.etree.ElementTree as ET
|
|
|
|
from shutil import copyfile, rmtree
|
|
|
|
from subprocess import call
|
|
|
|
|
2022-07-21 23:32:44 +00:00
|
|
|
ICON_SOURCES = "../../resources/bitmaps_png/sources/"
|
2019-02-14 22:58:04 +00:00
|
|
|
DEST_FOLDER = "../../resources/linux/mime"
|
2016-05-30 12:37:58 +00:00
|
|
|
|
|
|
|
def icon_sourcename(icon):
|
|
|
|
return ICON_SOURCES+"/icon_%s.svg" % icon
|
|
|
|
|
|
|
|
|
|
|
|
# Get a list of the applications we will install, their icons and mimes
|
|
|
|
app_icons = {}
|
2022-07-21 23:32:44 +00:00
|
|
|
for desktopfile in glob.glob(DEST_FOLDER+"/applications/*.desktop"):
|
2016-05-30 12:37:58 +00:00
|
|
|
icon = None
|
|
|
|
mimes = []
|
|
|
|
for line in open(desktopfile):
|
|
|
|
keypair = map(str.strip, line.split("="))
|
|
|
|
if len(keypair) != 2: continue
|
|
|
|
key, value = keypair
|
|
|
|
if key == "Icon":
|
|
|
|
icon = value
|
|
|
|
elif key == "MimeType":
|
|
|
|
mimes = [x.strip() for x in value.split(";") if str.strip(x)]
|
|
|
|
if icon is None:
|
|
|
|
print "WARNING: file '", desktopfile, "' contains no Icon entry, corrupted?"
|
|
|
|
continue
|
|
|
|
else:
|
|
|
|
app_icons[icon] = mimes;
|
|
|
|
|
|
|
|
# Obtain the mime types we provide from the mime package XML
|
|
|
|
MIME_PACKAGE = DEST_FOLDER+"/mime/packages/kicad-kicad.xml"
|
|
|
|
mimepkg_root = ET.parse(MIME_PACKAGE).getroot()
|
|
|
|
mimepkg_mimetypes = [n.attrib['type'] for n in mimepkg_root]
|
|
|
|
|
|
|
|
# Reconcile mime types
|
|
|
|
mime_icons = {}
|
|
|
|
for mime in mimepkg_mimetypes:
|
|
|
|
for icon, mimes in app_icons.iteritems():
|
|
|
|
if mime in mimes:
|
|
|
|
mime_icons[mime.replace('/','-')] = icon
|
|
|
|
break
|
|
|
|
else:
|
|
|
|
print "WARNING: mimetype'", mime,"' is provided in the package, but no app is associated with it."
|
|
|
|
|
|
|
|
|
|
|
|
RESOLUTIONS = [16,22,24,32,48,64,128]
|
|
|
|
|
|
|
|
|
|
|
|
rmtree(DEST_FOLDER+'/icons')
|
|
|
|
os.makedirs(DEST_FOLDER+'/icons/hicolor/scalable/apps')
|
|
|
|
os.makedirs(DEST_FOLDER+'/icons/hicolor/scalable/mimetypes')
|
|
|
|
for r in RESOLUTIONS:
|
|
|
|
os.makedirs(DEST_FOLDER+'/icons/hicolor/%ix%i/apps' % (r,r))
|
|
|
|
os.makedirs(DEST_FOLDER+'/icons/hicolor/%ix%i/mimetypes' % (r,r))
|
2022-07-21 23:32:44 +00:00
|
|
|
|
2016-05-30 12:37:58 +00:00
|
|
|
for icon in app_icons.keys():
|
|
|
|
copyfile(icon_sourcename(icon),
|
|
|
|
DEST_FOLDER+"/icons/hicolor/scalable/apps/%s.svg" % icon)
|
|
|
|
for r in RESOLUTIONS:
|
|
|
|
call(['inkscape', '-f', icon_sourcename(icon),
|
|
|
|
'-e', DEST_FOLDER+'/icons/hicolor/%ix%i/apps/%s.png' % (r, r, icon),
|
|
|
|
'-w', str(r), '-h', str(r), '--export-area-snap'])
|
|
|
|
|
2022-07-21 23:32:44 +00:00
|
|
|
|
2016-05-30 12:37:58 +00:00
|
|
|
for mime, icon in mime_icons.iteritems():
|
|
|
|
copyfile(icon_sourcename(icon),
|
|
|
|
DEST_FOLDER+"/icons/hicolor/scalable/mimetypes/%s.svg" % mime)
|
|
|
|
for r in RESOLUTIONS:
|
|
|
|
call(['inkscape', '-f', icon_sourcename(icon),
|
|
|
|
'-e', DEST_FOLDER+'/icons/hicolor/%ix%i/mimetypes/%s.png' % (r, r, mime),
|
|
|
|
'-w', str(r), '-h', str(r), '--export-area-snap'])
|