1
0
mirror of https://github.com/arsenetar/dupeguru.git synced 2026-01-22 14:41:39 +00:00

[#138] Added FolderCategory and SizeCategory.

This commit is contained in:
Virgil Dupras
2011-09-08 13:28:19 -04:00
parent 9c30486f14
commit 2dc588e0fd
4 changed files with 105 additions and 18 deletions

View File

@@ -15,30 +15,76 @@ class CriterionCategory:
self.results = results
#--- Virtual
def _extract_value(self, dupe):
def extract_value(self, dupe):
raise NotImplementedError()
def format_value(self, value):
return value
#--- Public
def sort_key(self, dupe, crit_value):
# Use this sort key when the order in the list depends on whether or not the dupe meets the
# criteria. If it does, we return 0 (top of the list), if it doesn't, we return 1.
if self.extract_value(dupe) == crit_value:
return 0
else:
return 1
def criteria_list(self):
dupes = flatten(g[:] for g in self.results.groups)
values = dedupe(self._extract_value(d) for d in dupes)
values = dedupe(self.extract_value(d) for d in dupes)
return [Criterion(self, value) for value in values]
class Criterion:
def __init__(self, category, value):
self.category = category
self.value = value
self.display_value = category.format_value(value)
def test_dupe(self, dupe):
return self.category._extract_value(dupe) == self.value
def sort_key(self, dupe):
return self.category.sort_key(dupe, self.value)
@property
def display(self):
return "{} ({})".format(self.category, self.value)
return "{} ({})".format(self.category.NAME, self.value)
class KindCategory(CriterionCategory):
NAME = "Kind"
def _extract_value(self, dupe):
def extract_value(self, dupe):
return dupe.extension
class FolderCategory(CriterionCategory):
NAME = "Folder"
def extract_value(self, dupe):
return dupe.folder_path
def format_value(self, value):
return str(value)
class NumericalCategory(CriterionCategory):
HIGHEST = 0
LOWEST = 1
def format_value(self, value):
return "Highest" if value == self.HIGHEST else "Lowest"
def sort_key(self, dupe, crit_value):
value = self.extract_value(dupe)
if crit_value == self.HIGHEST: # we want highest values on top
value *= -1
return value
def criteria_list(self):
return [Criterion(self, self.HIGHEST), Criterion(self, self.LOWEST)]
class SizeCategory(NumericalCategory):
NAME = "Size"
def extract_value(self, dupe):
return dupe.size
def all_categories():
return [KindCategory, FolderCategory, SizeCategory]