Skip to content
This repository has been archived by the owner on Dec 12, 2022. It is now read-only.

Simplify last message types #915

Merged
merged 6 commits into from
Sep 30, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions MatrixKit/Models/MXKAppSettings.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,13 @@ typedef NS_ENUM(NSUInteger, MXKKeyPreSharingStrategy)
*/
@property (nonatomic, readonly) NSArray<MXEventTypeString> *allEventTypesForMessages;

/**
An allow list for the types of events allowed to be displayed as the last message.

When `nil`, there is no list and all events are allowed.
*/
@property (nonatomic, readonly) NSArray<MXEventTypeString> *lastMessageEventTypesAllowList;

/**
Add event types to `eventsFilterForMessages` and `eventsFilterForMessages`.

Expand Down
113 changes: 65 additions & 48 deletions MatrixKit/Models/MXKAppSettings.m
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ @interface MXKAppSettings ()
{
NSMutableArray <NSString*> *eventsFilterForMessages;
NSMutableArray <NSString*> *allEventTypesForMessages;
NSMutableArray <NSString*> *lastMessageEventTypesAllowList;
}

@property (nonatomic, readwrite) NSUserDefaults *sharedUserDefaults;
Expand Down Expand Up @@ -125,57 +126,67 @@ -(instancetype)init
_notificationBodyLocalizationKey = @"MESSAGE";
enableCallKit = YES;

eventsFilterForMessages = [NSMutableArray arrayWithArray:@[
kMXEventTypeStringRoomCreate,
kMXEventTypeStringRoomName,
kMXEventTypeStringRoomTopic,
kMXEventTypeStringRoomMember,
kMXEventTypeStringRoomEncrypted,
kMXEventTypeStringRoomEncryption,
kMXEventTypeStringRoomHistoryVisibility,
kMXEventTypeStringRoomMessage,
kMXEventTypeStringRoomThirdPartyInvite,
kMXEventTypeStringRoomGuestAccess,
kMXEventTypeStringRoomJoinRules,
kMXEventTypeStringCallInvite,
kMXEventTypeStringCallAnswer,
kMXEventTypeStringCallHangup,
kMXEventTypeStringCallReject,
kMXEventTypeStringCallNegotiate,
kMXEventTypeStringSticker,
kMXEventTypeStringKeyVerificationCancel,
kMXEventTypeStringKeyVerificationDone
]];
eventsFilterForMessages = @[
kMXEventTypeStringRoomCreate,
kMXEventTypeStringRoomName,
kMXEventTypeStringRoomTopic,
kMXEventTypeStringRoomMember,
kMXEventTypeStringRoomEncrypted,
kMXEventTypeStringRoomEncryption,
kMXEventTypeStringRoomHistoryVisibility,
kMXEventTypeStringRoomMessage,
kMXEventTypeStringRoomThirdPartyInvite,
kMXEventTypeStringRoomGuestAccess,
kMXEventTypeStringRoomJoinRules,
kMXEventTypeStringCallInvite,
kMXEventTypeStringCallAnswer,
kMXEventTypeStringCallHangup,
kMXEventTypeStringCallReject,
kMXEventTypeStringCallNegotiate,
kMXEventTypeStringSticker,
kMXEventTypeStringKeyVerificationCancel,
kMXEventTypeStringKeyVerificationDone
].mutableCopy;


// List all the event types, except kMXEventTypeStringPresence which are not related to a specific room.
allEventTypesForMessages = [NSMutableArray arrayWithArray:@[
kMXEventTypeStringRoomName,
kMXEventTypeStringRoomTopic,
kMXEventTypeStringRoomMember,
kMXEventTypeStringRoomCreate,
kMXEventTypeStringRoomEncrypted,
kMXEventTypeStringRoomEncryption,
kMXEventTypeStringRoomJoinRules,
kMXEventTypeStringRoomPowerLevels,
kMXEventTypeStringRoomAliases,
kMXEventTypeStringRoomHistoryVisibility,
kMXEventTypeStringRoomMessage,
kMXEventTypeStringRoomMessageFeedback,
kMXEventTypeStringRoomRedaction,
kMXEventTypeStringRoomThirdPartyInvite,
kMXEventTypeStringRoomRelatedGroups,
kMXEventTypeStringReaction,
kMXEventTypeStringCallInvite,
kMXEventTypeStringCallAnswer,
kMXEventTypeStringCallSelectAnswer,
kMXEventTypeStringCallHangup,
kMXEventTypeStringCallReject,
kMXEventTypeStringCallNegotiate,
kMXEventTypeStringSticker,
kMXEventTypeStringKeyVerificationCancel,
kMXEventTypeStringKeyVerificationDone
]];
allEventTypesForMessages = @[
kMXEventTypeStringRoomName,
kMXEventTypeStringRoomTopic,
kMXEventTypeStringRoomMember,
kMXEventTypeStringRoomCreate,
kMXEventTypeStringRoomEncrypted,
kMXEventTypeStringRoomEncryption,
kMXEventTypeStringRoomJoinRules,
kMXEventTypeStringRoomPowerLevels,
kMXEventTypeStringRoomAliases,
kMXEventTypeStringRoomHistoryVisibility,
kMXEventTypeStringRoomMessage,
kMXEventTypeStringRoomMessageFeedback,
kMXEventTypeStringRoomRedaction,
kMXEventTypeStringRoomThirdPartyInvite,
kMXEventTypeStringRoomRelatedGroups,
kMXEventTypeStringReaction,
kMXEventTypeStringCallInvite,
kMXEventTypeStringCallAnswer,
kMXEventTypeStringCallSelectAnswer,
kMXEventTypeStringCallHangup,
kMXEventTypeStringCallReject,
kMXEventTypeStringCallNegotiate,
kMXEventTypeStringSticker,
kMXEventTypeStringKeyVerificationCancel,
kMXEventTypeStringKeyVerificationDone
].mutableCopy;

lastMessageEventTypesAllowList = @[
kMXEventTypeStringRoomCreate, // Without any messages, calls or stickers an event is needed to provide a date.
kMXEventTypeStringRoomEncrypted, // Show a UTD string rather than the previous message.
kMXEventTypeStringRoomMessage,
kMXEventTypeStringCallInvite,
kMXEventTypeStringCallAnswer,
kMXEventTypeStringCallHangup,
kMXEventTypeStringSticker
].mutableCopy;

_messageDetailsAllowSharing = YES;
_messageDetailsAllowSaving = YES;
Expand Down Expand Up @@ -353,6 +364,11 @@ - (NSArray *)allEventTypesForMessages
return allEventTypesForMessages;
}

- (NSArray<MXEventTypeString> *)lastMessageEventTypesAllowList
{
return lastMessageEventTypesAllowList;
}

- (void)addSupportedEventTypes:(NSArray<NSString *> *)eventTypes
{
[eventsFilterForMessages addObjectsFromArray:eventTypes];
Expand All @@ -363,6 +379,7 @@ - (void)removeSupportedEventTypes:(NSArray<NSString *> *)eventTypes
{
[eventsFilterForMessages removeObjectsInArray:eventTypes];
[allEventTypesForMessages removeObjectsInArray:eventTypes];
[lastMessageEventTypesAllowList removeObjectsInArray:eventTypes];
}

- (BOOL)showRedactionsInRoomHistory
Expand Down
17 changes: 9 additions & 8 deletions MatrixKit/Utils/EventFormatter/MXKEventFormatter.m
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ - (instancetype)initWithMatrixSession:(MXSession *)matrixSession
_settings = [MXKAppSettings standardAppSettings];

defaultRoomSummaryUpdater = [MXRoomSummaryUpdater roomSummaryUpdaterForSession:matrixSession];
defaultRoomSummaryUpdater.ignoreMemberProfileChanges = YES;
defaultRoomSummaryUpdater.lastMessageEventTypesAllowList = MXKAppSettings.standardAppSettings.lastMessageEventTypesAllowList;
defaultRoomSummaryUpdater.ignoreRedactedEvent = !_settings.showRedactionsInRoomHistory;
defaultRoomSummaryUpdater.roomNameStringLocalizer = [MXKRoomNameStringLocalizer new];

Expand All @@ -125,13 +125,6 @@ - (void)initDateTimeFormatters
[timeFormatter setTimeStyle:NSDateFormatterShortStyle];
}

- (void)setEventTypesFilterForMessages:(NSArray<NSString *> *)eventTypesFilterForMessages
{
_eventTypesFilterForMessages = eventTypesFilterForMessages;

defaultRoomSummaryUpdater.eventsFilterForMessages = eventTypesFilterForMessages;
}

#pragma mark - Event formatter settings

// Checks whether the event is related to an attachment and if it is supported
Expand Down Expand Up @@ -1950,6 +1943,14 @@ - (BOOL)session:(MXSession *)session updateRoomSummary:(MXRoomSummary *)summary
// users displaynames, we want current displaynames
MXKEventFormatterError error;
NSString *lastMessageString = [self stringFromEvent:event withRoomState:roomState error:&error];

if ([event.type isEqualToString:kMXEventTypeStringRoomCreate])
{
// Temporarily fallback to the room joined notice when the last event is for the room's creation.
// This will be improved as part of https://github.com/vector-im/element-ios/issues/4918
lastMessageString = MatrixKitL10n.noticeRoomJoinByYou;
}

if (0 == lastMessageString.length)
{
// @TODO: there is a conflict with what [defaultRoomSummaryUpdater updateRoomSummary] did :/
Expand Down
1 change: 1 addition & 0 deletions changelog.d/4451.change
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
MXKEventFormatter: Filter the last message events of the defaultRoomSummaryUpdater to only show messages, calls and stickers.