コード例 #1
0
    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)
コード例 #2
0
    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)