/* Copyright 2024 New Vector Ltd. Copyright 2015 OpenMarket Ltd SPDX-License-Identifier: AGPL-3.0-only Please see LICENSE in the repository root for full details. */ #import "MXKRoomBubbleComponent.h" #import "MXEvent+MatrixKit.h" #import "MXKSwiftHeader.h" #import @interface MXKRoomBubbleComponent () @property (nonatomic, readwrite) id thread; @end @implementation MXKRoomBubbleComponent - (instancetype)initWithEvent:(MXEvent*)event roomState:(MXRoomState*)roomState andLatestRoomState:(MXRoomState*)latestRoomState eventFormatter:(MXKEventFormatter*)eventFormatter session:(MXSession*)session; { if (self = [super init]) { // Build text component related to this event _eventFormatter = eventFormatter; MXKEventFormatterError error; NSAttributedString *eventString = [_eventFormatter attributedStringFromEvent:event withRoomState:roomState andLatestRoomState:latestRoomState error:&error]; // Store the potential error event.mxkEventFormatterError = error; _textMessage = nil; _attributedTextMessage = eventString; // Set date time if (event.originServerTs != kMXUndefinedTimestamp) { _date = [NSDate dateWithTimeIntervalSince1970:(double)event.originServerTs/1000]; } else { _date = nil; } // Keep ref on event (used to handle the read marker, or a potential event redaction). _event = event; _displayFix = MXKRoomBubbleComponentDisplayFixNone; NSString *format = event.content[@"format"]; if ([format isKindOfClass:[NSString class]] && [format isEqualToString:kMXRoomMessageFormatHTML]) { NSString *formattedBody = (NSString*)event.content[@"formatted_body"]; if ([formattedBody isKindOfClass:[NSString class]] && [formattedBody containsString:@"