Beispiel #1
0
    def handle_dupe_set(self, dupe_set):
        header = [
            "Size: {inst_size} Instances: {inst_count} Excess: {excess_size} Names: {name_count}".format(
                inst_size=units.format_byte_count(dupe_set.instance_size),
                inst_count=len(dupe_set),
                excess_size=units.format_byte_count(dupe_set.total_size - dupe_set.instance_size),
                name_count=dupe_set.entry_count,
            )
        ]

        # selection is done by entry
        preferred_entries = set()
        if self._selector is not None:
            try:
                preferred_entries.update(self._selector.pick(dupe_set.all_entries()))
            except EnvironmentError as env_error:
                header.append("Skipping selection due to error: %s" % env_error)

        # but to test uniqueness, we go by content. for example, it's
        # considered unique if multiple entries are returned, but they
        # point to the one instance
        selected_instances = set(
            instance for instance in dupe_set if any(entry in preferred_entries for entry in instance.entries)
        )

        # if an instance has any of its entries marked, mark the others as well
        for instance in selected_instances:
            preferred_entries.update(instance.entries)

        for line in self._formatter.format_set(dupe_set, preferred_entries, header):
            print(line, file=self._output_stream)
Beispiel #2
0
    def progress(self, sets, file_pos, file_size):
        set_vis_list = [ ]
        for s in sets:
            set_len = len(s)
            if set_len >= len(self._count_glyphs):
                set_vis_list.append(str(set_len))
            else:
                set_vis_list.append(self._count_glyphs[set_len])

        set_vis = "[%s]" % "|".join(set_vis_list)
        read_size = units.format_byte_count(file_size, 0)
        progress_room = self._status_line.line_width - (len(set_vis) + len(read_size)) - 2

        if progress_room >= 2:
            if file_size > 0:
                progress_chars = int(progress_room * file_pos / file_size + 0.5)
            else:
                progress_chars = progress_room

            bar = "".join((
                self._progress_glyphs[0] * progress_chars,
                self._progress_glyphs[1] * (progress_room - progress_chars),
            ))
            line = " ".join((set_vis, bar, read_size))
        else:
            line = " ".join((set_vis, read_size))

        self._status_line.set_text(line)
Beispiel #3
0
    def progress(self, sets, file_pos, file_size):
        set_vis_list = []
        for s in sets:
            set_len = len(s)
            if set_len >= len(VISUAL_SET_COUNT):
                set_vis_list.append(str(set_len))
            else:
                set_vis_list.append(VISUAL_SET_COUNT[set_len])

        set_vis = "[%s]" % "|".join(set_vis_list)
        read_size = units.format_byte_count(file_size, 0)
        progress_room = self._line_width - (len(set_vis) + len(read_size)) - 2

        if progress_room >= 2:
            progress_chars = int(progress_room * file_pos / file_size + 0.5)
            bar = "".join(("\u2588" * progress_chars, "\u2591" * (progress_room - progress_chars)))
            line = " ".join((set_vis, bar, read_size))
        else:
            line = " ".join((set_vis, read_size))

        self.set_text(line)