From b20b5af81340597b9620b259743f6ddff89cf700 Mon Sep 17 00:00:00 2001 From: Kateryna Kostiuk <kateryna.kostiuk@savoirfairelinux.com> Date: Tue, 31 Oct 2023 10:34:00 -0400 Subject: [PATCH] conversations: load profiles on background thread Change-Id: I9cd1054a1498bc49afdc4b59e5be84987ec571b8 --- .../Conversation/ConversationViewModel.swift | 34 +++++++++++++------ 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/Ring/Ring/Features/Conversations/Conversation/ConversationViewModel.swift b/Ring/Ring/Features/Conversations/Conversation/ConversationViewModel.swift index a0cfe0c83..18e0a408e 100644 --- a/Ring/Ring/Features/Conversations/Conversation/ConversationViewModel.swift +++ b/Ring/Ring/Features/Conversations/Conversation/ConversationViewModel.swift @@ -187,17 +187,10 @@ class ConversationViewModel: Stateable, ViewModel { .disposed(by: self.disposeBag) } else { let filterParicipants = conversation.value.getParticipants() - if let contact = self.contactsService.contact(withHash: filterParicipants.first?.jamiId ?? "") { - if let profile = self.contactsService.getProfile(uri: "ring:" + (filterParicipants.first?.jamiId ?? ""), accountId: self.conversation.value.accountId), - let alias = profile.alias, let photo = profile.photo { - if !alias.isEmpty { - self.displayName.accept(alias) - } - if !photo.isEmpty { - let data = NSData(base64Encoded: photo, options: NSData.Base64DecodingOptions.ignoreUnknownCharacters) as Data? // { - self.profileImageData.accept(data) - } - } + if let participantId = filterParicipants.first?.jamiId, + let contact = self.contactsService.contact(withHash: participantId) { + self.subscribeNonSwarmProfiles(uri: "ring:" + participantId, + accountId: self.conversation.value.accountId) if let contactUserName = contact.userName { self.userName.accept(contactUserName) } else if self.userName.value.isEmpty { @@ -232,6 +225,25 @@ class ConversationViewModel: Stateable, ViewModel { .disposed(by: self.disposeBag) } + private func subscribeNonSwarmProfiles(uri: String, accountId: String) { + self.profileService + .getProfile(uri: uri, createIfNotexists: false, accountId: accountId) + .subscribe(on: ConcurrentDispatchQueueScheduler(qos: .background)) + .subscribe { profile in + if let alias = profile.alias, let photo = profile.photo { + if !alias.isEmpty { + self.displayName.accept(alias) + } + if !photo.isEmpty { + let data = NSData(base64Encoded: photo, options: NSData.Base64DecodingOptions.ignoreUnknownCharacters) as Data? // { + self.profileImageData.accept(data) + } + } + } onError: { _ in + } + .disposed(by: self.disposeBag) + } + private func subscribeLastMessagesUpdate() { conversation.value.newMessages .subscribe { [weak self] _ in -- GitLab