mirror of
https://github.com/oxen-io/session-ios.git
synced 2023-12-13 21:30:14 +01:00
Merge branch 'mkirk/import-arbitrary-files'
This commit is contained in:
commit
4fe9931a0b
|
@ -265,33 +265,98 @@ static NSString *const kURLHostVerifyPrefix = @"verify";
|
|||
DDLogWarn(@"Application opened with an unknown URL action: %@", url.host);
|
||||
}
|
||||
} else if ([url.scheme.lowercaseString isEqualToString:@"file"]) {
|
||||
|
||||
if ([Environment getCurrent].callService.call != nil) {
|
||||
DDLogWarn(@"%@ ignoring 'open with Signal' due to ongoing WebRTC call.", self.tag);
|
||||
return NO;
|
||||
}
|
||||
|
||||
NSString *filename = url.lastPathComponent;
|
||||
if ([filename stringByDeletingPathExtension].length < 1) {
|
||||
DDLogError(@"Application opened with URL invalid filename: %@", url);
|
||||
[self showErrorAlertWithTitle:
|
||||
NSLocalizedString(@"EXPORT_WITH_SIGNAL_ERROR_TITLE",
|
||||
@"Title for the alert indicating the 'export with signal' attachment had an error.")
|
||||
message:NSLocalizedString(@"EXPORT_WITH_SIGNAL_ERROR_MESSAGE_INVALID_FILENAME",
|
||||
@"Message for the alert indicating the 'export with signal' file had an "
|
||||
@"invalid filename.")];
|
||||
return NO;
|
||||
}
|
||||
NSString *fileExtension = [filename pathExtension];
|
||||
if (fileExtension.length < 1) {
|
||||
DDLogError(@"Application opened with URL missing file extension: %@", url);
|
||||
[self showErrorAlertWithTitle:
|
||||
NSLocalizedString(@"EXPORT_WITH_SIGNAL_ERROR_TITLE",
|
||||
@"Title for the alert indicating the 'export with signal' attachment had an error.")
|
||||
message:NSLocalizedString(@"EXPORT_WITH_SIGNAL_ERROR_MESSAGE_UNKNOWN_TYPE",
|
||||
@"Message for the alert indicating the 'export with signal' file had "
|
||||
@"unknown type.")];
|
||||
return NO;
|
||||
}
|
||||
NSString *utiType = [MIMETypeUtil utiTypeForFileExtension:fileExtension];
|
||||
if (utiType.length < 1) {
|
||||
|
||||
|
||||
NSString *utiType;
|
||||
NSError *typeError;
|
||||
[url getResourceValue:&utiType forKey:NSURLTypeIdentifierKey error:&typeError];
|
||||
if (typeError) {
|
||||
DDLogError(
|
||||
@"%@ Determining type of picked document at url: %@ failed with error: %@", self.tag, url, typeError);
|
||||
OWSAssert(NO);
|
||||
}
|
||||
if (!utiType) {
|
||||
DDLogDebug(@"%@ falling back to default filetype for picked document at url: %@", self.tag, url);
|
||||
OWSAssert(NO);
|
||||
utiType = (__bridge NSString *)kUTTypeData;
|
||||
}
|
||||
|
||||
NSNumber *isDirectory;
|
||||
NSError *isDirectoryError;
|
||||
[url getResourceValue:&isDirectory forKey:NSURLIsDirectoryKey error:&isDirectoryError];
|
||||
if (isDirectoryError) {
|
||||
DDLogError(@"%@ Determining if picked document at url: %@ was a directory failed with error: %@",
|
||||
self.tag,
|
||||
url,
|
||||
isDirectoryError);
|
||||
OWSAssert(NO);
|
||||
return NO;
|
||||
} else if ([isDirectory boolValue]) {
|
||||
DDLogInfo(@"%@ User picked directory at url: %@", self.tag, url);
|
||||
DDLogError(@"Application opened with URL of unknown UTI type: %@", url);
|
||||
[self showErrorAlertWithTitle:NSLocalizedString(@"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_TITLE",
|
||||
@"Alert title when picking a document fails because user picked a directory/bundle")
|
||||
message:NSLocalizedString(@"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_BODY",
|
||||
@"Alert body when picking a document fails because user picked a directory/bundle")];
|
||||
return NO;
|
||||
}
|
||||
|
||||
NSData *data = [NSData dataWithContentsOfURL:url];
|
||||
if (!data) {
|
||||
DDLogError(@"Application opened with URL with unloadable content: %@", url);
|
||||
[self showErrorAlertWithTitle:
|
||||
NSLocalizedString(@"EXPORT_WITH_SIGNAL_ERROR_TITLE",
|
||||
@"Title for the alert indicating the 'export with signal' attachment had an error.")
|
||||
message:NSLocalizedString(@"EXPORT_WITH_SIGNAL_ERROR_MESSAGE_MISSING_DATA",
|
||||
@"Message for the alert indicating the 'export with signal' data "
|
||||
@"couldn't be loaded.")];
|
||||
return NO;
|
||||
}
|
||||
SignalAttachment *attachment = [SignalAttachment attachmentWithData:data dataUTI:utiType filename:filename];
|
||||
if (!attachment) {
|
||||
DDLogError(@"Application opened with URL with invalid content: %@", url);
|
||||
[self showErrorAlertWithTitle:
|
||||
NSLocalizedString(@"EXPORT_WITH_SIGNAL_ERROR_TITLE",
|
||||
@"Title for the alert indicating the 'export with signal' attachment had an error.")
|
||||
message:NSLocalizedString(@"EXPORT_WITH_SIGNAL_ERROR_MESSAGE_MISSING_ATTACHMENT",
|
||||
@"Message for the alert indicating the 'export with signal' attachment "
|
||||
@"couldn't be loaded.")];
|
||||
return NO;
|
||||
}
|
||||
if ([attachment hasError]) {
|
||||
DDLogError(@"Application opened with URL with content error: %@ %@", url, [attachment errorName]);
|
||||
[self showErrorAlertWithTitle:
|
||||
NSLocalizedString(@"EXPORT_WITH_SIGNAL_ERROR_TITLE",
|
||||
@"Title for the alert indicating the 'export with signal' attachment had an error.")
|
||||
message:[attachment errorName]];
|
||||
return NO;
|
||||
}
|
||||
DDLogInfo(@"Application opened with URL: %@", url);
|
||||
|
@ -318,6 +383,23 @@ static NSString *const kURLHostVerifyPrefix = @"verify";
|
|||
return NO;
|
||||
}
|
||||
|
||||
- (void)showErrorAlertWithTitle:(NSString *)title message:(NSString *)message
|
||||
{
|
||||
OWSAssert(title.length > 0);
|
||||
OWSAssert(message.length > 0);
|
||||
|
||||
UIAlertController *controller =
|
||||
[UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert];
|
||||
|
||||
[controller addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"OK", nil)
|
||||
style:UIAlertActionStyleDefault
|
||||
handler:nil]];
|
||||
|
||||
[[Environment getCurrent].signalsViewController presentTopLevelModalViewController:controller
|
||||
animateDismissal:YES
|
||||
animatePresentation:YES];
|
||||
}
|
||||
|
||||
- (void)applicationDidBecomeActive:(UIApplication *)application {
|
||||
DDLogWarn(@"%@ applicationDidBecomeActive.", self.tag);
|
||||
|
||||
|
|
|
@ -2216,6 +2216,11 @@ typedef enum : NSUInteger {
|
|||
@"%@ Determining type of picked document at url: %@ failed with error: %@", self.tag, url, typeError);
|
||||
OWSAssert(NO);
|
||||
}
|
||||
if (!type) {
|
||||
DDLogDebug(@"%@ falling back to default filetype for picked document at url: %@", self.tag, url);
|
||||
OWSAssert(NO);
|
||||
type = (__bridge NSString *)kUTTypeData;
|
||||
}
|
||||
|
||||
NSNumber *isDirectory;
|
||||
NSError *isDirectoryError;
|
||||
|
@ -2248,12 +2253,6 @@ typedef enum : NSUInteger {
|
|||
return;
|
||||
}
|
||||
|
||||
if (!type) {
|
||||
DDLogDebug(@"%@ falling back to default filetype for picked document at url: %@", self.tag, url);
|
||||
OWSAssert(NO);
|
||||
type = (__bridge NSString *)kUTTypeData;
|
||||
}
|
||||
|
||||
NSString *filename = url.lastPathComponent;
|
||||
if (!filename) {
|
||||
DDLogDebug(@"%@ Unable to determine filename from url: %@", self.tag, url);
|
||||
|
|
|
@ -94,9 +94,6 @@
|
|||
/* Attachment error message for attachments without any data */
|
||||
"ATTACHMENT_ERROR_MISSING_DATA" = "Attachment is empty.";
|
||||
|
||||
/* Attachment error message for attachments with an invalid file format */
|
||||
"ATTACHMENT_ERROR_UNKNOWN_TYPE" = "Attachment is of invalid type";
|
||||
|
||||
/* Accessibility hint describing what you can do with the attachment button */
|
||||
"ATTACHMENT_HINT" = "Choose or take a picture and then send it";
|
||||
|
||||
|
@ -433,6 +430,21 @@
|
|||
/* during registration, embeds {{device type}}, e.g. \"iPhone\" or \"iPad\" */
|
||||
"EXISTING_USER_REGISTRATION_ALERT_TITLE" = "Activating this %@ will disable Signal on any other device currently associated with this phone number.";
|
||||
|
||||
/* Message for the alert indicating the 'export with signal' file had an invalid filename. */
|
||||
"EXPORT_WITH_SIGNAL_ERROR_MESSAGE_INVALID_FILENAME" = "Invalid filename.";
|
||||
|
||||
/* Message for the alert indicating the 'export with signal' attachment couldn't be loaded. */
|
||||
"EXPORT_WITH_SIGNAL_ERROR_MESSAGE_MISSING_ATTACHMENT" = "Couldn't load file.";
|
||||
|
||||
/* Message for the alert indicating the 'export with signal' data couldn't be loaded. */
|
||||
"EXPORT_WITH_SIGNAL_ERROR_MESSAGE_MISSING_DATA" = "Couldn't load file.";
|
||||
|
||||
/* Message for the alert indicating the 'export with signal' file had unknown type. */
|
||||
"EXPORT_WITH_SIGNAL_ERROR_MESSAGE_UNKNOWN_TYPE" = "Unknown file type.";
|
||||
|
||||
/* Title for the alert indicating the 'export with signal' attachment had an error. */
|
||||
"EXPORT_WITH_SIGNAL_ERROR_TITLE" = "Error";
|
||||
|
||||
/* action sheet header when re-sending message which failed because of too many attempts */
|
||||
"FAILED_SENDING_BECAUSE_RATE_LIMIT" = "Too many failures with this contact. Please try again shortly.";
|
||||
|
||||
|
|
Loading…
Reference in a new issue