Added option to remove tracks to the trash

Fixes #23

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
CQTexperiment
Christopher Snowhill 2022-02-10 21:35:13 -08:00
parent 68c3f3b1d8
commit 5411a60ea1
4 changed files with 187 additions and 27 deletions

View File

@ -32,7 +32,7 @@
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="KWC-Ti-8KY">
<rect key="frame" x="0.0" y="0.0" width="1000" height="378"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<tableView focusRingType="none" verticalHuggingPriority="750" allowsExpansionToolTips="YES" alternatingRowBackgroundColors="YES" autosaveName="Playlist" rowHeight="18" headerView="1517" viewBased="YES" id="207" customClass="PlaylistView">
<rect key="frame" x="0.0" y="0.0" width="1000" height="361"/>
@ -130,11 +130,11 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView id="ZCP-Dx-UBV">
<rect key="frame" x="106" y="3" width="126" height="18"/>
<rect key="frame" x="106" y="3" width="125.5" height="18"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="exY-Bg-Mjm">
<rect key="frame" x="0.0" y="1" width="126" height="16"/>
<rect key="frame" x="0.0" y="1" width="125.5" height="16"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="sdo-Sm-KPH">
<font key="font" usesAppearanceFont="YES"/>
@ -169,11 +169,11 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView id="x12-5b-Mmv">
<rect key="frame" x="1" y="3" width="0.0" height="18"/>
<rect key="frame" x="1" y="3" width="-3" height="18"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ZWb-jm-i9i">
<rect key="frame" x="0.0" y="1" width="4" height="16"/>
<rect key="frame" x="0.0" y="1" width="1" height="16"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="3QN-Ok-QPu">
<font key="font" usesAppearanceFont="YES"/>
@ -210,11 +210,11 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView id="gpC-Oe-Rog">
<rect key="frame" x="235" y="3" width="149" height="18"/>
<rect key="frame" x="234.5" y="3" width="149.5" height="18"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="1WK-qN-Mgj">
<rect key="frame" x="0.0" y="1" width="149" height="16"/>
<rect key="frame" x="0.0" y="1" width="149.5" height="16"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="71l-3L-S3g">
<font key="font" usesAppearanceFont="YES"/>
@ -250,11 +250,11 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView id="1ed-gX-bct">
<rect key="frame" x="387" y="3" width="151" height="18"/>
<rect key="frame" x="387" y="3" width="150.5" height="18"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="nEt-s5-vRX">
<rect key="frame" x="0.0" y="1" width="151" height="16"/>
<rect key="frame" x="0.0" y="1" width="150.5" height="16"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="moV-3G-GpB">
<font key="font" usesAppearanceFont="YES"/>
@ -289,11 +289,11 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView id="hhB-nv-e78">
<rect key="frame" x="541" y="3" width="95" height="18"/>
<rect key="frame" x="540.5" y="3" width="95.5" height="18"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="tHy-sM-HDB">
<rect key="frame" x="0.0" y="1" width="95" height="16"/>
<rect key="frame" x="0.0" y="1" width="95.5" height="16"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="Igo-5f-yim">
<font key="font" usesAppearanceFont="YES"/>
@ -329,11 +329,11 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView id="q93-oh-i5T">
<rect key="frame" x="639" y="3" width="94" height="18"/>
<rect key="frame" x="639" y="3" width="93.5" height="18"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="bOi-LI-TDx">
<rect key="frame" x="0.0" y="1" width="94" height="16"/>
<rect key="frame" x="0.0" y="1" width="93.5" height="16"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="C2Q-qG-dwX">
<font key="font" usesAppearanceFont="YES"/>
@ -366,7 +366,7 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView id="rRl-p9-Awr">
<rect key="frame" x="736" y="3" width="144" height="18"/>
<rect key="frame" x="735.5" y="3" width="144" height="18"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="yW6-2w-6mN">
@ -402,11 +402,11 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView id="hgh-VE-5kl">
<rect key="frame" x="883" y="3" width="38" height="18"/>
<rect key="frame" x="882.5" y="3" width="38.5" height="18"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="yEY-MI-d3o">
<rect key="frame" x="0.0" y="1" width="38" height="16"/>
<rect key="frame" x="0.0" y="1" width="38.5" height="16"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="tus-lr-RhS">
<font key="font" usesAppearanceFont="YES"/>
@ -438,11 +438,11 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView id="d01-Wn-4bd">
<rect key="frame" x="1" y="3" width="0.0" height="18"/>
<rect key="frame" x="1" y="3" width="-3" height="18"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="QFJ-4l-2O6">
<rect key="frame" x="0.0" y="1" width="4" height="16"/>
<rect key="frame" x="0.0" y="1" width="1" height="16"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="gKK-cS-RP5">
<font key="font" usesAppearanceFont="YES"/>
@ -478,11 +478,11 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView id="ICT-dh-UfT">
<rect key="frame" x="1" y="3" width="0.0" height="18"/>
<rect key="frame" x="1" y="3" width="-3" height="18"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Qvd-sk-vRc">
<rect key="frame" x="0.0" y="1" width="4" height="16"/>
<rect key="frame" x="0.0" y="1" width="1" height="16"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="YwT-z9-2d2">
<font key="font" usesAppearanceFont="YES"/>
@ -518,11 +518,11 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView id="PuO-Ss-1Vs">
<rect key="frame" x="1" y="3" width="0.0" height="18"/>
<rect key="frame" x="1" y="3" width="-3" height="18"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="gXW-DX-EsQ">
<rect key="frame" x="0.0" y="1" width="4" height="16"/>
<rect key="frame" x="0.0" y="1" width="1" height="16"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="vaJ-Bc-ebE">
<font key="font" usesAppearanceFont="YES"/>
@ -1568,14 +1568,26 @@ CA
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="remove:" target="218" id="1409"/>
<binding destination="2020" name="enabled" keyPath="selection" id="9e7-R7-u5c">
<dictionary key="options">
<integer key="NSMultipleValuesPlaceholder" value="0"/>
<integer key="NSNoSelectionPlaceholder" value="0"/>
<integer key="NSNotApplicablePlaceholder" value="0"/>
<integer key="NSNullPlaceholder" value="0"/>
<string key="NSValueTransformerName">NSIsNotNil</string>
</dictionary>
</binding>
</connections>
</menuItem>
<menuItem title="Reload Info" id="kq8-9v-zC0">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="reloadTags:" target="218" id="xRt-Us-Ucg"/>
<binding destination="2020" name="enabled" keyPath="selection" id="MPs-kU-3LT">
<binding destination="2020" name="enabled" keyPath="selection" id="Yki-oM-XiU">
<dictionary key="options">
<integer key="NSMultipleValuesPlaceholder" value="0"/>
<integer key="NSNoSelectionPlaceholder" value="0"/>
<integer key="NSNotApplicablePlaceholder" value="0"/>
<string key="NSValueTransformerName">NSIsNotNil</string>
</dictionary>
</binding>
@ -1584,7 +1596,7 @@ CA
<menuItem title="Show in Finder" keyEquivalent="R" id="1135">
<connections>
<action selector="showEntryInFinder:" target="218" id="1346"/>
<binding destination="218" name="enabled" keyPath="selection.index" id="1449">
<binding destination="218" name="enabled" keyPath="selection" id="75f-eT-NIO">
<dictionary key="options">
<integer key="NSMultipleValuesPlaceholder" value="1"/>
<integer key="NSNoSelectionPlaceholder" value="0"/>
@ -1595,6 +1607,21 @@ CA
</binding>
</connections>
</menuItem>
<menuItem title="Move to Trash" id="mhx-dQ-Kwx">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="trash:" target="218" id="yed-1d-jqe"/>
<binding destination="2020" name="enabled" keyPath="selection" id="Cw2-fK-mzE">
<dictionary key="options">
<integer key="NSMultipleValuesPlaceholder" value="0"/>
<integer key="NSNoSelectionPlaceholder" value="0"/>
<integer key="NSNotApplicablePlaceholder" value="0"/>
<integer key="NSNullPlaceholder" value="0"/>
<string key="NSValueTransformerName">NSIsNotNil</string>
</dictionary>
</binding>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="1863">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
@ -1611,8 +1638,32 @@ CA
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="dfu-5S-1BE"/>
<menuItem title="Add to Queue" id="1864"/>
<menuItem title="Remove from Queue" id="1865"/>
<menuItem title="Add to Queue" id="1864">
<connections>
<binding destination="2020" name="enabled" keyPath="selection" id="WVK-qy-AxU">
<dictionary key="options">
<integer key="NSMultipleValuesPlaceholder" value="0"/>
<integer key="NSNoSelectionPlaceholder" value="0"/>
<integer key="NSNotApplicablePlaceholder" value="0"/>
<integer key="NSNullPlaceholder" value="0"/>
<string key="NSValueTransformerName">NSIsNotNil</string>
</dictionary>
</binding>
</connections>
</menuItem>
<menuItem title="Remove from Queue" id="1865">
<connections>
<binding destination="2020" name="enabled" keyPath="selection" id="VWA-yB-LLF">
<dictionary key="options">
<integer key="NSMultipleValuesPlaceholder" value="0"/>
<integer key="NSNoSelectionPlaceholder" value="0"/>
<integer key="NSNotApplicablePlaceholder" value="0"/>
<integer key="NSNullPlaceholder" value="0"/>
<string key="NSValueTransformerName">NSIsNotNil</string>
</dictionary>
</binding>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="1866">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
@ -2135,6 +2186,21 @@ Gw
</binding>
</connections>
</menuItem>
<menuItem title="Move to Trash" id="qlT-UX-x72">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="trash:" target="218" id="7Vd-Vf-Ym1"/>
<binding destination="2020" name="enabled" keyPath="selection" id="pGj-Wj-1bF">
<dictionary key="options">
<integer key="NSMultipleValuesPlaceholder" value="0"/>
<integer key="NSNoSelectionPlaceholder" value="0"/>
<integer key="NSNotApplicablePlaceholder" value="0"/>
<integer key="NSNullPlaceholder" value="0"/>
<string key="NSValueTransformerName">NSIsNotNil</string>
</dictionary>
</binding>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="qqX-IU-KHm"/>
<menuItem title="Properties" id="Eds-my-DQr" userLabel="Menu Item - Properties">
<modifierMask key="keyEquivalentModifierMask"/>

View File

@ -84,6 +84,9 @@ typedef NS_ENUM(NSInteger, URLOrigin) {
- (IBAction)removeDuplicates:(id _Nullable)sender;
- (IBAction)removeDeadItems:(id _Nullable)sender;
- (IBAction)remove:(id _Nullable)sender;
- (IBAction)trash:(id _Nullable)sender;
- (IBAction)showEntryInFinder:(id _Nullable)sender;
- (IBAction)clearFilterPredicate:(id _Nullable)sender;
- (IBAction)clear:(id _Nullable)sender;

View File

@ -591,6 +591,11 @@ static inline void dispatch_sync_reentrant(dispatch_queue_t queue, dispatch_bloc
[self rearrangeObjects];
}
- (void)untrashObjects:(NSArray *)objects atIndexes:(NSIndexSet *)indexes {
[self untrashObjects:objects atArrangedObjectIndexes:indexes];
[self rearrangeObjects];
}
- (void)insertObjectsUnsynced:(NSArray *)objects atArrangedObjectIndexes:(NSIndexSet *)indexes {
[super insertObjects:objects atArrangedObjectIndexes:indexes];
@ -619,10 +624,41 @@ static inline void dispatch_sync_reentrant(dispatch_queue_t queue, dispatch_bloc
if([self shuffle] != ShuffleOff) [self resetShuffleList];
}
- (void)untrashObjects:(NSArray *)objects atArrangedObjectIndexes:(NSIndexSet *)indexes {
[[[self undoManager] prepareWithInvocationTarget:self]
trashObjectsAtIndexes:[self disarrangeIndexes:indexes]];
NSString *actionName =
[NSString stringWithFormat:@"Restoring %lu entries from trash", (unsigned long)[objects count]];
[[self undoManager] setActionName:actionName];
for(PlaylistEntry *pe in objects) {
if(pe.deleted && pe.trashURL) {
NSError *error = nil;
[[NSFileManager defaultManager] moveItemAtURL:pe.trashURL toURL:pe.URL error:&error];
}
pe.deleted = NO;
pe.trashURL = nil;
}
[[SQLiteStore sharedStore] playlistInsertTracks:objects
atObjectIndexes:indexes
progressCall:^(double progress) {
[self setProgressBarStatus:progress];
}];
[super insertObjects:objects atArrangedObjectIndexes:indexes];
if([self shuffle] != ShuffleOff) [self resetShuffleList];
}
- (void)removeObjectsAtIndexes:(NSIndexSet *)indexes {
[self removeObjectsAtArrangedObjectIndexes:[self rearrangeIndexes:indexes]];
}
- (void)trashObjectsAtIndexes:(NSIndexSet *)indexes {
[self trashObjectsAtArrangedObjectIndexes:[self rearrangeIndexes:indexes]];
}
- (void)removeObjectsAtArrangedObjectIndexes:(NSIndexSet *)indexes {
NSArray *objects = [[self arrangedObjects] objectsAtIndexes:indexes];
[[[self undoManager] prepareWithInvocationTarget:self]
@ -679,6 +715,49 @@ static inline void dispatch_sync_reentrant(dispatch_queue_t queue, dispatch_bloc
[playbackController playlistDidChange:self];
}
- (void)trashObjectsAtArrangedObjectIndexes:(NSIndexSet *)indexes {
NSArray *objects = [[self arrangedObjects] objectsAtIndexes:indexes];
[[[self undoManager] prepareWithInvocationTarget:self]
untrashObjects:[self disarrangeObjects:objects]
atIndexes:[self disarrangeIndexes:indexes]];
NSString *actionName =
[NSString stringWithFormat:@"Trashing %lu entries", (unsigned long)[indexes count]];
[[self undoManager] setActionName:actionName];
DLog(@"Trashing indexes: %@", indexes);
DLog(@"Current index: %li", currentEntry.index);
NSMutableIndexSet *unarrangedIndexes = [[NSMutableIndexSet alloc] init];
for(PlaylistEntry *pe in objects) {
[unarrangedIndexes addIndex:[pe index]];
pe.deleted = YES;
}
if([indexes containsIndex:currentEntry.index]) {
[self updateNextAfterDeleted:currentEntry withDeleteIndexes:indexes];
[playbackController playEntry:nextEntryAfterDeleted];
nextEntryAfterDeleted = nil;
}
[[SQLiteStore sharedStore] playlistRemoveTracksAtIndexes:unarrangedIndexes
progressCall:^(double progress) {
[self setProgressBarStatus:progress];
}];
[super removeObjectsAtArrangedObjectIndexes:indexes];
if([self shuffle] != ShuffleOff) [self resetShuffleList];
[playbackController playlistDidChange:self];
for(PlaylistEntry *pe in objects) {
NSURL *removed = nil;
NSError *error = nil;
[[NSFileManager defaultManager] trashItemAtURL:pe.URL resultingItemURL:&removed error:&error];
pe.trashURL = removed;
}
}
- (void)setSortDescriptors:(NSArray *)sortDescriptors {
DLog(@"Current: %@, setting: %@", [self sortDescriptors], sortDescriptors);
@ -755,7 +834,7 @@ static inline void dispatch_sync_reentrant(dispatch_queue_t queue, dispatch_bloc
return [[self arrangedObjects] objectAtIndex:i];
}
- (void)remove:(id)sender {
- (IBAction)remove:(id)sender {
// It's a kind of magic.
// Plain old NSArrayController's remove: isn't working properly for some reason.
// The method is definitely called but (overridden) removeObjectsAtArrangedObjectIndexes: isn't
@ -769,6 +848,16 @@ static inline void dispatch_sync_reentrant(dispatch_queue_t queue, dispatch_bloc
}
}
- (IBAction)trash:(id)sender {
// Someone asked for this, so they're getting it.
// Trash the selection, and advance playback to the next untrashed file if necessary.
NSIndexSet *selected = [self selectionIndexes];
if([selected count] > 0) {
[self trashObjectsAtArrangedObjectIndexes:selected];
}
}
- (IBAction)removeDuplicates:(id)sender {
NSMutableArray *originals = [[NSMutableArray alloc] init];
NSMutableArray *duplicates = [[NSMutableArray alloc] init];

View File

@ -26,6 +26,7 @@
NSString *errorMessage;
NSURL *URL;
NSURL *trashURL;
NSString *artist;
NSString *albumartist;
@ -121,6 +122,7 @@
@property(retain) NSString *errorMessage;
@property(retain) NSURL *URL;
@property(retain) NSURL *trashURL;
@property(retain) NSString *artist;
@property(retain) NSString *albumartist;