mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-04-19 16:13:42 +02:00
Use latest user data for mention pills
This commit is contained in:
@@ -48,7 +48,11 @@
|
||||
self.readReceipts = [NSMutableDictionary dictionary];
|
||||
|
||||
// Create the bubble component based on matrix event
|
||||
MXKRoomBubbleComponent *firstComponent = [[MXKRoomBubbleComponent alloc] initWithEvent:event roomState:roomState eventFormatter:roomDataSource.eventFormatter session:roomDataSource.mxSession];
|
||||
MXKRoomBubbleComponent *firstComponent = [[MXKRoomBubbleComponent alloc] initWithEvent:event
|
||||
roomState:roomState
|
||||
andLatestRoomState:roomDataSource.roomState
|
||||
eventFormatter:roomDataSource.eventFormatter
|
||||
session:roomDataSource.mxSession];
|
||||
if (firstComponent)
|
||||
{
|
||||
bubbleComponents = [NSMutableArray array];
|
||||
@@ -125,6 +129,21 @@
|
||||
bubbleComponents = nil;
|
||||
}
|
||||
|
||||
- (void)refreshProfilesIfNeeded:(MXRoomState *)latestRoomState
|
||||
{
|
||||
if (RiotSettings.shared.roomScreenUseOnlyLatestUserAvatarAndName)
|
||||
{
|
||||
[self setRoomState:latestRoomState];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Sets the `MXRoomState` for a buble cell. This allows to adapt the display
|
||||
of a cell with a different room state than its historical. This won't update critical
|
||||
flag/status, such as `isEncryptedRoom`.
|
||||
|
||||
@param roomState the `MXRoomState` to use for this cell.
|
||||
*/
|
||||
- (void)setRoomState:(MXRoomState *)roomState;
|
||||
{
|
||||
MXEvent* firstEvent = self.events.firstObject;
|
||||
@@ -156,7 +175,10 @@
|
||||
MXKRoomBubbleComponent *roomBubbleComponent = [bubbleComponents objectAtIndex:index];
|
||||
if ([roomBubbleComponent.event.eventId isEqualToString:eventId])
|
||||
{
|
||||
[roomBubbleComponent updateWithEvent:event roomState:roomDataSource.roomState session:self.mxSession];
|
||||
[roomBubbleComponent updateWithEvent:event
|
||||
roomState:roomDataSource.roomState
|
||||
andLatestRoomState:nil
|
||||
session:self.mxSession];
|
||||
if (!roomBubbleComponent.textMessage.length)
|
||||
{
|
||||
[bubbleComponents removeObjectAtIndex:index];
|
||||
|
||||
@@ -237,13 +237,11 @@
|
||||
- (instancetype)initWithEvent:(MXEvent*)event andRoomState:(MXRoomState*)roomState andRoomDataSource:(MXKRoomDataSource*)roomDataSource;
|
||||
|
||||
/**
|
||||
Sets the `MXRoomState` for a buble cell. This allows to adapt the display
|
||||
of a cell with a different room state than its historical. This won't update critical
|
||||
flag/status, such as `isEncryptedRoom`.
|
||||
Refresh avatars and display names (AKA profiles) displayed in the cell if needed.
|
||||
|
||||
@param roomState the `MXRoomState` to use for this cell.
|
||||
@param latestRoomState the latest `MXRoomState` from the data source.
|
||||
*/
|
||||
- (void)setRoomState:(MXRoomState *)roomState;
|
||||
- (void)refreshProfilesIfNeeded:(MXRoomState *)latestRoomState;
|
||||
|
||||
/**
|
||||
Update the event because its sent state changed or it is has been redacted.
|
||||
|
||||
@@ -78,7 +78,11 @@ static NSAttributedString *messageSeparator = nil;
|
||||
}
|
||||
|
||||
// Create new message component
|
||||
MXKRoomBubbleComponent *addedComponent = [[MXKRoomBubbleComponent alloc] initWithEvent:event roomState:roomState eventFormatter:roomDataSource.eventFormatter session:self.mxSession];
|
||||
MXKRoomBubbleComponent *addedComponent = [[MXKRoomBubbleComponent alloc] initWithEvent:event
|
||||
roomState:roomState
|
||||
andLatestRoomState:roomDataSource.roomState
|
||||
eventFormatter:roomDataSource.eventFormatter
|
||||
session:self.mxSession];
|
||||
if (addedComponent)
|
||||
{
|
||||
[self addComponent:addedComponent];
|
||||
|
||||
@@ -115,20 +115,29 @@ typedef enum : NSUInteger {
|
||||
|
||||
@param event the event used to compose the bubble component.
|
||||
@param roomState the room state when the event occured.
|
||||
@param latestRoomState the latest room state of the room containing this event.
|
||||
@param eventFormatter object used to format event into displayable string.
|
||||
@param session the related matrix session.
|
||||
@return the newly created instance.
|
||||
*/
|
||||
- (instancetype)initWithEvent:(MXEvent*)event roomState:(MXRoomState*)roomState eventFormatter:(MXKEventFormatter*)eventFormatter session:(MXSession*)session;
|
||||
- (instancetype)initWithEvent:(MXEvent*)event
|
||||
roomState:(MXRoomState*)roomState
|
||||
andLatestRoomState:(MXRoomState*)latestRoomState
|
||||
eventFormatter:(MXKEventFormatter*)eventFormatter
|
||||
session:(MXSession*)session;
|
||||
|
||||
/**
|
||||
Update the event because its sent state changed or it is has been redacted.
|
||||
|
||||
@param event the new event data.
|
||||
@param roomState the up-to-date state of the room.
|
||||
@param latestRoomState the latest room state of the room containing this event.
|
||||
@param session the related matrix session.
|
||||
*/
|
||||
- (void)updateWithEvent:(MXEvent*)event roomState:(MXRoomState*)roomState session:(MXSession*)session;
|
||||
- (void)updateWithEvent:(MXEvent*)event
|
||||
roomState:(MXRoomState*)roomState
|
||||
andLatestRoomState:(MXRoomState*)latestRoomState
|
||||
session:(MXSession*)session;
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@@ -28,7 +28,11 @@
|
||||
|
||||
@implementation MXKRoomBubbleComponent
|
||||
|
||||
- (instancetype)initWithEvent:(MXEvent*)event roomState:(MXRoomState*)roomState eventFormatter:(MXKEventFormatter*)eventFormatter session:(MXSession*)session;
|
||||
- (instancetype)initWithEvent:(MXEvent*)event
|
||||
roomState:(MXRoomState*)roomState
|
||||
andLatestRoomState:(MXRoomState*)latestRoomState
|
||||
eventFormatter:(MXKEventFormatter*)eventFormatter
|
||||
session:(MXSession*)session;
|
||||
{
|
||||
if (self = [super init])
|
||||
{
|
||||
@@ -36,7 +40,10 @@
|
||||
_eventFormatter = eventFormatter;
|
||||
MXKEventFormatterError error;
|
||||
|
||||
NSAttributedString *eventString = [_eventFormatter attributedStringFromEvent:event withRoomState:roomState error:&error];
|
||||
NSAttributedString *eventString = [_eventFormatter attributedStringFromEvent:event
|
||||
withRoomState:roomState
|
||||
andLatestRoomState:latestRoomState
|
||||
error:&error];
|
||||
|
||||
// Store the potential error
|
||||
event.mxkEventFormatterError = error;
|
||||
@@ -84,7 +91,10 @@
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)updateWithEvent:(MXEvent*)event roomState:(MXRoomState*)roomState session:(MXSession*)session
|
||||
- (void)updateWithEvent:(MXEvent*)event
|
||||
roomState:(MXRoomState*)roomState
|
||||
andLatestRoomState:(MXRoomState*)latestRoomState
|
||||
session:(MXSession*)session
|
||||
{
|
||||
// Report the new event
|
||||
_event = event;
|
||||
@@ -101,7 +111,10 @@
|
||||
_textMessage = nil;
|
||||
|
||||
MXKEventFormatterError error;
|
||||
_attributedTextMessage = [_eventFormatter attributedStringFromEvent:event withRoomState:roomState error:&error];
|
||||
_attributedTextMessage = [_eventFormatter attributedStringFromEvent:event
|
||||
withRoomState:roomState
|
||||
andLatestRoomState:latestRoomState
|
||||
error:&error];
|
||||
|
||||
_showEncryptionBadge = [self shouldShowWarningBadgeForEvent:event roomState:roomState session:session];
|
||||
|
||||
|
||||
@@ -1021,13 +1021,13 @@ typedef NS_ENUM (NSUInteger, MXKRoomDataSourceError) {
|
||||
|
||||
MXStrongifyAndReturnIfNil(self);
|
||||
|
||||
if (event.eventType == MXEventTypeRoomMember && event.isUserProfileChange)
|
||||
{
|
||||
[self refreshProfilesIfNeeded];
|
||||
}
|
||||
|
||||
if (MXTimelineDirectionForwards == direction)
|
||||
{
|
||||
if (event.eventType == MXEventTypeRoomMember && event.isUserProfileChange)
|
||||
{
|
||||
[self refreshProfilesIfNeeded];
|
||||
}
|
||||
|
||||
// Check for local echo suppression
|
||||
MXEvent *localEcho;
|
||||
if (self.room.outgoingMessages.count && [event.sender isEqualToString:self.mxSession.myUser.userId])
|
||||
@@ -3668,7 +3668,10 @@ typedef NS_ENUM (NSUInteger, MXKRoomDataSourceError) {
|
||||
while ((nextBubbleData = nextBubbleData.nextCollapsableCellData));
|
||||
|
||||
// Build the summary string for the series
|
||||
bubbleData.collapsedAttributedTextMessage = [self.eventFormatter attributedStringFromEvents:events withRoomState:bubbleData.collapseState error:nil];
|
||||
bubbleData.collapsedAttributedTextMessage = [self.eventFormatter attributedStringFromEvents:events
|
||||
withRoomState:bubbleData.collapseState
|
||||
andLatestRoomState:self.roomState
|
||||
error:nil];
|
||||
|
||||
// Release collapseState objects, even the one of collapsableSeriesAtStart.
|
||||
// We do not need to keep its state because if an collapsable event comes before collapsableSeriesAtStart,
|
||||
@@ -4359,18 +4362,14 @@ typedef NS_ENUM (NSUInteger, MXKRoomDataSourceError) {
|
||||
#pragma mark - Use Only Latest Profiles
|
||||
|
||||
/**
|
||||
Refreshes the avatars and display names if needed. This has no effect
|
||||
if `roomScreenUseOnlyLatestUserAvatarAndName` is disabled.
|
||||
Refreshes the avatars and display names if needed.
|
||||
*/
|
||||
- (void)refreshProfilesIfNeeded
|
||||
{
|
||||
if (RiotSettings.shared.roomScreenUseOnlyLatestUserAvatarAndName)
|
||||
{
|
||||
@synchronized (bubbles) {
|
||||
for (id<MXKRoomBubbleCellDataStoring> bubble in bubbles)
|
||||
{
|
||||
[bubble setRoomState:self.roomState];
|
||||
}
|
||||
@synchronized (bubbles) {
|
||||
for (id<MXKRoomBubbleCellDataStoring> bubble in bubbles)
|
||||
{
|
||||
[bubble refreshProfilesIfNeeded:self.roomState];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user