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
13 changes: 13 additions & 0 deletions LeanCloudTests/IMConversationTestCase.swift
Original file line number Diff line number Diff line change
Expand Up @@ -1831,6 +1831,8 @@ class IMConversationTestCase: RTMBaseTestCase {
})
}

delay()

expecting { (exp) in
let convB = clientB.convCollection.values.first
XCTAssertNil(convB?.memberInfoTable)
Expand All @@ -1842,6 +1844,17 @@ class IMConversationTestCase: RTMBaseTestCase {
})
}

expecting { (exp) in
convA?.fetchMemberInfoTable(completion: { (result) in
XCTAssertTrue(Thread.isMainThread)
XCTAssertTrue(result.isSuccess)
XCTAssertNil(result.error)
XCTAssertNotNil(convA?.memberInfoTable)
XCTAssertEqual(convA?.memberInfoTable?.count, 1)
exp.fulfill()
})
}

multiExpecting(expectations: { () -> [XCTestExpectation] in
let exp = self.expectation(description: "change member role to member")
exp.expectedFulfillmentCount = 2
Expand Down
56 changes: 32 additions & 24 deletions Sources/RTM/IMConversation.swift
Original file line number Diff line number Diff line change
Expand Up @@ -1935,33 +1935,41 @@ extension IMConversation {
assert(client.specificAssertion)
switch result {
case .success(value: let token):
let header: [String: String] = [
"X-LC-IM-Session-Token": token,
]
let parameters: [String: Any] = [
"client_id": client.ID,
"cid": self.ID,
]
_ = client.application.httpClient.request(
.get, "classes/_ConversationMemberInfo",
parameters: parameters,
headers: header)
{ (response) in
if let error = LCError(response: response) {
completion(client, .failure(error: error))
} else if let results = response.results as? [[String: Any]] {
let creator = self.creator
var table: [String: MemberInfo] = [:]
for rawData in results {
if let info = MemberInfo(rawData: rawData, creator: creator) {
table[info.ID] = info
do {
guard let whereString = try ["cid": self.ID].jsonString() else {
completion(client, .failure(error: LCError(code: .malformedData)))
return
}
let header: [String: String] = [
"X-LC-IM-Session-Token": token,
]
let parameters: [String: Any] = [
"client_id": client.ID,
"where": whereString,
]
_ = client.application.httpClient.request(
.get, "classes/_ConversationMemberInfo",
parameters: parameters,
headers: header)
{ (response) in
if let error = LCError(response: response) {
completion(client, .failure(error: error))
} else if let results = response.results as? [[String: Any]] {
let creator = self.creator
var table: [String: MemberInfo] = [:]
for rawData in results {
if let info = MemberInfo(rawData: rawData, creator: creator) {
table[info.ID] = info
}
}
self.sync(self._memberInfoTable = table)
completion(client, .success)
} else {
completion(client, .failure(error: LCError(code: .malformedData)))
}
self.sync(self._memberInfoTable = table)
completion(client, .success)
} else {
completion(client, .failure(error: LCError(code: .malformedData)))
}
} catch {
completion(client, .failure(error: LCError(error: error)))
}
case .failure(error: let error):
completion(client, .failure(error: error))
Expand Down