Changeset 1031

Show
Ignore:
Timestamp:
10/24/07 14:34:29 (15 months ago)
Author:
stephen_booth
Message:

Cue sheets working

Location:
trunk
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • trunk/AudioLibrary/AudioLibrary.m

    r1026 r1031  
    8787 
    8888#import "UtilityFunctions.h" 
     89#import "CueSheetParser.h" 
    8990 
    9091#import "IconFamily.h" 
     
    194195- (void) addRandomTracksFromLibraryToPlayQueue:(unsigned)count; 
    195196 
    196 - (BOOL) addStreamsFromExternalCueSheet:(NSString*)filename; 
     197- (BOOL) addStreamsFromExternalCueSheet:(NSString *)filename; 
    197198 
    198199- (void) updatePlayQueueHistory; 
     
    681682        [panel setCanChooseDirectories:YES]; 
    682683         
     684        [panel setTitle:NSLocalizedStringFromTable(@"Add to Library", @"AudioLibrary", @"")]; 
     685        [panel setMessage:NSLocalizedStringFromTable(@"Choose files to add to the library.", @"AudioLibrary", @"")]; 
     686         
    683687        [panel beginSheetForDirectory:nil  
    684688                                                         file:nil  
     
    807811        NSError *error = nil; 
    808812         
     813        // Parse external cue sheets 
    809814        if([[filename pathExtension] isEqualToString:@"cue"]) 
    810815                return [self addStreamsFromExternalCueSheet:filename]; 
    811816         
    812         // First read the properties to determine if the file contains a cuesheet 
     817        // Read the properties to determine if the file contains an embedded cuesheet 
    813818        AudioPropertiesReader *propertiesReader = [AudioPropertiesReader propertiesReaderForURL:[NSURL fileURLWithPath:filename] error:&error]; 
    814819        if(nil == propertiesReader) 
     
    819824                return NO; 
    820825         
    821         // If the file contains a cuesheet, treat each entry as a separate stream 
     826        // If the file contains an embedded cuesheet, treat each cue sheet entry as a separate stream in the library 
    822827        NSDictionary *cueSheet = [propertiesReader cueSheet]; 
    823828        if(nil != cueSheet) { 
     
    831836                        return NO; 
    832837 
     838                // Iterate through each track in the cue sheet, adding it to the library if required 
    833839                NSEnumerator    *enumerator             = [[cueSheet valueForKey:AudioPropertiesCueSheetTracksKey] objectEnumerator]; 
    834840                NSDictionary    *cueSheetTrack  = nil; 
     
    23012307} 
    23022308 
    2303 - (BOOL) addStreamsFromExternalCueSheet:(NSString*)filename 
     2309- (BOOL) addStreamsFromExternalCueSheet:(NSString *)filename 
    23042310{ 
    23052311        NSParameterAssert(nil != filename); 
    23062312         
    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; 
    23082339} 
    23092340 
  • trunk/Play.xcodeproj/project.pbxproj

    r1004 r1031  
    148148                8C6ACE760BD55F6E00CDFEB2 /* RBSplitSubview.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C6ACE700BD55F6D00CDFEB2 /* RBSplitSubview.m */; }; 
    149149                8C6ACE790BD55F6E00CDFEB2 /* RBSplitView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C6ACE730BD55F6E00CDFEB2 /* RBSplitView.m */; }; 
     150                8C6D026F0CCEFAEE00A597AE /* CueSheetParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C6D026D0CCEFAEE00A597AE /* CueSheetParser.m */; }; 
    150151                8C84BACF0C619F6800D8D221 /* ofa1.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C84BACA0C619F6800D8D221 /* ofa1.framework */; }; 
    151152                8C84BAD00C619F7400D8D221 /* ofa1.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 8C84BACA0C619F6800D8D221 /* ofa1.framework */; }; 
     
    594595                8C6ACE730BD55F6E00CDFEB2 /* RBSplitView.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = RBSplitView.m; path = ThirdParty/RBSplitView/Source/RBSplitView.m; sourceTree = "<group>"; }; 
    595596                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>"; }; 
    596599                8C84BACA0C619F6800D8D221 /* ofa1.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ofa1.framework; path = Frameworks/ofa1.framework; sourceTree = "<group>"; }; 
    597600                8C8E3BC00BDF215500605141 /* ComposerNode.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ComposerNode.h; path = Browser/ComposerNode.h; sourceTree = "<group>"; }; 
     
    16471650                                8C47A9550C93618B00D71633 /* MusicBrainzUtilities.h */, 
    16481651                                8C47A9560C93618B00D71633 /* MusicBrainzUtilities.mm */, 
     1652                                8C6D026C0CCEFAEE00A597AE /* CueSheetParser.h */, 
     1653                                8C6D026D0CCEFAEE00A597AE /* CueSheetParser.m */, 
    16491654                        ); 
    16501655                        name = Utilities; 
     
    22792284                                8CF2C3B40CB9C8790051FC67 /* parse.c in Sources */, 
    22802285                                8CF2C3BF0CB9C89E0051FC67 /* opcodes.c in Sources */, 
     2286                                8C6D026F0CCEFAEE00A597AE /* CueSheetParser.m in Sources */, 
    22812287                        ); 
    22822288                        runOnlyForDeploymentPostprocessing = 0; 
     
    26082614                                        "$(FRAMEWORK_SEARCH_PATHS_QUOTED_1)", 
    26092615                                        "$(FRAMEWORK_SEARCH_PATHS_QUOTED_2)", 
     2616                                        "$(FRAMEWORK_SEARCH_PATHS_QUOTED_3)", 
    26102617                                ); 
    26112618                                FRAMEWORK_SEARCH_PATHS_QUOTED = "\"$(SRCROOT)/Frameworks\""; 
    26122619                                FRAMEWORK_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/Frameworks\""; 
    26132620                                FRAMEWORK_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/Frameworks\""; 
     2621                                FRAMEWORK_SEARCH_PATHS_QUOTED_3 = "\"$(SRCROOT)/Frameworks\""; 
    26142622                                GCC_DYNAMIC_NO_PIC = NO; 
    26152623                                GCC_ENABLE_FIX_AND_CONTINUE = YES; 
     
    26612669                                        "$(FRAMEWORK_SEARCH_PATHS_QUOTED_1)", 
    26622670                                        "$(FRAMEWORK_SEARCH_PATHS_QUOTED_2)", 
     2671                                        "$(FRAMEWORK_SEARCH_PATHS_QUOTED_3)", 
    26632672                                ); 
    26642673                                FRAMEWORK_SEARCH_PATHS_QUOTED = "\"$(SRCROOT)/Frameworks\""; 
    26652674                                FRAMEWORK_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/Frameworks\""; 
    26662675                                FRAMEWORK_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/Frameworks\""; 
     2676                                FRAMEWORK_SEARCH_PATHS_QUOTED_3 = "\"$(SRCROOT)/Frameworks\""; 
    26672677                                GCC_ENABLE_OBJC_EXCEPTIONS = YES; 
    26682678                                GCC_FAST_OBJC_DISPATCH = YES;