mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-04-17 15:09:31 +02:00
Send videos as 320p to encrypted rooms.
This commit is contained in:
@@ -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";
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user