2020-10-14 17:18:58 +03:00
|
|
|
/**
|
|
|
|
* @copyright Copyright (c) 2020 Ivan Sein <ivan@nextcloud.com>
|
|
|
|
*
|
|
|
|
* @author Ivan Sein <ivan@nextcloud.com>
|
|
|
|
*
|
|
|
|
* @license GNU GPL version 3 or any later version
|
|
|
|
*
|
|
|
|
* This program is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*
|
|
|
|
*/
|
2017-07-04 20:15:28 +03:00
|
|
|
|
|
|
|
#import <Foundation/Foundation.h>
|
2020-11-11 21:33:42 +03:00
|
|
|
#import <NCCommunication/NCCommunication.h>
|
2017-07-04 20:15:28 +03:00
|
|
|
|
2017-12-04 20:58:46 +03:00
|
|
|
#import "AFNetworking.h"
|
2019-10-22 13:04:34 +03:00
|
|
|
#import "AFImageDownloader.h"
|
2019-04-23 18:03:12 +03:00
|
|
|
#import "OCCommunication.h"
|
|
|
|
#import "OCFrameworkConstants.h"
|
2018-04-26 15:10:41 +03:00
|
|
|
#import "NCChatMessage.h"
|
2019-10-11 19:50:43 +03:00
|
|
|
#import "NCDatabaseManager.h"
|
2017-07-13 17:58:11 +03:00
|
|
|
#import "NCRoom.h"
|
2017-07-14 11:20:59 +03:00
|
|
|
#import "NCUser.h"
|
2017-07-13 17:58:11 +03:00
|
|
|
|
2018-04-10 15:33:29 +03:00
|
|
|
typedef void (^GetContactsCompletionBlock)(NSArray *indexes, NSMutableDictionary *contacts, NSMutableArray *contactList, NSError *error);
|
2017-07-04 20:15:28 +03:00
|
|
|
|
2020-02-17 18:27:14 +03:00
|
|
|
typedef void (^GetRoomsCompletionBlock)(NSArray *rooms, NSError *error, NSInteger statusCode);
|
2020-02-20 20:27:00 +03:00
|
|
|
typedef void (^GetRoomCompletionBlock)(NSDictionary *roomDict, NSError *error);
|
2017-12-04 20:58:46 +03:00
|
|
|
typedef void (^CreateRoomCompletionBlock)(NSString *token, NSError *error);
|
|
|
|
typedef void (^RenameRoomCompletionBlock)(NSError *error);
|
|
|
|
typedef void (^MakeRoomPublicCompletionBlock)(NSError *error);
|
|
|
|
typedef void (^MakeRoomPrivateCompletionBlock)(NSError *error);
|
|
|
|
typedef void (^DeleteRoomCompletionBlock)(NSError *error);
|
|
|
|
typedef void (^SetPasswordCompletionBlock)(NSError *error);
|
2019-07-05 15:37:59 +03:00
|
|
|
typedef void (^JoinRoomCompletionBlock)(NSString *sessionId, NSError *error, NSInteger statusCode);
|
2017-12-04 20:58:46 +03:00
|
|
|
typedef void (^ExitRoomCompletionBlock)(NSError *error);
|
2018-08-08 15:22:51 +03:00
|
|
|
typedef void (^FavoriteRoomCompletionBlock)(NSError *error);
|
2018-10-10 12:05:06 +03:00
|
|
|
typedef void (^NotificationLevelCompletionBlock)(NSError *error);
|
2019-03-25 19:28:25 +03:00
|
|
|
typedef void (^ReadOnlyCompletionBlock)(NSError *error);
|
2019-07-19 18:12:37 +03:00
|
|
|
typedef void (^SetLobbyStateCompletionBlock)(NSError *error);
|
2017-07-11 18:55:59 +03:00
|
|
|
|
2018-07-24 17:31:29 +03:00
|
|
|
typedef void (^GetParticipantsFromRoomCompletionBlock)(NSMutableArray *participants, NSError *error);
|
2019-02-28 16:39:49 +03:00
|
|
|
typedef void (^LeaveRoomCompletionBlock)(NSInteger errorCode, NSError *error);
|
2018-07-24 17:31:29 +03:00
|
|
|
typedef void (^ParticipantModificationCompletionBlock)(NSError *error);
|
|
|
|
|
2017-12-04 20:58:46 +03:00
|
|
|
typedef void (^GetPeersForCallCompletionBlock)(NSMutableArray *peers, NSError *error);
|
2020-11-08 20:45:58 +03:00
|
|
|
typedef void (^JoinCallCompletionBlock)(NSError *error, NSInteger statusCode);
|
2017-12-04 20:58:46 +03:00
|
|
|
typedef void (^LeaveCallCompletionBlock)(NSError *error);
|
2017-07-11 18:55:59 +03:00
|
|
|
|
2020-03-06 21:39:59 +03:00
|
|
|
typedef void (^GetChatMessagesCompletionBlock)(NSArray *messages, NSInteger lastKnownMessage, NSError *error, NSInteger statusCode);
|
2018-04-26 15:10:41 +03:00
|
|
|
typedef void (^SendChatMessagesCompletionBlock)(NSError *error);
|
2018-05-17 12:57:46 +03:00
|
|
|
typedef void (^GetMentionSuggestionsCompletionBlock)(NSMutableArray *mentions, NSError *error);
|
2018-04-26 15:10:41 +03:00
|
|
|
|
2017-12-04 20:58:46 +03:00
|
|
|
typedef void (^SendSignalingMessagesCompletionBlock)(NSError *error);
|
|
|
|
typedef void (^PullSignalingMessagesCompletionBlock)(NSDictionary *messages, NSError *error);
|
|
|
|
typedef void (^GetSignalingSettingsCompletionBlock)(NSDictionary *settings, NSError *error);
|
2017-07-28 20:13:44 +03:00
|
|
|
|
2019-04-23 18:03:12 +03:00
|
|
|
typedef void (^ReadFolderCompletionBlock)(NSArray *items, NSError *error);
|
|
|
|
typedef void (^ShareFileOrFolderCompletionBlock)(NSError *error);
|
2020-11-11 21:33:42 +03:00
|
|
|
typedef void (^GetFileByFileIdCompletionBlock)(NCCommunicationFile *file, NSInteger error, NSString *errorDescription);
|
2019-04-23 18:03:12 +03:00
|
|
|
|
2017-12-04 20:58:46 +03:00
|
|
|
typedef void (^GetUserProfileCompletionBlock)(NSDictionary *userProfile, NSError *error);
|
2017-09-27 15:07:58 +03:00
|
|
|
|
2020-09-14 14:19:29 +03:00
|
|
|
typedef void (^GetUserStatusCompletionBlock)(NSDictionary *userStatus, NSError *error);
|
|
|
|
typedef void (^SetUserStatusCompletionBlock)(NSError *error);
|
|
|
|
|
2018-02-20 18:33:48 +03:00
|
|
|
typedef void (^GetServerCapabilitiesCompletionBlock)(NSDictionary *serverCapabilities, NSError *error);
|
2019-08-26 20:03:47 +03:00
|
|
|
typedef void (^GetServerNotificationCompletionBlock)(NSDictionary *notification, NSError *error, NSInteger statusCode);
|
2018-02-20 18:33:48 +03:00
|
|
|
|
2017-12-04 20:58:46 +03:00
|
|
|
typedef void (^SubscribeToNextcloudServerCompletionBlock)(NSDictionary *responseDict, NSError *error);
|
|
|
|
typedef void (^UnsubscribeToNextcloudServerCompletionBlock)(NSError *error);
|
|
|
|
typedef void (^SubscribeToPushProxyCompletionBlock)(NSError *error);
|
|
|
|
typedef void (^UnsubscribeToPushProxyCompletionBlock)(NSError *error);
|
2017-11-13 16:26:07 +03:00
|
|
|
|
2020-03-06 21:39:59 +03:00
|
|
|
extern NSInteger const kReceivedChatMessagesLimit;
|
|
|
|
|
2019-04-23 18:03:12 +03:00
|
|
|
@interface OCURLSessionManager : AFURLSessionManager
|
|
|
|
@end
|
2017-07-11 18:55:59 +03:00
|
|
|
|
2017-07-04 20:15:28 +03:00
|
|
|
@interface NCAPIController : NSObject
|
|
|
|
|
2019-10-11 19:50:43 +03:00
|
|
|
@property (nonatomic, strong) NSMutableDictionary *apiSessionManagers;
|
2019-10-24 19:20:05 +03:00
|
|
|
@property (nonatomic, strong) NSMutableDictionary *apiUsingCookiesSessionManagers;
|
2019-10-22 13:04:34 +03:00
|
|
|
@property (nonatomic, strong) AFImageDownloader *imageDownloader;
|
|
|
|
@property (nonatomic, strong) AFImageDownloader *imageDownloaderNoCache;
|
2017-12-04 20:58:46 +03:00
|
|
|
|
2017-07-04 20:15:28 +03:00
|
|
|
+ (instancetype)sharedInstance;
|
2019-10-11 19:50:43 +03:00
|
|
|
- (void)createAPISessionManagerForAccount:(TalkAccount *)account;
|
2020-12-06 19:40:07 +03:00
|
|
|
- (void)setupNCCommunicationForAccount:(TalkAccount *)account;
|
2017-07-11 18:55:59 +03:00
|
|
|
|
|
|
|
// Contacts Controller
|
2020-02-03 22:11:35 +03:00
|
|
|
- (NSURLSessionDataTask *)getContactsForAccount:(TalkAccount *)account forRoom:(NSString *)room groupRoom:(BOOL)groupRoom withSearchParam:(NSString *)search andCompletionBlock:(GetContactsCompletionBlock)block;
|
2018-04-10 15:33:29 +03:00
|
|
|
- (NSMutableDictionary *)indexedUsersFromUsersArray:(NSArray *)users;
|
2017-07-04 20:15:28 +03:00
|
|
|
|
2017-07-11 18:55:59 +03:00
|
|
|
// Rooms Controller
|
2020-09-30 11:12:38 +03:00
|
|
|
- (NSURLSessionDataTask *)getRoomsForAccount:(TalkAccount *)account updateStatus:(BOOL)updateStatus withCompletionBlock:(GetRoomsCompletionBlock)block;
|
2019-10-11 19:50:43 +03:00
|
|
|
- (NSURLSessionDataTask *)getRoomForAccount:(TalkAccount *)account withToken:(NSString *)token withCompletionBlock:(GetRoomCompletionBlock)block;
|
|
|
|
- (NSURLSessionDataTask *)createRoomForAccount:(TalkAccount *)account with:(NSString *)invite ofType:(NCRoomType)type andName:(NSString *)roomName withCompletionBlock:(CreateRoomCompletionBlock)block;
|
|
|
|
- (NSURLSessionDataTask *)renameRoom:(NSString *)token forAccount:(TalkAccount *)account withName:(NSString *)newName andCompletionBlock:(RenameRoomCompletionBlock)block;
|
|
|
|
- (NSURLSessionDataTask *)makeRoomPublic:(NSString *)token forAccount:(TalkAccount *)account withCompletionBlock:(MakeRoomPublicCompletionBlock)block;
|
|
|
|
- (NSURLSessionDataTask *)makeRoomPrivate:(NSString *)token forAccount:(TalkAccount *)account withCompletionBlock:(MakeRoomPrivateCompletionBlock)block;
|
|
|
|
- (NSURLSessionDataTask *)deleteRoom:(NSString *)token forAccount:(TalkAccount *)account withCompletionBlock:(DeleteRoomCompletionBlock)block;
|
|
|
|
- (NSURLSessionDataTask *)setPassword:(NSString *)password toRoom:(NSString *)token forAccount:(TalkAccount *)account withCompletionBlock:(SetPasswordCompletionBlock)block;
|
|
|
|
- (NSURLSessionDataTask *)joinRoom:(NSString *)token forAccount:(TalkAccount *)account withCompletionBlock:(JoinRoomCompletionBlock)block;
|
|
|
|
- (NSURLSessionDataTask *)exitRoom:(NSString *)token forAccount:(TalkAccount *)account withCompletionBlock:(ExitRoomCompletionBlock)block;
|
|
|
|
- (NSURLSessionDataTask *)addRoomToFavorites:(NSString *)token forAccount:(TalkAccount *)account withCompletionBlock:(FavoriteRoomCompletionBlock)block;
|
|
|
|
- (NSURLSessionDataTask *)removeRoomFromFavorites:(NSString *)token forAccount:(TalkAccount *)account withCompletionBlock:(FavoriteRoomCompletionBlock)block;
|
|
|
|
- (NSURLSessionDataTask *)setNotificationLevel:(NCRoomNotificationLevel)level forRoom:(NSString *)token forAccount:(TalkAccount *)account withCompletionBlock:(NotificationLevelCompletionBlock)block;
|
|
|
|
- (NSURLSessionDataTask *)setReadOnlyState:(NCRoomReadOnlyState)state forRoom:(NSString *)token forAccount:(TalkAccount *)account withCompletionBlock:(ReadOnlyCompletionBlock)block;
|
|
|
|
- (NSURLSessionDataTask *)setLobbyState:(NCRoomLobbyState)state withTimer:(NSInteger)timer forRoom:(NSString *)token forAccount:(TalkAccount *)account withCompletionBlock:(SetLobbyStateCompletionBlock)block;
|
2017-07-11 18:55:59 +03:00
|
|
|
|
2018-07-24 17:31:29 +03:00
|
|
|
// Participants Controller
|
2019-10-11 19:50:43 +03:00
|
|
|
- (NSURLSessionDataTask *)getParticipantsFromRoom:(NSString *)token forAccount:(TalkAccount *)account withCompletionBlock:(GetParticipantsFromRoomCompletionBlock)block;
|
2020-02-03 22:35:00 +03:00
|
|
|
- (NSURLSessionDataTask *)addParticipant:(NSString *)participant ofType:(NSString *)type toRoom:(NSString *)token forAccount:(TalkAccount *)account withCompletionBlock:(ParticipantModificationCompletionBlock)block;
|
2019-10-11 19:50:43 +03:00
|
|
|
- (NSURLSessionDataTask *)removeParticipant:(NSString *)user fromRoom:(NSString *)token forAccount:(TalkAccount *)account withCompletionBlock:(ParticipantModificationCompletionBlock)block;
|
|
|
|
- (NSURLSessionDataTask *)removeGuest:(NSString *)guest fromRoom:(NSString *)token forAccount:(TalkAccount *)account withCompletionBlock:(ParticipantModificationCompletionBlock)block;
|
|
|
|
- (NSURLSessionDataTask *)removeSelfFromRoom:(NSString *)token forAccount:(TalkAccount *)account withCompletionBlock:(LeaveRoomCompletionBlock)block;
|
|
|
|
- (NSURLSessionDataTask *)promoteParticipant:(NSString *)user toModeratorOfRoom:(NSString *)token forAccount:(TalkAccount *)account withCompletionBlock:(ParticipantModificationCompletionBlock)block;
|
|
|
|
- (NSURLSessionDataTask *)demoteModerator:(NSString *)moderator toParticipantOfRoom:(NSString *)token forAccount:(TalkAccount *)account withCompletionBlock:(ParticipantModificationCompletionBlock)block;
|
2018-07-24 17:31:29 +03:00
|
|
|
|
2017-07-11 18:55:59 +03:00
|
|
|
// Call Controller
|
2019-10-11 19:50:43 +03:00
|
|
|
- (NSURLSessionDataTask *)getPeersForCall:(NSString *)token forAccount:(TalkAccount *)account withCompletionBlock:(GetPeersForCallCompletionBlock)block;
|
|
|
|
- (NSURLSessionDataTask *)joinCall:(NSString *)token forAccount:(TalkAccount *)account withCompletionBlock:(JoinCallCompletionBlock)block;
|
|
|
|
- (NSURLSessionDataTask *)leaveCall:(NSString *)token forAccount:(TalkAccount *)account withCompletionBlock:(LeaveCallCompletionBlock)block;
|
2017-07-11 18:55:59 +03:00
|
|
|
|
2018-04-26 15:10:41 +03:00
|
|
|
// Chat Controller
|
2019-10-11 19:50:43 +03:00
|
|
|
- (NSURLSessionDataTask *)receiveChatMessagesOfRoom:(NSString *)token fromLastMessageId:(NSInteger)messageId history:(BOOL)history includeLastMessage:(BOOL)include timeout:(BOOL)timeout forAccount:(TalkAccount *)account withCompletionBlock:(GetChatMessagesCompletionBlock)block;
|
2020-04-03 17:49:57 +03:00
|
|
|
- (NSURLSessionDataTask *)sendChatMessage:(NSString *)message toRoom:(NSString *)token displayName:(NSString *)displayName replyTo:(NSInteger)replyTo referenceId:(NSString *)referenceId forAccount:(TalkAccount *)account withCompletionBlock:(SendChatMessagesCompletionBlock)block;
|
2019-10-11 19:50:43 +03:00
|
|
|
- (NSURLSessionDataTask *)getMentionSuggestionsInRoom:(NSString *)token forString:(NSString *)string forAccount:(TalkAccount *)account withCompletionBlock:(GetMentionSuggestionsCompletionBlock)block;
|
2018-04-26 15:10:41 +03:00
|
|
|
|
2017-09-26 13:36:17 +03:00
|
|
|
// Signaling Controller
|
2019-10-11 19:50:43 +03:00
|
|
|
- (NSURLSessionDataTask *)sendSignalingMessages:(NSString *)messages toRoom:(NSString *)token forAccount:(TalkAccount *)account withCompletionBlock:(SendSignalingMessagesCompletionBlock)block;
|
|
|
|
- (NSURLSessionDataTask *)pullSignalingMessagesFromRoom:(NSString *)token forAccount:(TalkAccount *)account withCompletionBlock:(PullSignalingMessagesCompletionBlock)block;
|
|
|
|
- (NSURLSessionDataTask *)getSignalingSettingsForAccount:(TalkAccount *)account withCompletionBlock:(GetSignalingSettingsCompletionBlock)block;
|
|
|
|
- (NSString *)authenticationBackendUrlForAccount:(TalkAccount *)account;
|
2017-07-28 20:13:44 +03:00
|
|
|
|
2019-04-23 18:03:12 +03:00
|
|
|
// WebDAV client
|
2019-10-11 19:50:43 +03:00
|
|
|
- (void)readFolderForAccount:(TalkAccount *)account atPath:(NSString *)path depth:(NSString *)depth withCompletionBlock:(ReadFolderCompletionBlock)block;
|
|
|
|
- (void)shareFileOrFolderForAccount:(TalkAccount *)account atPath:(NSString *)path toRoom:(NSString *)token withCompletionBlock:(ShareFileOrFolderCompletionBlock)block;
|
2020-11-11 21:33:42 +03:00
|
|
|
- (void)getFileByFileId:(TalkAccount *)account fileId:(NSString *)fileId
|
|
|
|
withCompletionBlock:(GetFileByFileIdCompletionBlock)block;
|
2019-04-23 18:03:12 +03:00
|
|
|
|
2017-09-07 20:57:03 +03:00
|
|
|
// User avatars
|
2019-10-11 19:50:43 +03:00
|
|
|
- (NSURLRequest *)createAvatarRequestForUser:(NSString *)userId andSize:(NSInteger)size usingAccount:(TalkAccount *)account;
|
2017-07-11 18:55:59 +03:00
|
|
|
|
2019-10-14 16:19:26 +03:00
|
|
|
// File previews
|
|
|
|
- (NSURLRequest *)createPreviewRequestForFile:(NSString *)fileId width:(NSInteger)width height:(NSInteger)height usingAccount:(TalkAccount *)account;
|
|
|
|
|
2017-09-27 15:07:58 +03:00
|
|
|
// User Profile
|
2019-10-11 19:50:43 +03:00
|
|
|
- (NSURLSessionDataTask *)getUserProfileForAccount:(TalkAccount *)account withCompletionBlock:(GetUserProfileCompletionBlock)block;
|
2019-10-22 13:04:34 +03:00
|
|
|
- (void)saveProfileImageForAccount:(TalkAccount *)account;
|
2019-10-28 19:06:05 +03:00
|
|
|
- (UIImage *)userProfileImageForAccount:(TalkAccount *)account withSize:(CGSize)size;
|
2019-11-07 12:31:07 +03:00
|
|
|
- (void)removeProfileImageForAccount:(TalkAccount *)account;
|
2017-09-27 15:07:58 +03:00
|
|
|
|
2020-09-14 14:19:29 +03:00
|
|
|
// User Status
|
|
|
|
- (NSURLSessionDataTask *)getUserStatusForAccount:(TalkAccount *)account withCompletionBlock:(GetUserStatusCompletionBlock)block;
|
|
|
|
- (NSURLSessionDataTask *)setUserStatus:(NSString *)status forAccount:(TalkAccount *)account withCompletionBlock:(SetUserStatusCompletionBlock)block;
|
|
|
|
|
2018-02-20 18:33:48 +03:00
|
|
|
// Server capabilities
|
2019-10-11 19:50:43 +03:00
|
|
|
- (NSURLSessionDataTask *)getServerCapabilitiesForServer:(NSString *)server withCompletionBlock:(GetServerCapabilitiesCompletionBlock)block;
|
|
|
|
- (NSURLSessionDataTask *)getServerCapabilitiesForAccount:(TalkAccount *)account withCompletionBlock:(GetServerCapabilitiesCompletionBlock)block;
|
2018-02-20 18:33:48 +03:00
|
|
|
|
2018-10-22 19:23:37 +03:00
|
|
|
// Server notifications
|
2019-10-11 19:50:43 +03:00
|
|
|
- (NSURLSessionDataTask *)getServerNotification:(NSInteger)notificationId forAccount:(TalkAccount *)account withCompletionBlock:(GetServerNotificationCompletionBlock)block;
|
2018-10-22 19:23:37 +03:00
|
|
|
|
2017-11-13 16:26:07 +03:00
|
|
|
// Push Notifications
|
2019-10-11 19:50:43 +03:00
|
|
|
- (NSURLSessionDataTask *)subscribeAccount:(TalkAccount *)account toNextcloudServerWithCompletionBlock:(SubscribeToNextcloudServerCompletionBlock)block;
|
|
|
|
- (NSURLSessionDataTask *)unsubscribeAccount:(TalkAccount *)account fromNextcloudServerWithCompletionBlock:(UnsubscribeToNextcloudServerCompletionBlock)block;
|
|
|
|
- (NSURLSessionDataTask *)subscribeAccount:(TalkAccount *)account toPushServerWithCompletionBlock:(SubscribeToPushProxyCompletionBlock)block;
|
|
|
|
- (NSURLSessionDataTask *)unsubscribeAccount:(TalkAccount *)account fromPushServerWithCompletionBlock:(UnsubscribeToPushProxyCompletionBlock)block;
|
2017-11-13 16:26:07 +03:00
|
|
|
|
|
|
|
|
2017-07-04 20:15:28 +03:00
|
|
|
@end
|