Send videos as 320p to encrypted rooms.

This commit is contained in:
Doug
2021-10-28 18:13:38 +01:00
parent f213804bcc
commit 16c8aea47a
3 changed files with 84 additions and 13 deletions

View File

@@ -1016,6 +1016,9 @@ Tap the + to start adding people.";
// Share extension
"share_extension_auth_prompt" = "Login in the main app to share content";
"share_extension_failed_to_encrypt" = "Failed to send. Check in the main app the encryption settings for this room";
"share_extension_low_quality_video_title" = "Video will be sent in low quality";
"share_extension_low_quality_video_message" = "Send in %@ for better quality, or send in low quality below.";
"share_extension_send_now" = "Send now";
// Room key request dialog
"e2e_room_key_request_title" = "Encryption key request";

View File

@@ -4775,6 +4775,18 @@ public class VectorL10n: NSObject {
public static var shareExtensionFailedToEncrypt: String {
return VectorL10n.tr("Vector", "share_extension_failed_to_encrypt")
}
/// Send in %@ for better quality, or send in low quality below.
public static func shareExtensionLowQualityVideoMessage(_ p1: String) -> String {
return VectorL10n.tr("Vector", "share_extension_low_quality_video_message", p1)
}
/// Video will be sent in low quality
public static var shareExtensionLowQualityVideoTitle: String {
return VectorL10n.tr("Vector", "share_extension_low_quality_video_title")
}
/// Send now
public static var shareExtensionSendNow: String {
return VectorL10n.tr("Vector", "share_extension_send_now")
}
/// Feedback
public static var sideMenuActionFeedback: String {
return VectorL10n.tr("Vector", "side_menu_action_feedback")

View File

@@ -334,7 +334,9 @@ typedef NS_ENUM(NSInteger, ImageCompressionMode)
{
if ([self.shareItemProvider areAllItemsLoaded])
{
MXWeakify(self);
void (^sendPendingImages)(void) = ^void() {
MXStrongifyAndReturnIfNil(self);
[self sendImageDatas:self.pendingImages.copy toRooms:rooms success:requestSuccess failure:requestFailure];
};
@@ -423,6 +425,22 @@ typedef NS_ENUM(NSInteger, ImageCompressionMode)
}
}
- (BOOL)roomsContainEncryptedRoom:(NSArray<MXRoom *> *)rooms
{
BOOL foundEncryptedRoom = NO;
for (MXRoom *room in rooms)
{
if (room.summary.isEncrypted)
{
foundEncryptedRoom = YES;
break;
}
}
return foundEncryptedRoom;
}
- (void)resetPendingData
{
[self.pendingImages removeAllObjects];
@@ -773,19 +791,9 @@ typedef NS_ENUM(NSInteger, ImageCompressionMode)
MXWeakify(self);
// Ignore showMediaCompressionPrompt setting due to memory constraints when encrypting large videos.
UIAlertController *compressionPrompt = [MXKTools videoConversionPromptForVideoAsset:videoAsset withCompletion:^(NSString *presetName) {
void (^sendVideo)(void) = ^void() {
MXStrongifyAndReturnIfNil(self);
// If the preset name is nil, the user cancelled.
if (!presetName)
{
return;
}
// Set the chosen video conversion preset.
[MXSDKOptions sharedInstance].videoConversionPresetName = presetName;
[self didStartSending];
if (!videoLocalUrl)
{
@@ -823,9 +831,57 @@ typedef NS_ENUM(NSInteger, ImageCompressionMode)
success();
}
});
}];
};
[self presentCompressionPrompt:compressionPrompt];
BOOL allRoomsAreUnencrypted = ![self roomsContainEncryptedRoom:rooms];
// When rooms are unencrypted convert the video according to the user's normal preferences
if (allRoomsAreUnencrypted)
{
if (!RiotSettings.shared.showMediaCompressionPrompt)
{
[MXSDKOptions sharedInstance].videoConversionPresetName = AVCaptureSessionPreset1920x1080;
sendVideo();
}
else
{
UIAlertController *compressionPrompt = [MXKTools videoConversionPromptForVideoAsset:videoAsset withCompletion:^(NSString *presetName) {
// If the preset name is nil, the user cancelled.
if (!presetName)
{
return;
}
// Set the chosen video conversion preset.
[MXSDKOptions sharedInstance].videoConversionPresetName = presetName;
sendVideo();
}];
[self presentCompressionPrompt:compressionPrompt];
}
}
else
{
// When rooms are encrypted we quickly run out of memory encrypting the video
// Prompt the user if they're happy to send a low quality video (320p).
UIAlertController *lowQualityPrompt = [UIAlertController alertControllerWithTitle:VectorL10n.shareExtensionLowQualityVideoTitle
message:[VectorL10n shareExtensionLowQualityVideoMessage:AppInfo.current.displayName]
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:MatrixKitL10n.cancel style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
// Do nothing
}];
UIAlertAction *sendAction = [UIAlertAction actionWithTitle:VectorL10n.shareExtensionSendNow style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
[MXSDKOptions sharedInstance].videoConversionPresetName = AVAssetExportPresetMediumQuality;
sendVideo();
}];
[lowQualityPrompt addAction:cancelAction];
[lowQualityPrompt addAction:sendAction];
[lowQualityPrompt setPreferredAction:sendAction];
[self presentCompressionPrompt:lowQualityPrompt];
}
}
- (void)sendVoiceMessage:(NSURL *)fileUrl