diff --git a/Application/PlaybackController.m b/Application/PlaybackController.m index 8e75fc06b..88c1493cb 100644 --- a/Application/PlaybackController.m +++ b/Application/PlaybackController.m @@ -187,6 +187,13 @@ NSDictionary *makeRGInfo(PlaylistEntry *pe) { if(playbackStatus != CogStatusStopped && playbackStatus != CogStatusStopping) [self stop:self]; + if(!pe.url) { + pe.error = YES; + pe.errorMessage = NSLocalizedString(@"ErrorMessageBadFile", @""); + [[FIRCrashlytics crashlytics] log:@"Attempting to play bad file."]; + return; + } + [[FIRCrashlytics crashlytics] logWithFormat:@"Playing track: %@", pe.url]; DLog(@"PLAYLIST CONTROLLER: %@", [playlistController class]); @@ -577,9 +584,14 @@ NSDictionary *makeRGInfo(PlaylistEntry *pe) { } } - if(pe) { + if(pe && pe.url) { [[FIRCrashlytics crashlytics] logWithFormat:@"Beginning decoding track: %@", pe.url]; [player setNextStream:pe.url withUserInfo:pe withRGInfo:makeRGInfo(pe)]; + } else if(pe) { + [[FIRCrashlytics crashlytics] log:@"Invalid playlist entry reached."]; + [player setNextStream:nil]; + pe.error = YES; + pe.errorMessage = NSLocalizedString(@"ErrorMessageBadFile", @""); } else { [[FIRCrashlytics crashlytics] log:@"End of playlist reached."]; [player setNextStream:nil]; diff --git a/Playlist/PlaylistEntry.m b/Playlist/PlaylistEntry.m index b6e20a646..cbf44a86c 100644 --- a/Playlist/PlaylistEntry.m +++ b/Playlist/PlaylistEntry.m @@ -484,7 +484,7 @@ NSURL *_Nullable urlForPath(NSString *_Nullable path) { - (void)setMetadata:(NSDictionary *)metadata { if(metadata == nil) { self.error = YES; - self.errorMessage = @"Unable to retrieve metadata."; + self.errorMessage = NSLocalizedString(@"ErrorMetadata", @""); } else { self.volume = 1; [self setValuesForKeysWithDictionary:metadata]; diff --git a/Playlist/PlaylistLoader.m b/Playlist/PlaylistLoader.m index e518f6a7f..75bfb9a0d 100644 --- a/Playlist/PlaylistLoader.m +++ b/Playlist/PlaylistLoader.m @@ -642,8 +642,12 @@ static inline void dispatch_sync_reentrant(dispatch_queue_t queue, dispatch_bloc NSBlockOperation *op = [[NSBlockOperation alloc] init]; [op addExecutionBlock:^{ - if(weakPe.deLeted) { + if(weakPe.deLeted || !weakPe.url) { [weakLock lock]; + if(!weakPe.url) { + weakPe.error = YES; + weakPe.errorMessage = NSLocalizedString(@"ErrorMessageBadFile", @""); + } progress += progressstep; [self setProgressJobStatus:progress]; [weakLock unlock]; diff --git a/en.lproj/Localizable.strings b/en.lproj/Localizable.strings index ffca95a12..2382bb88b 100644 --- a/en.lproj/Localizable.strings +++ b/en.lproj/Localizable.strings @@ -63,3 +63,6 @@ "ProgressActionLoadingMetadata" = "loading metadata for tracks"; "ProgressSubActionLoadingMetadata" = "processing files"; "ProgressSubActionMetadataApply" = "applying info to playlist storage"; + +"ErrorMetadata" = "Unable to retrieve metadata."; +"ErrorMessageBadFile" = "Unable to parse metadata for bad file."; diff --git a/es.lproj/Localizable.strings b/es.lproj/Localizable.strings index ffca95a12..2382bb88b 100644 --- a/es.lproj/Localizable.strings +++ b/es.lproj/Localizable.strings @@ -63,3 +63,6 @@ "ProgressActionLoadingMetadata" = "loading metadata for tracks"; "ProgressSubActionLoadingMetadata" = "processing files"; "ProgressSubActionMetadataApply" = "applying info to playlist storage"; + +"ErrorMetadata" = "Unable to retrieve metadata."; +"ErrorMessageBadFile" = "Unable to parse metadata for bad file.";