diff --git a/Nynja/Generated/LocalizableConstants.swift b/Nynja/Generated/LocalizableConstants.swift index ed092328bb8bb775e7381bfde5c65ed713a62b81..1847b5909bdbc8ec7b4a92c7323c8b5fa6308b66 100644 --- a/Nynja/Generated/LocalizableConstants.swift +++ b/Nynja/Generated/LocalizableConstants.swift @@ -1398,6 +1398,8 @@ internal extension String { static var youAreNotAllowedToLogin: String { return localizable.tr("Localizable", "You_are_not_allowed_to_login") } /// You can't call to yourself static var youCanTCallToYourself: String { return localizable.tr("Localizable", "You_can't_call_to_yourself") } + /// Messaging service temporarily unavailable + static var youCanTCallWhenMessagingUnavailable: String { return localizable.tr("Localizable", "You_can't_call_when_messaging_unavailable") } /// You can't call when you are talking static var youCanTCallWhenYouCalling: String { return localizable.tr("Localizable", "You_can't_call_when_you_calling") } /// You can not remove all members. diff --git a/Nynja/Modules/AddParticipants/AddParticipantsProtocols.swift b/Nynja/Modules/AddParticipants/AddParticipantsProtocols.swift index 2fa7f664f23105a2a5f5da4943251c43fa7e68c0..a3f2596c6eb181c90c6c5a9c983bfaed9e1c820a 100644 --- a/Nynja/Modules/AddParticipants/AddParticipantsProtocols.swift +++ b/Nynja/Modules/AddParticipants/AddParticipantsProtocols.swift @@ -89,4 +89,5 @@ protocol AddParticipantsInteractorOutputProtocol: class { func participantsFetched(_ participants: [Participant]) func participantsFiltered(_ participants: [Participant]) func created(room: Room) + func continueWithoutRoom() } diff --git a/Nynja/Modules/AddParticipants/Interactor/AddParticipantsInteractor.swift b/Nynja/Modules/AddParticipants/Interactor/AddParticipantsInteractor.swift index 19d40bd23c88747e1dcee434e292c129eef73348..83da27f02fcd74b779673e282bc5fcdf0cef642c 100644 --- a/Nynja/Modules/AddParticipants/Interactor/AddParticipantsInteractor.swift +++ b/Nynja/Modules/AddParticipants/Interactor/AddParticipantsInteractor.swift @@ -24,6 +24,8 @@ class AddParticipantsInteractor: BaseInteractor, AddParticipantsInteractorInputP private let storageService = StorageService.sharedInstance private let mqttService = MQTTService.sharedInstance private let callService = NynjaCommunicatorService.sharedInstance + private var createRoomInProgress: Bool = false + private var timerCreateRoom: Timer? required init(mode: ParticipantsModeType) { self.participantsMode = mode @@ -74,16 +76,58 @@ class AddParticipantsInteractor: BaseInteractor, AddParticipantsInteractorInputP } func createRoom(name: String, avatar: UIImage?, members: [Member]) { + guard mqttService.isConnectedSuccess else { + AlertManager.sharedInstance.showAlertOk(message: String.localizable.youCanTCallWhenMessagingUnavailable) + return + } + + guard let callId = allocateId else { + return + } + + callService.updateConferenceInfo(callId: callId, subject: name) + sendRoom(with: name, avatar: nil, members: members) } - func sendRoom(with name: String, avatar: String?, members: [Member]) { - guard let phoneId = storageService.phoneId else { + private func sendRoom(with name: String, avatar: String?, members: [Member]) { + let roomId = localId + guard false == createRoomInProgress, let phoneId = self.storageService.phoneId else { return } - mqttService.createRoom(phoneId: phoneId, roomId: localId, name: name, avatar: avatar, members: members) + createRoomInProgress = true + self.mqttService.createRoom(phoneId: phoneId, roomId: roomId, name: name, avatar: avatar, members: members) + startTimerCreateRoom() } + private func startTimerCreateRoom() { + if nil == timerCreateRoom { + timerCreateRoom = Timer.scheduledTimer(timeInterval: 3, + target: self, + selector: #selector(createRoomDeadlineExceeded), + userInfo: nil, + repeats: false) + } + } + + private func killTimerCreateRoom() { + if let timer = timerCreateRoom, timer.isValid { + timer.invalidate() + } + + timerCreateRoom = nil + } + + @objc func createRoomDeadlineExceeded() { + // Continue call creation even create group is not yet completed. + // If the group creation succeeds after that it will be automatically associated with the group call + + if createRoomInProgress { + createRoomInProgress = false + presenter?.continueWithoutRoom() + } + } + //MARK: - AddParticipantsInteractorInputProtocol func fetchParticipants(`for` mode: ParticipantsModeType) { @@ -179,10 +223,11 @@ class AddParticipantsInteractor: BaseInteractor, AddParticipantsInteractorInputP } case .room: if let dbRoom = changes.first?.entity as? DBRoom, dbRoom.id == localId { - let room = Room(room: dbRoom) - presenter?.created(room: room) - if let callId = allocateId, let subject = room.name { - callService.updateConferenceInfo(callId: callId, subject: subject) + killTimerCreateRoom() + if createRoomInProgress { + createRoomInProgress = false + let room = Room(room: dbRoom) + presenter?.created(room: room) } } default: diff --git a/Nynja/Modules/AddParticipants/Presenter/AddParticipantsPresenter.swift b/Nynja/Modules/AddParticipants/Presenter/AddParticipantsPresenter.swift index 50fab7e3470c6de699023cde9510e6e2de53c553..6140b9586b0b1b59bfe6d3332ea2d624dbac7e03 100644 --- a/Nynja/Modules/AddParticipants/Presenter/AddParticipantsPresenter.swift +++ b/Nynja/Modules/AddParticipants/Presenter/AddParticipantsPresenter.swift @@ -173,6 +173,16 @@ class AddParticipantsPresenter: BasePresenter, AddParticipantsPresenterProtocol, hide(with: (room.members?.contacts)!) } + func continueWithoutRoom() { + (wireFrame as? AddParticipantsWireFrame)?.main?.view?.hideSpinner() + guard let members = self.roomToCreate.members else { + wireFrame.hide(with: .cancel) + return + } + + hide(with: members.contacts) + } + private func grouped(_ participants: [Participant]) -> GroupedParticipants { switch self.participantsMode! { case .create: diff --git a/Nynja/Resources/en.lproj/Localizable.strings b/Nynja/Resources/en.lproj/Localizable.strings index ebadea743db265241a80cc8a14fd6295ae55196d..d68af6ad2165b5da927f9c9e49c935a44f6916c4 100644 --- a/Nynja/Resources/en.lproj/Localizable.strings +++ b/Nynja/Resources/en.lproj/Localizable.strings @@ -213,6 +213,7 @@ "Return_to_call"="Return to call"; "You_can't_call_to_yourself"="You can't call to yourself"; "You_can't_call_when_you_calling"="You can't call when you are talking"; +"You_can't_call_when_messaging_unavailable"="Messaging service temporarily unavailable"; // MARK: record "message_delay"="Message Delay"; diff --git a/Podfile b/Podfile index b03fe8e320309374d2ae52c03d8789144ed4298a..d1359819ab76f6b5cb80b3618c75a852c14c8630 100644 --- a/Podfile +++ b/Podfile @@ -39,7 +39,7 @@ def commonPodsForNynja pod 'MaterialComponents/FlexibleHeader', '= 55.3.0' pod 'JTAppleCalendar', '= 7.1.5' - pod 'NynjaSDK', '= 1.6.2' + pod 'NynjaSDK', '= 1.6.3' pod 'CryptoSwift', '= 0.10.0' diff --git a/Podfile.lock b/Podfile.lock index fdaa1dac87778442b95d98b953c1df0ecfe1a7e8..ff5a1c94cd760445d06f980421474c52f4d4c259 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -62,7 +62,7 @@ PODS: - MaterialComponents/private/Application - MDFTextAccessibility (1.2.0) - MulticastDelegateSwift (2.1.1) - - NynjaSDK (1.6.2) + - NynjaSDK (1.6.3) - QRCode (2.0) - SDWebImage (4.4.2): - SDWebImage/Core (= 4.4.2) @@ -95,7 +95,7 @@ DEPENDENCIES: - libPhoneNumber-iOS (= 0.9.13) - MaterialComponents/FlexibleHeader (= 55.3.0) - MulticastDelegateSwift (= 2.1.1) - - NynjaSDK (= 1.6.2) + - NynjaSDK (= 1.6.3) - QRCode (= 2.0) - SDWebImage (= 4.4.2) - SnapKit (= 4.0.0) @@ -174,7 +174,7 @@ SPEC CHECKSUMS: MaterialComponents: 915f4e844400a35db3ea4c710a9af40aa8bcb093 MDFTextAccessibility: 94098925e0853551c5a311ce7c1ecefbe297cdb6 MulticastDelegateSwift: 93eb077c24f50574b3f8a3f23bf71be6de6e3b41 - NynjaSDK: 59f72e445d932cee5357e1dfa2e23c75daa91934 + NynjaSDK: fb6cf28b592f71364a2f5ab4d7a78bc3c9e093bf QRCode: f98a1886c8f37523704a7512a4c0cd45b34c18a4 SDWebImage: 624d6e296c69b244bcede364c72ae0430ac14681 SnapKit: a42d492c16e80209130a3379f73596c3454b7694 @@ -183,6 +183,6 @@ SPEC CHECKSUMS: SwiftyTimer: 2efd74b060d69ad4f1496baf5bbedbe132125fcf TestFairy: 842f8ddc45477b208eb85326b0418047b40f7137 -PODFILE CHECKSUM: 160e778d0b84bb42f76d12ba2763c20eb3de879c +PODFILE CHECKSUM: 00ed638bdaa7337bffdb771863e77163a3ae9cb7 COCOAPODS: 1.5.3