diff --git a/Signal/src/AppDelegate.m b/Signal/src/AppDelegate.m index f0b2eec7c..775549565 100644 --- a/Signal/src/AppDelegate.m +++ b/Signal/src/AppDelegate.m @@ -20,9 +20,6 @@ #import "VersionMigrations.h" #import "UIColor+OWS.h" #import "CodeVerificationViewController.h" -#import "MIMETypeUtil.h" -#import "TSDatabaseView.h" -#import #ifdef __APPLE__ #include "TargetConditionals.h" @@ -138,7 +135,7 @@ static NSString* const kCallSegue = @"2.0_6.0_Call_Segue"; [self refreshContacts]; [TSPreKeyManager refreshPreKeys]; } - [MIMETypeUtil initialize]; + return YES; } @@ -284,7 +281,11 @@ static NSString* const kCallSegue = @"2.0_6.0_Call_Segue"; window.windowLevel = CGFLOAT_MAX; // There appears to be no more reliable way to get the launchscreen image from an asset bundle - NSDictionary *dict = @{@"320x480" : @"LaunchImage-700", @"320x568" : @"LaunchImage-700-568h", @"375x667" : @"LaunchImage-800-667h", @"414x736" : @"LaunchImage-800-Portrait-736h"}; + NSDictionary *dict = @{@"320x480" : @"LaunchImage-700", + @"320x568" : @"LaunchImage-700-568h", + @"375x667" : @"LaunchImage-800-667h", + @"414x736" : @"LaunchImage-800-Portrait-736h"}; + NSString *key = [NSString stringWithFormat:@"%dx%d", (int)[UIScreen mainScreen].bounds.size.width, (int)[UIScreen mainScreen].bounds.size.height]; UIImage *launchImage = [UIImage imageNamed:dict[key]]; UIImageView *imgView = [[UIImageView alloc] initWithImage:launchImage]; diff --git a/Signal/src/util/MIMETypeUtil.h b/Signal/src/util/MIMETypeUtil.h index c89cf8338..75a5535f9 100644 --- a/Signal/src/util/MIMETypeUtil.h +++ b/Signal/src/util/MIMETypeUtil.h @@ -2,8 +2,6 @@ @interface MIMETypeUtil : NSObject -+(void) initialize; - +(BOOL)isSupportedMIMEType:(NSString*)contentType; +(BOOL)isSupportedVideoMIMEType:(NSString*)contentType; +(BOOL)isSupportedAudioMIMEType:(NSString*)contentType; diff --git a/Signal/src/util/MIMETypeUtil.m b/Signal/src/util/MIMETypeUtil.m index 298862fb0..7c2100e8d 100644 --- a/Signal/src/util/MIMETypeUtil.m +++ b/Signal/src/util/MIMETypeUtil.m @@ -3,110 +3,108 @@ @implementation MIMETypeUtil -static NSDictionary *supportedVideoMIMETypesToExtensionTypes; -static NSDictionary *supportedAudioMIMETypesToExtensionTypes; -static NSDictionary *supportedImageMIMETypesToExtensionTypes; -static NSDictionary *supportedVideoExtensionTypesToMIMETypes; -static NSDictionary *supportedAudioExtensionTypesToMIMETypes; -static NSDictionary *supportedImageExtensionTypesToMIMETypes; - -#pragma mark uses file extensions or MIME types only -+(void) initialize { - // Initialize must be called before this class is used. Could later be in e.g. a .plist - supportedVideoMIMETypesToExtensionTypes =@{@"video/3gpp":@"3gp", - @"video/3gpp2":@"3g2", - @"video/mp4":@"mp4", - @"video/quicktime":@"mov", - @"video/x-m4v":@"m4v" - }; - - supportedAudioMIMETypesToExtensionTypes = @{@"audio/x-m4p":@"m4p", - @"audio/x-m4b":@"m4b", - @"audio/x-m4a":@"m4a", - @"audio/wav":@"wav", - @"audio/x-wav":@"wav", - @"audio/x-mpeg":@"mp3", - @"audio/mpeg":@"mp3", - @"audio/mp4":@"mp4", - @"audio/mp3":@"mp3", - @"audio/mpeg3":@"mp3", - @"audio/x-mp3":@"mp3", - @"audio/x-mpeg3":@"mp3", - @"audio/amr":@"amr", - @"audio/aiff":@"aiff", - @"audio/x-aiff":@"aiff", - @"audio/3gpp2":@"3g2", - @"audio/3gpp":@"3gp" - }; - - - supportedImageMIMETypesToExtensionTypes = @{@"image/jpeg":@"jpeg", - @"image/pjpeg":@"jpeg", - @"image/png":@"png", - @"image/gif":@"gif", - @"image/tiff":@"tif", - @"image/x-tiff":@"tif", - @"image/bmp":@"bmp", - @"image/x-windows-bmp":@"bmp" - }; - - - supportedVideoExtensionTypesToMIMETypes = @{@"3gp":@"video/3gpp", - @"3gpp":@"video/3gpp", - @"3gp2":@"video/3gpp2", - @"3gpp2":@"video/3gpp2", - @"mp4":@"video/mp4", - @"mov":@"video/quicktime", - @"mqv":@"video/quicktime", - @"m4v":@"video/x-m4v" - }; - - supportedAudioExtensionTypesToMIMETypes = @{@"3gp":@"audio/3gpp", - @"3gpp":@"@audio/3gpp", - @"3g2":@"audio/3gpp2", - @"3gp2":@"audio/3gpp2", - @"aiff":@"audio/aiff", - @"aif":@"audio/aiff", - @"aifc":@"audio/aiff", - @"cdda":@"audio/aiff", - @"amr":@"audio/amr", - @"mp3":@"audio/mp3", - @"swa":@"audio/mp3", - @"mp4":@"audio/mp4", - @"mpeg":@"audio/mpeg", - @"mpg":@"audio/mpeg", - @"wav":@"audio/wav", - @"bwf":@"audio/wav", - @"m4a":@"audio/x-m4a", - @"m4b":@"audio/x-m4b", - @"m4p":@"audio/x-m4p" - }; - - supportedImageExtensionTypesToMIMETypes = @{@"png":@"image/png", - @"x-png":@"image/png", - @"jfif":@"image/jpeg", - @"jfif":@"image/pjpeg", - @"jfif-tbnl":@"image/jpeg", - @"jpe":@"image/jpeg", - @"jpe":@"image/pjpeg", - @"jpeg":@"image/jpeg", - @"jpg":@"image/jpeg", - @"gif":@"image/gif", - @"tif":@"image/tiff", - @"tiff":@"image/tiff" - }; ++ (NSDictionary*)supportedVideoMIMETypesToExtensionTypes{ + return @{@"video/3gpp":@"3gp", + @"video/3gpp2":@"3g2", + @"video/mp4":@"mp4", + @"video/quicktime":@"mov", + @"video/x-m4v":@"m4v" + }; +} + ++ (NSDictionary*)supportedAudioMIMETypesToExtensionTypes{ + return @{@"audio/x-m4p":@"m4p", + @"audio/x-m4b":@"m4b", + @"audio/x-m4a":@"m4a", + @"audio/wav":@"wav", + @"audio/x-wav":@"wav", + @"audio/x-mpeg":@"mp3", + @"audio/mpeg":@"mp3", + @"audio/mp4":@"mp4", + @"audio/mp3":@"mp3", + @"audio/mpeg3":@"mp3", + @"audio/x-mp3":@"mp3", + @"audio/x-mpeg3":@"mp3", + @"audio/amr":@"amr", + @"audio/aiff":@"aiff", + @"audio/x-aiff":@"aiff", + @"audio/3gpp2":@"3g2", + @"audio/3gpp":@"3gp" + }; +} + ++ (NSDictionary*)supportedImageMIMETypesToExtensionTypes{ + return @{@"image/jpeg":@"jpeg", + @"image/pjpeg":@"jpeg", + @"image/png":@"png", + @"image/gif":@"gif", + @"image/tiff":@"tif", + @"image/x-tiff":@"tif", + @"image/bmp":@"bmp", + @"image/x-windows-bmp":@"bmp" + }; +} + ++ (NSDictionary*)supportedVideoExtensionTypesToMIMETypes{ + return @{@"3gp":@"video/3gpp", + @"3gpp":@"video/3gpp", + @"3gp2":@"video/3gpp2", + @"3gpp2":@"video/3gpp2", + @"mp4":@"video/mp4", + @"mov":@"video/quicktime", + @"mqv":@"video/quicktime", + @"m4v":@"video/x-m4v" + }; +} ++ (NSDictionary*)supportedAudioExtensionTypesToMIMETypes{ + return @{@"3gp":@"audio/3gpp", + @"3gpp":@"@audio/3gpp", + @"3g2":@"audio/3gpp2", + @"3gp2":@"audio/3gpp2", + @"aiff":@"audio/aiff", + @"aif":@"audio/aiff", + @"aifc":@"audio/aiff", + @"cdda":@"audio/aiff", + @"amr":@"audio/amr", + @"mp3":@"audio/mp3", + @"swa":@"audio/mp3", + @"mp4":@"audio/mp4", + @"mpeg":@"audio/mpeg", + @"mpg":@"audio/mpeg", + @"wav":@"audio/wav", + @"bwf":@"audio/wav", + @"m4a":@"audio/x-m4a", + @"m4b":@"audio/x-m4b", + @"m4p":@"audio/x-m4p" + }; +} + ++ (NSDictionary*)supportedImageExtensionTypesToMIMETypes{ + return @{@"png":@"image/png", + @"x-png":@"image/png", + @"jfif":@"image/jpeg", + @"jfif":@"image/pjpeg", + @"jfif-tbnl":@"image/jpeg", + @"jpe":@"image/jpeg", + @"jpe":@"image/pjpeg", + @"jpeg":@"image/jpeg", + @"jpg":@"image/jpeg", + @"gif":@"image/gif", + @"tif":@"image/tiff", + @"tiff":@"image/tiff" + }; } +(BOOL) isSupportedVideoMIMEType:(NSString*)contentType { - return [supportedVideoMIMETypesToExtensionTypes objectForKey:contentType]!=nil; + return [[self supportedVideoMIMETypesToExtensionTypes] objectForKey:contentType]!=nil; } +(BOOL) isSupportedAudioMIMEType:(NSString*)contentType { - return [supportedAudioMIMETypesToExtensionTypes objectForKey:contentType]!=nil; + return [[self supportedAudioMIMETypesToExtensionTypes] objectForKey:contentType]!=nil; } +(BOOL) isSupportedImageMIMEType:(NSString*)contentType { - return [supportedImageMIMETypesToExtensionTypes objectForKey:contentType]!=nil; + return [[self supportedImageMIMETypesToExtensionTypes] objectForKey:contentType]!=nil; } +(BOOL) isSupportedMIMEType:(NSString*)contentType { @@ -114,48 +112,48 @@ static NSDictionary *supportedImageExtensionTypesToMIMETypes; } +(BOOL) isSupportedVideoFile:(NSString*) filePath { - return [supportedVideoExtensionTypesToMIMETypes objectForKey:[filePath pathExtension]]!=nil; + return [[self supportedVideoExtensionTypesToMIMETypes] objectForKey:[filePath pathExtension]]!=nil; } +(BOOL) isSupportedAudioFile:(NSString*) filePath { - return [supportedAudioExtensionTypesToMIMETypes objectForKey:[filePath pathExtension]]!=nil; + return [[self supportedAudioExtensionTypesToMIMETypes] objectForKey:[filePath pathExtension]]!=nil; } +(BOOL) isSupportedImageFile:(NSString*) filePath { - return [supportedImageExtensionTypesToMIMETypes objectForKey:[filePath pathExtension]]!=nil; + return [[self supportedImageExtensionTypesToMIMETypes] objectForKey:[filePath pathExtension]]!=nil; } +(NSString*) getSupportedExtensionFromVideoMIMEType:(NSString*)supportedMIMEType { - return [supportedVideoMIMETypesToExtensionTypes objectForKey:supportedMIMEType]; + return [[self supportedVideoMIMETypesToExtensionTypes] objectForKey:supportedMIMEType]; } +(NSString*) getSupportedExtensionFromAudioMIMEType:(NSString*)supportedMIMEType { - return [supportedAudioMIMETypesToExtensionTypes objectForKey:supportedMIMEType]; + return [[self supportedAudioMIMETypesToExtensionTypes] objectForKey:supportedMIMEType]; } +(NSString*) getSupportedExtensionFromImageMIMEType:(NSString*)supportedMIMEType { - return [supportedImageMIMETypesToExtensionTypes objectForKey:supportedMIMEType]; + return [[self supportedImageMIMETypesToExtensionTypes] objectForKey:supportedMIMEType]; } +(NSString*) getSupportedMIMETypeFromVideoFile:(NSString*)supportedVideoFile { - return [supportedVideoExtensionTypesToMIMETypes objectForKey:[supportedVideoFile pathExtension]]; -} + return [[self supportedVideoExtensionTypesToMIMETypes] objectForKey:[supportedVideoFile pathExtension]]; +} +(NSString*) getSupportedMIMETypeFromAudioFile:(NSString*)supportedAudioFile { - return [supportedAudioExtensionTypesToMIMETypes objectForKey:[supportedAudioFile pathExtension]]; + return [[self supportedAudioExtensionTypesToMIMETypes] objectForKey:[supportedAudioFile pathExtension]]; } +(NSString*) getSupportedMIMETypeFromImageFile:(NSString*)supportedImageFile { - return [supportedImageExtensionTypesToMIMETypes objectForKey:[supportedImageFile pathExtension]]; + return [[self supportedImageExtensionTypesToMIMETypes] objectForKey:[supportedImageFile pathExtension]]; } #pragma mark uses bytes +(NSString*) getSupportedImageMIMETypeFromImage:(UIImage*)image { - return [image contentType]; + return [image contentType]; } +(BOOL) getIsSupportedTypeFromImage:(UIImage*)image { - return [image isSupportedImageType]; + return [image isSupportedImageType]; } #pragma mark full attachment utilities @@ -189,7 +187,7 @@ static NSDictionary *supportedImageExtensionTypesToMIMETypes; +(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:[supportedAudioMIMETypesToExtensionTypes objectForKey:contentType]]; + return [self changeFile:mediaURL toHaveExtension:[[self supportedAudioMIMETypesToExtensionTypes] objectForKey:contentType]]; } return mediaURL; }