From 07ccacf60c23ea71fcb030a2c2ecf8ac8e7f6987 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Wed, 26 May 2021 11:35:03 -0300 Subject: [PATCH 1/3] Small fixes. --- Signal/src/Calls/CallService.swift | 18 +++++++++++++----- .../src/Messages/Stickers/StickerManager.swift | 9 ++++++++- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/Signal/src/Calls/CallService.swift b/Signal/src/Calls/CallService.swift index 43e43ffef3..e281917f8d 100644 --- a/Signal/src/Calls/CallService.swift +++ b/Signal/src/Calls/CallService.swift @@ -556,10 +556,12 @@ public final class CallService: NSObject { // MARK: - private func updateGroupMembersForCurrentCallIfNecessary() { - guard let call = currentCall, call.isGroupCall, - let groupThread = call.thread as? TSGroupThread, - let memberInfo = groupMemberInfo(for: groupThread) else { return } - call.groupCall.updateGroupMembers(members: memberInfo) + DispatchQueue.main.async { + guard let call = self.currentCall, call.isGroupCall, + let groupThread = call.thread as? TSGroupThread, + let memberInfo = self.groupMemberInfo(for: groupThread) else { return } + call.groupCall.updateGroupMembers(members: memberInfo) + } } private func groupMemberInfo(for thread: TSGroupThread) -> [GroupMemberInfo]? { @@ -701,6 +703,7 @@ extension CallService { @objc @available(swift, obsoleted: 1.0) func peekCallAndUpdateThread(_ thread: TSGroupThread) { + AssertIsOnMainThread() self.peekCallAndUpdateThread(thread) } @@ -716,9 +719,14 @@ extension CallService { Logger.info("Ignoring peek request for the current call") return } - firstly(on: .global()) { + firstly(on: .main) { () -> [GroupMemberInfo]? in guard let memberInfo = self.groupMemberInfo(for: thread) else { owsFailDebug("Failed to fetch group member info to peek \(thread.uniqueId)") + return nil + } + return memberInfo + }.map(on: .global()) { (memberInfo: [GroupMemberInfo]?) in + guard let memberInfo = memberInfo else { return } diff --git a/SignalServiceKit/src/Messages/Stickers/StickerManager.swift b/SignalServiceKit/src/Messages/Stickers/StickerManager.swift index 9627979a23..430bbd24d0 100644 --- a/SignalServiceKit/src/Messages/Stickers/StickerManager.swift +++ b/SignalServiceKit/src/Messages/Stickers/StickerManager.swift @@ -699,7 +699,14 @@ public class StickerManager: NSObject { try OWSFileSystem.deleteFileIfExists(url: stickerDataUrl) try FileManager.default.copyItem(at: stickerTemporaryUrl, to: stickerDataUrl) } catch let error as NSError { - owsFailDebug("File write failed: \(error)") + if error.domain == NSCocoaErrorDomain, + error.code == 516, + OWSFileSystem.fileOrFolderExists(url: stickerDataUrl) { + // Races can occur. + Logger.warn("File already exists: \(error)") + } else { + owsFailDebug("File write failed: \(error)") + } return false } From 0ad7a501ec3b1c08248d07d27f60422f98d3ed69 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Wed, 26 May 2021 13:50:35 -0300 Subject: [PATCH 2/3] Refine error handling. --- SignalServiceKit/src/Messages/Stickers/StickerManager.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SignalServiceKit/src/Messages/Stickers/StickerManager.swift b/SignalServiceKit/src/Messages/Stickers/StickerManager.swift index 430bbd24d0..d74c830518 100644 --- a/SignalServiceKit/src/Messages/Stickers/StickerManager.swift +++ b/SignalServiceKit/src/Messages/Stickers/StickerManager.swift @@ -702,12 +702,12 @@ public class StickerManager: NSObject { if error.domain == NSCocoaErrorDomain, error.code == 516, OWSFileSystem.fileOrFolderExists(url: stickerDataUrl) { - // Races can occur. + // Races can occur; ignore and proceed. Logger.warn("File already exists: \(error)") } else { owsFailDebug("File write failed: \(error)") + return false } - return false } return databaseStorage.write { (transaction) -> Bool in From 877d90c8b80552be82f3cab0118b31dcc8e0044b Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Wed, 26 May 2021 16:12:25 -0300 Subject: [PATCH 3/3] Respond to CR. --- Signal/src/Calls/CallService.swift | 16 +++++----------- .../src/Messages/Stickers/StickerManager.swift | 2 +- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/Signal/src/Calls/CallService.swift b/Signal/src/Calls/CallService.swift index e281917f8d..27518d22bb 100644 --- a/Signal/src/Calls/CallService.swift +++ b/Signal/src/Calls/CallService.swift @@ -719,17 +719,11 @@ extension CallService { Logger.info("Ignoring peek request for the current call") return } - firstly(on: .main) { () -> [GroupMemberInfo]? in - guard let memberInfo = self.groupMemberInfo(for: thread) else { - owsFailDebug("Failed to fetch group member info to peek \(thread.uniqueId)") - return nil - } - return memberInfo - }.map(on: .global()) { (memberInfo: [GroupMemberInfo]?) in - guard let memberInfo = memberInfo else { - return - } - + guard let memberInfo = self.groupMemberInfo(for: thread) else { + owsFailDebug("Failed to fetch group member info to peek \(thread.uniqueId)") + return + } + firstly(on: .global()) { if let expectedEraId = expectedEraId { // If we're expecting a call with `expectedEraId`, prepopulate an entry in the database. // If it's the current call, we'll update with the PeekInfo once fetched diff --git a/SignalServiceKit/src/Messages/Stickers/StickerManager.swift b/SignalServiceKit/src/Messages/Stickers/StickerManager.swift index d74c830518..0675136eb2 100644 --- a/SignalServiceKit/src/Messages/Stickers/StickerManager.swift +++ b/SignalServiceKit/src/Messages/Stickers/StickerManager.swift @@ -700,7 +700,7 @@ public class StickerManager: NSObject { try FileManager.default.copyItem(at: stickerTemporaryUrl, to: stickerDataUrl) } catch let error as NSError { if error.domain == NSCocoaErrorDomain, - error.code == 516, + error.code == NSFileWriteFileExistsError, OWSFileSystem.fileOrFolderExists(url: stickerDataUrl) { // Races can occur; ignore and proceed. Logger.warn("File already exists: \(error)")