Added the EXIF Timestamp scan type in dgpe.

--HG--
rename : core_pe/matchbase.py => core_pe/matchblock.py
This commit is contained in:
Virgil Dupras 2011-04-21 17:17:19 +02:00
parent a0e2b11663
commit 275c6be108
18 changed files with 690 additions and 121 deletions

View File

@ -48,6 +48,7 @@ http://www.hardcoded.net/licenses/bsd_license
- (NSArray *)deltaColumns;
//Scanning options
- (void)setScanType:(NSNumber *)scan_type;
- (void)setMinMatchPercentage:(NSNumber *)percentage;
- (void)setMixFileKind:(BOOL)mix_file_kind;
- (void)setEscapeFilterRegexp:(BOOL)escape_filter_regexp;

View File

@ -11,7 +11,6 @@ http://www.hardcoded.net/licenses/bsd_license
@interface PyDupeGuru : PyDupeGuruBase
//Scanning options
- (void)setScanType:(NSNumber *)scan_type;
- (void)setMinWordCount:(NSNumber *)word_count;
- (void)setMinWordLength:(NSNumber *)word_length;
- (void)setWordWeighting:(NSNumber *)words_are_weighted;

View File

@ -20,14 +20,15 @@ http://www.hardcoded.net/licenses/bsd_license
{
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
NSMutableDictionary *d = [NSMutableDictionary dictionaryWithCapacity:10];
[d setObject:[NSNumber numberWithInt:95] forKey:@"minMatchPercentage"];
[d setObject:[NSNumber numberWithInt:1] forKey:@"recreatePathType"];
[d setObject:[NSNumber numberWithBool:NO] forKey:@"matchScaled"];
[d setObject:[NSNumber numberWithBool:YES] forKey:@"mixFileKind"];
[d setObject:[NSNumber numberWithBool:NO] forKey:@"useRegexpFilter"];
[d setObject:[NSNumber numberWithBool:NO] forKey:@"ignoreHardlinkMatches"];
[d setObject:[NSNumber numberWithBool:NO] forKey:@"removeEmptyFolders"];
[d setObject:[NSNumber numberWithBool:NO] forKey:@"debug"];
[d setObject:i2n(0) forKey:@"scanType"];
[d setObject:i2n(95) forKey:@"minMatchPercentage"];
[d setObject:i2n(1) forKey:@"recreatePathType"];
[d setObject:b2n(NO) forKey:@"matchScaled"];
[d setObject:b2n(YES) forKey:@"mixFileKind"];
[d setObject:b2n(NO) forKey:@"useRegexpFilter"];
[d setObject:b2n(NO) forKey:@"ignoreHardlinkMatches"];
[d setObject:b2n(NO) forKey:@"removeEmptyFolders"];
[d setObject:b2n(NO) forKey:@"debug"];
[d setObject:[NSArray array] forKey:@"recentDirectories"];
[d setObject:[NSArray array] forKey:@"columnsOrder"];
[d setObject:[NSDictionary dictionary] forKey:@"columnsWidth"];
@ -35,6 +36,15 @@ http://www.hardcoded.net/licenses/bsd_license
[ud registerDefaults:d];
}
- (id)init
{
self = [super init];
NSMutableIndexSet *i = [NSMutableIndexSet indexSetWithIndex:0];
VTIsIntIn *vtScanTypeIsFuzzy = [[[VTIsIntIn alloc] initWithValues:i reverse:NO] autorelease];
[NSValueTransformer setValueTransformer:vtScanTypeIsFuzzy forName:@"vtScanTypeIsFuzzy"];
return self;
}
- (NSString *)homepageURL
{
return @"http://www.hardcoded.net/dupeguru_pe/";

View File

@ -34,6 +34,7 @@ http://www.hardcoded.net/licenses/bsd_license
{
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
PyDupeGuru *_py = (PyDupeGuru *)py;
[_py setScanType:[ud objectForKey:@"scanType"]];
[_py setMinMatchPercentage:[ud objectForKey:@"minMatchPercentage"]];
[_py setMixFileKind:n2b([ud objectForKey:@"mixFileKind"])];
[_py setIgnoreHardlinkMatches:n2b([ud objectForKey:@"ignoreHardlinkMatches"])];

View File

@ -9,6 +9,7 @@ install_cocoa_trans()
from core.app_cocoa_inter import PyDupeGuruBase, PyDetailsPanel
from core_pe import app_cocoa as app_pe_cocoa, __appname__
from core.scanner import ScanType
class PyDupeGuru(PyDupeGuruBase):
def init(self):
@ -27,6 +28,15 @@ class PyDupeGuru(PyDupeGuruBase):
return str(self.py.selected_dupe_ref_path())
#---Properties
def setScanType_(self, scan_type):
try:
self.py.scanner.scan_type = [
ScanType.FuzzyBlock,
ScanType.ExifTimestamp,
][scan_type]
except IndexError:
pass
def setMatchScaled_(self,match_scaled):
self.py.scanner.match_scaled = match_scaled

View File

@ -2,17 +2,17 @@
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
<data>
<int key="IBDocument.SystemTarget">1050</int>
<string key="IBDocument.SystemVersion">10J567</string>
<string key="IBDocument.InterfaceBuilderVersion">823</string>
<string key="IBDocument.SystemVersion">10J869</string>
<string key="IBDocument.InterfaceBuilderVersion">851</string>
<string key="IBDocument.AppKitVersion">1038.35</string>
<string key="IBDocument.HIToolboxVersion">462.00</string>
<string key="IBDocument.HIToolboxVersion">461.00</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="NS.object.0">823</string>
<string key="NS.object.0">851</string>
</object>
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
<bool key="EncodedWithXMLCoder">YES</bool>
<integer value="3"/>
<integer value="63"/>
</object>
<object class="NSArray" key="IBDocument.PluginDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
@ -36,7 +36,7 @@
<object class="NSUserDefaultsController" id="455472712">
<object class="NSMutableArray" key="NSDeclaredKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>DebugMode</string>
<string>scanType</string>
</object>
<bool key="NSSharedInstance">YES</bool>
</object>
@ -103,7 +103,7 @@
<object class="NSSlider" id="266372855">
<reference key="NSNextResponder" ref="1073354031"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{117, 140}, {181, 21}}</string>
<string key="NSFrame">{{117, 107}, {181, 21}}</string>
<reference key="NSSuperview" ref="1073354031"/>
<bool key="NSEnabled">YES</bool>
<object class="NSSliderCell" key="NSCell" id="453640282">
@ -131,7 +131,7 @@
<object class="NSTextField" id="869007847">
<reference key="NSNextResponder" ref="1073354031"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{119, 123}, {80, 13}}</string>
<string key="NSFrame">{{119, 90}, {80, 13}}</string>
<reference key="NSSuperview" ref="1073354031"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="106025161">
@ -167,7 +167,7 @@
<object class="NSTextField" id="171701149">
<reference key="NSNextResponder" ref="1073354031"/>
<int key="NSvFlags">289</int>
<string key="NSFrame">{{216, 123}, {80, 13}}</string>
<string key="NSFrame">{{216, 90}, {80, 13}}</string>
<reference key="NSSuperview" ref="1073354031"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="397705219">
@ -183,7 +183,7 @@
<object class="NSTextField" id="638371207">
<reference key="NSNextResponder" ref="1073354031"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{14, 145}, {100, 14}}</string>
<string key="NSFrame">{{14, 112}, {100, 14}}</string>
<reference key="NSSuperview" ref="1073354031"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="812365472">
@ -203,7 +203,7 @@
<object class="NSButton" id="488256664">
<reference key="NSNextResponder" ref="1073354031"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{15, 79}, {316, 18}}</string>
<string key="NSFrame">{{15, 46}, {316, 18}}</string>
<reference key="NSSuperview" ref="1073354031"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="401283671">
@ -226,7 +226,7 @@
<object class="NSButton" id="722670516">
<reference key="NSNextResponder" ref="1073354031"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{15, 99}, {316, 18}}</string>
<string key="NSFrame">{{15, 66}, {316, 18}}</string>
<reference key="NSSuperview" ref="1073354031"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="911281323">
@ -247,7 +247,7 @@
<object class="NSButton" id="472028782">
<reference key="NSNextResponder" ref="1073354031"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{15, 39}, {316, 18}}</string>
<string key="NSFrame">{{15, 6}, {316, 18}}</string>
<reference key="NSSuperview" ref="1073354031"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="2297113">
@ -268,7 +268,7 @@
<object class="NSButton" id="279087998">
<reference key="NSNextResponder" ref="1073354031"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{15, 59}, {316, 18}}</string>
<string key="NSFrame">{{15, 26}, {316, 18}}</string>
<reference key="NSSuperview" ref="1073354031"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="287383961">
@ -367,6 +367,87 @@
<reference key="NSTextColor" ref="538152464"/>
</object>
</object>
<object class="NSTextField" id="536472926">
<reference key="NSNextResponder" ref="1073354031"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{14, 145}, {85, 13}}</string>
<reference key="NSSuperview" ref="1073354031"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="359086043">
<int key="NSCellFlags">67239424</int>
<int key="NSCellFlags2">272629760</int>
<string key="NSContents">Scan type:</string>
<reference key="NSSupport" ref="649492068"/>
<reference key="NSControlView" ref="536472926"/>
<reference key="NSBackgroundColor" ref="71910056"/>
<reference key="NSTextColor" ref="538152464"/>
</object>
</object>
<object class="NSPopUpButton" id="337614813">
<reference key="NSNextResponder" ref="1073354031"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{113, 135}, {216, 26}}</string>
<reference key="NSSuperview" ref="1073354031"/>
<bool key="NSEnabled">YES</bool>
<object class="NSPopUpButtonCell" key="NSCell" id="697629846">
<int key="NSCellFlags">-2076049856</int>
<int key="NSCellFlags2">2048</int>
<reference key="NSSupport" ref="882799568"/>
<reference key="NSControlView" ref="337614813"/>
<int key="NSButtonFlags">109199615</int>
<int key="NSButtonFlags2">1</int>
<reference key="NSAlternateImage" ref="882799568"/>
<string key="NSAlternateContents"/>
<object class="NSMutableString" key="NSKeyEquivalent">
<characters key="NS.bytes"/>
</object>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
<object class="NSMenuItem" key="NSMenuItem" id="1038855957">
<reference key="NSMenu" ref="958971008"/>
<string key="NSTitle">Contents</string>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<int key="NSState">1</int>
<object class="NSCustomResource" key="NSOnImage" id="875822430">
<string key="NSClassName">NSImage</string>
<string key="NSResourceName">NSMenuCheckmark</string>
</object>
<object class="NSCustomResource" key="NSMixedImage" id="731403416">
<string key="NSClassName">NSImage</string>
<string key="NSResourceName">NSMenuMixedState</string>
</object>
<string key="NSAction">_popUpItemAction:</string>
<reference key="NSTarget" ref="697629846"/>
</object>
<bool key="NSMenuItemRespectAlignment">YES</bool>
<object class="NSMenu" key="NSMenu" id="958971008">
<object class="NSMutableString" key="NSTitle">
<characters key="NS.bytes">OtherViews</characters>
</object>
<object class="NSMutableArray" key="NSMenuItems">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="1038855957"/>
<object class="NSMenuItem" id="820923003">
<reference key="NSMenu" ref="958971008"/>
<string key="NSTitle">EXIF Timestamp</string>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="875822430"/>
<reference key="NSMixedImage" ref="731403416"/>
<string key="NSAction">_popUpItemAction:</string>
<reference key="NSTarget" ref="697629846"/>
</object>
</object>
</object>
<int key="NSPreferredEdge">3</int>
<bool key="NSUsesItemFromMenu">YES</bool>
<bool key="NSAltersState">YES</bool>
<int key="NSArrowPosition">1</int>
</object>
</object>
</object>
<string key="NSFrame">{{10, 33}, {346, 162}}</string>
<reference key="NSSuperview" ref="211771207"/>
@ -504,14 +585,8 @@
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<int key="NSState">1</int>
<object class="NSCustomResource" key="NSOnImage" id="867788054">
<string key="NSClassName">NSImage</string>
<string key="NSResourceName">NSMenuCheckmark</string>
</object>
<object class="NSCustomResource" key="NSMixedImage" id="554538570">
<string key="NSClassName">NSImage</string>
<string key="NSResourceName">NSMenuMixedState</string>
</object>
<reference key="NSOnImage" ref="875822430"/>
<reference key="NSMixedImage" ref="731403416"/>
<string key="NSAction">_popUpItemAction:</string>
<reference key="NSTarget" ref="601288025"/>
</object>
@ -529,8 +604,8 @@
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="867788054"/>
<reference key="NSMixedImage" ref="554538570"/>
<reference key="NSOnImage" ref="875822430"/>
<reference key="NSMixedImage" ref="731403416"/>
<string key="NSAction">_popUpItemAction:</string>
<reference key="NSTarget" ref="601288025"/>
</object>
@ -540,8 +615,8 @@
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="867788054"/>
<reference key="NSMixedImage" ref="554538570"/>
<reference key="NSOnImage" ref="875822430"/>
<reference key="NSMixedImage" ref="731403416"/>
<string key="NSAction">_popUpItemAction:</string>
<reference key="NSTarget" ref="601288025"/>
</object>
@ -877,6 +952,62 @@
</object>
<int key="connectionID">78</int>
</object>
<object class="IBConnectionRecord">
<object class="IBBindingConnection" key="connection">
<string key="label">selectedIndex: values.scanType</string>
<reference key="source" ref="337614813"/>
<reference key="destination" ref="455472712"/>
<object class="NSNibBindingConnector" key="connector">
<reference key="NSSource" ref="337614813"/>
<reference key="NSDestination" ref="455472712"/>
<string key="NSLabel">selectedIndex: values.scanType</string>
<string key="NSBinding">selectedIndex</string>
<string key="NSKeyPath">values.scanType</string>
<int key="NSNibBindingConnectorVersion">2</int>
</object>
</object>
<int key="connectionID">96</int>
</object>
<object class="IBConnectionRecord">
<object class="IBBindingConnection" key="connection">
<string key="label">enabled: values.scanType</string>
<reference key="source" ref="266372855"/>
<reference key="destination" ref="455472712"/>
<object class="NSNibBindingConnector" key="connector">
<reference key="NSSource" ref="266372855"/>
<reference key="NSDestination" ref="455472712"/>
<string key="NSLabel">enabled: values.scanType</string>
<string key="NSBinding">enabled</string>
<string key="NSKeyPath">values.scanType</string>
<object class="NSDictionary" key="NSOptions">
<string key="NS.key.0">NSValueTransformerName</string>
<string key="NS.object.0">vtScanTypeIsFuzzy</string>
</object>
<int key="NSNibBindingConnectorVersion">2</int>
</object>
</object>
<int key="connectionID">98</int>
</object>
<object class="IBConnectionRecord">
<object class="IBBindingConnection" key="connection">
<string key="label">enabled: values.scanType</string>
<reference key="source" ref="722670516"/>
<reference key="destination" ref="455472712"/>
<object class="NSNibBindingConnector" key="connector">
<reference key="NSSource" ref="722670516"/>
<reference key="NSDestination" ref="455472712"/>
<string key="NSLabel">enabled: values.scanType</string>
<string key="NSBinding">enabled</string>
<string key="NSKeyPath">values.scanType</string>
<object class="NSDictionary" key="NSOptions">
<string key="NS.key.0">NSValueTransformerName</string>
<string key="NS.object.0">vtScanTypeIsFuzzy</string>
</object>
<int key="NSNibBindingConnectorVersion">2</int>
</object>
</object>
<int key="connectionID">100</int>
</object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
<object class="NSArray" key="orderedObjects">
@ -993,15 +1124,17 @@
<reference key="object" ref="1073354031"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="722670516"/>
<reference ref="488256664"/>
<reference ref="638371207"/>
<reference ref="171701149"/>
<reference ref="869007847"/>
<reference ref="266372855"/>
<reference ref="279087998"/>
<reference ref="403531548"/>
<reference ref="266372855"/>
<reference ref="869007847"/>
<reference ref="171701149"/>
<reference ref="638371207"/>
<reference ref="488256664"/>
<reference ref="722670516"/>
<reference ref="279087998"/>
<reference ref="472028782"/>
<reference ref="337614813"/>
<reference ref="536472926"/>
</object>
<reference key="parent" ref="700068878"/>
</object>
@ -1268,6 +1401,58 @@
<reference key="object" ref="100803310"/>
<reference key="parent" ref="606836304"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">87</int>
<reference key="object" ref="536472926"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="359086043"/>
</object>
<reference key="parent" ref="1073354031"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">88</int>
<reference key="object" ref="337614813"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="697629846"/>
</object>
<reference key="parent" ref="1073354031"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">89</int>
<reference key="object" ref="697629846"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="958971008"/>
</object>
<reference key="parent" ref="337614813"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">90</int>
<reference key="object" ref="958971008"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="820923003"/>
<reference ref="1038855957"/>
</object>
<reference key="parent" ref="697629846"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">92</int>
<reference key="object" ref="820923003"/>
<reference key="parent" ref="958971008"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">93</int>
<reference key="object" ref="1038855957"/>
<reference key="parent" ref="958971008"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">94</int>
<reference key="object" ref="359086043"/>
<reference key="parent" ref="536472926"/>
</object>
</object>
</object>
<object class="NSMutableDictionary" key="flattenedProperties">
@ -1283,14 +1468,19 @@
<string>11.IBPluginDependency</string>
<string>11.ImportedFromIB2</string>
<string>12.IBPluginDependency</string>
<string>12.IBViewBoundsToFrameTransform</string>
<string>12.ImportedFromIB2</string>
<string>13.IBPluginDependency</string>
<string>13.IBViewBoundsToFrameTransform</string>
<string>13.ImportedFromIB2</string>
<string>14.IBPluginDependency</string>
<string>14.IBViewBoundsToFrameTransform</string>
<string>14.ImportedFromIB2</string>
<string>15.IBPluginDependency</string>
<string>15.IBViewBoundsToFrameTransform</string>
<string>15.ImportedFromIB2</string>
<string>16.IBPluginDependency</string>
<string>16.IBViewBoundsToFrameTransform</string>
<string>16.ImportedFromIB2</string>
<string>17.IBPluginDependency</string>
<string>18.IBPluginDependency</string>
@ -1326,6 +1516,7 @@
<string>4.IBPluginDependency</string>
<string>4.ImportedFromIB2</string>
<string>5.IBPluginDependency</string>
<string>5.IBViewBoundsToFrameTransform</string>
<string>5.ImportedFromIB2</string>
<string>59.IBPluginDependency</string>
<string>6.IBPluginDependency</string>
@ -1346,6 +1537,7 @@
<string>69.IBViewBoundsToFrameTransform</string>
<string>69.ImportedFromIB2</string>
<string>7.IBPluginDependency</string>
<string>7.IBViewBoundsToFrameTransform</string>
<string>7.ImportedFromIB2</string>
<string>70.IBPluginDependency</string>
<string>74.IBPluginDependency</string>
@ -1355,9 +1547,24 @@
<string>8.IBPluginDependency</string>
<string>8.IBViewBoundsToFrameTransform</string>
<string>8.ImportedFromIB2</string>
<string>87.IBPluginDependency</string>
<string>87.IBViewBoundsToFrameTransform</string>
<string>87.ImportedFromIB2</string>
<string>88.IBPluginDependency</string>
<string>88.IBViewBoundsToFrameTransform</string>
<string>88.ImportedFromIB2</string>
<string>89.IBPluginDependency</string>
<string>9.IBPluginDependency</string>
<string>9.IBViewBoundsToFrameTransform</string>
<string>9.ImportedFromIB2</string>
<string>90.IBEditorWindowLastContentRect</string>
<string>90.IBPluginDependency</string>
<string>90.ImportedFromIB2</string>
<string>92.IBPluginDependency</string>
<string>92.ImportedFromIB2</string>
<string>93.IBPluginDependency</string>
<string>93.ImportedFromIB2</string>
<string>94.IBPluginDependency</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
@ -1372,14 +1579,29 @@
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<object class="NSAffineTransform">
<bytes key="NSTransformStruct">P4AAAL+AAABBcAAAwr4AAA</bytes>
</object>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<object class="NSAffineTransform">
<bytes key="NSTransformStruct">P4AAAL+AAABBYAAAwx0AAA</bytes>
</object>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<object class="NSAffineTransform">
<bytes key="NSTransformStruct">P4AAAL+AAABDWAAAwwYAAA</bytes>
</object>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<object class="NSAffineTransform">
<bytes key="NSTransformStruct">P4AAAL+AAABC7gAAwwYAAA</bytes>
</object>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<object class="NSAffineTransform">
<bytes key="NSTransformStruct">P4AAAL+AAABC6gAAwx8AAA</bytes>
</object>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@ -1415,11 +1637,14 @@
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<object class="NSAffineTransform">
<bytes key="NSTransformStruct">P4AAAL+AAABBcAAAwpYAAA</bytes>
</object>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<object class="NSAffineTransform">
<bytes key="NSTransformStruct">P4AAAL+AAABBcAAAwfAAAA</bytes>
<bytes key="NSTransformStruct">P4AAAL+AAABBcAAAwlwAAA</bytes>
</object>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@ -1443,6 +1668,9 @@
</object>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<object class="NSAffineTransform">
<bytes key="NSTransformStruct">P4AAAL+AAABBcAAAwuYAAA</bytes>
</object>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@ -1457,10 +1685,29 @@
</object>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<object class="NSAffineTransform">
<bytes key="NSTransformStruct">P4AAAL+AAABBYAAAwx0AAA</bytes>
</object>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<object class="NSAffineTransform">
<bytes key="NSTransformStruct">P4AAAL+AAABCbAAAwx8AAA</bytes>
</object>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<object class="NSAffineTransform">
<bytes key="NSTransformStruct">P4AAAL+AAABBYAAAwjwAAA</bytes>
</object>
<boolean value="YES"/>
<string>{{213, 762}, {216, 43}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
</object>
</object>
<object class="NSMutableDictionary" key="unlocalizedProperties">
@ -1479,7 +1726,7 @@
</object>
</object>
<nil key="sourceID"/>
<int key="maxID">78</int>
<int key="maxID">100</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">

View File

@ -2,13 +2,13 @@
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
<data>
<int key="IBDocument.SystemTarget">1050</int>
<string key="IBDocument.SystemVersion">10J567</string>
<string key="IBDocument.InterfaceBuilderVersion">823</string>
<string key="IBDocument.SystemVersion">10J869</string>
<string key="IBDocument.InterfaceBuilderVersion">851</string>
<string key="IBDocument.AppKitVersion">1038.35</string>
<string key="IBDocument.HIToolboxVersion">462.00</string>
<string key="IBDocument.HIToolboxVersion">461.00</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="NS.object.0">823</string>
<string key="NS.object.0">851</string>
</object>
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
<bool key="EncodedWithXMLCoder">YES</bool>
@ -98,7 +98,7 @@
<object class="NSSlider" id="266372855">
<reference key="NSNextResponder" ref="1073354031"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{117, 140}, {181, 21}}</string>
<string key="NSFrame">{{117, 107}, {181, 21}}</string>
<reference key="NSSuperview" ref="1073354031"/>
<bool key="NSEnabled">YES</bool>
<object class="NSSliderCell" key="NSCell" id="453640282">
@ -126,7 +126,7 @@
<object class="NSTextField" id="869007847">
<reference key="NSNextResponder" ref="1073354031"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{119, 123}, {80, 13}}</string>
<string key="NSFrame">{{119, 90}, {80, 13}}</string>
<reference key="NSSuperview" ref="1073354031"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="106025161">
@ -162,7 +162,7 @@
<object class="NSTextField" id="171701149">
<reference key="NSNextResponder" ref="1073354031"/>
<int key="NSvFlags">289</int>
<string key="NSFrame">{{216, 123}, {80, 13}}</string>
<string key="NSFrame">{{216, 90}, {80, 13}}</string>
<reference key="NSSuperview" ref="1073354031"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="397705219">
@ -178,7 +178,7 @@
<object class="NSTextField" id="638371207">
<reference key="NSNextResponder" ref="1073354031"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{14, 145}, {100, 14}}</string>
<string key="NSFrame">{{14, 112}, {100, 14}}</string>
<reference key="NSSuperview" ref="1073354031"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="812365472">
@ -198,7 +198,7 @@
<object class="NSButton" id="488256664">
<reference key="NSNextResponder" ref="1073354031"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{15, 79}, {316, 18}}</string>
<string key="NSFrame">{{15, 46}, {316, 18}}</string>
<reference key="NSSuperview" ref="1073354031"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="401283671">
@ -209,7 +209,7 @@
<reference key="NSControlView" ref="488256664"/>
<int key="NSButtonFlags">1211912703</int>
<int key="NSButtonFlags2">2</int>
<object class="NSCustomResource" key="NSNormalImage" id="283442644">
<object class="NSCustomResource" key="NSNormalImage" id="596695557">
<string key="NSClassName">NSImage</string>
<string key="NSResourceName">NSSwitch</string>
</object>
@ -225,7 +225,7 @@
<object class="NSButton" id="722670516">
<reference key="NSNextResponder" ref="1073354031"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{15, 99}, {316, 18}}</string>
<string key="NSFrame">{{15, 66}, {316, 18}}</string>
<reference key="NSSuperview" ref="1073354031"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="911281323">
@ -236,7 +236,7 @@
<reference key="NSControlView" ref="722670516"/>
<int key="NSButtonFlags">1211912703</int>
<int key="NSButtonFlags2">2</int>
<reference key="NSNormalImage" ref="283442644"/>
<reference key="NSNormalImage" ref="596695557"/>
<reference key="NSAlternateImage" ref="990345653"/>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
@ -247,7 +247,7 @@
<object class="NSButton" id="472028782">
<reference key="NSNextResponder" ref="1073354031"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{15, 39}, {316, 18}}</string>
<string key="NSFrame">{{15, 6}, {316, 18}}</string>
<reference key="NSSuperview" ref="1073354031"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="2297113">
@ -258,7 +258,7 @@
<reference key="NSControlView" ref="472028782"/>
<int key="NSButtonFlags">1211912703</int>
<int key="NSButtonFlags2">2</int>
<reference key="NSNormalImage" ref="283442644"/>
<reference key="NSNormalImage" ref="596695557"/>
<reference key="NSAlternateImage" ref="990345653"/>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
@ -269,7 +269,7 @@
<object class="NSButton" id="279087998">
<reference key="NSNextResponder" ref="1073354031"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{15, 59}, {316, 18}}</string>
<string key="NSFrame">{{15, 26}, {316, 18}}</string>
<reference key="NSSuperview" ref="1073354031"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="287383961">
@ -280,7 +280,7 @@
<reference key="NSControlView" ref="279087998"/>
<int key="NSButtonFlags">1211912703</int>
<int key="NSButtonFlags2">2</int>
<reference key="NSNormalImage" ref="283442644"/>
<reference key="NSNormalImage" ref="596695557"/>
<reference key="NSAlternateImage" ref="990345653"/>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
@ -369,6 +369,87 @@
<reference key="NSTextColor" ref="538152464"/>
</object>
</object>
<object class="NSTextField" id="536472926">
<reference key="NSNextResponder" ref="1073354031"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{14, 145}, {85, 13}}</string>
<reference key="NSSuperview" ref="1073354031"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="359086043">
<int key="NSCellFlags">67239424</int>
<int key="NSCellFlags2">272629760</int>
<string key="NSContents">Scan type:</string>
<reference key="NSSupport" ref="649492068"/>
<reference key="NSControlView" ref="536472926"/>
<reference key="NSBackgroundColor" ref="71910056"/>
<reference key="NSTextColor" ref="538152464"/>
</object>
</object>
<object class="NSPopUpButton" id="337614813">
<reference key="NSNextResponder" ref="1073354031"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{113, 135}, {216, 26}}</string>
<reference key="NSSuperview" ref="1073354031"/>
<bool key="NSEnabled">YES</bool>
<object class="NSPopUpButtonCell" key="NSCell" id="697629846">
<int key="NSCellFlags">-2076049856</int>
<int key="NSCellFlags2">2048</int>
<reference key="NSSupport" ref="882799568"/>
<reference key="NSControlView" ref="337614813"/>
<int key="NSButtonFlags">109199615</int>
<int key="NSButtonFlags2">1</int>
<reference key="NSAlternateImage" ref="882799568"/>
<string key="NSAlternateContents"/>
<object class="NSMutableString" key="NSKeyEquivalent">
<characters key="NS.bytes"/>
</object>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
<object class="NSMenuItem" key="NSMenuItem" id="1038855957">
<reference key="NSMenu" ref="958971008"/>
<string key="NSTitle">Contents</string>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<int key="NSState">1</int>
<object class="NSCustomResource" key="NSOnImage" id="875822430">
<string key="NSClassName">NSImage</string>
<string key="NSResourceName">NSMenuCheckmark</string>
</object>
<object class="NSCustomResource" key="NSMixedImage" id="731403416">
<string key="NSClassName">NSImage</string>
<string key="NSResourceName">NSMenuMixedState</string>
</object>
<string key="NSAction">_popUpItemAction:</string>
<reference key="NSTarget" ref="697629846"/>
</object>
<bool key="NSMenuItemRespectAlignment">YES</bool>
<object class="NSMenu" key="NSMenu" id="958971008">
<object class="NSMutableString" key="NSTitle">
<characters key="NS.bytes">OtherViews</characters>
</object>
<object class="NSMutableArray" key="NSMenuItems">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="1038855957"/>
<object class="NSMenuItem" id="820923003">
<reference key="NSMenu" ref="958971008"/>
<string key="NSTitle">EXIF Timestamp</string>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="875822430"/>
<reference key="NSMixedImage" ref="731403416"/>
<string key="NSAction">_popUpItemAction:</string>
<reference key="NSTarget" ref="697629846"/>
</object>
</object>
</object>
<int key="NSPreferredEdge">3</int>
<bool key="NSUsesItemFromMenu">YES</bool>
<bool key="NSAltersState">YES</bool>
<int key="NSArrowPosition">1</int>
</object>
</object>
</object>
<string key="NSFrame">{{10, 33}, {346, 162}}</string>
<reference key="NSSuperview" ref="211771207"/>
@ -398,7 +479,7 @@
<reference key="NSControlView" ref="1018598123"/>
<int key="NSButtonFlags">1211912703</int>
<int key="NSButtonFlags2">2</int>
<reference key="NSNormalImage" ref="283442644"/>
<reference key="NSNormalImage" ref="596695557"/>
<reference key="NSAlternateImage" ref="990345653"/>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
@ -420,7 +501,7 @@
<reference key="NSControlView" ref="519470955"/>
<int key="NSButtonFlags">1211912703</int>
<int key="NSButtonFlags2">2</int>
<reference key="NSNormalImage" ref="283442644"/>
<reference key="NSNormalImage" ref="596695557"/>
<reference key="NSAlternateImage" ref="990345653"/>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
@ -442,7 +523,7 @@
<reference key="NSControlView" ref="606836304"/>
<int key="NSButtonFlags">1211912703</int>
<int key="NSButtonFlags2">2</int>
<reference key="NSNormalImage" ref="283442644"/>
<reference key="NSNormalImage" ref="596695557"/>
<reference key="NSAlternateImage" ref="990345653"/>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
@ -509,14 +590,8 @@
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<int key="NSState">1</int>
<object class="NSCustomResource" key="NSOnImage" id="867788054">
<string key="NSClassName">NSImage</string>
<string key="NSResourceName">NSMenuCheckmark</string>
</object>
<object class="NSCustomResource" key="NSMixedImage" id="554538570">
<string key="NSClassName">NSImage</string>
<string key="NSResourceName">NSMenuMixedState</string>
</object>
<reference key="NSOnImage" ref="875822430"/>
<reference key="NSMixedImage" ref="731403416"/>
<string key="NSAction">_popUpItemAction:</string>
<reference key="NSTarget" ref="601288025"/>
</object>
@ -534,8 +609,8 @@
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="867788054"/>
<reference key="NSMixedImage" ref="554538570"/>
<reference key="NSOnImage" ref="875822430"/>
<reference key="NSMixedImage" ref="731403416"/>
<string key="NSAction">_popUpItemAction:</string>
<reference key="NSTarget" ref="601288025"/>
</object>
@ -545,8 +620,8 @@
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="867788054"/>
<reference key="NSMixedImage" ref="554538570"/>
<reference key="NSOnImage" ref="875822430"/>
<reference key="NSMixedImage" ref="731403416"/>
<string key="NSAction">_popUpItemAction:</string>
<reference key="NSTarget" ref="601288025"/>
</object>
@ -881,6 +956,62 @@
</object>
<int key="connectionID">78</int>
</object>
<object class="IBConnectionRecord">
<object class="IBBindingConnection" key="connection">
<string key="label">selectedIndex: values.scanType</string>
<reference key="source" ref="337614813"/>
<reference key="destination" ref="455472712"/>
<object class="NSNibBindingConnector" key="connector">
<reference key="NSSource" ref="337614813"/>
<reference key="NSDestination" ref="455472712"/>
<string key="NSLabel">selectedIndex: values.scanType</string>
<string key="NSBinding">selectedIndex</string>
<string key="NSKeyPath">values.scanType</string>
<int key="NSNibBindingConnectorVersion">2</int>
</object>
</object>
<int key="connectionID">96</int>
</object>
<object class="IBConnectionRecord">
<object class="IBBindingConnection" key="connection">
<string key="label">enabled: values.scanType</string>
<reference key="source" ref="266372855"/>
<reference key="destination" ref="455472712"/>
<object class="NSNibBindingConnector" key="connector">
<reference key="NSSource" ref="266372855"/>
<reference key="NSDestination" ref="455472712"/>
<string key="NSLabel">enabled: values.scanType</string>
<string key="NSBinding">enabled</string>
<string key="NSKeyPath">values.scanType</string>
<object class="NSDictionary" key="NSOptions">
<string key="NS.key.0">NSValueTransformerName</string>
<string key="NS.object.0">vtScanTypeIsFuzzy</string>
</object>
<int key="NSNibBindingConnectorVersion">2</int>
</object>
</object>
<int key="connectionID">98</int>
</object>
<object class="IBConnectionRecord">
<object class="IBBindingConnection" key="connection">
<string key="label">enabled: values.scanType</string>
<reference key="source" ref="722670516"/>
<reference key="destination" ref="455472712"/>
<object class="NSNibBindingConnector" key="connector">
<reference key="NSSource" ref="722670516"/>
<reference key="NSDestination" ref="455472712"/>
<string key="NSLabel">enabled: values.scanType</string>
<string key="NSBinding">enabled</string>
<string key="NSKeyPath">values.scanType</string>
<object class="NSDictionary" key="NSOptions">
<string key="NS.key.0">NSValueTransformerName</string>
<string key="NS.object.0">vtScanTypeIsFuzzy</string>
</object>
<int key="NSNibBindingConnectorVersion">2</int>
</object>
</object>
<int key="connectionID">100</int>
</object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
<object class="NSArray" key="orderedObjects">
@ -997,15 +1128,17 @@
<reference key="object" ref="1073354031"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="722670516"/>
<reference ref="488256664"/>
<reference ref="638371207"/>
<reference ref="171701149"/>
<reference ref="869007847"/>
<reference ref="266372855"/>
<reference ref="279087998"/>
<reference ref="403531548"/>
<reference ref="266372855"/>
<reference ref="869007847"/>
<reference ref="171701149"/>
<reference ref="638371207"/>
<reference ref="488256664"/>
<reference ref="722670516"/>
<reference ref="279087998"/>
<reference ref="472028782"/>
<reference ref="337614813"/>
<reference ref="536472926"/>
</object>
<reference key="parent" ref="700068878"/>
</object>
@ -1272,6 +1405,58 @@
<reference key="object" ref="100803310"/>
<reference key="parent" ref="606836304"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">87</int>
<reference key="object" ref="536472926"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="359086043"/>
</object>
<reference key="parent" ref="1073354031"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">88</int>
<reference key="object" ref="337614813"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="697629846"/>
</object>
<reference key="parent" ref="1073354031"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">89</int>
<reference key="object" ref="697629846"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="958971008"/>
</object>
<reference key="parent" ref="337614813"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">90</int>
<reference key="object" ref="958971008"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="820923003"/>
<reference ref="1038855957"/>
</object>
<reference key="parent" ref="697629846"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">92</int>
<reference key="object" ref="820923003"/>
<reference key="parent" ref="958971008"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">93</int>
<reference key="object" ref="1038855957"/>
<reference key="parent" ref="958971008"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">94</int>
<reference key="object" ref="359086043"/>
<reference key="parent" ref="536472926"/>
</object>
</object>
</object>
<object class="NSMutableDictionary" key="flattenedProperties">
@ -1287,14 +1472,19 @@
<string>11.IBPluginDependency</string>
<string>11.ImportedFromIB2</string>
<string>12.IBPluginDependency</string>
<string>12.IBViewBoundsToFrameTransform</string>
<string>12.ImportedFromIB2</string>
<string>13.IBPluginDependency</string>
<string>13.IBViewBoundsToFrameTransform</string>
<string>13.ImportedFromIB2</string>
<string>14.IBPluginDependency</string>
<string>14.IBViewBoundsToFrameTransform</string>
<string>14.ImportedFromIB2</string>
<string>15.IBPluginDependency</string>
<string>15.IBViewBoundsToFrameTransform</string>
<string>15.ImportedFromIB2</string>
<string>16.IBPluginDependency</string>
<string>16.IBViewBoundsToFrameTransform</string>
<string>16.ImportedFromIB2</string>
<string>17.IBPluginDependency</string>
<string>18.IBPluginDependency</string>
@ -1331,6 +1521,7 @@
<string>4.IBPluginDependency</string>
<string>4.ImportedFromIB2</string>
<string>5.IBPluginDependency</string>
<string>5.IBViewBoundsToFrameTransform</string>
<string>5.ImportedFromIB2</string>
<string>59.IBPluginDependency</string>
<string>6.IBPluginDependency</string>
@ -1351,6 +1542,7 @@
<string>69.IBViewBoundsToFrameTransform</string>
<string>69.ImportedFromIB2</string>
<string>7.IBPluginDependency</string>
<string>7.IBViewBoundsToFrameTransform</string>
<string>7.ImportedFromIB2</string>
<string>70.IBPluginDependency</string>
<string>74.IBPluginDependency</string>
@ -1360,9 +1552,24 @@
<string>8.IBPluginDependency</string>
<string>8.IBViewBoundsToFrameTransform</string>
<string>8.ImportedFromIB2</string>
<string>87.IBPluginDependency</string>
<string>87.IBViewBoundsToFrameTransform</string>
<string>87.ImportedFromIB2</string>
<string>88.IBPluginDependency</string>
<string>88.IBViewBoundsToFrameTransform</string>
<string>88.ImportedFromIB2</string>
<string>89.IBPluginDependency</string>
<string>9.IBPluginDependency</string>
<string>9.IBViewBoundsToFrameTransform</string>
<string>9.ImportedFromIB2</string>
<string>90.IBEditorWindowLastContentRect</string>
<string>90.IBPluginDependency</string>
<string>90.ImportedFromIB2</string>
<string>92.IBPluginDependency</string>
<string>92.ImportedFromIB2</string>
<string>93.IBPluginDependency</string>
<string>93.ImportedFromIB2</string>
<string>94.IBPluginDependency</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
@ -1377,14 +1584,29 @@
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<object class="NSAffineTransform">
<bytes key="NSTransformStruct">P4AAAL+AAABBcAAAwr4AAA</bytes>
</object>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<object class="NSAffineTransform">
<bytes key="NSTransformStruct">P4AAAL+AAABBYAAAwx0AAA</bytes>
</object>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<object class="NSAffineTransform">
<bytes key="NSTransformStruct">P4AAAL+AAABDWAAAwwYAAA</bytes>
</object>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<object class="NSAffineTransform">
<bytes key="NSTransformStruct">P4AAAL+AAABC7gAAwwYAAA</bytes>
</object>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<object class="NSAffineTransform">
<bytes key="NSTransformStruct">P4AAAL+AAABC6gAAwx8AAA</bytes>
</object>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@ -1421,11 +1643,14 @@
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<object class="NSAffineTransform">
<bytes key="NSTransformStruct">P4AAAL+AAABBcAAAwpYAAA</bytes>
</object>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<object class="NSAffineTransform">
<bytes key="NSTransformStruct">P4AAAL+AAABBcAAAwfAAAA</bytes>
<bytes key="NSTransformStruct">P4AAAL+AAABBcAAAwlwAAA</bytes>
</object>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@ -1449,6 +1674,9 @@
</object>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<object class="NSAffineTransform">
<bytes key="NSTransformStruct">P4AAAL+AAABBcAAAwuYAAA</bytes>
</object>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@ -1463,10 +1691,29 @@
</object>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<object class="NSAffineTransform">
<bytes key="NSTransformStruct">P4AAAL+AAABBYAAAwx0AAA</bytes>
</object>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<object class="NSAffineTransform">
<bytes key="NSTransformStruct">P4AAAL+AAABCbAAAwx8AAA</bytes>
</object>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<object class="NSAffineTransform">
<bytes key="NSTransformStruct">P4AAAL+AAABBYAAAwjwAAA</bytes>
</object>
<boolean value="YES"/>
<string>{{213, 762}, {216, 43}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
</object>
</object>
<object class="NSMutableDictionary" key="unlocalizedProperties">
@ -1485,7 +1732,7 @@
</object>
</object>
<nil key="sourceID"/>
<int key="maxID">78</int>
<int key="maxID">100</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">

View File

@ -11,7 +11,6 @@ http://www.hardcoded.net/licenses/bsd_license
@interface PyDupeGuru : PyDupeGuruBase
//Scanning options
- (void)setScanType:(NSNumber *)scan_type;
- (void)setWordWeighting:(NSNumber *)words_are_weighted;
- (void)setMatchSimilarWords:(NSNumber *)match_similar_words;
@end

View File

@ -17,6 +17,10 @@ from hscommon.trans import tr
from . import engine
from .ignore import IgnoreList
# It's quite ugly to have scan types from all editions all put in the same class, but because there's
# there will be some nasty bugs popping up (ScanType is used in core when in should exclusively be
# used in core_*). One day I'll clean this up.
class ScanType:
Filename = 0
Fields = 1
@ -25,6 +29,10 @@ class ScanType:
Folders = 4
Contents = 5
ContentsAudio = 6
#PE
FuzzyBlock = 10
ExifTimestamp = 11
SCANNABLE_TAGS = ['track', 'artist', 'album', 'title', 'genre', 'year']

View File

@ -8,8 +8,6 @@
# Heavily based on http://topo.math.u-psud.fr/~bousch/exifdump.py by Thierry Bousch (Public Domain)
import os
import sys
import logging
EXIF_TAGS = {
@ -260,7 +258,6 @@ def read_exif_header(fp):
try:
index = large_data.index(b'Exif')
data = large_data[index-6:index+6]
print('hello!', data)
# large_data omits the first 12 bytes, and the index is at the middle of the header, so we
# must seek index + 18
fp.seek(index+18)
@ -324,25 +321,3 @@ def get_fields(fp):
for tag, type, values in IFD:
add_tag_to_result(tag, values)
return result
def main():
# logging.getLogger().setLevel(logging.DEBUG)
if len(sys.argv) < 2:
filenames = os.listdir('.')
else:
filenames = sys.argv[1:]
for filename in filenames:
print(filename+':')
try:
file = open(filename, 'rb')
fields = get_fields(file)
if 'DateTime' in fields:
print(fields['DateTime'])
else:
print(repr(fields))
except (IOError, ValueError):
print(' Cannot open file')
sys.exit(0)
if __name__ == '__main__':
main()

34
core_pe/matchexif.py Normal file
View File

@ -0,0 +1,34 @@
# Created By: Virgil Dupras
# Created On: 2011-04-20
# 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
import logging
from collections import defaultdict
from itertools import combinations
from hscommon import io
from hscommon.trans import tr
from core.engine import Match
from . import exif
def getmatches(files, j):
timestamp2pic = defaultdict(set)
for picture in j.iter_with_progress(files, tr("Read EXIF of %d/%d pictures")):
try:
with io.open(picture.path, 'rb') as fp:
exifdata = exif.get_fields(fp)
timestamp = exifdata['DateTimeOriginal']
timestamp2pic[timestamp].add(picture)
except Exception:
logging.warning("Couldn't read EXIF of picture: %s", picture.path)
if '0000:00:00 00:00:00' in timestamp2pic: # very likely false matches
del timestamp2pic['0000:00:00 00:00:00']
matches = []
for pictures in timestamp2pic.values():
matches += [Match(p1, p2, 100) for p1, p2 in combinations(pictures, 2)]
return matches

View File

@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# Created By: Virgil Dupras
# Created On: 2009-10-18
# Copyright 2011 Hardcoded Software (http://www.hardcoded.net)
@ -7,9 +6,9 @@
# which should be included with this package. The terms are also available at
# http://www.hardcoded.net/licenses/bsd_license
from core.scanner import Scanner
from core.scanner import Scanner, ScanType
from . import matchbase
from . import matchblock, matchexif
from .cache import Cache
class ScannerPE(Scanner):
@ -18,7 +17,12 @@ class ScannerPE(Scanner):
threshold = 75
def _getmatches(self, files, j):
return matchbase.getmatches(files, self.cache_path, self.threshold, self.match_scaled, j)
if self.scan_type == ScanType.FuzzyBlock:
return matchblock.getmatches(files, self.cache_path, self.threshold, self.match_scaled, j)
elif self.scan_type == ScanType.ExifTimestamp:
return matchexif.getmatches(files, j)
else:
raise Exception("Invalid scan type")
def clear_picture_cache(self):
cache = Cache(self.cache_path)

View File

@ -32,9 +32,11 @@ Preferences
.. only:: edition_pe
**Filter Hardness:** The higher is this setting, the "harder" is the filter (In other words, the less results you get). Most pictures of the same quality match at 100% even if the format is different (PNG and JPG for example.). However, if you want to make a PNG match with a lower quality JPG, you will have to set the filer hardness to lower than 100. The default, 95, is a sweet spot.
**Scan Type:** This option determines the type of scan that will be made on your pictures. The **Contents** scan type compares the actual contents of the pictures in a fuzzy way (making it possible to find not only exact duplicates, but also similar ones). The **EXIF Timestamp** scan type looks at the EXIF metadata of the picture (if it exists) and matches pictures that have the same one. It's much faster than the Contents scan.
**Filter Hardness:** *Contents scan type only.* The higher is this setting, the "harder" is the filter (In other words, the less results you get). Most pictures of the same quality match at 100% even if the format is different (PNG and JPG for example.). However, if you want to make a PNG match with a lower quality JPG, you will have to set the filer hardness to lower than 100. The default, 95, is a sweet spot.
**Match scaled pictures together:** If you check this box, pictures of different dimensions will be allowed in the same duplicate group.
**Match scaled pictures together:** *Contents scan type only.* If you check this box, pictures of different dimensions will be allowed in the same duplicate group.
**Can mix file kind:** If you check this box, duplicate groups are allowed to have files with different extensions. If you don't check it, well, they aren't!

View File

@ -32,9 +32,11 @@ Préférences
.. only:: edition_pe
**Seuil du filtre:** Plus il est élevé, plus les images doivent être similaires pour être considérées comme des doublons. Le défaut de 95% permet quelques petites différence, comme par exemple une différence de qualité ou bien une légère modification des couleurs.
**Type de scan:** Détermine le type de scan qui sera fait sur vos images. Le type **Contenu** compare le contenu des images de façon "fuzzy", rendant possible de trouver non seulement les doublons exactes, mais aussi les similaires. Le type **EXIF Timestamp** compare les métadonnées EXIF des images (si existantes) et détermine si le "timestamp" (moment de prise de la photo) est pareille. C'est beaucoup plus rapide que le scan par Contenu.
**Seuil du filtre:** *Scan par Contenu seulement.* Plus il est élevé, plus les images doivent être similaires pour être considérées comme des doublons. Le défaut de 95% permet quelques petites différence, comme par exemple une différence de qualité ou bien une légère modification des couleurs.
**Comparer les images de tailles différentes:** Le nom dit tout. Sans cette option, les images de tailles différentes ne sont pas comparées.
**Comparer les images de tailles différentes:** *Scan par Contenu seulement.* Le nom dit tout. Sans cette option, les images de tailles différentes ne sont pas comparées.
**Comparer les fichiers de différents types:** Sans cette option, seulement les fichiers du même type seront comparés.

View File

@ -71,6 +71,7 @@ class DupeGuru(DupeGuruBase):
def _update_options(self):
DupeGuruBase._update_options(self)
self.scanner.scan_type = self.prefs.scan_type
self.scanner.match_scaled = self.prefs.match_scaled
self.scanner.threshold = self.prefs.filter_hardness

View File

@ -6,7 +6,7 @@
# which should be included with this package. The terms are also available at
# http://www.hardcoded.net/licenses/bsd_license
from PyQt4.QtCore import QSettings, QVariant
from core.scanner import ScanType
from ..base.preferences import Preferences as PreferencesBase
@ -24,12 +24,17 @@ class Preferences(PreferencesBase):
]
def _load_specific(self, settings):
self.match_scaled = self.get_value('MatchScaled', self.match_scaled)
get = self.get_value
self.scan_type = get('ScanType', self.scan_type)
self.match_scaled = get('MatchScaled', self.match_scaled)
def _reset_specific(self):
self.scan_type = ScanType.FuzzyBlock
self.filter_hardness = 95
self.match_scaled = False
def _save_specific(self, settings):
self.set_value('MatchScaled', self.match_scaled)
set_ = self.set_value
set_('ScanType', self.scan_type)
set_('MatchScaled', self.match_scaled)

View File

@ -10,12 +10,26 @@ import sys
from PyQt4.QtGui import QLabel, QApplication
from hscommon.trans import tr
from core.scanner import ScanType
from ..base.preferences_dialog import PreferencesDialogBase
from . import preferences
SCAN_TYPE_ORDER = [
ScanType.FuzzyBlock,
ScanType.ExifTimestamp,
]
class PreferencesDialog(PreferencesDialogBase):
def __init__(self, parent, app):
PreferencesDialogBase.__init__(self, parent, app)
self.scanTypeComboBox.currentIndexChanged[int].connect(self.scanTypeChanged)
def _setupPreferenceWidgets(self):
scanTypeLabels = [tr(s) for s in ["Contents", "EXIF Timestamp"]]
self._setupScanTypeBox(scanTypeLabels)
self._setupFilterHardnessBox()
self.widgetsVLayout.addLayout(self.filterHardnessHLayout)
self._setupAddCheckbox('matchScaledBox', tr("Match scaled pictures together"))
@ -33,14 +47,24 @@ class PreferencesDialog(PreferencesDialogBase):
self._setupBottomPart()
def _load(self, prefs, setchecked):
scan_type_index = SCAN_TYPE_ORDER.index(prefs.scan_type)
self.scanTypeComboBox.setCurrentIndex(scan_type_index)
setchecked(self.matchScaledBox, prefs.match_scaled)
def _save(self, prefs, ischecked):
prefs.scan_type = SCAN_TYPE_ORDER[self.scanTypeComboBox.currentIndex()]
prefs.match_scaled = ischecked(self.matchScaledBox)
def resetToDefaults(self):
self.load(preferences.Preferences())
#--- Events
def scanTypeChanged(self, index):
scan_type = SCAN_TYPE_ORDER[self.scanTypeComboBox.currentIndex()]
fuzzy_scan = scan_type == ScanType.FuzzyBlock
self.filterHardnessSlider.setEnabled(fuzzy_scan)
self.matchScaledBox.setEnabled(fuzzy_scan)
if __name__ == '__main__':
from ..testapp import TestApp