def __init__(self, *args, **kwargs): super(AppsRepo, self).__init__(*args, **kwargs) self.__model = bigboard.globals.get_data_model() self.__model.add_ready_handler(self.__on_ready) self.__myself = None self.__global_top_apps = [] self.__my_top_apps = [] self.__my_pinned_apps = [] self.__ddm_apps = {} # app_resource.id -> Application object # apps installed locally and not known in data model self.__local_apps = {} # desktop name -> Application object ## all apps (local or data model) self.__all_apps = set() ad = apps_directory.get_app_directory() ad.connect('changed', self.__on_local_apps_changed) for menu in ad.get_apps(): self.get_app_for_menu_entry(menu) self.__category_queries = {} ## category name to Query self.__search_queries = {} ## search terms to Query self.__get_all_apps_pending = False self.__got_all_apps = False self.__get_popular_apps_pending = False self.__got_popular_apps = False if self.__model.ready: self.__on_ready()
def get_app_for_resource(self, app_resource): if not self.__ddm_apps.has_key(app_resource.id): ad = apps_directory.get_app_directory() for desktop_name in app_resource.desktopNames.split(';'): try: target_menuitem = ad.lookup(desktop_name) except KeyError, e: continue if self.__local_apps.has_key(target_menuitem.get_name()): #_logger.debug("moving app %s from local to apps", target_menuitem.get_name()) existing_app = self.__local_apps[target_menuitem.get_name()] del self.__local_apps[target_menuitem.get_name()] existing_app.set_resource(app_resource) self.__ddm_apps[app_resource.id] = existing_app return existing_app #_logger.debug("creating app %s", mugshot_app.get_id()) app = Application(resource=app_resource) self.__ddm_apps[app_resource.id] = app self.__all_apps.add(app)
def __init__(self, fobj): super(FileSlideout, self).__init__() vbox = CanvasVBox(border_color=0x0000000ff, spacing=4) self.get_root().append(vbox) self.__header = Header(topborder=False) text = ThemedText(theme_hints=['header'], text=fobj.get_name(), font="14px Bold", xalign=hippo.ALIGNMENT_START) self.__header.append(text, hippo.PACK_EXPAND) vbox.append(self.__header) hbox = CanvasHBox(spacing=4, padding=4) img = hippo.CanvasImage(scale_width=60, scale_height=60, xalign=hippo.ALIGNMENT_START, yalign=hippo.ALIGNMENT_START) img.set_property('image-name', fobj.get_image_name()) hbox.append(img) vbox.append(hbox) detailvbox = CanvasVBox(spacing=3) hbox.append(detailvbox) mime = fobj.get_mimetype() if mime: mimename = gnomevfs.mime_get_description(mime) text = ThemedText(theme_hints=['subforeground'], text=mimename, font='12px', xalign=hippo.ALIGNMENT_START) detailvbox.append(text) size = fobj.get_size() if size is not None: sizestr = format_file_size(size) text = ThemedText(theme_hints=['subforeground'], text=sizestr, font='12px', xalign=hippo.ALIGNMENT_START) detailvbox.append(text) fname = os.path.dirname(fobj.get_full_name()) if fname.startswith('file://'): fname = fname[7:] home = os.path.expanduser('~') if fname.startswith(home): fname = fname[:len(home)] fname = urllib.unquote(fname) text = ThemedText(theme_hints=['subforeground'], text=fname, font='12px', xalign=hippo.ALIGNMENT_START) detailvbox.append(text) apps = gnomevfs.mime_get_all_applications(mime) if apps: text = ThemedText(text='Open With: ', font='14px') detailvbox.append(text) def on_app_clicked(button, app): self.emit('close', True) _logger.debug("launching app %s", app) _launch_vfsmimeapp(app, fobj.get_url()) directory = apps_directory.get_app_directory() for app in apps: _logger.debug("mime type: %s got app %s", mime, app) button = hippo.CanvasButton() labelhbox = gtk.HBox() labelhbox.set_border_width(1) labelhbox.set_spacing(2) try: menu = directory.lookup(app[0]) except KeyError, e: _logger.debug("failed to find desktop file %s", app[0]) menu = None img = gtk.Image() if menu: pixbuf = get_menu_pixbuf(menu, size=16) img.set_from_pixbuf(pixbuf) else: img.set_size_request(16, 16) labelhbox.pack_start(img, False, False) textlabel = gtk.Label(app[1]) labelhbox.pack_start(textlabel, False) labelhbox.show_all() button.get_property('widget').add(labelhbox) button.get_property('widget').connect('clicked', on_app_clicked, app) button.get_property('widget').set_name('bigboard-nopad-button') detailvbox.append(button)
self.__resource = resource def __lookup_desktop(self): if self.__menu_entry: entry_path = self.__menu_entry.get_desktop_file_path() try: desktop = gnomedesktop.item_new_from_file(entry_path, 0) if desktop: return desktop except gobject.GError, e: desktop = None if not self.__resource: return None names = self.__resource.desktopNames for name in names.split(';'): ad = apps_directory.get_app_directory() menuitem = None try: menuitem = ad.lookup(name) except KeyError, e: pass if menuitem and not self.__menu_entry: self.__menu_entry = menuitem entry_path = menuitem.get_desktop_file_path() else: entry_path = None for dir in libbig.get_xdg_datadirs(): appdir = os.path.join(dir, 'applications') path = os.path.join(appdir, name + '.desktop') if os.access(path, os.R_OK):