Bump SDK version and fix breaking changes. (#610)

This commit is contained in:
Doug
2023-02-22 14:31:17 +00:00
committed by GitHub
parent 246879f1bf
commit 2399088084
8 changed files with 61 additions and 58 deletions
@@ -95,8 +95,8 @@
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",
"location" : "https://github.com/matrix-org/matrix-rust-components-swift", "location" : "https://github.com/matrix-org/matrix-rust-components-swift",
"state" : { "state" : {
"revision" : "986c400f8d4d0f9d467370f98d70b6b742e90e18", "revision" : "cceadb7fb59518e642010901b8f0cd87946221f3",
"version" : "1.0.38-alpha" "version" : "1.0.40-alpha"
} }
}, },
{ {
@@ -46,7 +46,7 @@ struct MockRoomProxy: RoomProxyProtocol {
func startLiveEventListener() { } func startLiveEventListener() { }
func addTimelineListener(listener: TimelineListener) -> Result<Void, RoomProxyError> { func addTimelineListener(listener: TimelineListener) -> Result<[TimelineItem], RoomProxyError> {
.failure(.failedAddingTimelineListener) .failure(.failedAddingTimelineListener)
} }
@@ -136,16 +136,16 @@ class RoomProxy: RoomProxyProtocol {
} }
} }
func addTimelineListener(listener: TimelineListener) -> Result<Void, RoomProxyError> { func addTimelineListener(listener: TimelineListener) -> Result<[TimelineItem], RoomProxyError> {
let settings = RoomSubscription(requiredState: [RequiredState(key: "m.room.topic", value: ""), let settings = RoomSubscription(requiredState: [RequiredState(key: "m.room.topic", value: ""),
RequiredState(key: "m.room.canonical_alias", value: "")], RequiredState(key: "m.room.canonical_alias", value: "")],
timelineLimit: nil) timelineLimit: nil)
if let token = slidingSyncRoom.subscribeAndAddTimelineListener(listener: listener, settings: settings) { if let result = try? slidingSyncRoom.subscribeAndAddTimelineListener(listener: listener, settings: settings) {
timelineObservationToken = token timelineObservationToken = result.taskHandle
Task { Task {
await fetchMembers() await fetchMembers()
} }
return .success(()) return .success(result.items)
} else { } else {
return .failure(.failedAddingTimelineListener) return .failure(.failedAddingTimelineListener)
} }
@@ -57,7 +57,7 @@ protocol RoomProxyProtocol {
func loadDisplayNameForUserId(_ userId: String) async -> Result<String?, RoomProxyError> func loadDisplayNameForUserId(_ userId: String) async -> Result<String?, RoomProxyError>
func addTimelineListener(listener: TimelineListener) -> Result<Void, RoomProxyError> func addTimelineListener(listener: TimelineListener) -> Result<[TimelineItem], RoomProxyError>
func paginateBackwards(requestSize: UInt, untilNumberOfItems: UInt) async -> Result<Void, RoomProxyError> func paginateBackwards(requestSize: UInt, untilNumberOfItems: UInt) async -> Result<Void, RoomProxyError>
@@ -54,11 +54,11 @@ class RoomTimelineProvider: RoomTimelineProviderProtocol {
.store(in: &cancellables) .store(in: &cancellables)
switch await roomProxy.addTimelineListener(listener: roomTimelineListener) { switch await roomProxy.addTimelineListener(listener: roomTimelineListener) {
case .success(let items):
itemProxies = items.map(TimelineItemProxy.init)
case .failure: case .failure:
let roomID = await roomProxy.id let roomID = await roomProxy.id
MXLog.error("Failed adding timeline listener on room with identifier: \(roomID)") MXLog.error("Failed adding timeline listener on room with identifier: \(roomID)")
default:
break
} }
} }
} }
@@ -93,73 +93,70 @@ class RoomTimelineProvider: RoomTimelineProviderProtocol {
var changes = [CollectionDifference<TimelineItemProxy>.Change]() var changes = [CollectionDifference<TimelineItemProxy>.Change]()
switch diff.change() { switch diff.change() {
case .push: case .pushFront:
guard let item = diff.push() else { guard let item = diff.pushFront() else { fatalError() }
fatalError()
}
MXLog.verbose("Push") MXLog.verbose("Push Front")
let itemProxy = TimelineItemProxy(item: item)
changes.append(.insert(offset: 0, element: itemProxy, associatedWith: nil))
case .pushBack:
guard let item = diff.pushBack() else { fatalError() }
MXLog.verbose("Push Back")
let itemProxy = TimelineItemProxy(item: item) let itemProxy = TimelineItemProxy(item: item)
changes.append(.insert(offset: Int(itemProxies.count), element: itemProxy, associatedWith: nil)) changes.append(.insert(offset: Int(itemProxies.count), element: itemProxy, associatedWith: nil))
case .updateAt: case .insert:
guard let update = diff.updateAt() else { guard let update = diff.insert() else { fatalError() }
fatalError()
MXLog.verbose("Insert at \(update.index), current total count: \(itemProxies.count)")
let itemProxy = TimelineItemProxy(item: update.item)
changes.append(.insert(offset: Int(update.index), element: itemProxy, associatedWith: nil))
case .append:
guard let items = diff.append() else { fatalError() }
MXLog.verbose("Append new items with count: \(items.count), to current total count: \(itemProxies.count)")
for (index, item) in items.enumerated() {
changes.append(.insert(offset: Int(itemProxies.count) + index, element: TimelineItemProxy(item: item), associatedWith: nil))
} }
case .set:
guard let update = diff.set() else { fatalError() }
MXLog.verbose("Update \(update.index), current total count: \(itemProxies.count)") MXLog.verbose("Update \(update.index), current total count: \(itemProxies.count)")
let itemProxy = TimelineItemProxy(item: update.item) let itemProxy = TimelineItemProxy(item: update.item)
changes.append(.remove(offset: Int(update.index), element: itemProxy, associatedWith: nil)) changes.append(.remove(offset: Int(update.index), element: itemProxy, associatedWith: nil))
changes.append(.insert(offset: Int(update.index), element: itemProxy, associatedWith: nil)) changes.append(.insert(offset: Int(update.index), element: itemProxy, associatedWith: nil))
case .insertAt: case .popFront:
guard let update = diff.insertAt() else { MXLog.verbose("Pop Front, current total count: \(itemProxies.count)")
fatalError() guard let itemProxy = itemProxies.first else { fatalError() }
}
MXLog.verbose("Insert at \(update.index), current total count: \(itemProxies.count)") changes.append(.remove(offset: 0, element: itemProxy, associatedWith: nil))
let itemProxy = TimelineItemProxy(item: update.item) case .popBack:
changes.append(.insert(offset: Int(update.index), element: itemProxy, associatedWith: nil)) MXLog.verbose("Pop Back, current total count: \(itemProxies.count)")
case .move: guard let itemProxy = itemProxies.last else { fatalError() }
guard let update = diff.move() else {
fatalError()
}
MXLog.verbose("Move from: \(update.oldIndex) to: \(update.newIndex), current total count: \(itemProxies.count)") changes.append(.remove(offset: itemProxies.count - 1, element: itemProxy, associatedWith: nil))
let itemProxy = itemProxies[Int(update.oldIndex)] case .remove:
changes.append(.remove(offset: Int(update.oldIndex), element: itemProxy, associatedWith: nil)) guard let index = diff.remove() else { fatalError() }
changes.append(.insert(offset: Int(update.newIndex), element: itemProxy, associatedWith: nil))
case .removeAt:
guard let index = diff.removeAt() else {
fatalError()
}
MXLog.verbose("Remove from: \(index), current total count: \(itemProxies.count)") MXLog.verbose("Remove item at: \(index), current total count: \(itemProxies.count)")
let itemProxy = itemProxies[Int(index)] let itemProxy = itemProxies[Int(index)]
changes.append(.remove(offset: Int(index), element: itemProxy, associatedWith: nil)) changes.append(.remove(offset: Int(index), element: itemProxy, associatedWith: nil))
case .replace: case .clear:
guard let items = diff.replace() else { MXLog.verbose("Clear all items, current total count: \(itemProxies.count)")
fatalError() for (index, itemProxy) in itemProxies.enumerated() {
changes.append(.remove(offset: index, element: itemProxy, associatedWith: nil))
} }
case .reset:
guard let items = diff.reset() else { fatalError() }
MXLog.verbose("Replace all items with new count: \(items.count), current total count: \(itemProxies.count)") MXLog.verbose("Replace all items with new count: \(items.count), current total count: \(itemProxies.count)")
for (index, itemProxy) in itemProxies.enumerated() { for (index, itemProxy) in itemProxies.enumerated() {
changes.append(.remove(offset: index, element: itemProxy, associatedWith: nil)) changes.append(.remove(offset: index, element: itemProxy, associatedWith: nil))
} }
for (index, item) in items.enumerated() { for (index, timelineItem) in items.enumerated() {
changes.append(.insert(offset: index, element: TimelineItemProxy(item: item), associatedWith: nil)) changes.append(.insert(offset: index, element: TimelineItemProxy(item: timelineItem), associatedWith: nil))
} }
case .clear:
MXLog.verbose("Clear all items, current total count: \(itemProxies.count)")
for (index, itemProxy) in itemProxies.enumerated() {
changes.append(.remove(offset: index, element: itemProxy, associatedWith: nil))
}
case .pop:
MXLog.verbose("Pop, current total count: \(itemProxies.count)")
guard let itemProxy = itemProxies.last else {
fatalError()
}
changes.append(.remove(offset: itemProxies.count - 1, element: itemProxy, associatedWith: nil))
} }
return CollectionDifference(changes) return CollectionDifference(changes)
@@ -78,6 +78,9 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {
case .emote(content: let content): case .emote(content: let content):
let message = MessageTimelineItem(item: eventItemProxy.item, content: content) let message = MessageTimelineItem(item: eventItemProxy.item, content: content)
return buildEmoteTimelineItemFromMessage(eventItemProxy, message, isOutgoing, groupState) return buildEmoteTimelineItemFromMessage(eventItemProxy, message, isOutgoing, groupState)
case .audio:
#warning("Audio timeline items not currently supported")
return nil
case .none: case .none:
return buildFallbackTimelineItem(eventItemProxy, isOutgoing, groupState) return buildFallbackTimelineItem(eventItemProxy, isOutgoing, groupState)
} }
@@ -94,6 +94,9 @@ extension NotificationItemProxy {
senderId: senderId, senderId: senderId,
roomId: roomId, roomId: roomId,
mediaProvider: mediaProvider) mediaProvider: mediaProvider)
case .audio:
#warning("Audio timeline items not currently supported")
return nil
case .video(content: let content): case .video(content: let content):
return try await processVideo(content: content, return try await processVideo(content: content,
senderId: senderId, senderId: senderId,
+1 -1
View File
@@ -40,7 +40,7 @@ include:
packages: packages:
MatrixRustSDK: MatrixRustSDK:
url: https://github.com/matrix-org/matrix-rust-components-swift url: https://github.com/matrix-org/matrix-rust-components-swift
exactVersion: 1.0.38-alpha exactVersion: 1.0.40-alpha
# path: ../matrix-rust-sdk # path: ../matrix-rust-sdk
DesignKit: DesignKit:
path: DesignKit path: DesignKit