diff --git a/FileTree/FileTreeDataSource.m b/FileTree/FileTreeDataSource.m index 55e344877..b2c9488ae 100644 --- a/FileTree/FileTreeDataSource.m +++ b/FileTree/FileTreeDataSource.m @@ -151,7 +151,12 @@ static NSURL *defaultMusicDirectory(void) { - (id )outlineView:(NSOutlineView *)outlineView pasteboardWriterForItem:(id)item { NSPasteboardItem *paste = [[NSPasteboardItem alloc] init]; - [paste setData:[[item URL] dataRepresentation] forType:NSPasteboardTypeFileURL]; + if (@available(macOS 10.13, *)) { + [paste setData:[[item URL] dataRepresentation] forType:NSPasteboardTypeFileURL]; + } + else { + [paste setPropertyList:@[[item URL]] forType:NSFilenamesPboardType]; + } return paste; } diff --git a/Playlist/DNDArrayController.m b/Playlist/DNDArrayController.m index f78070ea8..3b74ae6fa 100755 --- a/Playlist/DNDArrayController.m +++ b/Playlist/DNDArrayController.m @@ -12,9 +12,16 @@ NSString *iTunesDropType = @"com.apple.tv.metadata"; - (void)awakeFromNib { [super awakeFromNib]; // register for drag and drop + NSPasteboardType fileType; + if (@available(macOS 10.13, *)) { + fileType = NSPasteboardTypeFileURL; + } + else { + fileType = NSFilenamesPboardType; + } [self.tableView registerForDraggedTypes:@[CogDNDIndexType, CogUrlsPboardType, - NSPasteboardTypeFileURL, + fileType, iTunesDropType]]; } diff --git a/Playlist/PlaylistController.m b/Playlist/PlaylistController.m index 73e1fc425..f57ce663d 100644 --- a/Playlist/PlaylistController.m +++ b/Playlist/PlaylistController.m @@ -184,7 +184,12 @@ PlaylistEntry *song = [[self arrangedObjects] objectAtIndex:row]; [filenames addObject:[[song path] stringByExpandingTildeInPath]]; - [item setData:[song.URL dataRepresentation] forType:NSPasteboardTypeFileURL]; + if (@available(macOS 10.13, *)) { + [item setData:[song.URL dataRepresentation] forType:NSPasteboardTypeFileURL]; + } + else { + [item setPropertyList:@[song.URL] forType:NSFilenamesPboardType]; + } return item; } @@ -199,8 +204,15 @@ if (row < 0) row = 0; // Determine the type of object that was dropped + NSPasteboardType fileType; + if (@available(macOS 10.13, *)) { + fileType = NSPasteboardTypeFileURL; + } + else { + fileType = NSFilenamesPboardType; + } NSArray *supportedTypes = - @[CogUrlsPboardType, NSPasteboardTypeFileURL, iTunesDropType]; + @[CogUrlsPboardType, fileType, iTunesDropType]; NSPasteboard *pboard = [info draggingPasteboard]; NSString *bestType = [pboard availableTypeFromArray:supportedTypes]; @@ -216,8 +228,15 @@ fromData:data error:&error]; } else { - NSSet *allowed = [NSSet setWithArray:@[[NSArray class], [NSURL class]]]; - urls = [NSKeyedUnarchiver unarchivedObjectOfClasses:allowed fromData:data error:&error]; + if (@available(macOS 10.13, *)) { + NSSet *allowed = [NSSet setWithArray:@[[NSArray class], [NSURL class]]]; + urls = [NSKeyedUnarchiver unarchivedObjectOfClasses:allowed + fromData:data + error:&error]; + } + else { + urls = [NSUnarchiver unarchiveObjectWithData:data]; + } } if (!urls) { DLog(@"%@", error); @@ -229,7 +248,7 @@ } // Get files from a normal file drop (such as from Finder) - if ([bestType isEqualToString:NSPasteboardTypeFileURL]) { + if ([bestType isEqualToString:fileType]) { NSArray *classes = @[[NSURL class]]; NSDictionary *options = @{}; NSArray *files = [pboard readObjectsForClasses:classes options:options]; diff --git a/Playlist/PlaylistView.m b/Playlist/PlaylistView.m index 949a53882..c46dab6b6 100644 --- a/Playlist/PlaylistView.m +++ b/Playlist/PlaylistView.m @@ -225,9 +225,16 @@ } NSError *error; - NSData *data = [NSKeyedArchiver archivedDataWithRootObject:selectedURLs - requiringSecureCoding:YES - error:&error]; + NSData *data; + if (@available(macOS 10.13, *)) { + data = [NSKeyedArchiver archivedDataWithRootObject:selectedURLs + requiringSecureCoding:YES + error:&error]; + } + else { + data = [NSArchiver archivedDataWithRootObject:selectedURLs]; + } + if (!data) { DLog(@"Error: %@", error); } @@ -267,7 +274,14 @@ - (IBAction)paste:(id)sender { // Determine the type of object that was dropped - NSArray *supportedTypes = @[CogUrlsPboardType, NSPasteboardTypeFileURL, iTunesDropType]; + NSPasteboardType fileType; + if (@available(macOS 10.13, *)) { + fileType = NSPasteboardTypeFileURL; + } + else { + fileType = NSFilenamesPboardType; + } + NSArray *supportedTypes = @[CogUrlsPboardType, fileType, iTunesDropType]; NSPasteboard *pboard = [NSPasteboard generalPasteboard]; NSPasteboardType bestType = [pboard availableTypeFromArray:supportedTypes]; #ifdef _DEBUG @@ -294,8 +308,15 @@ fromData:data error:&error]; } else { - NSSet *allowed = [NSSet setWithArray:@[[NSArray class], [NSURL class]]]; - urls = [NSKeyedUnarchiver unarchivedObjectOfClasses:allowed fromData:data error:&error]; + if (@available(macOS 10.13, *)) { + NSSet *allowed = [NSSet setWithArray:@[[NSArray class], [NSURL class]]]; + urls = [NSKeyedUnarchiver unarchivedObjectOfClasses:allowed + fromData:data + error:&error]; + } + else { + urls = [NSUnarchiver unarchiveObjectWithData:data]; + } } if (!urls) { DLog(@"%@", error); @@ -307,10 +328,10 @@ } // Get files from a normal file drop (such as from Finder) - if ([bestType isEqualToString:NSPasteboardTypeFileURL]) { + if ([bestType isEqualToString:fileType]) { NSMutableArray *urls = [[NSMutableArray alloc] init]; - for (NSString *file in [pboard propertyListForType:NSPasteboardTypeFileURL]) { + for (NSString *file in [pboard propertyListForType:fileType]) { [urls addObject:[NSURL fileURLWithPath:file]]; } @@ -364,8 +385,16 @@ } if (action == @selector(paste:)) { NSPasteboard *pboard = [NSPasteboard generalPasteboard]; + + NSPasteboardType fileType; + if (@available(macOS 10.13, *)) { + fileType = NSPasteboardTypeFileURL; + } + else { + fileType = NSFilenamesPboardType; + } - NSArray *supportedTypes = @[CogUrlsPboardType, NSPasteboardTypeFileURL, iTunesDropType]; + NSArray *supportedTypes = @[CogUrlsPboardType, fileType, iTunesDropType]; NSString *bestType = [pboard availableTypeFromArray:supportedTypes]; diff --git a/Spotlight/SpotlightPlaylistController.m b/Spotlight/SpotlightPlaylistController.m index 3a1914b36..c82586657 100644 --- a/Spotlight/SpotlightPlaylistController.m +++ b/Spotlight/SpotlightPlaylistController.m @@ -20,10 +20,18 @@ NSArray *urls = [[self selectedObjects]valueForKey:@"URL"]; NSError *error = nil; - NSData *data = [NSKeyedArchiver archivedDataWithRootObject:urls - requiringSecureCoding:YES - error:&error]; - if (error) return NO; + NSData *data; + if (@available(macOS 10.13, *)) + { + data = [NSKeyedArchiver archivedDataWithRootObject:urls + requiringSecureCoding:YES + error:&error]; + if (error) return NO; + } + else + { + data = [NSArchiver archivedDataWithRootObject:urls]; + } [pboard declareTypes:[NSArray arrayWithObjects:CogUrlsPboardType,nil] owner:nil]; //add it to pboard [pboard setData:data forType:CogUrlsPboardType];