def add(self, vfs_uris, action=None): retval = None for vfs_uri in vfs_uris: uri = vfs_uri.as_uri() path = vfs_uri.as_string() name = uri.get_basename() mime_type = "" pixbuf = None # check for existence: if not uri.query_exists(): continue # check for duplicates duplicate = False iter = self.store.get_iter_first() while iter: store_uri = self.store.get_value(iter, COL_URI) if vfs_uri.equals(store_uri): duplicate = True break iter = self.store.iter_next(iter) if duplicate: continue # check for desktop item if name.endswith(".desktop"): file = vfs.File.for_uri(path) if file is None or not file.exists(): continue entry = fdo.DesktopEntry.for_file (file) name = entry.get_name() icon_name = entry.get_icon() if entry.key_exists("Icon") else "application-x-executable" mime_type = "" type = gio.FILE_TYPE_REGULAR if icon_name: icon_info = gtk.icon_theme_get_default().lookup_icon(icon_name, self.icon_size, 0) icon_uri = icon_info.get_filename() if icon_info else icon_name pixbuf = IconFactory().load_icon(icon_uri, self.icon_size) if pixbuf: pixbuf.add_alpha (True, '\0', '\0', '\0') else: # get file info try: fileinfo = uri.query_info(','.join([ gio.FILE_ATTRIBUTE_STANDARD_TYPE, gio.FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE, gio.FILE_ATTRIBUTE_STANDARD_IS_HIDDEN, gio.FILE_ATTRIBUTE_STANDARD_IS_BACKUP])) if fileinfo.get_is_hidden() or fileinfo.get_is_backup(): continue type = fileinfo.get_file_type() mime_type = fileinfo.get_content_type() except: continue # get pixbuf for icon pixbuf = Thumbnailer(path, mime_type).get_icon(self.icon_size) if pixbuf: pixbuf.add_alpha (True, '\0', '\0', '\0') # create monitor try: monitor = Monitor(vfs_uri) monitor.connect("deleted", self._deleted_cb) except: monitor = None # add to store iter = self.store.append([vfs_uri, monitor, type, name, mime_type, pixbuf, None]) if self.store.iter_is_valid(iter): self.emit("item-created", iter) else: print "ERROR in STACK: iter is NOK (stacks_backend.py)" # return pixbuf later? if pixbuf: retval = pixbuf # restructure of dialog needed return (retval is not None)
def add(self, vfs_uris, action=None): retval = None for vfs_uri in vfs_uris: uri = vfs_uri.as_uri() path = vfs_uri.as_string() name = uri.get_basename() mime_type = "" pixbuf = None # check for existence: if not uri.query_exists(): continue # check for duplicates duplicate = False iter = self.store.get_iter_first() while iter: store_uri = self.store.get_value(iter, COL_URI) if vfs_uri.equals(store_uri): duplicate = True break iter = self.store.iter_next(iter) if duplicate: continue # check for desktop item if name.endswith(".desktop"): file = vfs.File.for_uri(path) if file is None or not file.exists(): continue entry = fdo.DesktopEntry.for_file(file) name = entry.get_name() icon_name = entry.get_icon() if entry.key_exists( "Icon") else "application-x-executable" mime_type = "" type = gio.FILE_TYPE_REGULAR if icon_name: icon_info = gtk.icon_theme_get_default().lookup_icon( icon_name, self.icon_size, 0) icon_uri = icon_info.get_filename( ) if icon_info else icon_name pixbuf = IconFactory().load_icon(icon_uri, self.icon_size) if pixbuf: pixbuf.add_alpha(True, '\0', '\0', '\0') else: # get file info try: fileinfo = uri.query_info(','.join([ gio.FILE_ATTRIBUTE_STANDARD_TYPE, gio.FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE, gio.FILE_ATTRIBUTE_STANDARD_IS_HIDDEN, gio.FILE_ATTRIBUTE_STANDARD_IS_BACKUP ])) if fileinfo.get_is_hidden() or fileinfo.get_is_backup(): continue type = fileinfo.get_file_type() mime_type = fileinfo.get_content_type() except: continue # get pixbuf for icon pixbuf = Thumbnailer(path, mime_type).get_icon(self.icon_size) if pixbuf: pixbuf.add_alpha(True, '\0', '\0', '\0') # create monitor try: monitor = Monitor(vfs_uri) monitor.connect("deleted", self._deleted_cb) except: monitor = None # add to store iter = self.store.append( [vfs_uri, monitor, type, name, mime_type, pixbuf, None]) if self.store.iter_is_valid(iter): self.emit("item-created", iter) else: print "ERROR in STACK: iter is NOK (stacks_backend.py)" # return pixbuf later? if pixbuf: retval = pixbuf # restructure of dialog needed return (retval is not None)