#! /usr/bin/env python import shlex import subprocess import os import sys import pyglet from pyglet.window import mouse import ConfigParser import operator import fnmatch import xdg.IconTheme class my_apps: def __init__(self, name , execute , icon=None): self.name = name self.execute = execute self.icon = icon class application_list: def __init__(self): self.known_cats = ['Favorites', 'Audio', 'Audio Video', 'Development', 'Education', 'Game' , 'Graphics', 'Network' , 'Office' , 'Science' , 'Settings' , 'System' , 'Utility'] self.list = {'Favorites':[], 'Audio':[], 'Audio Video':[], 'Development':[], 'Education':[], 'Game':[] , 'Graphics':[], 'Network':[] , 'Office':[] , 'Science':[] , 'Settings':[] , 'System':[] , 'Utility':[]} self.get_app_list() for i in self.list.items(): i[1].sort(key = operator.attrgetter('name')) self.known_cats.sort() def launch_ap(self, application): a = shlex.split(application) subprocess.Popen(a) def get_menu_items(self, app): #path = '/usr/share/applications/' section = 'Desktop Entry' config = ConfigParser.ConfigParser() config.readfp(open(app)) exe = config.get(section,'Exec') name = config.get(section, 'Name') try: t = config.get(section, 'Type') except : t = None try: categories = config.get(section, 'Categories') cats = categories.split(";") except: cats = None try: icon = config.get(section, 'Icon') except : icon = None return name, exe , t, cats, icon def get_cats(self, categories): rt = [] if categories: if len(categories) > 0: for i in categories: if i in self.known_cats: rt.append(i) return rt def find_icon_path(self): pass def get_app_list(self): apps=[] path = '/usr/share/applications/' for (path, dir , filename) in os.walk(path): for fn in filename: full_path = os.path.join(path, fn) filen, filee = os.path.splitext(fn) if filee == ".desktop": name, exe, t , cats, icon = self.get_menu_items(full_path) cat = self.get_cats(cats) exe = self.check_execute(exe) iconp = self.get_icon_path(icon) if cat is not None: for d in cat: my_a = my_apps(name, exe , iconp) self.list[d].append(my_a) def print_list(self): for i in self.list.items(): for j in i[1]: print("{0} : {1}".format( j.name, j.execute, j.icon)) def check_execute(self, execute): checklist = ['%U' , '%u', '%F' , '%f', '%i' , '%c', '%k'] for i in checklist: execute = execute.replace(i, "") execute = execute.strip() return execute def get_icon_path_old(self, icon): file_found = None icon_path = None icon_path_home = '/home/jason/.icons/ProphetIcon13/apps/' knonw_file_icon_type = ['.png', '.jpg'] if icon: try: with open(icon) as f: file_found = True icon_p = icon except IOError as e: file_found = False if not file_found: file_found = False icon_path = None matches = [] if icon: for root, dirnames, filenames in os.walk(icon_path_home): for filename in fnmatch.filter(filenames, icon+'.*'): print filename matches.append(os.path.join(root, filename)) print len(matches) if len(matches) > 0: icon_p = matches[0] fileName, fileExtension = os.path.splitext(icon_p) if fileExtension in knonw_file_icon_type: file_found = True icon_path = icon_p else: icon_path = None else: icon_path = None print icon , icon_path return icon_path def get_icon_path(self, icon): size = 64 if icon: return xdg.IconTheme.getIconPath(icon,size) else: return None