home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / lib / python2.6 / dist-packages / AppInstall / update.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-10-12  |  4.1 KB  |  145 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import sys
  5. import glob
  6. import os
  7. import os.path as os
  8. import re
  9. import sys
  10. from optparse import OptionParser
  11. import gdbm
  12. os.unsetenv('DISPLAY')
  13.  
  14. try:
  15.     import xdg.DesktopEntry as xdg
  16. except ImportError:
  17.     e = None
  18.     print 'WARNING: can not import xdg.DesktopEntry, aborting'
  19.     sys.exit(0)
  20.  
  21.  
  22. try:
  23.     from CoreMenu import *
  24. except ImportError:
  25.     e = None
  26.     print "Can't import AppInstall.CoreMenu, aborting"
  27.     sys.exit(0)
  28.  
  29.  
  30. def generate_mime_map(desktop_dir, cache_dir):
  31.     dicts = {
  32.         'mime': { },
  33.         'codec': { } }
  34.     
  35.     def record_provider(de, cp, defield, dictname):
  36.         
  37.         try:
  38.             keys = de.get(defield, list = True)
  39.         except keyError:
  40.             return None
  41.  
  42.         if not keys:
  43.             return None
  44.         dict = dicts[dictname]
  45.         for key in keys:
  46.             if dictname == 'codec' and ',' in key:
  47.                 key = key.split(',')[0]
  48.             
  49.             
  50.             try:
  51.                 l = dict[key]
  52.             except KeyError:
  53.                 l = []
  54.                 dict[key] = l
  55.  
  56.             l.append(cp)
  57.         
  58.  
  59.     for fn in glob.glob(os.path.join(desktop_dir, 'desktop/*.desktop')):
  60.         
  61.         try:
  62.             de = xdg.DesktopEntry.DesktopEntry(fn)
  63.         except Exception:
  64.             (None,)
  65.             e = (None,)
  66.             print >>sys.stderr, 'bad .desktop file: %s: %s' % (fn, e)
  67.         except:
  68.             (None,)
  69.  
  70.         
  71.         try:
  72.             component = de.get('X-AppInstall-Section')
  73.             package = de.get('X-AppInstall-Package')
  74.         except KeyError:
  75.             (None,)
  76.             (None,)
  77.             continue
  78.         except:
  79.             (None,)
  80.  
  81.         cp = component + '/' + package
  82.         record_provider(de, cp, 'MimeType', 'mime')
  83.         record_provider(de, cp, 'X-AppInstall-Codecs', 'codec')
  84.     
  85.     for dictname, dict in dicts.iteritems():
  86.         g = gdbm.open(os.path.join(cache_dir, 'gai-' + dictname + '-map.gdbm'), 'nfu')
  87.         for key, l in dict.iteritems():
  88.             g[key] = ' '.join(l)
  89.         
  90.         g.sync()
  91.         g.close()
  92.         os.chmod(os.path.join(cache_dir, 'gai-' + dictname + '-map.gdbm'), 420)
  93.     
  94.  
  95.  
  96. def generate_menu_cache(desktop_dir, cache_dir):
  97.     menu = CoreApplicationMenu(desktop_dir)
  98.     menu.createMenuCache(cache_dir)
  99.     codec_pickle = { }
  100.     mime_pickle = { }
  101.     for cat in menu.pickle:
  102.         for item in menu.pickle[cat]:
  103.             if item.codecs != [
  104.                 '']:
  105.                 if not codec_pickle.has_key(cat):
  106.                     codec_pickle[cat] = []
  107.                 
  108.                 codec_pickle[cat].append(item)
  109.             
  110.             if item.mime != []:
  111.                 if not mime_pickle.has_key(cat):
  112.                     mime_pickle[cat] = []
  113.                 
  114.                 mime_pickle[cat].append(item)
  115.                 continue
  116.         
  117.     
  118.     pickle.dump(mime_pickle, open('%s/mime_menu.p' % cache_dir, 'w'), 2)
  119.     os.chmod('%s/mime_menu.p' % cache_dir, 420)
  120.     pickle.dump(codec_pickle, open('%s/codec_menu.p' % cache_dir, 'w'), 2)
  121.     os.chmod('%s/codec_menu.p' % cache_dir, 420)
  122.  
  123.  
  124. def main():
  125.     parser = OptionParser()
  126.     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')
  127.     parser.add_option('-c', '--cache-dir', action = 'store', dest = 'cache_dir', default = '/var/cache/app-install', help = 'Directory where the data should be cached in')
  128.     (options, args) = parser.parse_args()
  129.     for path in (options.desktop_dir, options.cache_dir):
  130.         if not os.path.isdir(path):
  131.             print '%s is not a valid directory' % path
  132.             sys.exit(1)
  133.             continue
  134.     
  135.     print 'Caching application data...'
  136.     
  137.     try:
  138.         generate_menu_cache(options.desktop_dir, options.cache_dir)
  139.         print 'Generating mime/codec maps...'
  140.         generate_mime_map(options.desktop_dir, options.cache_dir)
  141.     except IOError:
  142.         print 'You must run this program with administrator privileges.(eg. sudo update-app-instal)'
  143.  
  144.  
  145.