mirror of
https://github.com/vector-im/element-ios.git
synced 2024-09-29 15:52:40 +00:00
Merge remote-tracking branch 'origin/develop' into develop
This commit is contained in:
commit
9e21db9b56
2 changed files with 84 additions and 80 deletions
|
@ -1,11 +1,11 @@
|
|||
PODS:
|
||||
- AFNetworking (2.4.1):
|
||||
- AFNetworking/NSURLConnection
|
||||
- AFNetworking/NSURLSession
|
||||
- AFNetworking/Reachability
|
||||
- AFNetworking/Security
|
||||
- AFNetworking/Serialization
|
||||
- AFNetworking/UIKit
|
||||
- AFNetworking/NSURLConnection (= 2.4.1)
|
||||
- AFNetworking/NSURLSession (= 2.4.1)
|
||||
- AFNetworking/Reachability (= 2.4.1)
|
||||
- AFNetworking/Security (= 2.4.1)
|
||||
- AFNetworking/Serialization (= 2.4.1)
|
||||
- AFNetworking/UIKit (= 2.4.1)
|
||||
- AFNetworking/NSURLConnection (2.4.1):
|
||||
- AFNetworking/Reachability
|
||||
- AFNetworking/Security
|
||||
|
@ -21,9 +21,9 @@ PODS:
|
|||
- AFNetworking/NSURLConnection
|
||||
- AFNetworking/NSURLSession
|
||||
- Mantle (1.5.1):
|
||||
- Mantle/extobjc
|
||||
- Mantle/extobjc (= 1.5.1)
|
||||
- Mantle/extobjc (1.5.1)
|
||||
- MatrixSDK (0.0.1):
|
||||
- MatrixSDK (0.1.0):
|
||||
- AFNetworking (~> 2.4.1)
|
||||
- Mantle (~> 1.5)
|
||||
|
||||
|
@ -37,6 +37,6 @@ EXTERNAL SOURCES:
|
|||
SPEC CHECKSUMS:
|
||||
AFNetworking: 0aabc6fae66d6e5d039eeb21c315843c7aae51ab
|
||||
Mantle: d7c5ac734579ec751c58fecbf56189853056c58c
|
||||
MatrixSDK: 42aac6ed0123d5339f27e3f57d8972edf17f8224
|
||||
MatrixSDK: e65916e5bb4e327b36f05e52a2b9e4ec83398d58
|
||||
|
||||
COCOAPODS: 0.34.1
|
||||
COCOAPODS: 0.35.0
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#import "AppSettings.h"
|
||||
#import "CustomAlert.h"
|
||||
|
||||
#import "MXFileStore.h"
|
||||
#import "MXTools.h"
|
||||
|
||||
NSString *const kMatrixHandlerUnsupportedMessagePrefix = @"UNSUPPORTED MSG: ";
|
||||
|
@ -85,83 +86,86 @@ static MatrixHandler *sharedHandler = nil;
|
|||
|
||||
self.mxRestClient = [[MXRestClient alloc] initWithCredentials:credentials];
|
||||
if (self.mxRestClient) {
|
||||
// Use MXMemoryStore as MXStore to not loose message
|
||||
MXMemoryStore *store = [[MXMemoryStore alloc] init];
|
||||
|
||||
self.mxSession = [[MXSession alloc] initWithMatrixRestClient:self.mxRestClient andStore:store];
|
||||
// Check here whether the app user wants to display all the events
|
||||
if ([[AppSettings sharedSettings] displayAllEvents]) {
|
||||
// Use a filter to retrieve all the events (except kMXEventTypeStringPresence which are not related to a specific room)
|
||||
self.eventsFilterForMessages = @[
|
||||
kMXEventTypeStringRoomName,
|
||||
kMXEventTypeStringRoomTopic,
|
||||
kMXEventTypeStringRoomMember,
|
||||
kMXEventTypeStringRoomCreate,
|
||||
kMXEventTypeStringRoomJoinRules,
|
||||
kMXEventTypeStringRoomPowerLevels,
|
||||
kMXEventTypeStringRoomAliases,
|
||||
kMXEventTypeStringRoomMessage,
|
||||
kMXEventTypeStringRoomMessageFeedback
|
||||
];
|
||||
}
|
||||
else {
|
||||
// Display only a subset of events
|
||||
self.eventsFilterForMessages = @[
|
||||
kMXEventTypeStringRoomName,
|
||||
kMXEventTypeStringRoomTopic,
|
||||
kMXEventTypeStringRoomMember,
|
||||
kMXEventTypeStringRoomMessage
|
||||
];
|
||||
}
|
||||
// Use MXFileStore as MXStore to permanently store events
|
||||
MXFileStore *store = [[MXFileStore alloc] init];
|
||||
|
||||
// Launch mxSession
|
||||
[self.mxSession start:^{
|
||||
self.isInitialSyncDone = YES;
|
||||
[self setUserPresence:MXPresenceOnline andStatusMessage:nil completion:nil];
|
||||
_isResumeDone = YES;
|
||||
|
||||
// Register listener to update user's information
|
||||
userUpdateListener = [self.mxSession.myUser listenToUserUpdate:^(MXEvent *event) {
|
||||
// Consider only events related to user's presence
|
||||
if (event.eventType == MXEventTypePresence) {
|
||||
MXPresence presence = [MXTools presence:event.content[@"presence"]];
|
||||
if (self.userPresence != presence) {
|
||||
// Handle user presence on multiple devices (keep the more pertinent)
|
||||
if (self.userPresence == MXPresenceOnline) {
|
||||
if (presence == MXPresenceUnavailable || presence == MXPresenceOffline) {
|
||||
// Force the local presence to overwrite the user presence on server side
|
||||
[self setUserPresence:_userPresence andStatusMessage:nil completion:nil];
|
||||
return;
|
||||
}
|
||||
} else if (self.userPresence == MXPresenceUnavailable) {
|
||||
if (presence == MXPresenceOffline) {
|
||||
// Force the local presence to overwrite the user presence on server side
|
||||
[self setUserPresence:_userPresence andStatusMessage:nil completion:nil];
|
||||
return;
|
||||
[store openWithCredentials:credentials onComplete:^{
|
||||
self.mxSession = [[MXSession alloc] initWithMatrixRestClient:self.mxRestClient andStore:store];
|
||||
// Check here whether the app user wants to display all the events
|
||||
if ([[AppSettings sharedSettings] displayAllEvents]) {
|
||||
// Use a filter to retrieve all the events (except kMXEventTypeStringPresence which are not related to a specific room)
|
||||
self.eventsFilterForMessages = @[
|
||||
kMXEventTypeStringRoomName,
|
||||
kMXEventTypeStringRoomTopic,
|
||||
kMXEventTypeStringRoomMember,
|
||||
kMXEventTypeStringRoomCreate,
|
||||
kMXEventTypeStringRoomJoinRules,
|
||||
kMXEventTypeStringRoomPowerLevels,
|
||||
kMXEventTypeStringRoomAliases,
|
||||
kMXEventTypeStringRoomMessage,
|
||||
kMXEventTypeStringRoomMessageFeedback
|
||||
];
|
||||
}
|
||||
else {
|
||||
// Display only a subset of events
|
||||
self.eventsFilterForMessages = @[
|
||||
kMXEventTypeStringRoomName,
|
||||
kMXEventTypeStringRoomTopic,
|
||||
kMXEventTypeStringRoomMember,
|
||||
kMXEventTypeStringRoomMessage
|
||||
];
|
||||
}
|
||||
|
||||
// Launch mxSession
|
||||
[self.mxSession start:^{
|
||||
self.isInitialSyncDone = YES;
|
||||
[self setUserPresence:MXPresenceOnline andStatusMessage:nil completion:nil];
|
||||
_isResumeDone = YES;
|
||||
|
||||
// Register listener to update user's information
|
||||
userUpdateListener = [self.mxSession.myUser listenToUserUpdate:^(MXEvent *event) {
|
||||
// Consider only events related to user's presence
|
||||
if (event.eventType == MXEventTypePresence) {
|
||||
MXPresence presence = [MXTools presence:event.content[@"presence"]];
|
||||
if (self.userPresence != presence) {
|
||||
// Handle user presence on multiple devices (keep the more pertinent)
|
||||
if (self.userPresence == MXPresenceOnline) {
|
||||
if (presence == MXPresenceUnavailable || presence == MXPresenceOffline) {
|
||||
// Force the local presence to overwrite the user presence on server side
|
||||
[self setUserPresence:_userPresence andStatusMessage:nil completion:nil];
|
||||
return;
|
||||
}
|
||||
} else if (self.userPresence == MXPresenceUnavailable) {
|
||||
if (presence == MXPresenceOffline) {
|
||||
// Force the local presence to overwrite the user presence on server side
|
||||
[self setUserPresence:_userPresence andStatusMessage:nil completion:nil];
|
||||
return;
|
||||
}
|
||||
}
|
||||
self.userPresence = presence;
|
||||
}
|
||||
self.userPresence = presence;
|
||||
}
|
||||
}];
|
||||
|
||||
// Check whether the app user wants notifications on new events
|
||||
if ([[AppSettings sharedSettings] enableInAppNotifications]) {
|
||||
[self enableInAppNotifications:YES];
|
||||
}
|
||||
} failure:^(NSError *error) {
|
||||
NSLog(@"Initial Sync failed: %@", error);
|
||||
if (notifyOpenSessionFailure) {
|
||||
//Alert user only once
|
||||
notifyOpenSessionFailure = NO;
|
||||
[[AppDelegate theDelegate] showErrorAsAlert:error];
|
||||
}
|
||||
|
||||
// Postpone a new attempt in 10 sec
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||
[self openSession];
|
||||
});
|
||||
}];
|
||||
|
||||
// Check whether the app user wants notifications on new events
|
||||
if ([[AppSettings sharedSettings] enableInAppNotifications]) {
|
||||
[self enableInAppNotifications:YES];
|
||||
}
|
||||
} failure:^(NSError *error) {
|
||||
NSLog(@"Initial Sync failed: %@", error);
|
||||
if (notifyOpenSessionFailure) {
|
||||
//Alert user only once
|
||||
notifyOpenSessionFailure = NO;
|
||||
[[AppDelegate theDelegate] showErrorAsAlert:error];
|
||||
}
|
||||
|
||||
// Postpone a new attempt in 10 sec
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||
[self openSession];
|
||||
});
|
||||
}];
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue