#!/usr/bin/env python

import sys
import glob
import os
import os.path
import re
import sys

from optparse import OptionParser

import xdg.DesktopEntry
import gdbm

os.unsetenv("DISPLAY")

from AppInstall.CoreMenu import *


def generate_mime_map():
    dict = {}
    for fn in glob.glob(os.path.join(options.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')
            mts = de.get('MimeType', list=True)
        except KeyError:
            continue
        if not component or not package or not mts:
            continue
        for mt in mts:
            try:
                l = dict[mt]
            except KeyError:
                l = []; dict[mt] = l
            l.append(component+"/"+package)
    gmm = gdbm.open(os.path.join(options.cache_dir, "gai-mime-map.gdbm"),'nfu')
    for (mt,l) in dict.iteritems():
        gmm[mt] = ' '.join(l)
    gmm.sync()
    gmm.close()

def generate_cache():
    menu = CoreApplicationMenu(options.desktop_dir)
    menu.createMenuCache(options.cache_dir)


if __name__ == "__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/cache/app-install",
                       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 "Caching application data..."
	generate_cache()
	print "Generating mime map..."
	generate_mime_map()
    





