nullability audit for MimeTypeUtil

* added missing nullability annotations
* guard against insterting nil into set
* remove unused code

Compiler Warnings: 364 -> 343

// FREEBIE
pull/1/head
Michael Kirk 8 years ago
parent 1754ad25d2
commit c9f397d590

@ -22,10 +22,10 @@
#import <AFNetworking/AFHTTPSessionManager.h>
#import <Foundation/Foundation.h>
extern NSString *const TSNetworkManagerDomain;
NS_ASSUME_NONNULL_BEGIN
extern NSString *const TSNetworkManagerDomain;
@interface TSNetworkManager : NSObject
- (instancetype)init NS_UNAVAILABLE;

@ -2,6 +2,8 @@
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
//
NS_ASSUME_NONNULL_BEGIN
extern NSString *const OWSMimeTypeApplicationOctetStream;
extern NSString *const OWSMimeTypeImagePng;
extern NSString *const OWSMimeTypeOversizeTextMessage;
@ -19,10 +21,10 @@ extern NSString *const OWSMimeTypeUnknownForTests;
+ (BOOL)isSupportedImageFile:(NSString *)filePath;
+ (BOOL)isSupportedAnimatedFile:(NSString *)filePath;
+ (NSString *)getSupportedExtensionFromVideoMIMEType:(NSString *)supportedMIMEType;
+ (NSString *)getSupportedExtensionFromAudioMIMEType:(NSString *)supportedMIMEType;
+ (NSString *)getSupportedExtensionFromImageMIMEType:(NSString *)supportedMIMEType;
+ (NSString *)getSupportedExtensionFromAnimatedMIMEType:(NSString *)supportedMIMEType;
+ (nullable NSString *)getSupportedExtensionFromVideoMIMEType:(NSString *)supportedMIMEType;
+ (nullable NSString *)getSupportedExtensionFromAudioMIMEType:(NSString *)supportedMIMEType;
+ (nullable NSString *)getSupportedExtensionFromImageMIMEType:(NSString *)supportedMIMEType;
+ (nullable NSString *)getSupportedExtensionFromAnimatedMIMEType:(NSString *)supportedMIMEType;
+ (BOOL)isAnimated:(NSString *)contentType;
+ (BOOL)isImage:(NSString *)contentType;
@ -30,12 +32,10 @@ extern NSString *const OWSMimeTypeUnknownForTests;
+ (BOOL)isAudio:(NSString *)contentType;
// filename is optional and should not be trusted.
+ (NSString *)filePathForAttachment:(NSString *)uniqueId
ofMIMEType:(NSString *)contentType
filename:(nullable NSString *)filename
inFolder:(NSString *)folder;
+ (NSURL *)simLinkCorrectExtensionOfFile:(NSURL *)mediaURL ofMIMEType:(NSString *)contentType;
+ (nullable NSString *)filePathForAttachment:(NSString *)uniqueId
ofMIMEType:(NSString *)contentType
filename:(nullable NSString *)filename
inFolder:(NSString *)folder;
+ (NSSet<NSString *> *)supportedVideoUTITypes;
+ (NSSet<NSString *> *)supportedAudioUTITypes;
@ -48,3 +48,5 @@ extern NSString *const OWSMimeTypeUnknownForTests;
+ (nullable NSString *)fileExtensionForMIMEType:(NSString *)mimeType;
@end
NS_ASSUME_NONNULL_END

@ -10,6 +10,8 @@
#import <CoreServices/CoreServices.h>
#endif
NS_ASSUME_NONNULL_BEGIN
NSString *const OWSMimeTypeApplicationOctetStream = @"application/octet-stream";
NSString *const OWSMimeTypeImagePng = @"image/png";
NSString *const OWSMimeTypeOversizeTextMessage = @"text/x-signal-plain";
@ -216,23 +218,27 @@ NSString *const OWSMimeTypeUnknownForTests = @"unknown/mimetype";
return [[self supportedAnimatedExtensionTypesToMIMETypes] objectForKey:[filePath pathExtension]] != nil;
}
+ (NSString *)getSupportedExtensionFromVideoMIMEType:(NSString *)supportedMIMEType {
+ (nullable NSString *)getSupportedExtensionFromVideoMIMEType:(NSString *)supportedMIMEType
{
return [[self supportedVideoMIMETypesToExtensionTypes] objectForKey:supportedMIMEType];
}
+ (NSString *)getSupportedExtensionFromAudioMIMEType:(NSString *)supportedMIMEType {
+ (nullable NSString *)getSupportedExtensionFromAudioMIMEType:(NSString *)supportedMIMEType
{
return [[self supportedAudioMIMETypesToExtensionTypes] objectForKey:supportedMIMEType];
}
+ (NSString *)getSupportedExtensionFromImageMIMEType:(NSString *)supportedMIMEType {
+ (nullable NSString *)getSupportedExtensionFromImageMIMEType:(NSString *)supportedMIMEType
{
return [[self supportedImageMIMETypesToExtensionTypes] objectForKey:supportedMIMEType];
}
+ (NSString *)getSupportedExtensionFromAnimatedMIMEType:(NSString *)supportedMIMEType {
+ (nullable NSString *)getSupportedExtensionFromAnimatedMIMEType:(NSString *)supportedMIMEType
{
return [[self supportedAnimatedMIMETypesToExtensionTypes] objectForKey:supportedMIMEType];
}
+ (NSString *)getSupportedExtensionFromBinaryDataMIMEType:(NSString *)supportedMIMEType
+ (nullable NSString *)getSupportedExtensionFromBinaryDataMIMEType:(NSString *)supportedMIMEType
{
return [[self supportedBinaryDataMIMETypesToExtensionTypes] objectForKey:supportedMIMEType];
}
@ -259,10 +265,10 @@ NSString *const OWSMimeTypeUnknownForTests = @"unknown/mimetype";
return [MIMETypeUtil isSupportedAudioMIMEType:contentType];
}
+ (NSString *)filePathForAttachment:(NSString *)uniqueId
ofMIMEType:(NSString *)contentType
filename:(nullable NSString *)filename
inFolder:(NSString *)folder
+ (nullable NSString *)filePathForAttachment:(NSString *)uniqueId
ofMIMEType:(NSString *)contentType
filename:(nullable NSString *)filename
inFolder:(NSString *)folder
{
NSString *kDefaultFileExtension = @"bin";
@ -357,27 +363,6 @@ NSString *const OWSMimeTypeUnknownForTests = @"unknown/mimetype";
return [self filePathForData:uniqueId withFileExtension:kDefaultFileExtension inFolder:folder];
}
+ (NSURL *)simLinkCorrectExtensionOfFile:(NSURL *)mediaURL ofMIMEType:(NSString *)contentType {
if ([self isAudio:contentType]) {
// Audio files in current framework require changing to have extension for player
return [self changeFile:mediaURL
toHaveExtension:[[self supportedAudioMIMETypesToExtensionTypes] objectForKey:contentType]];
}
return mediaURL;
}
+ (NSURL *)changeFile:(NSURL *)originalFile toHaveExtension:(NSString *)extension {
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *newPath =
[originalFile.URLByDeletingPathExtension.absoluteString stringByAppendingPathExtension:extension];
if (![fileManager fileExistsAtPath:newPath]) {
NSError *error = nil;
[fileManager createSymbolicLinkAtPath:newPath withDestinationPath:[originalFile path] error:&error];
return [NSURL URLWithString:newPath];
}
return originalFile;
}
+ (NSString *)filePathForImage:(NSString *)uniqueId ofMIMEType:(NSString *)contentType inFolder:(NSString *)folder {
return [[folder stringByAppendingFormat:@"/%@", uniqueId]
stringByAppendingPathExtension:[self getSupportedExtensionFromImageMIMEType:contentType]];
@ -411,21 +396,21 @@ NSString *const OWSMimeTypeUnknownForTests = @"unknown/mimetype";
return [[folder stringByAppendingFormat:@"/%@", uniqueId] stringByAppendingPathExtension:fileExtension];
}
+ (NSString *)utiTypeForMIMEType:(NSString *)mimeType
+ (nullable NSString *)utiTypeForMIMEType:(NSString *)mimeType
{
CFStringRef utiType
= UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType, (__bridge CFStringRef)mimeType, NULL);
= UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType, (__bridge CFStringRef)mimeType, NULL);
return (__bridge_transfer NSString *)utiType;
}
+ (NSString *)fileExtensionForUTIType:(NSString *)utiType
+ (nullable NSString *)fileExtensionForUTIType:(NSString *)utiType
{
CFStringRef fileExtension
= UTTypeCopyPreferredTagWithClass((__bridge CFStringRef) utiType, kUTTagClassFilenameExtension);
= UTTypeCopyPreferredTagWithClass((__bridge CFStringRef)utiType, kUTTagClassFilenameExtension);
return (__bridge_transfer NSString *)fileExtension;
}
+ (NSString *)fileExtensionForMIMETypeViaUTIType:(NSString *)mimeType
+ (nullable NSString *)fileExtensionForMIMETypeViaUTIType:(NSString *)mimeType
{
NSString *utiType = [self utiTypeForMIMEType:mimeType];
if (!utiType) {
@ -439,7 +424,13 @@ NSString *const OWSMimeTypeUnknownForTests = @"unknown/mimetype";
{
NSMutableSet<NSString *> *result = [NSMutableSet new];
for (NSString *mimeType in mimeTypes) {
[result addObject:[self utiTypeForMIMEType:mimeType]];
NSString *_Nullable utiType = [self utiTypeForMIMEType:mimeType];
if (!utiType) {
DDLogError(@"%@ unknown utiType for mimetype: %@", self.tag, mimeType);
OWSAssert(NO);
continue;
}
[result addObject:utiType];
}
return result;
}
@ -1555,15 +1546,15 @@ NSString *const OWSMimeTypeUnknownForTests = @"unknown/mimetype";
return result;
}
+ (NSString *)fileExtensionForMIMETypeViaLookup:(NSString *)mimeType
+ (nullable NSString *)fileExtensionForMIMETypeViaLookup:(NSString *)mimeType
{
return [[self genericMIMETypesToExtensionTypes] objectForKey:mimeType];
}
+ (NSString *)fileExtensionForMIMEType:(NSString *)mimeType
+ (nullable NSString *)fileExtensionForMIMEType:(NSString *)mimeType
{
// Try to deduce the file extension by converting to a UTI type.
NSString *fileExtension = [self fileExtensionForMIMETypeViaUTIType:mimeType];
NSString *_Nullable fileExtension = [self fileExtensionForMIMETypeViaUTIType:mimeType];
if (!fileExtension) {
// Try to deduce the file extension by using a lookup table..
fileExtension = [self fileExtensionForMIMETypeViaLookup:mimeType];
@ -1571,13 +1562,27 @@ NSString *const OWSMimeTypeUnknownForTests = @"unknown/mimetype";
return fileExtension;
}
+ (NSString *)utiTypeForFileExtension:(NSString *)fileExtension
+ (nullable NSString *)utiTypeForFileExtension:(NSString *)fileExtension
{
OWSAssert(fileExtension.length > 0);
NSString *utiType = (__bridge_transfer NSString *)UTTypeCreatePreferredIdentifierForTag(
NSString *_Nullable utiType = (__bridge_transfer NSString *)UTTypeCreatePreferredIdentifierForTag(
kUTTagClassFilenameExtension, (__bridge CFStringRef)fileExtension, NULL);
return utiType;
}
#pragma mark - Logging
+ (NSString *)tag
{
return [NSString stringWithFormat:@"[%@]", self.class];
}
- (NSString *)tag
{
return self.class.tag;
}
@end
NS_ASSUME_NONNULL_END

Loading…
Cancel
Save