Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions LeanCloudTests/IMConversationTestCase.swift
Original file line number Diff line number Diff line change
Expand Up @@ -1260,16 +1260,16 @@ class IMConversationTestCase: RTMBaseTestCase {
wait(for: [queryAllExp], timeout: timeout)

let queryTempExp = expectation(description: "query temporary conversation")
try? clientA.conversationQuery.getTemporaryConversations(by: [tempID], completion: { (result) in
try? clientA.conversationQuery.getTemporaryConversation(by: tempID) { (result) in
XCTAssertTrue(result.isSuccess)
XCTAssertNil(result.error)
XCTAssertEqual(result.value?.count, 1)
if let conv = result.value?.first {
XCTAssertNotNil(result.value)
if let conv = result.value {
XCTAssertEqual(conv.rawData["objectId"] as? String, conv.ID)
XCTAssertEqual(conv.rawData["conv_type"] as? Int, 4)
}
queryTempExp.fulfill()
})
}
wait(for: [queryTempExp], timeout: timeout)

clientA.convCollection.removeAll()
Expand Down
26 changes: 11 additions & 15 deletions Sources/RTM/IMClient.swift
Original file line number Diff line number Diff line change
Expand Up @@ -1676,26 +1676,22 @@ extension IMClient {
let query = IMConversationQuery(client: self)
do {
if ID.hasPrefix(IMTemporaryConversation.prefixOfID) {
try query.getTemporaryConversations(by: [ID], completion: { [weak self] (result) in
guard let client: IMClient = self else { return }
try query.getTemporaryConversation(by: ID) { [weak self] (result) in
guard let client = self else { return }
assert(client.specificAssertion)
switch result {
case .success(value: let conversations):
if let first: IMConversation = conversations.first {
callback(client, .success(value: first))
} else {
callback(client, .failure(error: LCError(code: .conversationNotFound)))
}
case .success(value: let conversation):
callback(client, .success(value: conversation))
case .failure(error: let error):
callback(client, .failure(error: error))
}
})
}
} else {
try query.getConversation(by: ID, completion: { [weak self] (result) in
guard let client: IMClient = self else { return }
try query.getConversation(by: ID) { [weak self] (result) in
guard let client = self else { return }
assert(client.specificAssertion)
callback(client, result)
})
}
}
} catch {
assert(self.specificAssertion)
Expand Down Expand Up @@ -1745,16 +1741,16 @@ extension IMClient {
} else {
let query = IMConversationQuery(client: self)
do {
try query.getTemporaryConversations(by: IDs, completion: { [weak self] (result) in
guard let client: IMClient = self else { return }
try query.getTemporaryConversations(by: IDs) { [weak self] (result) in
guard let client = self else { return }
assert(client.specificAssertion)
switch result {
case .success(value: let conversations):
completion(client, .success(value: conversations))
case .failure(error: let error):
completion(client, .failure(error: error))
}
})
}
} catch {
assert(self.specificAssertion)
completion(self, .failure(error: LCError(error: error)))
Expand Down
19 changes: 6 additions & 13 deletions Sources/RTM/IMConversation.swift
Original file line number Diff line number Diff line change
Expand Up @@ -3006,25 +3006,18 @@ public class IMTemporaryConversation: IMConversation {
}
#endif

/// Refresh temporary conversation's data.
///
/// - Parameter completion: callback
/// Refresh data of temporary conversation.
/// - Parameter completion: Result callback.
public override func refresh(completion: @escaping (LCBooleanResult) -> Void) throws {
try self.client?.conversationQuery.getTemporaryConversations(by: [self.ID], completion: { (result) in
try self.client?.conversationQuery.getTemporaryConversation(by: self.ID) { (result) in
switch result {
case .success(value: let tempConvs):
if tempConvs.isEmpty {
let error = LCError(code: .conversationNotFound)
completion(.failure(error: error))
} else {
completion(.success)
}
case .success:
completion(.success)
case .failure(error: let error):
completion(.failure(error: error))
}
})
}
}

}

extension LCError {
Expand Down
25 changes: 25 additions & 0 deletions Sources/RTM/IMConversationQuery.swift
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,31 @@ public class IMConversationQuery: LCQuery {
)
}

/// Get Temporary Conversation by ID.
/// - Parameters:
/// - ID: The ID of the temporary conversation.
/// - completion: Result callback.
public func getTemporaryConversation(
by ID: String,
completion: @escaping (LCGenericResult<IMTemporaryConversation>) -> Void)
throws
{
try self.getTemporaryConversations(by: [ID]) { (result) in
switch result {
case .success(value: let conversations):
if let conversation = conversations.first {
completion(.success(value: conversation))
} else {
completion(.failure(
error: LCError(
code: .conversationNotFound)))
}
case .failure(error: let error):
completion(.failure(error: error))
}
}
}

/// Get Temporary Conversations by ID set.
///
/// - Parameters:
Expand Down