diff --git a/Rocket.Chat.xcodeproj/project.pbxproj b/Rocket.Chat.xcodeproj/project.pbxproj index 61ddeb225e..5ee750a39e 100644 --- a/Rocket.Chat.xcodeproj/project.pbxproj +++ b/Rocket.Chat.xcodeproj/project.pbxproj @@ -896,6 +896,7 @@ D32E28261DFD86C300D6019C /* PersistencyCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D32E28231DFD86C300D6019C /* PersistencyCoordinator.swift */; }; D3CFAFBD1E907D8900BADC0A /* ChatMessageTextViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3CFAFBC1E907D8900BADC0A /* ChatMessageTextViewModel.swift */; }; DB926AFD21FA0AEE0046F53F /* ChatAnnouncementView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB926AFC21FA0AEE0046F53F /* ChatAnnouncementView.swift */; }; + E3384EE522258E1200B47324 /* RoomOpenRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3384EE422258E1200B47324 /* RoomOpenRequest.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -1531,7 +1532,7 @@ 806C59A41FBB2F4C00C32D0A /* PostMessageRequestSpec.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostMessageRequestSpec.swift; sourceTree = ""; }; 806DB94D20698C25004ED8ED /* ChatMessageCellAccessibility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMessageCellAccessibility.swift; sourceTree = ""; }; 806EFA5D209BF1AC00D0D650 /* SubscriptionReadRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscriptionReadRequest.swift; sourceTree = ""; }; - 806EFA61209BF30500D0D650 /* SubscriptionsClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscriptionsClient.swift; sourceTree = ""; }; + 806EFA61209BF30500D0D650 /* SubscriptionsClient.swift */ = {isa = PBXFileReference; indentWidth = 4; lastKnownFileType = sourcecode.swift; path = SubscriptionsClient.swift; sourceTree = ""; tabWidth = 4; }; 807371991F94E83600D53ADF /* SocketError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SocketError.swift; sourceTree = ""; }; 8073719B1F963FA400D53ADF /* APITestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APITestCase.swift; sourceTree = ""; }; 8073719D1F9688B200D53ADF /* LoginServiceManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginServiceManager.swift; sourceTree = ""; }; @@ -1851,6 +1852,7 @@ D3CFAFBC1E907D8900BADC0A /* ChatMessageTextViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatMessageTextViewModel.swift; sourceTree = ""; }; DB926AFC21FA0AEE0046F53F /* ChatAnnouncementView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatAnnouncementView.swift; sourceTree = ""; }; E05A718A50D61E3E547007AF /* Pods-Rocket.Chat.test.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Rocket.Chat.test.xcconfig"; path = "Pods/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat.test.xcconfig"; sourceTree = ""; }; + E3384EE422258E1200B47324 /* RoomOpenRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RoomOpenRequest.swift; sourceTree = ""; }; F87E8221BEB77AF190F06201 /* Pods-Rocket.Chat.ShareExtension.beta.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Rocket.Chat.ShareExtension.beta.xcconfig"; path = "Pods/Target Support Files/Pods-Rocket.Chat.ShareExtension/Pods-Rocket.Chat.ShareExtension.beta.xcconfig"; sourceTree = ""; }; FEDACA44BBB1C0633DEA6F3D /* Pods-Rocket.ChatTests.beta.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Rocket.ChatTests.beta.xcconfig"; path = "Pods/Target Support Files/Pods-Rocket.ChatTests/Pods-Rocket.ChatTests.beta.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -3211,6 +3213,7 @@ 80235D1A1F74070100A56CA5 /* RoomMembersRequest.swift */, 990FF6D520740C79007B4A53 /* RoomMentionsRequest.swift */, 800E22851F8507E400DA84F1 /* RoomMessagesRequest.swift */, + E3384EE422258E1200B47324 /* RoomOpenRequest.swift */, 9987B59B2093E60C007D277C /* RoomFilesRequest.swift */, 414E8A8C20A5DD2200615CE6 /* RoomRolesRequest.swift */, 8039441020AF1334002F317A /* RoomKickRequest.swift */, @@ -5224,6 +5227,7 @@ 41BF4D6E215B4CA100588B35 /* DateSeparatorChatItem.swift in Sources */, 8073719A1F94E83600D53ADF /* SocketError.swift in Sources */, 413FB6C11FE17D7D00F010AA /* UIViewExtentions.swift in Sources */, + E3384EE522258E1200B47324 /* RoomOpenRequest.swift in Sources */, 1496A86D20FA4644005C2E14 /* NotificationsChooseCell.swift in Sources */, 8076FDB0204856AF00114F28 /* AuthCanBlockMessage.swift in Sources */, 8076FDA9204853DE00114F28 /* RealmExecute.swift in Sources */, diff --git a/Rocket.Chat/API/Clients/SubscriptionsClient.swift b/Rocket.Chat/API/Clients/SubscriptionsClient.swift index 54900d56d5..e32902d597 100644 --- a/Rocket.Chat/API/Clients/SubscriptionsClient.swift +++ b/Rocket.Chat/API/Clients/SubscriptionsClient.swift @@ -290,3 +290,26 @@ extension SubscriptionsClient { } } } + +// MARK: Open room + +extension SubscriptionsClient { + func openSubscription(subscription: Subscription) { + let roomOpenRequest = RoomOpenRequest(rid: subscription.rid, subscriptionType: subscription.type) + + api.fetch(roomOpenRequest) { result in + switch result { + case .resource(let resource): + guard resource.success == true else { + return + } + Realm.executeOnMainThread { realm in + subscription.open = true + realm.add(subscription, update: true) + } + case .error(let error): + debugPrint(error) + } + } + } +} diff --git a/Rocket.Chat/API/Requests/Room/RoomOpenRequest.swift b/Rocket.Chat/API/Requests/Room/RoomOpenRequest.swift new file mode 100644 index 0000000000..b7437e341a --- /dev/null +++ b/Rocket.Chat/API/Requests/Room/RoomOpenRequest.swift @@ -0,0 +1,59 @@ +// +// RoomOpenRequest.swift +// VitimMobile +// +// Created by Andrey Rudenko on 20/02/2019. +// Copyright © 2019 Vitim. All rights reserved. +// + +import SwiftyJSON + +private extension SubscriptionType { + var path: String { + switch self { + case .channel: + return "/api/v1/channels.open" + case .group: + return "/api/v1/groups.open" + case .directMessage: + return "/api/v1/im.open" + } + } +} + +final class RoomOpenRequest: APIRequest { + typealias APIResourceType = RoomOpenResource + + let requiredVersion = Version(0, 48, 0) + + let method: HTTPMethod = .post + var path: String { + return type.path + } + + let rid: String + let type: SubscriptionType + + init(rid: String, subscriptionType: SubscriptionType) { + self.rid = rid + self.type = subscriptionType + } + + func body() -> Data? { + let body = JSON( + ["roomId": rid] + ) + + return body.rawString()?.data(using: .utf8) + } +} + +final class RoomOpenResource: APIResource { + var success: Bool? { + return raw?["success"].boolValue + } + + var error: String? { + return raw?["error"].stringValue + } +} diff --git a/Rocket.Chat/Controllers/Subscriptions/SubscriptionsList/SubscriptionsViewController.swift b/Rocket.Chat/Controllers/Subscriptions/SubscriptionsList/SubscriptionsViewController.swift index 6c5cfdde89..fdf882cfab 100644 --- a/Rocket.Chat/Controllers/Subscriptions/SubscriptionsList/SubscriptionsViewController.swift +++ b/Rocket.Chat/Controllers/Subscriptions/SubscriptionsList/SubscriptionsViewController.swift @@ -509,6 +509,7 @@ extension SubscriptionsViewController: UITableViewDelegate { } controller.subscription = subscription + openSubscriptionIfNeeded(subscription) // When using iPads, we override the detail controller creating // a new instance. @@ -676,3 +677,17 @@ extension SubscriptionsViewController { } } } + +// MARK: - Open room API + +extension SubscriptionsViewController { + func openSubscriptionIfNeeded(_ subscription: Subscription) { + guard subscription.isJoined() && !subscription.open && subscription.type != .directMessage else { + return + } + + API.current()?.client( + SubscriptionsClient.self).openSubscription( + subscription: subscription) + } +}