예제 #1
0
    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()        
예제 #2
0
 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)
예제 #3
0
    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)
예제 #4
0
        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):