From 664803c2ca95137d5556716fbd8f99aa5415ad35 Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Fri, 16 Sep 2011 12:24:56 -0400 Subject: [PATCH] [#138] Added ME-specific prioritizations and adjusted ME cocoa proj to the pri dialog. --- cocoa/me/dupeguru.xcodeproj/project.pbxproj | 52 +++++++++++++++++++-- core/data.py | 7 ++- core/gui/prioritize_dialog.py | 4 +- core/tests/data.py | 6 ++- core_me/data.py | 4 ++ core_me/prioritize.py | 33 +++++++++++++ 6 files changed, 95 insertions(+), 11 deletions(-) create mode 100644 core_me/prioritize.py diff --git a/cocoa/me/dupeguru.xcodeproj/project.pbxproj b/cocoa/me/dupeguru.xcodeproj/project.pbxproj index 9d34f4cc..8fd0bc2a 100644 --- a/cocoa/me/dupeguru.xcodeproj/project.pbxproj +++ b/cocoa/me/dupeguru.xcodeproj/project.pbxproj @@ -63,6 +63,11 @@ CE74A12412537F06008A8DF0 /* HSFairwareReminder.m in Sources */ = {isa = PBXBuildFile; fileRef = CE74A12212537F06008A8DF0 /* HSFairwareReminder.m */; }; CE74A12712537F2E008A8DF0 /* FairwareReminder.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE74A12512537F2E008A8DF0 /* FairwareReminder.xib */; }; CE848A1909DD85810004CB44 /* Consts.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = CE848A1809DD85810004CB44 /* Consts.h */; }; + CE84C9B21423ADFB0050A6AD /* PrioritizeDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = CE84C9AD1423ADFB0050A6AD /* PrioritizeDialog.m */; }; + CE84C9B31423ADFB0050A6AD /* PrioritizeList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE84C9AF1423ADFB0050A6AD /* PrioritizeList.m */; }; + CE84C9B91423AE410050A6AD /* HSPopUpList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE84C9B61423AE410050A6AD /* HSPopUpList.m */; }; + CE84C9BA1423AE410050A6AD /* HSSelectableList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE84C9B81423AE410050A6AD /* HSSelectableList.m */; }; + CE84C9BD1423AF200050A6AD /* PrioritizeDialog.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE84C9BB1423AF200050A6AD /* PrioritizeDialog.xib */; }; CEB14D29124DFC2800FA7481 /* ResultTable.m in Sources */ = {isa = PBXBuildFile; fileRef = CEB14D28124DFC2800FA7481 /* ResultTable.m */; }; CEB5E07813225C89009F521D /* ExtraFairwareReminder.m in Sources */ = {isa = PBXBuildFile; fileRef = CEB5E07613225C89009F521D /* ExtraFairwareReminder.m */; }; CEB5E07D13225CA2009F521D /* ExtraFairwareReminder.xib in Resources */ = {isa = PBXBuildFile; fileRef = CEB5E07B13225CA2009F521D /* ExtraFairwareReminder.xib */; }; @@ -182,6 +187,18 @@ CE74A12312537F06008A8DF0 /* PyFairware.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyFairware.h; path = ../../cocoalib/PyFairware.h; sourceTree = SOURCE_ROOT; }; CE74A12612537F2E008A8DF0 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../../cocoalib/en.lproj/FairwareReminder.xib; sourceTree = SOURCE_ROOT; }; CE848A1809DD85810004CB44 /* Consts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Consts.h; sourceTree = ""; }; + CE84C9AC1423ADFB0050A6AD /* PrioritizeDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PrioritizeDialog.h; path = ../base/PrioritizeDialog.h; sourceTree = ""; }; + CE84C9AD1423ADFB0050A6AD /* PrioritizeDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PrioritizeDialog.m; path = ../base/PrioritizeDialog.m; sourceTree = ""; }; + CE84C9AE1423ADFB0050A6AD /* PrioritizeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PrioritizeList.h; path = ../base/PrioritizeList.h; sourceTree = ""; }; + CE84C9AF1423ADFB0050A6AD /* PrioritizeList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PrioritizeList.m; path = ../base/PrioritizeList.m; sourceTree = ""; }; + CE84C9B01423ADFB0050A6AD /* PyPrioritizeDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyPrioritizeDialog.h; path = ../base/PyPrioritizeDialog.h; sourceTree = ""; }; + CE84C9B11423ADFB0050A6AD /* PyPrioritizeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyPrioritizeList.h; path = ../base/PyPrioritizeList.h; sourceTree = ""; }; + CE84C9B41423AE2A0050A6AD /* PySelectableList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PySelectableList.h; sourceTree = ""; }; + CE84C9B51423AE410050A6AD /* HSPopUpList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSPopUpList.h; sourceTree = ""; }; + CE84C9B61423AE410050A6AD /* HSPopUpList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSPopUpList.m; sourceTree = ""; }; + CE84C9B71423AE410050A6AD /* HSSelectableList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSSelectableList.h; sourceTree = ""; }; + CE84C9B81423AE410050A6AD /* HSSelectableList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSSelectableList.m; sourceTree = ""; }; + CE84C9BC1423AF200050A6AD /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../base/en.lproj/PrioritizeDialog.xib; sourceTree = ""; }; CEB14D26124DFC2800FA7481 /* PyResultTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyResultTable.h; path = ../base/PyResultTable.h; sourceTree = SOURCE_ROOT; }; CEB14D27124DFC2800FA7481 /* ResultTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ResultTable.h; path = ../base/ResultTable.h; sourceTree = SOURCE_ROOT; }; CEB14D28124DFC2800FA7481 /* ResultTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ResultTable.m; path = ../base/ResultTable.m; sourceTree = SOURCE_ROOT; }; @@ -330,6 +347,10 @@ CE0A0BFF1175A1C000DCA3C6 /* HSTable.m */, CE003CB711242D00004B0AA7 /* HSWindowController.h */, CE003CB811242D00004B0AA7 /* HSWindowController.m */, + CE84C9B51423AE410050A6AD /* HSPopUpList.h */, + CE84C9B61423AE410050A6AD /* HSPopUpList.m */, + CE84C9B71423AE410050A6AD /* HSSelectableList.h */, + CE84C9B81423AE410050A6AD /* HSSelectableList.m */, ); name = controllers; path = ../../cocoalib/controllers; @@ -341,6 +362,7 @@ CE003CBC11242D00004B0AA7 /* PyGUI.h */, CE003CBD11242D00004B0AA7 /* PyOutline.h */, CE0A0C131175A28100DCA3C6 /* PyTable.h */, + CE84C9B41423AE2A0050A6AD /* PySelectableList.h */, ); name = proxies; path = ../../cocoalib/proxies; @@ -372,6 +394,7 @@ CE05331512E5D3ED0029EF25 /* ResultWindow.xib */, CE05332112E5D4100029EF25 /* Preferences.xib */, CEB5E07B13225CA2009F521D /* ExtraFairwareReminder.xib */, + CE84C9BB1423AF200050A6AD /* PrioritizeDialog.xib */, ); name = xib; sourceTree = ""; @@ -424,30 +447,36 @@ children = ( CEB14D27124DFC2800FA7481 /* ResultTable.h */, CEB14D28124DFC2800FA7481 /* ResultTable.m */, + CEB14D26124DFC2800FA7481 /* PyResultTable.h */, CE003CCD11242D2C004B0AA7 /* DirectoryOutline.h */, CE003CCE11242D2C004B0AA7 /* DirectoryOutline.m */, CE003CCF11242D2C004B0AA7 /* PyDirectoryOutline.h */, CE515E150FC6C19300EC695D /* AppDelegate.h */, CE515E160FC6C19300EC695D /* AppDelegate.m */, + CE515E1A0FC6C19300EC695D /* PyDupeGuru.h */, CE515E170FC6C19300EC695D /* Consts.h */, CE6032BE0FE6784C007E33FF /* DetailsPanel.h */, CE6032BF0FE6784C007E33FF /* DetailsPanel.m */, + CED0A591111C9FD10020AD7D /* PyDetailsPanel.h */, CE515E180FC6C19300EC695D /* DirectoryPanel.h */, CE515E190FC6C19300EC695D /* DirectoryPanel.m */, CE0A0C011175A1DE00DCA3C6 /* ProblemDialog.h */, CE0A0C021175A1DE00DCA3C6 /* ProblemDialog.m */, + CE0A0C031175A1DE00DCA3C6 /* PyProblemDialog.h */, CE515E1B0FC6C19300EC695D /* ResultWindow.h */, CE515E1C0FC6C19300EC695D /* ResultWindow.m */, CEDF07A1112493B200EE5BC0 /* StatsLabel.h */, CEDF07A2112493B200EE5BC0 /* StatsLabel.m */, + CEDF07A0112493B200EE5BC0 /* PyStatsLabel.h */, CEB5E07513225C89009F521D /* ExtraFairwareReminder.h */, CEB5E07613225C89009F521D /* ExtraFairwareReminder.m */, - CE515E1A0FC6C19300EC695D /* PyDupeGuru.h */, - CED0A591111C9FD10020AD7D /* PyDetailsPanel.h */, - CE0A0C031175A1DE00DCA3C6 /* PyProblemDialog.h */, - CEDF07A0112493B200EE5BC0 /* PyStatsLabel.h */, - CEB14D26124DFC2800FA7481 /* PyResultTable.h */, CEB5E07713225C89009F521D /* PyExtraFairwareReminder.h */, + CE84C9AC1423ADFB0050A6AD /* PrioritizeDialog.h */, + CE84C9AD1423ADFB0050A6AD /* PrioritizeDialog.m */, + CE84C9B01423ADFB0050A6AD /* PyPrioritizeDialog.h */, + CE84C9AE1423ADFB0050A6AD /* PrioritizeList.h */, + CE84C9AF1423ADFB0050A6AD /* PrioritizeList.m */, + CE84C9B11423ADFB0050A6AD /* PyPrioritizeList.h */, ); name = dgbase; sourceTree = ""; @@ -537,6 +566,7 @@ CEB5E07D13225CA2009F521D /* ExtraFairwareReminder.xib in Resources */, CEF3185913D8660000B8CDCA /* about.xib in Resources */, CEF3185A13D8660000B8CDCA /* ErrorReportWindow.xib in Resources */, + CE84C9BD1423AF200050A6AD /* PrioritizeDialog.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -577,6 +607,10 @@ CE4F934912CCA96C0067A3AE /* HSAboutBox.m in Sources */, CE1EAA0A12DF3E81009BA949 /* HSRecentFiles.m in Sources */, CEB5E07813225C89009F521D /* ExtraFairwareReminder.m in Sources */, + CE84C9B21423ADFB0050A6AD /* PrioritizeDialog.m in Sources */, + CE84C9B31423ADFB0050A6AD /* PrioritizeList.m in Sources */, + CE84C9B91423AE410050A6AD /* HSPopUpList.m in Sources */, + CE84C9BA1423AE410050A6AD /* HSSelectableList.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -683,6 +717,14 @@ path = ../../cocoalib/xib; sourceTree = SOURCE_ROOT; }; + CE84C9BB1423AF200050A6AD /* PrioritizeDialog.xib */ = { + isa = PBXVariantGroup; + children = ( + CE84C9BC1423AF200050A6AD /* en */, + ); + name = PrioritizeDialog.xib; + sourceTree = ""; + }; CEB5E07B13225CA2009F521D /* ExtraFairwareReminder.xib */ = { isa = PBXVariantGroup; children = ( diff --git a/core/data.py b/core/data.py index 3d7eb5c5..f2f6f4b5 100644 --- a/core/data.py +++ b/core/data.py @@ -7,10 +7,10 @@ # http://www.hardcoded.net/licenses/bsd_license from collections import namedtuple +import time from hscommon.util import format_time_decimal, format_size - -import time +from . import prioritize Column = namedtuple('Column', 'attr display') @@ -40,3 +40,6 @@ def format_dupe_count(c): def cmp_value(value): return value.lower() if isinstance(value, str) else value + +def prioritization_categories(): + return prioritize.all_categories() \ No newline at end of file diff --git a/core/gui/prioritize_dialog.py b/core/gui/prioritize_dialog.py index 24e441d0..8c9f3b47 100644 --- a/core/gui/prioritize_dialog.py +++ b/core/gui/prioritize_dialog.py @@ -8,8 +8,6 @@ from hscommon.gui.selectable_list import GUISelectableList -from ..prioritize import all_categories - class CriterionCategoryList(GUISelectableList): def __init__(self, dialog): self.dialog = dialog @@ -44,7 +42,7 @@ class PrioritizationList(GUISelectableList): class PrioritizeDialog: def __init__(self, view, app): self.app = app - self.categories = [cat(app.results) for cat in all_categories()] + self.categories = [cat(app.results) for cat in app.data.prioritization_categories()] self.category_list = CriterionCategoryList(self) self.criteria = [] self.criteria_list = GUISelectableList() diff --git a/core/tests/data.py b/core/tests/data.py index ee0e4b36..d312b04d 100644 --- a/core/tests/data.py +++ b/core/tests/data.py @@ -10,6 +10,7 @@ from hscommon.util import format_size from ..data import cmp_value, Column +from .. import prioritize COLUMNS = [ Column('name', 'Filename'), @@ -41,4 +42,7 @@ def GetDupeSortKey(dupe, get_group, key, delta): return r def GetGroupSortKey(group, key): - return cmp_value(getattr(group.ref, COLUMNS[key].attr)) \ No newline at end of file + return cmp_value(getattr(group.ref, COLUMNS[key].attr)) + +def prioritization_categories(): + return prioritize.all_categories() diff --git a/core_me/data.py b/core_me/data.py index 82b3a04e..53dbaeb0 100644 --- a/core_me/data.py +++ b/core_me/data.py @@ -10,6 +10,7 @@ from hscommon.util import format_time, format_size from hscommon.trans import tr as trbase from core.data import (format_timestamp, format_words, format_perc, format_dupe_count, cmp_value, Column) +from . import prioritize tr = lambda s: trbase(s, 'columns') @@ -99,3 +100,6 @@ def GetGroupSortKey(group, key): if key == DUPECOUNT_COL: return len(group) return cmp_value(getattr(group.ref, COLUMNS[key].attr, '')) + +def prioritization_categories(): + return prioritize.all_categories() diff --git a/core_me/prioritize.py b/core_me/prioritize.py new file mode 100644 index 00000000..a8146da8 --- /dev/null +++ b/core_me/prioritize.py @@ -0,0 +1,33 @@ +# Created On: 2011/09/16 +# Copyright 2011 Hardcoded Software (http://www.hardcoded.net) +# +# This software is licensed under the "BSD" License as described in the "LICENSE" file, +# which should be included with this package. The terms are also available at +# http://www.hardcoded.net/licenses/bsd_license + +from hscommon.trans import tr + +from core.prioritize import (KindCategory, FolderCategory, FilenameCategory, NumericalCategory, + SizeCategory, MtimeCategory) + +class DurationCategory(NumericalCategory): + NAME = tr("Duration") + + def extract_value(self, dupe): + return dupe.duration + +class BitrateCategory(NumericalCategory): + NAME = tr("Bitrate") + + def extract_value(self, dupe): + return dupe.bitrate + +class SamplerateCategory(NumericalCategory): + NAME = tr("Samplerate") + + def extract_value(self, dupe): + return dupe.samplerate + +def all_categories(): + return [KindCategory, FolderCategory, FilenameCategory, SizeCategory, DurationCategory, + BitrateCategory, SamplerateCategory, MtimeCategory]