Skip to content

Commit dca6276

Browse files
authored
Merge pull request #345 from zapcannon87/developer
fix(IM): rcp event should not update last delivered & read date
2 parents 8c539a3 + a3a39d1 commit dca6276

File tree

3 files changed

+29
-30
lines changed

3 files changed

+29
-30
lines changed

LeanCloudTests/IMMessageTestCase.swift

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1161,11 +1161,9 @@ class IMMessageTestCase: RTMBaseTestCase {
11611161
wait(for: [getReadFlagExp], timeout: timeout)
11621162

11631163
let sendNeedRCPMessageExp = expectation(description: "send need RCP message")
1164-
sendNeedRCPMessageExp.expectedFulfillmentCount = 4
1164+
sendNeedRCPMessageExp.expectedFulfillmentCount = 3
11651165
sendingTuple?.delegator.conversationEvent = { client, conv, event in
11661166
switch event {
1167-
case .lastDeliveredAtUpdated:
1168-
sendNeedRCPMessageExp.fulfill()
11691167
case .message(event: let messageEvent):
11701168
switch messageEvent {
11711169
case .delivered(toClientID: _, messageID: _, deliveredTimestamp: _):

Sources/RTM/IMClient.swift

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2229,10 +2229,6 @@ extension IMClient {
22292229
}
22302230
client.localRecord.update(
22312231
lastServerTimestamp: serverTimestamp)
2232-
conversation.process(
2233-
rcpTimestamp: timestamp,
2234-
isRead: isRead,
2235-
client: client)
22362232
client.eventQueue.async {
22372233
client.delegate?.client(
22382234
client, conversation: conversation,

Sources/RTM/IMConversation.swift

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1165,18 +1165,20 @@ extension IMConversation {
11651165
assert(client.specificAssertion)
11661166
let rcpResult: LCGenericResult<MessageReceiptFlag>
11671167
if let convMessage = (inCommand.hasConvMessage ? inCommand.convMessage : nil) {
1168-
let readTimestamp = (convMessage.hasMaxReadTimestamp ? convMessage.maxReadTimestamp : nil)
1169-
if let timestamp = readTimestamp {
1170-
self.process(rcpTimestamp: timestamp, isRead: true, client: client)
1171-
}
1172-
let deliveredTimestamp = (convMessage.hasMaxAckTimestamp ? convMessage.maxAckTimestamp : nil)
1173-
if let timestamp = deliveredTimestamp {
1174-
self.process(rcpTimestamp: timestamp, isRead: false, client: client)
1175-
}
1168+
let maxReadTimestamp = (convMessage.hasMaxReadTimestamp
1169+
? convMessage.maxReadTimestamp
1170+
: nil)
1171+
let maxDeliveredTimestamp = (convMessage.hasMaxAckTimestamp
1172+
? convMessage.maxAckTimestamp
1173+
: nil)
1174+
self.process(
1175+
maxReadTimestamp: maxReadTimestamp,
1176+
maxDeliveredTimestamp: maxDeliveredTimestamp,
1177+
client: client)
11761178
rcpResult = .success(
11771179
value: MessageReceiptFlag(
1178-
readFlagTimestamp: readTimestamp,
1179-
deliveredFlagTimestamp: deliveredTimestamp))
1180+
readFlagTimestamp: maxReadTimestamp,
1181+
deliveredFlagTimestamp: maxDeliveredTimestamp))
11801182
} else {
11811183
rcpResult = .failure(
11821184
error: LCError(
@@ -1197,25 +1199,28 @@ extension IMConversation {
11971199
})
11981200
}
11991201

1200-
func process(rcpTimestamp: Int64, isRead: Bool, client: IMClient) {
1202+
private func process(
1203+
maxReadTimestamp: Int64?,
1204+
maxDeliveredTimestamp: Int64?,
1205+
client: IMClient)
1206+
{
12011207
assert(client.specificAssertion)
1202-
var event: IMConversationEvent?
1203-
if isRead {
1204-
if rcpTimestamp > (self.lastReadTimestamp ?? 0) {
1205-
self.lastReadTimestamp = rcpTimestamp
1206-
event = .lastReadAtUpdated
1207-
}
1208-
} else {
1209-
if rcpTimestamp > (self.lastDeliveredTimestamp ?? 0) {
1210-
self.lastDeliveredTimestamp = rcpTimestamp
1211-
event = .lastDeliveredAtUpdated
1208+
if let maxReadTimestamp = maxReadTimestamp,
1209+
maxReadTimestamp > (self.lastReadTimestamp ?? 0) {
1210+
self.lastReadTimestamp = maxReadTimestamp
1211+
client.eventQueue.async {
1212+
client.delegate?.client(
1213+
client, conversation: self,
1214+
event: .lastReadAtUpdated)
12121215
}
12131216
}
1214-
if let event = event {
1217+
if let maxDeliveredTimestamp = maxDeliveredTimestamp,
1218+
maxDeliveredTimestamp > (self.lastDeliveredTimestamp ?? 0) {
1219+
self.lastDeliveredTimestamp = maxDeliveredTimestamp
12151220
client.eventQueue.async {
12161221
client.delegate?.client(
12171222
client, conversation: self,
1218-
event: event)
1223+
event: .lastDeliveredAtUpdated)
12191224
}
12201225
}
12211226
}

0 commit comments

Comments
 (0)