@@ -127,7 +127,7 @@ internal class LocalEchoEventFactory @Inject constructor(
127
127
newBodyFormattedText : CharSequence? ,
128
128
newBodyAutoMarkdown : Boolean ,
129
129
msgType : String ,
130
- compatibilityText : String
130
+ compatibilityText : String ,
131
131
): Event {
132
132
val content = if (newBodyFormattedText != null ) {
133
133
TextContent (newBodyText.toString(), newBodyFormattedText.toString()).toMessageTextContent(msgType)
@@ -148,7 +148,7 @@ internal class LocalEchoEventFactory @Inject constructor(
148
148
private fun createPollContent (
149
149
question : String ,
150
150
options : List <String >,
151
- pollType : PollType
151
+ pollType : PollType ,
152
152
): MessagePollContent {
153
153
return MessagePollContent (
154
154
unstablePollCreationInfo = PollCreationInfo (
@@ -166,7 +166,7 @@ internal class LocalEchoEventFactory @Inject constructor(
166
166
pollType : PollType ,
167
167
targetEventId : String ,
168
168
question : String ,
169
- options : List <String >
169
+ options : List <String >,
170
170
): Event {
171
171
val newContent = MessagePollContent (
172
172
relatesTo = RelationDefaultContent (RelationType .REPLACE , targetEventId),
@@ -186,7 +186,7 @@ internal class LocalEchoEventFactory @Inject constructor(
186
186
fun createPollReplyEvent (
187
187
roomId : String ,
188
188
pollEventId : String ,
189
- answerId : String
189
+ answerId : String ,
190
190
): Event {
191
191
val content = MessagePollResponseContent (
192
192
body = answerId,
@@ -212,7 +212,7 @@ internal class LocalEchoEventFactory @Inject constructor(
212
212
roomId : String ,
213
213
pollType : PollType ,
214
214
question : String ,
215
- options : List <String >
215
+ options : List <String >,
216
216
): Event {
217
217
val content = createPollContent(question, options, pollType)
218
218
val localId = LocalEcho .createLocalEchoId()
@@ -229,7 +229,7 @@ internal class LocalEchoEventFactory @Inject constructor(
229
229
230
230
fun createEndPollEvent (
231
231
roomId : String ,
232
- eventId : String
232
+ eventId : String ,
233
233
): Event {
234
234
val content = MessageEndPollContent (
235
235
relatesTo = RelationDefaultContent (
@@ -254,7 +254,7 @@ internal class LocalEchoEventFactory @Inject constructor(
254
254
latitude : Double ,
255
255
longitude : Double ,
256
256
uncertainty : Double? ,
257
- isUserLocation : Boolean
257
+ isUserLocation : Boolean ,
258
258
): Event {
259
259
val geoUri = buildGeoUri(latitude, longitude, uncertainty)
260
260
val assetType = if (isUserLocation) LocationAssetType .SELF else LocationAssetType .PIN
@@ -274,7 +274,7 @@ internal class LocalEchoEventFactory @Inject constructor(
274
274
roomId : String ,
275
275
latitude : Double ,
276
276
longitude : Double ,
277
- uncertainty : Double?
277
+ uncertainty : Double? ,
278
278
): Event {
279
279
val geoUri = buildGeoUri(latitude, longitude, uncertainty)
280
280
val content = MessageBeaconLocationDataContent (
@@ -305,7 +305,7 @@ internal class LocalEchoEventFactory @Inject constructor(
305
305
newBodyText : String ,
306
306
autoMarkdown : Boolean ,
307
307
msgType : String ,
308
- compatibilityText : String
308
+ compatibilityText : String ,
309
309
): Event {
310
310
val permalink = permalinkFactory.createPermalink(roomId, originalEvent.root.eventId ? : " " , false )
311
311
val userLink = originalEvent.root.senderId?.let { permalinkFactory.createPermalink(it, false ) } ? : " "
@@ -347,14 +347,21 @@ internal class LocalEchoEventFactory @Inject constructor(
347
347
fun createMediaEvent (
348
348
roomId : String ,
349
349
attachment : ContentAttachmentData ,
350
- rootThreadEventId : String?
350
+ rootThreadEventId : String? ,
351
+ relatesTo : RelationDefaultContent ? ,
351
352
): Event {
352
353
return when (attachment.type) {
353
- ContentAttachmentData .Type .IMAGE -> createImageEvent(roomId, attachment, rootThreadEventId)
354
- ContentAttachmentData .Type .VIDEO -> createVideoEvent(roomId, attachment, rootThreadEventId)
355
- ContentAttachmentData .Type .AUDIO -> createAudioEvent(roomId, attachment, isVoiceMessage = false , rootThreadEventId = rootThreadEventId)
356
- ContentAttachmentData .Type .VOICE_MESSAGE -> createAudioEvent(roomId, attachment, isVoiceMessage = true , rootThreadEventId = rootThreadEventId)
357
- ContentAttachmentData .Type .FILE -> createFileEvent(roomId, attachment, rootThreadEventId)
354
+ ContentAttachmentData .Type .IMAGE -> createImageEvent(roomId, attachment, rootThreadEventId, relatesTo)
355
+ ContentAttachmentData .Type .VIDEO -> createVideoEvent(roomId, attachment, rootThreadEventId, relatesTo)
356
+ ContentAttachmentData .Type .AUDIO -> createAudioEvent(roomId, attachment, isVoiceMessage = false , rootThreadEventId = rootThreadEventId, relatesTo)
357
+ ContentAttachmentData .Type .VOICE_MESSAGE -> createAudioEvent(
358
+ roomId,
359
+ attachment,
360
+ isVoiceMessage = true ,
361
+ rootThreadEventId = rootThreadEventId,
362
+ relatesTo,
363
+ )
364
+ ContentAttachmentData .Type .FILE -> createFileEvent(roomId, attachment, rootThreadEventId, relatesTo)
358
365
}
359
366
}
360
367
@@ -378,7 +385,12 @@ internal class LocalEchoEventFactory @Inject constructor(
378
385
)
379
386
}
380
387
381
- private fun createImageEvent (roomId : String , attachment : ContentAttachmentData , rootThreadEventId : String? ): Event {
388
+ private fun createImageEvent (
389
+ roomId : String ,
390
+ attachment : ContentAttachmentData ,
391
+ rootThreadEventId : String? ,
392
+ relatesTo : RelationDefaultContent ? ,
393
+ ): Event {
382
394
var width = attachment.width
383
395
var height = attachment.height
384
396
@@ -403,19 +415,17 @@ internal class LocalEchoEventFactory @Inject constructor(
403
415
size = attachment.size
404
416
),
405
417
url = attachment.queryUri.toString(),
406
- relatesTo = rootThreadEventId?.let {
407
- RelationDefaultContent (
408
- type = RelationType .THREAD ,
409
- eventId = it,
410
- isFallingBack = true ,
411
- inReplyTo = ReplyToContent (eventId = localEchoRepository.getLatestThreadEvent(it))
412
- )
413
- }
418
+ relatesTo = relatesTo ? : rootThreadEventId?.let { generateThreadRelationContent(it) }
414
419
)
415
420
return createMessageEvent(roomId, content)
416
421
}
417
422
418
- private fun createVideoEvent (roomId : String , attachment : ContentAttachmentData , rootThreadEventId : String? ): Event {
423
+ private fun createVideoEvent (
424
+ roomId : String ,
425
+ attachment : ContentAttachmentData ,
426
+ rootThreadEventId : String? ,
427
+ relatesTo : RelationDefaultContent ? ,
428
+ ): Event {
419
429
val mediaDataRetriever = MediaMetadataRetriever ()
420
430
mediaDataRetriever.setDataSource(context, attachment.queryUri)
421
431
@@ -447,14 +457,7 @@ internal class LocalEchoEventFactory @Inject constructor(
447
457
thumbnailInfo = thumbnailInfo
448
458
),
449
459
url = attachment.queryUri.toString(),
450
- relatesTo = rootThreadEventId?.let {
451
- RelationDefaultContent (
452
- type = RelationType .THREAD ,
453
- eventId = it,
454
- isFallingBack = true ,
455
- inReplyTo = ReplyToContent (eventId = localEchoRepository.getLatestThreadEvent(it))
456
- )
457
- }
460
+ relatesTo = relatesTo ? : rootThreadEventId?.let { generateThreadRelationContent(it) }
458
461
)
459
462
return createMessageEvent(roomId, content)
460
463
}
@@ -463,7 +466,8 @@ internal class LocalEchoEventFactory @Inject constructor(
463
466
roomId : String ,
464
467
attachment : ContentAttachmentData ,
465
468
isVoiceMessage : Boolean ,
466
- rootThreadEventId : String?
469
+ rootThreadEventId : String? ,
470
+ relatesTo : RelationDefaultContent ? ,
467
471
): Event {
468
472
val content = MessageAudioContent (
469
473
msgType = MessageType .MSGTYPE_AUDIO ,
@@ -479,19 +483,17 @@ internal class LocalEchoEventFactory @Inject constructor(
479
483
waveform = waveformSanitizer.sanitize(attachment.waveform)
480
484
),
481
485
voiceMessageIndicator = if (! isVoiceMessage) null else emptyMap(),
482
- relatesTo = rootThreadEventId?.let {
483
- RelationDefaultContent (
484
- type = RelationType .THREAD ,
485
- eventId = it,
486
- isFallingBack = true ,
487
- inReplyTo = ReplyToContent (eventId = localEchoRepository.getLatestThreadEvent(it))
488
- )
489
- }
486
+ relatesTo = relatesTo ? : rootThreadEventId?.let { generateThreadRelationContent(it) }
490
487
)
491
488
return createMessageEvent(roomId, content)
492
489
}
493
490
494
- private fun createFileEvent (roomId : String , attachment : ContentAttachmentData , rootThreadEventId : String? ): Event {
491
+ private fun createFileEvent (
492
+ roomId : String ,
493
+ attachment : ContentAttachmentData ,
494
+ rootThreadEventId : String? ,
495
+ relatesTo : RelationDefaultContent ? ,
496
+ ): Event {
495
497
val content = MessageFileContent (
496
498
msgType = MessageType .MSGTYPE_FILE ,
497
499
body = attachment.name ? : " file" ,
@@ -500,14 +502,7 @@ internal class LocalEchoEventFactory @Inject constructor(
500
502
size = attachment.size
501
503
),
502
504
url = attachment.queryUri.toString(),
503
- relatesTo = rootThreadEventId?.let {
504
- RelationDefaultContent (
505
- type = RelationType .THREAD ,
506
- eventId = it,
507
- isFallingBack = true ,
508
- inReplyTo = ReplyToContent (eventId = localEchoRepository.getLatestThreadEvent(it))
509
- )
510
- }
505
+ relatesTo = relatesTo ? : rootThreadEventId?.let { generateThreadRelationContent(it) }
511
506
)
512
507
return createMessageEvent(roomId, content)
513
508
}
@@ -559,7 +554,7 @@ internal class LocalEchoEventFactory @Inject constructor(
559
554
text : CharSequence ,
560
555
msgType : String ,
561
556
autoMarkdown : Boolean ,
562
- formattedText : String?
557
+ formattedText : String? ,
563
558
): Event {
564
559
val content = formattedText?.let { TextContent (text.toString(), it) } ? : createTextContent(text, autoMarkdown)
565
560
return createEvent(
@@ -588,7 +583,7 @@ internal class LocalEchoEventFactory @Inject constructor(
588
583
replyTextFormatted : CharSequence? ,
589
584
autoMarkdown : Boolean ,
590
585
rootThreadEventId : String? = null,
591
- showInThread : Boolean
586
+ showInThread : Boolean ,
592
587
): Event ? {
593
588
// Fallbacks and event representation
594
589
// TODO Add error/warning logs when any of this is null
@@ -629,6 +624,14 @@ internal class LocalEchoEventFactory @Inject constructor(
629
624
return createMessageEvent(roomId, content)
630
625
}
631
626
627
+ private fun generateThreadRelationContent (rootThreadEventId : String ) =
628
+ RelationDefaultContent (
629
+ type = RelationType .THREAD ,
630
+ eventId = rootThreadEventId,
631
+ isFallingBack = true ,
632
+ inReplyTo = ReplyToContent (eventId = localEchoRepository.getLatestThreadEvent(rootThreadEventId)),
633
+ )
634
+
632
635
/* *
633
636
* Generates the appropriate relatesTo object for a reply event.
634
637
* It can either be a regular reply or a reply within a thread
@@ -772,7 +775,7 @@ internal class LocalEchoEventFactory @Inject constructor(
772
775
text : String ,
773
776
formattedText : String? ,
774
777
autoMarkdown : Boolean ,
775
- rootThreadEventId : String?
778
+ rootThreadEventId : String? ,
776
779
): Event {
777
780
val messageContent = quotedEvent.getLastMessageContent()
778
781
val textMsg = if (messageContent is MessageContentWithFormattedBody ) { messageContent.formattedBody } else { messageContent?.body }
0 commit comments