APT: Add script to extract information from app-install desktop files
This commit is contained in:
parent
01b4d52207
commit
0d6c9d69bb
86
backends/apt/update-packagekit-app-data
Executable file
86
backends/apt/update-packagekit-app-data
Executable file
@ -0,0 +1,86 @@
|
||||
#!/usr/bin/env python
|
||||
# update-packagekit-app-data - Generate a cache of mime type and codec handlers
|
||||
# Authors: Michael Vogt <mvo@ubuntu.com>
|
||||
# Sebastian Heinlein <devel@glatzor.de>
|
||||
|
||||
import sys
|
||||
import glob
|
||||
import os
|
||||
import os.path
|
||||
import re
|
||||
import sys
|
||||
|
||||
from optparse import OptionParser
|
||||
|
||||
import gdbm
|
||||
|
||||
try:
|
||||
import xdg.DesktopEntry
|
||||
except ImportError, e:
|
||||
print "WARNING: can not import xdg.DesktopEntry, aborting"
|
||||
sys.exit(0)
|
||||
|
||||
def generate_mime_map(desktop_dir, cache_dir):
|
||||
dicts = { 'mime':{}, 'codec':{} }
|
||||
|
||||
def record_provider(de, cp, defield,dictname):
|
||||
try:
|
||||
keys = de.get(defield, list=True)
|
||||
except keyError:
|
||||
return
|
||||
if not keys: return
|
||||
dict = dicts[dictname]
|
||||
for key in keys:
|
||||
# gst-caps support
|
||||
if dictname == 'codec' and ',' in key:
|
||||
key = key.split(",")[0]
|
||||
try:
|
||||
l = dict[key]
|
||||
except KeyError:
|
||||
l = []; dict[key] = l
|
||||
l.append(cp)
|
||||
|
||||
for fn in glob.glob(os.path.join(desktop_dir, 'desktop/*.desktop')):
|
||||
try:
|
||||
de = xdg.DesktopEntry.DesktopEntry(fn)
|
||||
except Exception, e:
|
||||
print >>sys.stderr, "bad .desktop file: %s: %s" % (fn, e)
|
||||
try:
|
||||
component = de.get('X-AppInstall-Section')
|
||||
package = de.get('X-AppInstall-Package')
|
||||
except KeyError:
|
||||
continue
|
||||
cp = component+"/"+package
|
||||
record_provider(de, cp, 'MimeType','mime')
|
||||
record_provider(de, cp, 'X-AppInstall-Codecs','codec')
|
||||
|
||||
for (dictname, dict) in dicts.iteritems():
|
||||
g = gdbm.open(os.path.join(cache_dir,
|
||||
dictname+"-map.gdbm"),
|
||||
'nfu')
|
||||
for (key,l) in dict.iteritems():
|
||||
g[key] = ' '.join(l)
|
||||
g.sync()
|
||||
g.close()
|
||||
|
||||
def main():
|
||||
parser = OptionParser()
|
||||
parser.add_option ("-d", "--desktop-dir", action="store",
|
||||
dest="desktop_dir",
|
||||
default="/usr/share/app-install",
|
||||
help="Directory that contains the desktop files "
|
||||
"of the applications")
|
||||
parser.add_option ("-c", "--cache-dir", action="store",
|
||||
dest="cache_dir",
|
||||
default="/var/lib/PackageKit",
|
||||
help="Directory where the data should be cached in")
|
||||
(options, args) = parser.parse_args()
|
||||
for path in (options.desktop_dir, options.cache_dir):
|
||||
if not os.path.isdir(path):
|
||||
print "%s is not a valid directory" % path
|
||||
sys.exit(1)
|
||||
print "Generating mime/codec maps..."
|
||||
generate_mime_map(options.desktop_dir, options.cache_dir)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
Loading…
Reference in New Issue
Block a user