LegacyAppDelegate: Add new universal link management methods and handle more precisely spaces not available cases.

This commit is contained in:
SBiOSoftWhare 2021-05-04 10:41:02 +02:00
parent 62b39c83ea
commit 5909b3b00e
2 changed files with 63 additions and 23 deletions

View file

@ -218,6 +218,23 @@ JitsiViewControllerDelegate>
*/ */
- (BOOL)handleUniversalLinkFragment:(NSString*)fragment; - (BOOL)handleUniversalLinkFragment:(NSString*)fragment;
/**
Process the fragment part of a vector.im link.
@param fragment the fragment part of the universal link.
@param universalLinkURL the unprocessed the universal link URL (optional).
@return YES in case of processing success.
*/
- (BOOL)handleUniversalLinkFragment:(NSString*)fragment fromURL:(NSURL*)universalLinkURL;
/**
Process the URL of a vector.im link.
@param universalLinkURL the universal link URL.
@return YES in case of processing success.
*/
- (BOOL)handleUniversalLinkURL:(NSURL*)universalLinkURL;
#pragma mark - Jitsi call #pragma mark - Jitsi call
/** /**

View file

@ -463,6 +463,8 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
self.pushNotificationStore = [PushNotificationStore new]; self.pushNotificationStore = [PushNotificationStore new];
self.pushNotificationService = [[PushNotificationService alloc] initWithPushNotificationStore:self.pushNotificationStore]; self.pushNotificationService = [[PushNotificationService alloc] initWithPushNotificationStore:self.pushNotificationStore];
self.pushNotificationService.delegate = self; self.pushNotificationService.delegate = self;
self.spaceFeatureUnavailablePresenter = [SpaceFeatureUnavailablePresenter new];
// Add matrix observers, and initialize matrix sessions if the app is not launched in background. // Add matrix observers, and initialize matrix sessions if the app is not launched in background.
[self initMatrixSessions]; [self initMatrixSessions];
@ -1214,7 +1216,7 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
// Continue the registration with the passed nextLink // Continue the registration with the passed nextLink
NSLog(@"[AppDelegate] handleUniversalLink. Complete registration with nextLink"); NSLog(@"[AppDelegate] handleUniversalLink. Complete registration with nextLink");
NSURL *nextLink = [NSURL URLWithString:queryParams[@"nextLink"]]; NSURL *nextLink = [NSURL URLWithString:queryParams[@"nextLink"]];
[self handleUniversalLinkFragment:nextLink.fragment]; [self handleUniversalLinkFragment:nextLink.fragment fromURL:nextLink];
} }
else else
{ {
@ -1240,10 +1242,15 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
return YES; return YES;
} }
return [self handleUniversalLinkFragment:webURL.fragment]; return [self handleUniversalLinkFragment:webURL.fragment fromURL:webURL];
} }
- (BOOL)handleUniversalLinkFragment:(NSString*)fragment - (BOOL)handleUniversalLinkFragment:(NSString*)fragment
{
return [self handleUniversalLinkFragment:fragment fromURL:nil];
}
- (BOOL)handleUniversalLinkFragment:(NSString*)fragment fromURL:(NSURL*)universalLinkURL
{ {
BOOL continueUserActivity = NO; BOOL continueUserActivity = NO;
MXKAccountManager *accountManager = [MXKAccountManager sharedManager]; MXKAccountManager *accountManager = [MXKAccountManager sharedManager];
@ -1327,19 +1334,32 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
if (account) if (account)
{ {
NSString *roomId = roomIdOrAlias; NSString *roomId = roomIdOrAlias;
MXRoom *room;
// Translate the alias into the room id // Translate the alias into the room id
if ([roomIdOrAlias hasPrefix:@"#"]) if ([roomIdOrAlias hasPrefix:@"#"])
{ {
MXRoom *room = [account.mxSession roomWithAlias:roomIdOrAlias]; room = [account.mxSession roomWithAlias:roomIdOrAlias];
if (room) if (room)
{ {
roomId = room.roomId; roomId = room.roomId;
} }
} }
else
{
room = [account.mxSession roomWithRoomId:roomId];
}
// Open the room page if (room.summary.roomType == MXRoomTypeSpace)
[self showRoom:roomId andEventId:eventId withMatrixSession:account.mxSession]; {
// Indicates that spaces are not supported
[self.spaceFeatureUnavailablePresenter presentSpaceLinkUnavailableWith:universalLinkURL from:self.presentedViewController animated:YES];
}
else
{
// Open the room page
[self showRoom:roomId andEventId:eventId withMatrixSession:account.mxSession];
}
continueUserActivity = YES; continueUserActivity = YES;
} }
@ -1389,7 +1409,7 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
{ {
universalLinkFragmentPendingRoomAlias = @{roomId: roomIdOrAlias}; universalLinkFragmentPendingRoomAlias = @{roomId: roomIdOrAlias};
[self handleUniversalLinkFragment:newUniversalLinkFragment]; [self handleUniversalLinkFragment:newUniversalLinkFragment fromURL:universalLinkURL];
} }
else else
{ {
@ -1427,7 +1447,7 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
if (notif.object == account.mxSession && account.mxSession.state == MXSessionStateRunning) if (notif.object == account.mxSession && account.mxSession.state == MXSessionStateRunning)
{ {
NSLog(@"[AppDelegate] Universal link: The session is running. Retry the link"); NSLog(@"[AppDelegate] Universal link: The session is running. Retry the link");
[self handleUniversalLinkFragment:fragment]; [self handleUniversalLinkFragment:fragment fromURL:universalLinkURL];
} }
} }
}]; }];
@ -1488,7 +1508,7 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
if ([universalLinkFragmentPending isEqualToString:fragment]) if ([universalLinkFragmentPending isEqualToString:fragment])
{ {
NSLog(@"[AppDelegate] Universal link: The user is now logged in. Retry the link"); NSLog(@"[AppDelegate] Universal link: The user is now logged in. Retry the link");
[self handleUniversalLinkFragment:fragment]; [self handleUniversalLinkFragment:fragment fromURL:universalLinkURL];
} }
}]; }];
} }
@ -1553,7 +1573,7 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
if ([universalLinkFragmentPending isEqualToString:fragment]) if ([universalLinkFragmentPending isEqualToString:fragment])
{ {
NSLog(@"[AppDelegate] Universal link: The user is now logged in. Retry the link"); NSLog(@"[AppDelegate] Universal link: The user is now logged in. Retry the link");
[self handleUniversalLinkFragment:fragment]; [self handleUniversalLinkFragment:fragment fromURL:universalLinkURL];
} }
}]; }];
} }
@ -1577,6 +1597,14 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
return continueUserActivity; return continueUserActivity;
} }
- (BOOL)handleUniversalLinkURL:(NSURL*)universalLinkURL
{
// iOS Patch: fix vector.im urls before using it
NSURL *fixedURL = [Tools fixURLWithSeveralHashKeys:universalLinkURL];
return [self handleUniversalLinkFragment:fixedURL.fragment fromURL:universalLinkURL];
}
- (void)resetPendingUniversalLink - (void)resetPendingUniversalLink
{ {
universalLinkFragmentPending = nil; universalLinkFragmentPending = nil;
@ -2746,10 +2774,17 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
{ {
MXRoom *room = [mxSession roomWithRoomId:roomId]; MXRoom *room = [mxSession roomWithRoomId:roomId];
// Indicates that spaces are not supported
if (room.summary.roomType == MXRoomTypeSpace) if (room.summary.roomType == MXRoomTypeSpace)
{ {
// Indicates that spaces are not supported if (room.summary.membership == MXMembershipInvite)
[self showSpaceLinkNotAvailable]; {
[self.spaceFeatureUnavailablePresenter presentInvitesUnavailableFrom:self.presentedViewController animated:YES];
}
else
{
[self.spaceFeatureUnavailablePresenter presentOpenSpaceUnavailableFrom:self.presentedViewController animated:YES];
}
if (completion) if (completion)
{ {
@ -4653,16 +4688,4 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
return [authVC continueSSOLoginWithToken:loginToken txnId:txnId]; return [authVC continueSSOLoginWithToken:loginToken txnId:txnId];
} }
#pragma mark - Spaces
- (void)showSpaceLinkNotAvailable
{
if (!self.spaceFeatureUnavailablePresenter)
{
self.spaceFeatureUnavailablePresenter = [SpaceFeatureUnavailablePresenter new];
}
[self.spaceFeatureUnavailablePresenter presentSpaceLinkUnavailableFrom:self animated:YES];
}
@end @end