Merge pull request #5999 from vector-im/aringenbach/5995_presence_offline_mode

Presence offline mode setting
This commit is contained in:
aringenbach
2022-04-07 11:43:13 +02:00
committed by GitHub
14 changed files with 119 additions and 11 deletions
@@ -715,6 +715,7 @@ static NSArray<NSNumber*> *initialSyncSilentErrorsHTTPStatusCodes;
// Instantiate new session
mxSession = [[MXSession alloc] initWithMatrixRestClient:mxRestClient];
mxSession.preferredSyncPresence = self.preferredSyncPresence;
// Check whether an antivirus url is defined.
if (_antivirusServerURL)
@@ -1007,7 +1008,7 @@ static NSArray<NSNumber*> *initialSyncSilentErrorsHTTPStatusCodes;
// Update user presence
MXWeakify(self);
[self setUserPresence:MXPresenceUnavailable andStatusMessage:nil completion:^{
[self setUserPresence:MXPresenceOffline andStatusMessage:nil completion:^{
MXStrongifyAndReturnIfNil(self);
[self cancelPauseBackgroundTask];
}];
@@ -1045,8 +1046,10 @@ static NSArray<NSNumber*> *initialSyncSilentErrorsHTTPStatusCodes;
case MXSessionStatePauseRequested:
{
// Resume SDK and update user presence
MXWeakify(self);
[mxSession resume:^{
[self setUserPresence:MXPresenceOnline andStatusMessage:nil completion:nil];
MXStrongifyAndReturnIfNil(self);
[self setUserPresence:self.preferredSyncPresence andStatusMessage:nil completion:nil];
[self refreshAPNSPusher];
[self refreshPushKitPusher];
@@ -1513,7 +1516,7 @@ static NSArray<NSNumber*> *initialSyncSilentErrorsHTTPStatusCodes;
MXLogDebug(@"[MXKAccount] %@: The session is ready. Matrix SDK session has been started in %0.fms.", self.mxCredentials.userId, [[NSDate date] timeIntervalSinceDate:self->openSessionStartDate] * 1000);
[self setUserPresence:MXPresenceOnline andStatusMessage:nil completion:nil];
[self setUserPresence:self.preferredSyncPresence andStatusMessage:nil completion:nil];
} failure:^(NSError *error) {
MXStrongifyAndReturnIfNil(self);
@@ -2159,4 +2162,20 @@ static NSArray<NSNumber*> *initialSyncSilentErrorsHTTPStatusCodes;
}
}
#pragma mark - Presence
- (void)setPreferredSyncPresence:(MXPresence)preferredSyncPresence
{
[super setPreferredSyncPresence:preferredSyncPresence];
if (self.mxSession)
{
self.mxSession.preferredSyncPresence = preferredSyncPresence;
[self setUserPresence:preferredSyncPresence andStatusMessage:nil completion:nil];
}
// Archive updated field
[[MXKAccountManager sharedManager] saveAccounts];
}
@end
@@ -32,6 +32,7 @@
@protected BOOL _isSoftLogout;
@protected BOOL _hasPusherForPushNotifications;
@protected BOOL _hasPusherForPushKitNotifications;
@protected MXPresence _preferredSyncPresence;
}
/**
@@ -89,6 +90,12 @@
*/
@property (nonatomic, readonly) BOOL hasPusherForPushKitNotifications;
/**
The account's preferred Presence status to share while the application is in foreground.
Defaults to MXPresenceOnline.
*/
@property (nonatomic) MXPresence preferredSyncPresence;
/**
Enable In-App notifications based on Remote notifications rules.
@@ -80,6 +80,16 @@
_warnedAboutEncryption = [coder decodeBoolForKey:@"warnedAboutEncryption"];
if ([coder decodeObjectOfClass:NSString.class forKey:@"preferredSyncPresence"])
{
MXPresenceString presenceString = [coder decodeObjectOfClass:NSString.class forKey:@"preferredSyncPresence"];
_preferredSyncPresence = [MXTools presence:presenceString];
}
else
{
_preferredSyncPresence = MXPresenceOnline;
}
_others = [coder decodeObjectForKey:@"others"];
}
@@ -143,6 +153,9 @@
[coder encodeBool:_warnedAboutEncryption forKey:@"warnedAboutEncryption"];
MXPresenceString presenceString = [MXTools presenceString:_preferredSyncPresence];
[coder encodeObject:presenceString forKey:@"preferredSyncPresence"];
[coder encodeObject:_others forKey:@"others"];
}