Example #1
0
    def filewidget_selection_changed(self, selected=None, deselected=None):
        current_widget = self.filewidget.currentWidget()

        indexes = current_widget.selectedIndexes()
        selected_files = set(index.internalPointer() for index in indexes)
        directory = self.directory

        total_size = selected_size = 0

        for pathobj in directory:
            try:
                total_size += pathobj.size
                if pathobj in selected_files and not pathobj.isdir():
                    selected_size += pathobj.size
            except OSError:
                pass

        format_args = (
                       (len(selected_files), len(directory)) +
                       format_size(selected_size) +
                       format_size(total_size)
                      )

        selection_str = "%s out of %s (%.1f%s out of %.1f%s)" % format_args

        active_filter = self.filewidget.filters.get(current_widget)
        if active_filter:
            selection_str += ' [ filtered ]'

        if self.directory.bad_filenames:
            selection_str += ' [{0} corrupt filenames]'.format(
                len(self.directory.bad_filenames)
            )

        self.selection_status_label.setText(selection_str)
Example #2
0
    def update_fsop(self, fsop, key, value):
        if key == "buildtree":
            status_str = u"Preparing... "

            if value:
                status_str += u"done!"

            self.filename_label.setText(
                status_str
            )

        if key == "status":
            if value is None:
                self.speed = (fsop.bytes_written -
                              self._prev_bytes_written) / 150.
                self.speed *= 1000

                self._prev_bytes_written = fsop.bytes_written
            else:
                self.file_index, self.file_count = value

            fmt_args = format_size(fsop.bytes_written) + \
                       format_size(fsop.total_bytes) + \
                       format_size(self.speed)

            self.progressbar.setFormat(
                "%.2f%s of %.2f%s (%.2f%s/s)" % fmt_args
            )
            if fsop.total_bytes:
                self.progressbar.setValue(
                    (fsop.bytes_written / fsop.total_bytes) * 1000
                )

        if key in ("copy", "delete"):
            base_path = {
                'delete': lambda: fsop.relpath,
                'copy': lambda: fsop.destination,
                'move': lambda: fsop.destination,
            }[key]()

            self.filename_label.setText(
                "{0}/{1} {2} {3}".format(
                    self.file_index,
                    self.file_count,
                    key.capitalize(),
                    base_path.relpathto(value)
                )
            )

        if key == "done":
            self.timer.stop()
            self.file_index += 1
            self.update_fsop(fsop, "status", None)

            QTimer.singleShot(1000, self.done)
Example #3
0
    def filewidget_dir_changed(self, newpath=None):
        """
        Updates the selection & free space status when the directory is changed
        """
        if newpath is None:
            newpath = self.directory.path

        directory = self.directory

        free = directory.bytes_free
        total = directory.bytes_avaiable

        self.path_combo.setEditText(newpath)

        freespace_str = "%.1f%s free out of %.1f%s" % (format_size(free) +
                                                       format_size(total))
        self.free_space_label.setText(freespace_str)

        self.filewidget_selection_changed()
Example #4
0
    def setFileinfo(self, type_, short_filename, filename):
        setText = lambda field, s: getattr(
                    self,
                    type_ + "_" + field
                ).setText(s)


        setText("filename", short_filename)
        setText("size", "%.2f%s" % format_size(filename.size))
        setText("mtime", format_timestamp(filename.mtime, '%Y-%m-%d %H:%M'))
Example #5
0
    def filewidget_clicked(self, idx):
        filename = idx.internalPointer()
        if filename.isdir():
            sizetext = "<DIR>"
        else:
            try:
                sizetext = "%.2f%s" % format_size(filename.size)
            except OSError:
                sizetext = "<broken symlink>"

        try:
            res = get_picture_resolution(filename)
        except IOError:
            text = sizetext
        else:
            text = "%sx%s (%s)" % ((res) + (sizetext,))

        self.filesize_label.setText(text)
        self.filename_label.setText(filename.name)
Example #6
0
    def _data(self, index, role):
        row = index.row()
        column = index.column()
        column_name = self.columns[column]

        filepath = index.internalPointer()

        obj = self.overrides.get((filepath, column, role), None)

        if obj is not None:
            return obj

        if filepath is None:
            import sys
            logger['DirModel'].error(
                "Fatal model error, requested index '%s' not found",
                row
            )
            QApplication.instance().exit()
            sys.exit()

        # Handle broken symlinks
        if not filepath.realpath().exists():
            if column_name == 'Filename':
                if role == Qt.DisplayRole:
                    return self.formatFilename(filepath.name)
                elif role == Qt.DecorationRole:
                    return self.icon_for(filepath)
                elif role == Qt.EditRole:
                    return filepath.name

            elif column_name == 'Modified' and role == Qt.DisplayRole:
                return "0000-00-00 00:00"

            elif column_name == 'Size' and role == Qt.DisplayRole:
                return "0"


        if role == Qt.BackgroundRole and self.color_directories:
            if filepath.isdir():
                return QPalette().color(QPalette.AlternateBase)

        if column_name == 'Filename':
            if role == Qt.DisplayRole:
                return self.formatFilename(filepath.name)

            elif role == Qt.DecorationRole:
                return self.icon_for(filepath)

            elif role == Qt.EditRole:
                return filepath.name

        elif column_name == 'Size' and not filepath.isdir():
            if role == Qt.DisplayRole:
                try:
                    size_str = "%.2f%s" % format_size(filepath.size)
                except OSError:
                    size_str = ""
                return size_str

        elif column_name == 'Modified':
            if role == Qt.DisplayRole:
                date_obj = datetime.fromtimestamp(filepath.mtime)
                date_str = date_obj.strftime('%Y-%m-%d %H:%M')

                return date_str

        return QVariant()