1
0
mirror of https://github.com/arsenetar/dupeguru.git synced 2024-11-14 11:39:03 +00:00

[#198 state:fixed] Added Longest/Shortest filename criteria in the re-prioritize dialog.

This commit is contained in:
Virgil Dupras 2012-07-31 11:18:39 -04:00
parent 977fb606eb
commit b19d6c9a27
2 changed files with 41 additions and 10 deletions

View File

@ -88,26 +88,41 @@ class FilenameCategory(CriterionCategory):
NAME = coltr("Filename") NAME = coltr("Filename")
ENDS_WITH_NUMBER = 0 ENDS_WITH_NUMBER = 0
DOESNT_END_WITH_NUMBER = 1 DOESNT_END_WITH_NUMBER = 1
LONGEST = 2
SHORTEST = 3
def format_criterion_value(self, value): def format_criterion_value(self, value):
if value == self.ENDS_WITH_NUMBER: return {
return tr("Ends with number") self.ENDS_WITH_NUMBER: tr("Ends with number"),
else: self.DOESNT_END_WITH_NUMBER: tr("Doesn't end with number"),
return tr("Doesn't end with number") self.LONGEST: tr("Longest"),
self.SHORTEST: tr("Shortest"),
}[value]
def extract_value(self, dupe): def extract_value(self, dupe):
return rem_file_ext(dupe.name) return rem_file_ext(dupe.name)
def sort_key(self, dupe, crit_value): def sort_key(self, dupe, crit_value):
value = self.extract_value(dupe) value = self.extract_value(dupe)
if crit_value in {self.ENDS_WITH_NUMBER, self.DOESNT_END_WITH_NUMBER}:
ends_with_digit = value.strip()[-1:].isdigit() ends_with_digit = value.strip()[-1:].isdigit()
if crit_value == self.ENDS_WITH_NUMBER: if crit_value == self.ENDS_WITH_NUMBER:
return 0 if ends_with_digit else 1 return 0 if ends_with_digit else 1
else: else:
return 1 if ends_with_digit else 0 return 1 if ends_with_digit else 0
else:
value = len(value)
if crit_value == self.LONGEST:
value *= -1 # We want the biggest values on top
return value
def criteria_list(self): def criteria_list(self):
return [Criterion(self, self.ENDS_WITH_NUMBER), Criterion(self, self.DOESNT_END_WITH_NUMBER)] return [Criterion(self, crit_value) for crit_value in [
self.ENDS_WITH_NUMBER,
self.DOESNT_END_WITH_NUMBER,
self.LONGEST,
self.SHORTEST,
]]
class NumericalCategory(CriterionCategory): class NumericalCategory(CriterionCategory):
HIGHEST = 0 HIGHEST = 0

View File

@ -179,3 +179,19 @@ def test_display_something_on_empty_extensions(app):
# When there's no extension, display "None" instead of nothing at all. # When there's no extension, display "None" instead of nothing at all.
app.select_pri_criterion("Kind") app.select_pri_criterion("Kind")
eq_(app.pdialog.criteria_list[:], ['None']) eq_(app.pdialog.criteria_list[:], ['None'])
#---
def app_one_name_longer_than_the_other():
dupes = [
[
no('shortest.ext'),
no('loooongest.ext'),
],
]
return app_with_dupes(dupes)
@with_app(app_one_name_longer_than_the_other)
def test_longest_filename_prioritization(app):
app.add_pri_criterion("Filename", 2) # Longest
app.pdialog.perform_reprioritization()
eq_(app.rtable[0].data['name'], 'loooongest.ext')