mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-04-22 01:22:46 +02:00
Merge commit '56d9e1f6a55a93dc71149ae429eaa615a98de0d5' into feature/6076_foss_merge
* commit '56d9e1f6a55a93dc71149ae429eaa615a98de0d5': (79 commits) finish version++ version++ Translated using Weblate (Hungarian) Translated using Weblate (Italian) Translated using Weblate (Ukrainian) Translated using Weblate (Hungarian) Translated using Weblate (Slovak) Translated using Weblate (Swedish) Translated using Weblate (Indonesian) Translated using Weblate (Albanian) Translated using Weblate (Estonian) Translated using Weblate (Estonian) updated the submodule updated SDK Update the SDK. (#7819) Prepare for new sprint finish version++ version++ fix Changelog. ... # Conflicts: # Config/AppVersion.xcconfig # Podfile # Podfile.lock # Riot.xcworkspace/xcshareddata/swiftpm/Package.resolved # Riot/Managers/Settings/RiotSettings.swift # Riot/Modules/Analytics/Analytics.swift # Riot/Modules/Analytics/DecryptionFailure.swift # Riot/Modules/Analytics/PHGPostHogConfiguration.swift # Riot/Modules/Room/RoomInfo/RoomInfoList/RoomInfoListViewAction.swift # Riot/Modules/Room/RoomInfo/RoomInfoList/RoomInfoListViewModel.swift # Riot/Modules/Room/Views/Title/Preview/PreviewRoomTitleView.m # Riot/Modules/Settings/SettingsViewController.m # Riot/Utils/EventFormatter.m # Riot/Utils/Tools.m # RiotNSE/target.yml # fastlane/Fastfile # project.yml
This commit is contained in:
@@ -34,6 +34,9 @@ const CGFloat kTypingCellHeight = 24;
|
||||
{
|
||||
// Observe kThemeServiceDidChangeThemeNotification to handle user interface theme change.
|
||||
id kThemeServiceDidChangeThemeNotificationObserver;
|
||||
|
||||
// The listener to the room retention changes.
|
||||
id retentionListener;
|
||||
}
|
||||
|
||||
// Observe key verification request changes
|
||||
@@ -168,6 +171,31 @@ const CGFloat kTypingCellHeight = 24;
|
||||
self.eventFormatter.eventTypesFilterForMessages = [MXKAppSettings standardAppSettings].eventsFilterForMessages;
|
||||
}
|
||||
|
||||
- (void)setDelegate:(id<MXKDataSourceDelegate>)delegate
|
||||
{
|
||||
[self unregisterRoomSummaryDidRemoveExpiredDataFromStoreNotifications];
|
||||
[self removeRoomRetentionEventListener];
|
||||
|
||||
if (delegate && self.isLive)
|
||||
{
|
||||
if (self.room)
|
||||
{
|
||||
// Remove the potential expired messages from the store
|
||||
if ([self.room.summary removeExpiredRoomContentsFromStore])
|
||||
{
|
||||
[self.mxSession.store commit];
|
||||
}
|
||||
[self addRoomRetentionEventListener];
|
||||
}
|
||||
|
||||
// Observe room history flush (expired content data)
|
||||
[self registerRoomSummaryDidRemoveExpiredDataFromStoreNotifications];
|
||||
[self roomSummaryDidRemoveExpiredDataFromStore];
|
||||
}
|
||||
|
||||
[super setDelegate:delegate];
|
||||
}
|
||||
|
||||
- (void)destroy
|
||||
{
|
||||
if (kThemeServiceDidChangeThemeNotificationObserver)
|
||||
@@ -198,6 +226,9 @@ const CGFloat kTypingCellHeight = 24;
|
||||
[self.mxSession.aggregations.beaconAggregations removeListener:self.beaconInfoSummaryDeletionListener];
|
||||
}
|
||||
|
||||
[self unregisterRoomSummaryDidRemoveExpiredDataFromStoreNotifications];
|
||||
[self removeRoomRetentionEventListener];
|
||||
|
||||
[super destroy];
|
||||
}
|
||||
|
||||
@@ -1284,4 +1315,79 @@ const CGFloat kTypingCellHeight = 24;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - roomSummaryDidRemoveExpiredDataFromStore notifications
|
||||
|
||||
- (void)registerRoomSummaryDidRemoveExpiredDataFromStoreNotifications
|
||||
{
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(roomSummaryDidRemoveExpiredDataFromStore:) name:MXRoomSummary.roomSummaryDidRemoveExpiredDataFromStore object:nil];
|
||||
}
|
||||
|
||||
- (void)unregisterRoomSummaryDidRemoveExpiredDataFromStoreNotifications
|
||||
{
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:self name:MXRoomSummary.roomSummaryDidRemoveExpiredDataFromStore object:nil];
|
||||
}
|
||||
|
||||
- (void)roomSummaryDidRemoveExpiredDataFromStore:(NSNotification*)notification
|
||||
{
|
||||
MXRoomSummary *roomSummary = notification.object;
|
||||
if (self.mxSession == roomSummary.mxSession && [self.roomId isEqualToString:roomSummary.roomId])
|
||||
{
|
||||
[self roomSummaryDidRemoveExpiredDataFromStore];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)roomSummaryDidRemoveExpiredDataFromStore
|
||||
{
|
||||
// Check whether the first cell data refers to an expired event (this may be a state event
|
||||
MXEvent *firstMessageEvent;
|
||||
for (id<MXKRoomBubbleCellDataStoring> cellData in bubbles)
|
||||
{
|
||||
for (MXEvent *event in cellData.events)
|
||||
{
|
||||
if (!event.isState) {
|
||||
firstMessageEvent = event;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (firstMessageEvent)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (firstMessageEvent && firstMessageEvent.originServerTs < self.room.summary.minimumTimestamp)
|
||||
{
|
||||
[self reload];
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - room retention event listener
|
||||
|
||||
- (void)addRoomRetentionEventListener
|
||||
{
|
||||
// Register a listener to handle the room retention in live timelines
|
||||
retentionListener = [self.timeline listenToEventsOfTypes:@[MXRoomSummary.roomRetentionStateEventType] onEvent:^(MXEvent *redactionEvent, MXTimelineDirection direction, MXRoomState *roomState) {
|
||||
|
||||
// Consider only live events
|
||||
if (direction == MXTimelineDirectionForwards)
|
||||
{
|
||||
// Remove the potential expired messages from the store
|
||||
if ([self.room.summary removeExpiredRoomContentsFromStore])
|
||||
{
|
||||
[self.mxSession.store commit];
|
||||
}
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)removeRoomRetentionEventListener
|
||||
{
|
||||
if (retentionListener)
|
||||
{
|
||||
[self.timeline removeListener:retentionListener];
|
||||
retentionListener = nil;
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
Reference in New Issue
Block a user