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
2 changes: 1 addition & 1 deletion LeanCloudTests/RTMBaseTestCase.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,5 @@ import XCTest

class RTMBaseTestCase: BaseTestCase {

let testableRTMURL: URL = URL(string: "wss://rtm51.leancloud.cn")!
static let testableRTMURL: URL = URL(string: "wss://rtm51.leancloud.cn")!
}
2 changes: 1 addition & 1 deletion Sources/RTM/IMClient.swift
Original file line number Diff line number Diff line change
Expand Up @@ -801,7 +801,7 @@ extension IMClient {
if conv.isUnique {
conv.tryUpdateLocalStorageData(
client: self,
rawData: conv.sync(conv.rawData))
rawData: conv.rawData)
}
#endif
conversation = conv
Expand Down
51 changes: 32 additions & 19 deletions Sources/RTM/IMConversation.swift
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ public class IMConversation {
{
self.ID = ID
self.client = client
self.rawData = rawData
self._rawData = rawData
self.clientID = client.ID
self.convType = convType
let uniqueID = rawData[Key.uniqueId.rawValue] as? String
Expand All @@ -267,8 +267,16 @@ public class IMConversation {
}
#endif
}

private(set) var rawData: RawData

public private(set) var rawData: RawData {
set {
self.sync(self._rawData = newValue)
}
get {
return self.sync(self._rawData)
}
}
private var _rawData: RawData

let lock: NSLock = NSLock()

Expand Down Expand Up @@ -2183,8 +2191,8 @@ extension IMConversation {
return
}
let rawData = self.sync(closure: { () -> RawData in
self.rawData.merge(data) { (_, new) in new }
return self.rawData
self._rawData.merge(data) { (_, new) in new }
return self._rawData
})
#if canImport(GRDB)
self.tryUpdateLocalStorageData(client: client, rawData: rawData)
Expand All @@ -2193,7 +2201,7 @@ extension IMConversation {

private func operationRawDataReplaced(data: RawData, client: IMClient) {
self.sync(closure: {
self.rawData = data
self._rawData = data
self._isOutdated = false
})
if let message = self.decodingLastMessage(data: data, client: client) {
Expand Down Expand Up @@ -2248,14 +2256,17 @@ extension IMConversation {
}
self.safeUpdatingRawData(key: .members, value: newMembers)
}
if let udate = udate {
self.safeUpdatingRawData(key: .updatedAt, value: udate)
}
let rawData = self.sync(closure: { () -> RawData in
if let udate = udate {
self.updatingRawData(key: .updatedAt, value: udate)
}
return self._rawData
})
#if canImport(GRDB)
if let _ = client.localStorage {
self.tryUpdateLocalStorageData(
client: client,
rawData: self.sync(self.rawData))
rawData: rawData)
}
#endif
}
Expand Down Expand Up @@ -2286,12 +2297,14 @@ extension IMConversation {
}
})
}
if let udate = udate {
self.safeUpdatingRawData(key: .updatedAt, value: udate)
}
let tuple = self.sync(closure: { () -> (RawData, Bool) in
if let udate = udate {
self.updatingRawData(key: .updatedAt, value: udate)
}
return (self._rawData, self._isOutdated)
})
#if canImport(GRDB)
if let _ = client.localStorage {
let tuple = self.sync((self.rawData, self._isOutdated))
self.tryUpdateLocalStorageData(
client: client,
rawData: tuple.0,
Expand Down Expand Up @@ -2321,7 +2334,7 @@ extension IMConversation {
newUpdatedDate >= originUpdateDate else {
return
}
var rawDataCopy = self.sync(self.rawData)
var rawDataCopy = self.rawData
for keyPath in attr.keys {
var stack: [KeyAndDictionary] = []
var modifiedValue: Any?
Expand All @@ -2347,7 +2360,7 @@ extension IMConversation {
}
}
rawDataCopy[Key.updatedAt.rawValue] = udate
self.sync(self.rawData = rawDataCopy)
self.rawData = rawDataCopy
#if canImport(GRDB)
self.tryUpdateLocalStorageData(
client: client,
Expand Down Expand Up @@ -2413,7 +2426,7 @@ extension IMConversation {
let rawData = self.sync(closure: { () -> RawData in
self.updatingRawData(key: .mutedMembers, value: newMutedMembers)
self.updatingRawData(key: .updatedAt, value: udate)
return self.rawData
return self._rawData
})
#if canImport(GRDB)
self.tryUpdateLocalStorageData(client: client, rawData: rawData)
Expand Down Expand Up @@ -2556,7 +2569,7 @@ extension IMConversation {
}

func decodingRawData<T>(with string: String) -> T? {
return IMConversation.decoding(string: string, from: self.rawData)
return IMConversation.decoding(string: string, from: self._rawData)
}

static func decoding<T>(key: Key, from data: RawData) -> T? {
Expand All @@ -2580,7 +2593,7 @@ extension IMConversation {
}

func updatingRawData(string: String, value: Any) {
self.rawData[string] = value
self._rawData[string] = value
}
}

Expand Down