1
0
mirror of https://github.com/arsenetar/dupeguru.git synced 2026-01-25 16:11:39 +00:00

Compare commits

...

7 Commits

Author SHA1 Message Date
Virgil Dupras
ecef95469d me v5.7.1 2010-01-19 12:38:30 +01:00
Virgil Dupras
55d30d5e4b Use hsutil.cocoa.signature in me/dg_cocoa.py, Added the Remove Dead Tracks menu item which was lost since 5.7 (how did I not notice that?) 2010-01-19 12:28:15 +01:00
Virgil Dupras
2d5502cc2f Explicited pyobjc imports. 2010-01-18 08:48:44 +01:00
Virgil Dupras
5cda4a1eb4 Updated the cocoalib subrepo 2010-01-17 12:41:19 +01:00
Virgil Dupras
812b914b70 Added support for 64 bit in the build script. 2010-01-15 11:47:40 +01:00
Virgil Dupras
9b870ad863 Converted int to NSInteger 2010-01-15 11:19:24 +01:00
Virgil Dupras
0f250ac92d Added tag pe1.8.1 for changeset 0e923897a338 2010-01-15 09:00:36 +01:00
20 changed files with 88 additions and 49 deletions

View File

@@ -6,3 +6,4 @@ a8f232f880b6f9ada565d472996a627ebf69b6e9 before-tiger-drop
adc73ccd14b1386cb04dee773c53a2d126800e31 se2.9.0 adc73ccd14b1386cb04dee773c53a2d126800e31 se2.9.0
cbcf9c80fee4c908ef2efbf1c143c9e47676c9b2 pe1.8.0 cbcf9c80fee4c908ef2efbf1c143c9e47676c9b2 pe1.8.0
61c4101851bdea3cb37dfb76f0d404c78c7c594c se2.9.1 61c4101851bdea3cb37dfb76f0d404c78c7c594c se2.9.1
0e923897a3389331d4ab3debbc40b8dd616199d9 pe1.8.1

View File

@@ -23,7 +23,10 @@ def main():
edition = conf['edition'] edition = conf['edition']
ui = conf['ui'] ui = conf['ui']
dev = conf['dev'] dev = conf['dev']
build64 = conf['build64']
print "Building dupeGuru {0} with UI {1}".format(edition.upper(), ui) print "Building dupeGuru {0} with UI {1}".format(edition.upper(), ui)
if build64:
print "If possible, 64-bit builds will be made"
if dev: if dev:
print "Building in Dev mode" print "Building in Dev mode"
add_to_pythonpath('.') add_to_pythonpath('.')
@@ -78,7 +81,11 @@ def main():
open(pthpath, 'w').write(op.abspath('.')) open(pthpath, 'w').write(op.abspath('.'))
os.chdir(cocoa_project_path) os.chdir(cocoa_project_path)
print "Building the XCode project" print "Building the XCode project"
os.system('xcodebuild') args = []
if build64:
args.append('ARCHS="x86_64 i386 ppc"')
args = ' '.join(args)
os.system('xcodebuild {0}'.format(args))
os.chdir('..') os.chdir('..')
elif ui == 'qt': elif ui == 'qt':
os.chdir(op.join('qt', edition)) os.chdir(op.join('qt', edition))

View File

@@ -66,7 +66,7 @@ http://www.hardcoded.net/licenses/hs_license
[cell addItemWithTitle:@"Normal"]; [cell addItemWithTitle:@"Normal"];
[cell addItemWithTitle:@"Reference"]; [cell addItemWithTitle:@"Reference"];
[cell addItemWithTitle:@"Excluded"]; [cell addItemWithTitle:@"Excluded"];
for (int i=0;i<[[cell itemArray] count];i++) for (NSInteger i=0;i<[[cell itemArray] count];i++)
{ {
NSMenuItem *mi = [[cell itemArray] objectAtIndex:i]; NSMenuItem *mi = [[cell itemArray] objectAtIndex:i];
[mi setTarget:self]; [mi setTarget:self];
@@ -135,8 +135,8 @@ http://www.hardcoded.net/licenses/hs_license
} }
else else
{ {
int state = n2i([[node buffer] objectAtIndex:1]); NSInteger state = n2i([[node buffer] objectAtIndex:1]);
int newState = state == 2 ? 0 : 2; // If excluded, put it back NSInteger newState = state == 2 ? 0 : 2; // If excluded, put it back
[_py setDirectory:p2a([node indexPath]) state:i2n(newState)]; [_py setDirectory:p2a([node indexPath]) state:i2n(newState)];
[node resetAllBuffers]; [node resetAllBuffers];
[directories display]; [directories display];
@@ -153,7 +153,7 @@ http://www.hardcoded.net/licenses/hs_license
- (void)addDirectory:(NSString *)directory - (void)addDirectory:(NSString *)directory
{ {
int r = [[_py addDirectory:directory] intValue]; NSInteger r = [[_py addDirectory:directory] intValue];
if (r) if (r)
{ {
NSString *m; NSString *m;
@@ -186,7 +186,7 @@ http://www.hardcoded.net/licenses/hs_license
} }
[removeButton setEnabled:YES]; [removeButton setEnabled:YES];
OVNode *node = [directories itemAtRow:[directories selectedRow]]; OVNode *node = [directories itemAtRow:[directories selectedRow]];
int state = n2i([[node buffer] objectAtIndex:1]); NSInteger state = n2i([[node buffer] objectAtIndex:1]);
NSString *buttonText = state == 2 ? @"Put Back" : @"Remove"; NSString *buttonText = state == 2 ? @"Put Back" : @"Remove";
[removeButton setTitle:buttonText]; [removeButton setTitle:buttonText];
} }
@@ -201,7 +201,7 @@ http://www.hardcoded.net/licenses/hs_license
- (void)outlineView:(NSOutlineView *)outlineView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item - (void)outlineView:(NSOutlineView *)outlineView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item
{ {
OVNode *node = item; OVNode *node = item;
int state = n2i([[node buffer] objectAtIndex:1]); NSInteger state = n2i([[node buffer] objectAtIndex:1]);
if ([cell isKindOfClass:[NSTextFieldCell class]]) if ([cell isKindOfClass:[NSTextFieldCell class]])
{ {
NSTextFieldCell *textCell = cell; NSTextFieldCell *textCell = cell;

View File

@@ -62,5 +62,5 @@ http://www.hardcoded.net/licenses/hs_license
- (void)setDisplayDeltaValues:(NSNumber *)display_delta_values; - (void)setDisplayDeltaValues:(NSNumber *)display_delta_values;
- (void)setEscapeFilterRegexp:(NSNumber *)escape_filter_regexp; - (void)setEscapeFilterRegexp:(NSNumber *)escape_filter_regexp;
- (void)setRemoveEmptyFolders:(NSNumber *)remove_empty_folders; - (void)setRemoveEmptyFolders:(NSNumber *)remove_empty_folders;
- (void)setSizeThreshold:(int)size_threshold; - (void)setSizeThreshold:(NSInteger)size_threshold;
@end @end

View File

@@ -32,7 +32,7 @@ http://www.hardcoded.net/licenses/hs_license
} }
/* Helpers */ /* Helpers */
- (void)fillColumnsMenu; - (void)fillColumnsMenu;
- (NSTableColumn *)getColumnForIdentifier:(int)aIdentifier title:(NSString *)aTitle width:(int)aWidth refCol:(NSTableColumn *)aColumn; - (NSTableColumn *)getColumnForIdentifier:(NSInteger)aIdentifier title:(NSString *)aTitle width:(NSInteger)aWidth refCol:(NSTableColumn *)aColumn;
- (NSArray *)getColumnsOrder; - (NSArray *)getColumnsOrder;
- (NSDictionary *)getColumnsWidth; - (NSDictionary *)getColumnsWidth;
- (NSArray *)getSelected:(BOOL)aDupesOnly; - (NSArray *)getSelected:(BOOL)aDupesOnly;

View File

@@ -19,7 +19,7 @@ http://www.hardcoded.net/licenses/hs_license
{ {
unichar key = [[theEvent charactersIgnoringModifiers] characterAtIndex:0]; unichar key = [[theEvent charactersIgnoringModifiers] characterAtIndex:0];
// get flags and strip the lower 16 (device dependant) bits // get flags and strip the lower 16 (device dependant) bits
unsigned int flags = ( [theEvent modifierFlags] & 0x00FF ); NSUInteger flags = ( [theEvent modifierFlags] & 0x00FF );
if (((key == NSDeleteFunctionKey) || (key == NSDeleteCharacter)) && (flags == 0)) if (((key == NSDeleteFunctionKey) || (key == NSDeleteCharacter)) && (flags == 0))
[self sendAction:@selector(removeSelected:) to:[self delegate]]; [self sendAction:@selector(removeSelected:) to:[self delegate]];
else else
@@ -85,9 +85,9 @@ http://www.hardcoded.net/licenses/hs_license
[mi setTarget:self]; [mi setTarget:self];
} }
- (NSTableColumn *)getColumnForIdentifier:(int)aIdentifier title:(NSString *)aTitle width:(int)aWidth refCol:(NSTableColumn *)aColumn - (NSTableColumn *)getColumnForIdentifier:(NSInteger)aIdentifier title:(NSString *)aTitle width:(NSInteger)aWidth refCol:(NSTableColumn *)aColumn
{ {
NSNumber *n = [NSNumber numberWithInt:aIdentifier]; NSNumber *n = [NSNumber numberWithInteger:aIdentifier];
NSTableColumn *col = [[NSTableColumn alloc] initWithIdentifier:[n stringValue]]; NSTableColumn *col = [[NSTableColumn alloc] initWithIdentifier:[n stringValue]];
[col setWidth:aWidth]; [col setWidth:aWidth];
[col setEditable:NO]; [col setEditable:NO];
@@ -123,7 +123,7 @@ http://www.hardcoded.net/licenses/hs_license
while (col = [e nextObject]) while (col = [e nextObject])
{ {
colId = [col identifier]; colId = [col identifier];
width = [NSNumber numberWithFloat:[col width]]; width = [NSNumber numberWithDouble:[col width]];
[result setObject:width forKey:colId]; [result setObject:width forKey:colId];
} }
return result; return result;
@@ -136,7 +136,7 @@ http://www.hardcoded.net/licenses/hs_license
NSIndexSet *indexes = [matches selectedRowIndexes]; NSIndexSet *indexes = [matches selectedRowIndexes];
NSMutableArray *nodeList = [NSMutableArray array]; NSMutableArray *nodeList = [NSMutableArray array];
OVNode *node; OVNode *node;
int i = [indexes firstIndex]; NSInteger i = [indexes firstIndex];
while (i != NSNotFound) while (i != NSNotFound)
{ {
node = [matches itemAtRow:i]; node = [matches itemAtRow:i];
@@ -238,7 +238,7 @@ http://www.hardcoded.net/licenses/hs_license
- (IBAction)copyMarked:(id)sender - (IBAction)copyMarked:(id)sender
{ {
int mark_count = [[py getMarkCount] intValue]; NSInteger mark_count = [[py getMarkCount] intValue];
if (!mark_count) if (!mark_count)
return; return;
NSOpenPanel *op = [NSOpenPanel openPanel]; NSOpenPanel *op = [NSOpenPanel openPanel];
@@ -257,7 +257,7 @@ http://www.hardcoded.net/licenses/hs_license
- (IBAction)deleteMarked:(id)sender - (IBAction)deleteMarked:(id)sender
{ {
int mark_count = [[py getMarkCount] intValue]; NSInteger mark_count = [[py getMarkCount] intValue];
if (!mark_count) if (!mark_count)
return; return;
if ([Dialogs askYesNo:[NSString stringWithFormat:@"You are about to send %d files to Trash. Continue?",mark_count]] == NSAlertSecondButtonReturn) // NO if ([Dialogs askYesNo:[NSString stringWithFormat:@"You are about to send %d files to Trash. Continue?",mark_count]] == NSAlertSecondButtonReturn) // NO
@@ -269,7 +269,7 @@ http://www.hardcoded.net/licenses/hs_license
- (IBAction)expandAll:(id)sender - (IBAction)expandAll:(id)sender
{ {
for (int i=0;i < [matches numberOfRows];i++) for (NSInteger i=0;i < [matches numberOfRows];i++)
[matches expandItem:[matches itemAtRow:i]]; [matches expandItem:[matches itemAtRow:i]];
} }
@@ -281,7 +281,7 @@ http://www.hardcoded.net/licenses/hs_license
- (IBAction)moveMarked:(id)sender - (IBAction)moveMarked:(id)sender
{ {
int mark_count = [[py getMarkCount] intValue]; NSInteger mark_count = [[py getMarkCount] intValue];
if (!mark_count) if (!mark_count)
return; return;
NSOpenPanel *op = [NSOpenPanel openPanel]; NSOpenPanel *op = [NSOpenPanel openPanel];
@@ -313,8 +313,8 @@ http://www.hardcoded.net/licenses/hs_license
{ {
// It might look like a complicated way to get the length of the current dupe list on the py side // It might look like a complicated way to get the length of the current dupe list on the py side
// but after a lot of fussing around, believe it or not, it actually is. // but after a lot of fussing around, believe it or not, it actually is.
int matchesTag = _powerMode ? 2 : 0; NSInteger matchesTag = _powerMode ? 2 : 0;
int startLen = [[py getOutlineView:matchesTag childCountsForPath:[NSArray array]] count]; NSInteger startLen = [[py getOutlineView:matchesTag childCountsForPath:[NSArray array]] count];
[self performPySelection:[self getSelectedPaths:YES]]; [self performPySelection:[self getSelectedPaths:YES]];
[py makeSelectedReference]; [py makeSelectedReference];
// In some cases (when in a filtered view in Power Marker mode, it's possible that the demoted // In some cases (when in a filtered view in Power Marker mode, it's possible that the demoted
@@ -384,7 +384,7 @@ http://www.hardcoded.net/licenses/hs_license
- (void)jobCompleted:(NSNotification *)aNotification - (void)jobCompleted:(NSNotification *)aNotification
{ {
[[NSNotificationCenter defaultCenter] postNotificationName:ResultsChangedNotification object:self]; [[NSNotificationCenter defaultCenter] postNotificationName:ResultsChangedNotification object:self];
int r = n2i([py getOperationalErrorCount]); NSInteger r = n2i([py getOperationalErrorCount]);
id lastAction = [[ProgressController mainProgressController] jobId]; id lastAction = [[ProgressController mainProgressController] jobId];
if ([lastAction isEqualTo:jobCopy]) { if ([lastAction isEqualTo:jobCopy]) {
if (r > 0) if (r > 0)

View File

@@ -82,6 +82,16 @@ http://www.hardcoded.net/licenses/hs_license
- (PyDupeGuru *)py { return (PyDupeGuru *)py; } - (PyDupeGuru *)py { return (PyDupeGuru *)py; }
//Delegate //Delegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSMenu *actionsMenu = [[[NSApp mainMenu] itemWithTitle:@"Actions"] submenu];
// index 3 is just after "Export Results to XHTML"
NSMenuItem *mi = [actionsMenu insertItemWithTitle:@"Remove Dead Tracks in iTunes"
action:@selector(removeDeadTracks:) keyEquivalent:@"" atIndex:3];
[mi setTarget:result];
[super applicationDidFinishLaunching:aNotification];
}
- (void)applicationWillBecomeActive:(NSNotification *)aNotification - (void)applicationWillBecomeActive:(NSNotification *)aNotification
{ {
if (![[result window] isVisible]) if (![[result window] isVisible])
@@ -95,7 +105,7 @@ http://www.hardcoded.net/licenses/hs_license
[ud setObject: [result getColumnsWidth] forKey:@"columnsWidth"]; [ud setObject: [result getColumnsWidth] forKey:@"columnsWidth"];
[py saveIgnoreList]; [py saveIgnoreList];
[py saveResults]; [py saveResults];
int sc = [ud integerForKey:@"sessionCountSinceLastIgnorePurge"]; NSInteger sc = [ud integerForKey:@"sessionCountSinceLastIgnorePurge"];
if (sc >= 10) if (sc >= 10)
{ {
sc = -1; sc = -1;

View File

@@ -23,7 +23,7 @@
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>hsft</string> <string>hsft</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>5.7.0</string> <string>5.7.1</string>
<key>NSMainNibFile</key> <key>NSMainNibFile</key>
<string>MainMenu</string> <string>MainMenu</string>
<key>NSPrincipalClass</key> <key>NSPrincipalClass</key>

View File

@@ -19,5 +19,5 @@ http://www.hardcoded.net/licenses/hs_license
- (void)enable:(NSNumber *)enable scanForTag:(NSString *)tag; - (void)enable:(NSNumber *)enable scanForTag:(NSString *)tag;
- (void)scanDeadTracks; - (void)scanDeadTracks;
- (void)removeDeadTracks; - (void)removeDeadTracks;
- (int)deadTrackCount; - (NSInteger)deadTrackCount;
@end @end

View File

@@ -36,7 +36,7 @@ http://www.hardcoded.net/licenses/hs_license
/* Actions */ /* Actions */
- (IBAction)clearIgnoreList:(id)sender - (IBAction)clearIgnoreList:(id)sender
{ {
int i = n2i([py getIgnoreListCount]); NSInteger i = n2i([py getIgnoreListCount]);
if (!i) if (!i)
return; return;
if ([Dialogs askYesNo:[NSString stringWithFormat:@"Do you really want to remove all %d items from the ignore list?",i]] == NSAlertSecondButtonReturn) // NO if ([Dialogs askYesNo:[NSString stringWithFormat:@"Do you really want to remove all %d items from the ignore list?",i]] == NSAlertSecondButtonReturn) // NO
@@ -139,8 +139,8 @@ http://www.hardcoded.net/licenses/hs_license
- (IBAction)renameSelected:(id)sender - (IBAction)renameSelected:(id)sender
{ {
int col = [matches columnWithIdentifier:@"0"]; NSInteger col = [matches columnWithIdentifier:@"0"];
int row = [matches selectedRow]; NSInteger row = [matches selectedRow];
[matches editColumn:col row:row withEvent:[NSApp currentEvent] select:YES]; [matches editColumn:col row:row withEvent:[NSApp currentEvent] select:YES];
} }
@@ -187,7 +187,7 @@ http://www.hardcoded.net/licenses/hs_license
[_py setWordWeighting:[ud objectForKey:@"wordWeighting"]]; [_py setWordWeighting:[ud objectForKey:@"wordWeighting"]];
[_py setMixFileKind:[ud objectForKey:@"mixFileKind"]]; [_py setMixFileKind:[ud objectForKey:@"mixFileKind"]];
[_py setMatchSimilarWords:[ud objectForKey:@"matchSimilarWords"]]; [_py setMatchSimilarWords:[ud objectForKey:@"matchSimilarWords"]];
int r = n2i([py doScan]); NSInteger r = n2i([py doScan]);
[matches reloadData]; [matches reloadData];
[self refreshStats]; [self refreshStats];
if (r == 1) if (r == 1)
@@ -272,7 +272,7 @@ http://www.hardcoded.net/licenses/hs_license
id lastAction = [[ProgressController mainProgressController] jobId]; id lastAction = [[ProgressController mainProgressController] jobId];
if ([lastAction isEqualTo:jobScanDeadTracks]) if ([lastAction isEqualTo:jobScanDeadTracks])
{ {
int deadTrackCount = [(PyDupeGuru *)py deadTrackCount]; NSInteger deadTrackCount = [(PyDupeGuru *)py deadTrackCount];
if (deadTrackCount > 0) if (deadTrackCount > 0)
{ {
NSString *msg = @"Your iTunes Library contains %d dead tracks ready to be removed. Continue?"; NSString *msg = @"Your iTunes Library contains %d dead tracks ready to be removed. Continue?";

View File

@@ -5,7 +5,9 @@
# http://www.hardcoded.net/licenses/hs_license # http://www.hardcoded.net/licenses/hs_license
import objc import objc
from AppKit import * from Foundation import NSObject
from hsutil.cocoa import signature
from core_me.app_cocoa import DupeGuruME from core_me.app_cocoa import DupeGuruME
from core.scanner import (SCAN_TYPE_FILENAME, SCAN_TYPE_FIELDS, SCAN_TYPE_FIELDS_NO_ORDER, from core.scanner import (SCAN_TYPE_FILENAME, SCAN_TYPE_FIELDS, SCAN_TYPE_FIELDS_NO_ORDER,
@@ -133,7 +135,7 @@ class PyDupeGuru(PyApp):
self.app.sort_groups(key,asc) self.app.sort_groups(key,asc)
#---Information #---Information
@objc.signature('i@:') @signature('i@:')
def deadTrackCount(self): def deadTrackCount(self):
return len(self.app.dead_tracks) return len(self.app.dead_tracks)
@@ -150,11 +152,11 @@ class PyDupeGuru(PyApp):
return self.app.last_op_error_count return self.app.last_op_error_count
#---Data #---Data
@objc.signature('i@:i') @signature('i@:i')
def getOutlineViewMaxLevel_(self, tag): def getOutlineViewMaxLevel_(self, tag):
return self.app.GetOutlineViewMaxLevel(tag) return self.app.GetOutlineViewMaxLevel(tag)
@objc.signature('@@:i@') @signature('@@:i@')
def getOutlineView_childCountsForPath_(self, tag, node_path): def getOutlineView_childCountsForPath_(self, tag, node_path):
return self.app.GetOutlineViewChildCounts(tag, node_path) return self.app.GetOutlineViewChildCounts(tag, node_path)
@@ -231,11 +233,11 @@ class PyDupeGuru(PyApp):
def demoLimitDescription(self): def demoLimitDescription(self):
return self.app.DEMO_LIMIT_DESC return self.app.DEMO_LIMIT_DESC
@objc.signature('i@:') @signature('i@:')
def isRegistered(self): def isRegistered(self):
return self.app.registered return self.app.registered
@objc.signature('i@:@@') @signature('i@:@@')
def isCodeValid_withEmail_(self, code, email): def isCodeValid_withEmail_(self, code, email):
return self.app.is_code_valid(code, email) return self.app.is_code_valid(code, email)

View File

@@ -88,7 +88,7 @@
CE381C9509914ACE003581CE /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = SOURCE_ROOT; }; CE381C9509914ACE003581CE /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = SOURCE_ROOT; };
CE381C9A09914ADF003581CE /* ResultWindow.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = ResultWindow.m; sourceTree = SOURCE_ROOT; }; CE381C9A09914ADF003581CE /* ResultWindow.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = ResultWindow.m; sourceTree = SOURCE_ROOT; };
CE381C9B09914ADF003581CE /* ResultWindow.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = ResultWindow.h; sourceTree = SOURCE_ROOT; }; CE381C9B09914ADF003581CE /* ResultWindow.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = ResultWindow.h; sourceTree = SOURCE_ROOT; };
CE381CF509915304003581CE /* dg_cocoa.plugin */ = {isa = PBXFileReference; lastKnownFileType = folder; name = dg_cocoa.plugin; path = dg_cocoa.plugin; sourceTree = SOURCE_ROOT; }; CE381CF509915304003581CE /* dg_cocoa.plugin */ = {isa = PBXFileReference; lastKnownFileType = folder; path = dg_cocoa.plugin; sourceTree = SOURCE_ROOT; };
CE3FBDD11094637800B72D77 /* DetailsPanel.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = DetailsPanel.xib; path = ../../base/xib/DetailsPanel.xib; sourceTree = "<group>"; }; CE3FBDD11094637800B72D77 /* DetailsPanel.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = DetailsPanel.xib; path = ../../base/xib/DetailsPanel.xib; sourceTree = "<group>"; };
CE3FBDD21094637800B72D77 /* DirectoryPanel.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = DirectoryPanel.xib; path = ../../base/xib/DirectoryPanel.xib; sourceTree = "<group>"; }; CE3FBDD21094637800B72D77 /* DirectoryPanel.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = DirectoryPanel.xib; path = ../../base/xib/DirectoryPanel.xib; sourceTree = "<group>"; };
CE49DEF20FDFEB810098617B /* BRSingleLineFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BRSingleLineFormatter.h; path = ../../cocoalib/brsinglelineformatter/BRSingleLineFormatter.h; sourceTree = SOURCE_ROOT; }; CE49DEF20FDFEB810098617B /* BRSingleLineFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BRSingleLineFormatter.h; path = ../../cocoalib/brsinglelineformatter/BRSingleLineFormatter.h; sourceTree = SOURCE_ROOT; };
@@ -456,9 +456,10 @@
C01FCF5008A954540054247B /* Release */ = { C01FCF5008A954540054247B /* Release */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_BIT_PRE_XCODE_3_1)"; ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)";
ARCHS_STANDARD_32_BIT_PRE_XCODE_3_1 = "ppc i386"; ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64;
GCC_C_LANGUAGE_STANDARD = c99; GCC_C_LANGUAGE_STANDARD = c99;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.5; MACOSX_DEPLOYMENT_TARGET = 10.5;

View File

@@ -5,7 +5,7 @@
# http://www.hardcoded.net/licenses/hs_license # http://www.hardcoded.net/licenses/hs_license
import objc import objc
from AppKit import * from Foundation import NSObject
from core_pe import app_cocoa as app_pe_cocoa from core_pe import app_cocoa as app_pe_cocoa

View File

@@ -5,7 +5,7 @@
# http://www.hardcoded.net/licenses/hs_license # http://www.hardcoded.net/licenses/hs_license
import objc import objc
from AppKit import * from Foundation import NSObject
from core_se.app_cocoa import DupeGuru from core_se.app_cocoa import DupeGuru
from core import scanner from core import scanner

View File

@@ -12,17 +12,20 @@ from optparse import OptionParser
import yaml import yaml
def main(edition, ui, dev): def main(edition, ui, dev, build64):
if edition not in ('se', 'me', 'pe'): if edition not in ('se', 'me', 'pe'):
edition = 'se' edition = 'se'
if ui not in ('cocoa', 'qt'): if ui not in ('cocoa', 'qt'):
ui = 'cocoa' if sys.platform == 'darwin' else 'qt' ui = 'cocoa' if sys.platform == 'darwin' else 'qt'
build_type = 'Dev' if dev else 'Release' build_type = 'Dev' if dev else 'Release'
print "Configuring dupeGuru {0} for UI {1} ({2})".format(edition.upper(), ui, build_type) print "Configuring dupeGuru {0} for UI {1} ({2})".format(edition.upper(), ui, build_type)
if build64:
print "If possible, 64-bit builds will be made"
conf = { conf = {
'edition': edition, 'edition': edition,
'ui': ui, 'ui': ui,
'dev': dev, 'dev': dev,
'build64': build64,
} }
yaml.dump(conf, open('conf.yaml', 'w')) yaml.dump(conf, open('conf.yaml', 'w'))
@@ -35,5 +38,7 @@ if __name__ == '__main__':
help="Type of UI to build. 'qt' or 'cocoa'. Default is determined by your system.") help="Type of UI to build. 'qt' or 'cocoa'. Default is determined by your system.")
parser.add_option('--dev', action='store_true', dest='dev', default=False, parser.add_option('--dev', action='store_true', dest='dev', default=False,
help="If this flag is set, will configure for dev builds.") help="If this flag is set, will configure for dev builds.")
parser.add_option('--64bit', action='store_false', dest='build64', default=False,
help="Build 64-bit app if possible.")
(options, args) = parser.parse_args() (options, args) = parser.parse_args()
main(options.edition, options.ui, options.dev) main(options.edition, options.ui, options.dev, options.build64)

View File

@@ -7,12 +7,12 @@
# http://www.hardcoded.net/licenses/hs_license # http://www.hardcoded.net/licenses/hs_license
import objc import objc
from Foundation import * from Foundation import (NSNotificationCenter, NSUserDefaults, NSSearchPathForDirectoriesInDomains,
from AppKit import * NSApplicationSupportDirectory, NSUserDomainMask)
import logging import logging
import os.path as op import os.path as op
from hsutil import io, cocoa, job from hsutil import cocoa, job
from hsutil.cocoa import install_exception_hook from hsutil.cocoa import install_exception_hook
from hsutil.misc import stripnone from hsutil.misc import stripnone
from hsutil.reg import RegistrationRequired from hsutil.reg import RegistrationRequired
@@ -53,6 +53,8 @@ class DupeGuru(app.DupeGuru):
#--- Override #--- Override
@staticmethod @staticmethod
def _recycle_dupe(dupe): def _recycle_dupe(dupe):
# local import because first appkit import takes a lot of memory. we want to avoid it.
from AppKit import NSWorkspace, NSWorkspaceRecycleOperation
directory = unicode(dupe.path[:-1]) directory = unicode(dupe.path[:-1])
filename = dupe.name filename = dupe.name
if objc.__version__ == '1.4': # For a while, we have to support this. if objc.__version__ == '1.4': # For a while, we have to support this.
@@ -114,6 +116,8 @@ class DupeGuru(app.DupeGuru):
self.make_reference(self.selected_dupes) self.make_reference(self.selected_dupes)
def OpenSelected(self): def OpenSelected(self):
# local import because first appkit import takes a lot of memory. we want to avoid it.
from AppKit import NSWorkspace
if self.selected_dupes: if self.selected_dupes:
path = unicode(self.selected_dupes[0].path) path = unicode(self.selected_dupes[0].path)
NSWorkspace.sharedWorkspace().openFile_(path) NSWorkspace.sharedWorkspace().openFile_(path)
@@ -149,6 +153,8 @@ class DupeGuru(app.DupeGuru):
return False return False
def RevealSelected(self): def RevealSelected(self):
# local import because first appkit import takes a lot of memory. we want to avoid it.
from AppKit import NSWorkspace
if self.selected_dupes: if self.selected_dupes:
path = unicode(self.selected_dupes[0].path) path = unicode(self.selected_dupes[0].path)
NSWorkspace.sharedWorkspace().selectFile_inFileViewerRootedAtPath_(path,'') NSWorkspace.sharedWorkspace().selectFile_inFileViewerRootedAtPath_(path,'')

View File

@@ -11,7 +11,7 @@ import logging
import plistlib import plistlib
import re import re
from AppKit import NSBundle, NSUserDefaults, NSURL from Foundation import NSBundle, NSUserDefaults, NSURL
from appscript import app, k, CommandError from appscript import app, k, CommandError
from hsutil import io from hsutil import io

View File

@@ -11,11 +11,10 @@ from __future__ import unicode_literals
import logging import logging
import objc import objc
from AppKit import * from AppKit import NSWorkspace
from hsutil import io from hsutil import io
from hsutil.path import Path from hsutil.path import Path
from hsutil.str import get_file_ext
from core import fs from core import fs
from core.app_cocoa import DupeGuru as DupeGuruBase from core.app_cocoa import DupeGuru as DupeGuruBase

View File

@@ -1,3 +1,11 @@
- date: 2010-01-19
version: 5.7.1
description: |
* The Mac OS X version of dupeGuru ME is now 64-bit!
* Improved memory usage for Contents scans. (#75)
* Improved scanning speed when ref directories are involved. (#77)
* Show a message dialog at the end of the scan if no duplicates are found. (#81)
* Re-added the "Remove Dead Tracks in iTunes" menu item which got lost in 5.7.0.
- date: 2009-12-18 - date: 2009-12-18
version: 5.7.0 version: 5.7.0
description: | description: |

View File

@@ -16,7 +16,7 @@ from preferences_dialog import PreferencesDialog
class DupeGuru(DupeGuruBase): class DupeGuru(DupeGuruBase):
LOGO_NAME = 'logo_me' LOGO_NAME = 'logo_me'
NAME = 'dupeGuru Music Edition' NAME = 'dupeGuru Music Edition'
VERSION = '5.7.0' VERSION = '5.7.1'
DELTA_COLUMNS = frozenset([2, 3, 4, 5, 7, 8]) DELTA_COLUMNS = frozenset([2, 3, 4, 5, 7, 8])
def __init__(self): def __init__(self):