Changeset 1031
- Timestamp:
- 10/24/07 14:34:29 (15 months ago)
- Location:
- trunk
- Files:
-
- 2 modified
-
AudioLibrary/AudioLibrary.m (modified) (7 diffs)
-
Play.xcodeproj/project.pbxproj (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/AudioLibrary/AudioLibrary.m
r1026 r1031 87 87 88 88 #import "UtilityFunctions.h" 89 #import "CueSheetParser.h" 89 90 90 91 #import "IconFamily.h" … … 194 195 - (void) addRandomTracksFromLibraryToPlayQueue:(unsigned)count; 195 196 196 - (BOOL) addStreamsFromExternalCueSheet:(NSString *)filename;197 - (BOOL) addStreamsFromExternalCueSheet:(NSString *)filename; 197 198 198 199 - (void) updatePlayQueueHistory; … … 681 682 [panel setCanChooseDirectories:YES]; 682 683 684 [panel setTitle:NSLocalizedStringFromTable(@"Add to Library", @"AudioLibrary", @"")]; 685 [panel setMessage:NSLocalizedStringFromTable(@"Choose files to add to the library.", @"AudioLibrary", @"")]; 686 683 687 [panel beginSheetForDirectory:nil 684 688 file:nil … … 807 811 NSError *error = nil; 808 812 813 // Parse external cue sheets 809 814 if([[filename pathExtension] isEqualToString:@"cue"]) 810 815 return [self addStreamsFromExternalCueSheet:filename]; 811 816 812 // First read the properties to determine if the file contains acuesheet817 // Read the properties to determine if the file contains an embedded cuesheet 813 818 AudioPropertiesReader *propertiesReader = [AudioPropertiesReader propertiesReaderForURL:[NSURL fileURLWithPath:filename] error:&error]; 814 819 if(nil == propertiesReader) … … 819 824 return NO; 820 825 821 // If the file contains a cuesheet, treat each entry as a separate stream826 // If the file contains an embedded cuesheet, treat each cue sheet entry as a separate stream in the library 822 827 NSDictionary *cueSheet = [propertiesReader cueSheet]; 823 828 if(nil != cueSheet) { … … 831 836 return NO; 832 837 838 // Iterate through each track in the cue sheet, adding it to the library if required 833 839 NSEnumerator *enumerator = [[cueSheet valueForKey:AudioPropertiesCueSheetTracksKey] objectEnumerator]; 834 840 NSDictionary *cueSheetTrack = nil; … … 2301 2307 } 2302 2308 2303 - (BOOL) addStreamsFromExternalCueSheet:(NSString *)filename2309 - (BOOL) addStreamsFromExternalCueSheet:(NSString *)filename 2304 2310 { 2305 2311 NSParameterAssert(nil != filename); 2306 2312 2307 return NO; 2313 NSError *error = nil; 2314 CueSheetParser *cueSheetParser = [CueSheetParser cueSheetWithURL:[NSURL fileURLWithPath:filename] error:&error]; 2315 if(nil == cueSheetParser) 2316 return NO; 2317 2318 // Iterate through each track in the cue sheet, adding it to the library if required 2319 NSEnumerator *enumerator = [[cueSheetParser cueSheetTracks] objectEnumerator]; 2320 NSDictionary *cueSheetTrack = nil; 2321 2322 while((cueSheetTrack = [enumerator nextObject])) { 2323 // If the stream already exists in the library, skip it 2324 AudioStream *stream = [[[CollectionManager manager] streamManager] streamForURL:[cueSheetTrack valueForKey:StreamURLKey] 2325 startingFrame:[cueSheetTrack valueForKey:StreamStartingFrameKey] 2326 frameCount:[cueSheetTrack valueForKey:StreamFrameCountKey]]; 2327 if(nil != stream) 2328 continue; 2329 2330 // Insert the object in the database 2331 stream = [AudioStream insertStreamForURL:[NSURL fileURLWithPath:filename] withInitialValues:cueSheetTrack]; 2332 2333 // Add the stream to the selected playlist 2334 if(nil != stream && [_browserController selectedNodeIsPlaylist]) 2335 [[(PlaylistNode *)[_browserController selectedNode] playlist] addStream:stream]; 2336 } 2337 2338 return YES; 2308 2339 } 2309 2340 -
trunk/Play.xcodeproj/project.pbxproj
r1004 r1031 148 148 8C6ACE760BD55F6E00CDFEB2 /* RBSplitSubview.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C6ACE700BD55F6D00CDFEB2 /* RBSplitSubview.m */; }; 149 149 8C6ACE790BD55F6E00CDFEB2 /* RBSplitView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C6ACE730BD55F6E00CDFEB2 /* RBSplitView.m */; }; 150 8C6D026F0CCEFAEE00A597AE /* CueSheetParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C6D026D0CCEFAEE00A597AE /* CueSheetParser.m */; }; 150 151 8C84BACF0C619F6800D8D221 /* ofa1.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C84BACA0C619F6800D8D221 /* ofa1.framework */; }; 151 152 8C84BAD00C619F7400D8D221 /* ofa1.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 8C84BACA0C619F6800D8D221 /* ofa1.framework */; }; … … 594 595 8C6ACE730BD55F6E00CDFEB2 /* RBSplitView.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = RBSplitView.m; path = ThirdParty/RBSplitView/Source/RBSplitView.m; sourceTree = "<group>"; }; 595 596 8C6ACE740BD55F6E00CDFEB2 /* RBSplitViewPrivateDefines.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = RBSplitViewPrivateDefines.h; path = ThirdParty/RBSplitView/Source/RBSplitViewPrivateDefines.h; sourceTree = "<group>"; }; 597 8C6D026C0CCEFAEE00A597AE /* CueSheetParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CueSheetParser.h; path = Utilities/CueSheetParser.h; sourceTree = "<group>"; }; 598 8C6D026D0CCEFAEE00A597AE /* CueSheetParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CueSheetParser.m; path = Utilities/CueSheetParser.m; sourceTree = "<group>"; }; 596 599 8C84BACA0C619F6800D8D221 /* ofa1.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ofa1.framework; path = Frameworks/ofa1.framework; sourceTree = "<group>"; }; 597 600 8C8E3BC00BDF215500605141 /* ComposerNode.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ComposerNode.h; path = Browser/ComposerNode.h; sourceTree = "<group>"; }; … … 1647 1650 8C47A9550C93618B00D71633 /* MusicBrainzUtilities.h */, 1648 1651 8C47A9560C93618B00D71633 /* MusicBrainzUtilities.mm */, 1652 8C6D026C0CCEFAEE00A597AE /* CueSheetParser.h */, 1653 8C6D026D0CCEFAEE00A597AE /* CueSheetParser.m */, 1649 1654 ); 1650 1655 name = Utilities; … … 2279 2284 8CF2C3B40CB9C8790051FC67 /* parse.c in Sources */, 2280 2285 8CF2C3BF0CB9C89E0051FC67 /* opcodes.c in Sources */, 2286 8C6D026F0CCEFAEE00A597AE /* CueSheetParser.m in Sources */, 2281 2287 ); 2282 2288 runOnlyForDeploymentPostprocessing = 0; … … 2608 2614 "$(FRAMEWORK_SEARCH_PATHS_QUOTED_1)", 2609 2615 "$(FRAMEWORK_SEARCH_PATHS_QUOTED_2)", 2616 "$(FRAMEWORK_SEARCH_PATHS_QUOTED_3)", 2610 2617 ); 2611 2618 FRAMEWORK_SEARCH_PATHS_QUOTED = "\"$(SRCROOT)/Frameworks\""; 2612 2619 FRAMEWORK_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/Frameworks\""; 2613 2620 FRAMEWORK_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/Frameworks\""; 2621 FRAMEWORK_SEARCH_PATHS_QUOTED_3 = "\"$(SRCROOT)/Frameworks\""; 2614 2622 GCC_DYNAMIC_NO_PIC = NO; 2615 2623 GCC_ENABLE_FIX_AND_CONTINUE = YES; … … 2661 2669 "$(FRAMEWORK_SEARCH_PATHS_QUOTED_1)", 2662 2670 "$(FRAMEWORK_SEARCH_PATHS_QUOTED_2)", 2671 "$(FRAMEWORK_SEARCH_PATHS_QUOTED_3)", 2663 2672 ); 2664 2673 FRAMEWORK_SEARCH_PATHS_QUOTED = "\"$(SRCROOT)/Frameworks\""; 2665 2674 FRAMEWORK_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/Frameworks\""; 2666 2675 FRAMEWORK_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/Frameworks\""; 2676 FRAMEWORK_SEARCH_PATHS_QUOTED_3 = "\"$(SRCROOT)/Frameworks\""; 2667 2677 GCC_ENABLE_OBJC_EXCEPTIONS = YES; 2668 2678 GCC_FAST_OBJC_DISPATCH = YES;
