diff --git a/Riot/Modules/MatrixKit/Models/Room/MXKRoomDataSource.h b/Riot/Modules/MatrixKit/Models/Room/MXKRoomDataSource.h index 9928892f2..87aabe50b 100644 --- a/Riot/Modules/MatrixKit/Models/Room/MXKRoomDataSource.h +++ b/Riot/Modules/MatrixKit/Models/Room/MXKRoomDataSource.h @@ -572,6 +572,7 @@ extern NSString *const kMXKRoomDataSourceTimelineErrorErrorKey; Once complete, this local echo will be replaced by the event saved by the homeserver. @param audioFileLocalURL the local filesystem path of the audio file to send. + @param additionalContentParams (optional) the additional parameters to the content. @param mimeType (optional) the mime type of the file. Defaults to `audio/ogg` @param duration the length of the voice message in milliseconds @param samples an array of floating point values normalized to [0, 1], boxed within NSNumbers @@ -580,6 +581,7 @@ extern NSString *const kMXKRoomDataSourceTimelineErrorErrorKey; @param failure A block object called when the operation fails. */ - (void)sendVoiceMessage:(NSURL *)audioFileLocalURL + additionalContentParams:(NSDictionary*)additionalContentParams mimeType:mimeType duration:(NSUInteger)duration samples:(NSArray *)samples diff --git a/Riot/Modules/MatrixKit/Models/Room/MXKRoomDataSource.m b/Riot/Modules/MatrixKit/Models/Room/MXKRoomDataSource.m index d89262a0e..5f33af838 100644 --- a/Riot/Modules/MatrixKit/Models/Room/MXKRoomDataSource.m +++ b/Riot/Modules/MatrixKit/Models/Room/MXKRoomDataSource.m @@ -1998,6 +1998,7 @@ typedef NS_ENUM (NSUInteger, MXKRoomDataSourceError) { } - (void)sendVoiceMessage:(NSURL *)audioFileLocalURL + additionalContentParams:(NSDictionary *)additionalContentParams mimeType:mimeType duration:(NSUInteger)duration samples:(NSArray *)samples @@ -2006,7 +2007,7 @@ typedef NS_ENUM (NSUInteger, MXKRoomDataSourceError) { { __block MXEvent *localEchoEvent = nil; - [_room sendVoiceMessage:audioFileLocalURL mimeType:mimeType duration:duration samples:samples threadId:self.threadId localEcho:&localEchoEvent success:success failure:failure keepActualFilename:YES]; + [_room sendVoiceMessage:audioFileLocalURL additionalContentParams:additionalContentParams mimeType:mimeType duration:duration samples:samples threadId:self.threadId localEcho:&localEchoEvent success:success failure:failure keepActualFilename:YES]; if (localEchoEvent) { @@ -2185,32 +2186,20 @@ typedef NS_ENUM (NSUInteger, MXKRoomDataSourceError) { [self removeEventWithEventId:eventId]; if (event.isVoiceMessage) { - // Check if it is an actual voice message or a voicebroadcast chunk - if (event.content[VoiceBroadcastSettings.voiceBroadcastContentKeyChunkType] != nil) { - // VoiceBroadcast chunk - NSNumber *duration = event.content[kMXMessageContentKeyExtensibleAudioMSC1767][kMXMessageContentKeyExtensibleAudioDuration]; - NSDictionary* additionalContentParams = @{ + // Voice message + NSNumber *duration = event.content[kMXMessageContentKeyExtensibleAudioMSC1767][kMXMessageContentKeyExtensibleAudioDuration]; + NSArray *samples = event.content[kMXMessageContentKeyExtensibleAudioMSC1767][kMXMessageContentKeyExtensibleAudioWaveform]; + + // Additional content params in case it is a voicebroacast chunk + NSDictionary* additionalContentParams = nil; + if (event.content[kMXEventRelationRelatesToKey] != nil && event.content[VoiceBroadcastSettings.voiceBroadcastContentKeyChunkType] != nil) { + additionalContentParams = @{ kMXEventRelationRelatesToKey: event.content[kMXEventRelationRelatesToKey], VoiceBroadcastSettings.voiceBroadcastContentKeyChunkType: event.content[VoiceBroadcastSettings.voiceBroadcastContentKeyChunkType] }; - [_room sendVoiceMessage:localFileURL - additionalContentParams:additionalContentParams - mimeType:mimetype - duration:duration.doubleValue - samples:nil - threadId:self.threadId - localEcho:nil - success:success - failure:failure - keepActualFilename:false]; - - } else { - // Voice message - NSNumber *duration = event.content[kMXMessageContentKeyExtensibleAudioMSC1767][kMXMessageContentKeyExtensibleAudioDuration]; - NSArray *samples = event.content[kMXMessageContentKeyExtensibleAudioMSC1767][kMXMessageContentKeyExtensibleAudioWaveform]; - - [self sendVoiceMessage:localFileURL mimeType:mimetype duration:duration.doubleValue samples:samples success:success failure:failure]; } + + [self sendVoiceMessage:localFileURL additionalContentParams:additionalContentParams mimeType:mimetype duration:duration.doubleValue samples:samples success:success failure:failure]; } else { [self sendAudioFile:localFileURL mimeType:mimetype success:success failure:failure]; } diff --git a/Riot/Modules/Room/RoomViewController.m b/Riot/Modules/Room/RoomViewController.m index 7e9873209..87b7e858f 100644 --- a/Riot/Modules/Room/RoomViewController.m +++ b/Riot/Modules/Room/RoomViewController.m @@ -7926,7 +7926,7 @@ static CGSize kThreadListBarButtonItemImageSize; samples:(NSArray *)samples completion:(void (^)(BOOL))completion { - [self.roomDataSource sendVoiceMessage:url mimeType:nil duration:duration samples:samples success:^(NSString *eventId) { + [self.roomDataSource sendVoiceMessage:url additionalContentParams:nil mimeType:nil duration:duration samples:samples success:^(NSString *eventId) { MXLogDebug(@"Success with event id %@", eventId); completion(YES); } failure:^(NSError *error) {