mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-04-22 01:22:46 +02:00
Setup a dedicated listener owned by PresenceIndicatorView
This commit is contained in:
@@ -26,15 +26,6 @@
|
||||
|
||||
#import "MXTools.h"
|
||||
|
||||
@interface RoomCollectionViewCell()
|
||||
{
|
||||
/**
|
||||
The observer of the presence for direct user.
|
||||
*/
|
||||
id mxDirectUserPresenceObserver;
|
||||
}
|
||||
@end
|
||||
|
||||
@implementation RoomCollectionViewCell
|
||||
|
||||
#pragma mark - Class methods
|
||||
@@ -156,33 +147,17 @@
|
||||
displayName:roomCellData.roomDisplayname
|
||||
mediaManager:roomCellData.mxSession.mediaManager];
|
||||
|
||||
if (!mxDirectUserPresenceObserver && roomCellData.directUserId)
|
||||
if (roomCellData.directUserId)
|
||||
{
|
||||
// Observe contact presence change
|
||||
MXWeakify(self);
|
||||
mxDirectUserPresenceObserver = [[NSNotificationCenter defaultCenter] addObserverForName:kMXKContactManagerMatrixUserPresenceChangeNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notif) {
|
||||
MXStrongifyAndReturnIfNil(self);
|
||||
|
||||
NSString* directUserId = self->roomCellData.directUserId;
|
||||
|
||||
if (directUserId && [directUserId isEqualToString:notif.object])
|
||||
{
|
||||
MXPresence presence = [MXTools presence:[notif.userInfo objectForKey:kMXKContactManagerMatrixPresenceKey]];
|
||||
[self refreshContactPresence:presence];
|
||||
}
|
||||
}];
|
||||
|
||||
[self refreshContactPresence:roomCellData.presence];
|
||||
[self.presenceIndicatorView configureWithUserId:roomCellData.directUserId presence:roomCellData.presence];
|
||||
}
|
||||
else
|
||||
{
|
||||
[self.presenceIndicatorView stopListeningPresenceUpdates];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- (void)refreshContactPresence:(MXPresence)presence
|
||||
{
|
||||
self.presenceIndicatorView.presence = presence;
|
||||
self.presenceIndicatorView.hidden = presence == MXPresenceUnknown;
|
||||
}
|
||||
|
||||
- (MXKCellData*)renderedCellData
|
||||
{
|
||||
return roomCellData;
|
||||
@@ -203,7 +178,7 @@
|
||||
{
|
||||
[super prepareForReuse];
|
||||
|
||||
[self removePresenceObserver];
|
||||
[self.presenceIndicatorView stopListeningPresenceUpdates];
|
||||
|
||||
// Remove all gesture recognizers
|
||||
while (self.gestureRecognizers.count)
|
||||
@@ -218,24 +193,10 @@
|
||||
roomCellData = nil;
|
||||
}
|
||||
|
||||
- (void)dealloc
|
||||
{
|
||||
[self removePresenceObserver];
|
||||
}
|
||||
|
||||
- (NSString*)roomId
|
||||
{
|
||||
return roomCellData.roomIdentifier;
|
||||
}
|
||||
|
||||
- (void)removePresenceObserver
|
||||
{
|
||||
if (mxDirectUserPresenceObserver)
|
||||
{
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:mxDirectUserPresenceObserver];
|
||||
mxDirectUserPresenceObserver = nil;
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user