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