Skip to content

Commit

Permalink
dm validation fix; upstream changes (#461)
Browse files Browse the repository at this point in the history
* dm validation fix. upstream changes

* adds proto rust reaction and message with reactions func

* bump podspec

---------

Co-authored-by: cameronvoell <[email protected]>
  • Loading branch information
cameronvoell and cameronvoell authored Jan 31, 2025
1 parent 52f80ac commit f4c7336
Show file tree
Hide file tree
Showing 16 changed files with 479 additions and 181 deletions.
4 changes: 2 additions & 2 deletions Package.resolved
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@
"kind" : "remoteSourceControl",
"location" : "https://github.com/xmtp/libxmtp-swift.git",
"state" : {
"revision" : "203fd6d67bb72e3114b273ce9bbddd6fc747d583",
"version" : "3.0.13"
"revision" : "c9d3bdff9ead5d70a803d290de4eb75c9e9fc4f2",
"version" : "3.0.21"
}
},
{
Expand Down
2 changes: 1 addition & 1 deletion Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ let package = Package(
.package(url: "https://github.com/bufbuild/connect-swift", exact: "1.0.0"),
.package(url: "https://github.com/apple/swift-docc-plugin.git", from: "1.4.3"),
.package(url: "https://github.com/krzyzanowskim/CryptoSwift.git", exact: "1.8.3"),
.package(url: "https://github.com/xmtp/libxmtp-swift.git", exact: "3.0.20")
.package(url: "https://github.com/xmtp/libxmtp-swift.git", exact: "3.0.21")
],
targets: [
.target(
Expand Down
1 change: 1 addition & 0 deletions ReactionV2Codec.d

Large diffs are not rendered by default.

Binary file added ReactionV2Codec.o
Binary file not shown.
Binary file added ReactionV2Codec.swiftdeps
Binary file not shown.
2 changes: 1 addition & 1 deletion Sources/XMTPiOS/Codecs/ContentTypeID.swift
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public extension ContentTypeID {

public extension ContentTypeID {
var id: String {
"\(authorityID):\(typeID)"
"\(authorityID):\(typeID):\(versionMajor).\(versionMinor)"
}

var description: String {
Expand Down
46 changes: 46 additions & 0 deletions Sources/XMTPiOS/Codecs/ReactionV2Codec.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
//
// ReactionCodec.swift
//
//
// Created by Naomi Plasterer on 7/26/23.
//

import Foundation
import LibXMTP

public let ContentTypeReactionV2 = ContentTypeID(authorityID: "xmtp.org", typeID: "reaction", versionMajor: 2, versionMinor: 0)

public struct ReactionV2Codec: ContentCodec {
public typealias T = FfiReaction
public var contentType = ContentTypeReactionV2

public init() {}

public func encode(content: FfiReaction) throws -> EncodedContent {
return try EncodedContent(serializedBytes: encodeReaction(reaction: content))
}

public func decode(content: EncodedContent) throws -> FfiReaction {
try decodeReaction(bytes: content.serializedBytes())
}

public func fallback(content: FfiReaction) throws -> String? {
switch content.action {
case .added:
return "Reacted “\(content.content)” to an earlier message"
case .removed:
return "Removed “\(content.content)” from an earlier message"
case .unknown:
return nil
}
}

public func shouldPush(content: FfiReaction) throws -> Bool {
switch content.action {
case .added:
return true
default:
return false
}
}
}
21 changes: 21 additions & 0 deletions Sources/XMTPiOS/Conversation.swift
Original file line number Diff line number Diff line change
Expand Up @@ -213,4 +213,25 @@ public enum Conversation: Identifiable, Equatable, Hashable {
)
}
}

public func messagesWithReactions(
limit: Int? = nil,
beforeNs: Int64? = nil,
afterNs: Int64? = nil,
direction: SortDirection? = .descending,
deliveryStatus: MessageDeliveryStatus = .all
) async throws -> [Message] {
switch self {
case let .group(group):
return try await group.messagesWithReactions(
beforeNs: beforeNs, afterNs: afterNs, limit: limit,
direction: direction, deliveryStatus: deliveryStatus
)
case let .dm(dm):
return try await dm.messagesWithReactions(
beforeNs: beforeNs, afterNs: afterNs, limit: limit,
direction: direction, deliveryStatus: deliveryStatus
)
}
}
}
61 changes: 21 additions & 40 deletions Sources/XMTPiOS/Conversations.swift
Original file line number Diff line number Diff line change
Expand Up @@ -243,17 +243,12 @@ public actor Conversations {
if !canMessage {
throw ConversationError.memberNotRegistered([peerAddress])
}
if let existingDm = try await client.findDmByAddress(
address: peerAddress)
{
return existingDm
}

let newDm =
let dm =
try await ffiConversations
.createDm(accountAddress: peerAddress.lowercased())
.dmFromFFI(client: client)
return newDm
.findOrCreateDm(accountAddress: peerAddress.lowercased())

return dm.dmFromFFI(client: client)
}

public func newConversationWithInboxId(
Expand All @@ -269,15 +264,12 @@ public actor Conversations {
if peerInboxId.lowercased() == client.inboxID.lowercased() {
throw ConversationError.memberCannotBeSelf
}
if let existingDm = try client.findDmByInboxId(inboxId: peerInboxId) {
return existingDm
}

let newDm =
let dm =
try await ffiConversations
.createDmWithInboxId(inboxId: peerInboxId)
.dmFromFFI(client: client)
return newDm
.findOrCreateDmByInboxId(inboxId: peerInboxId)
return dm.dmFromFFI(client: client)

}

public func newGroup(
Expand All @@ -287,7 +279,7 @@ public actor Conversations {
imageUrlSquare: String = "",
description: String = "",
pinnedFrameUrl: String = "",
messageExpirationFromMs: Int64? = nil,
messageDisappearingSettings: FfiMessageDisappearingSettings? = nil,
messageExpirationMs: Int64? = nil
) async throws -> Group {
return try await newGroupInternal(
Expand All @@ -300,8 +292,7 @@ public actor Conversations {
description: description,
pinnedFrameUrl: pinnedFrameUrl,
permissionPolicySet: nil,
messageExpirationFromMs: messageExpirationMs,
messageExpirationMs: messageExpirationMs
messageDisappearingSettings: messageDisappearingSettings
)
}

Expand All @@ -312,8 +303,7 @@ public actor Conversations {
imageUrlSquare: String = "",
description: String = "",
pinnedFrameUrl: String = "",
messageExpirationFromMs: Int64? = nil,
messageExpirationMs: Int64? = nil
messageDisappearingSettings: FfiMessageDisappearingSettings? = nil
) async throws -> Group {
return try await newGroupInternal(
with: addresses,
Expand All @@ -324,8 +314,7 @@ public actor Conversations {
pinnedFrameUrl: pinnedFrameUrl,
permissionPolicySet: PermissionPolicySet.toFfiPermissionPolicySet(
permissionPolicySet),
messageExpirationFromMs: messageExpirationMs,
messageExpirationMs: messageExpirationMs
messageDisappearingSettings: messageDisappearingSettings
)
}

Expand All @@ -337,8 +326,7 @@ public actor Conversations {
description: String = "",
pinnedFrameUrl: String = "",
permissionPolicySet: FfiPermissionPolicySet? = nil,
messageExpirationFromMs: Int64? = nil,
messageExpirationMs: Int64? = nil
messageDisappearingSettings: FfiMessageDisappearingSettings? = nil
) async throws -> Group {
if addresses.first(where: {
$0.lowercased() == client.address.lowercased()
Expand All @@ -364,9 +352,8 @@ public actor Conversations {
groupDescription: description,
groupPinnedFrameUrl: pinnedFrameUrl,
customPermissionPolicySet: permissionPolicySet,
messageExpirationFromMs: messageExpirationMs,
messageExpirationMs: messageExpirationMs
)
messageDisappearingSettings: messageDisappearingSettings
)
).groupFromFFI(client: client)
return group
}
Expand All @@ -378,8 +365,7 @@ public actor Conversations {
imageUrlSquare: String = "",
description: String = "",
pinnedFrameUrl: String = "",
messageExpirationFromMs: Int64? = nil,
messageExpirationMs: Int64? = nil
messageDisappearingSettings: FfiMessageDisappearingSettings? = nil
) async throws -> Group {
return try await newGroupInternalWithInboxIds(
with: inboxIds,
Expand All @@ -391,8 +377,7 @@ public actor Conversations {
description: description,
pinnedFrameUrl: pinnedFrameUrl,
permissionPolicySet: nil,
messageExpirationFromMs: messageExpirationMs,
messageExpirationMs: messageExpirationMs
messageDisappearingSettings: messageDisappearingSettings
)
}

Expand All @@ -403,8 +388,7 @@ public actor Conversations {
imageUrlSquare: String = "",
description: String = "",
pinnedFrameUrl: String = "",
messageExpirationFromMs: Int64? = nil,
messageExpirationMs: Int64? = nil
messageDisappearingSettings: FfiMessageDisappearingSettings? = nil
) async throws -> Group {
return try await newGroupInternalWithInboxIds(
with: inboxIds,
Expand All @@ -415,8 +399,7 @@ public actor Conversations {
pinnedFrameUrl: pinnedFrameUrl,
permissionPolicySet: PermissionPolicySet.toFfiPermissionPolicySet(
permissionPolicySet),
messageExpirationFromMs: messageExpirationMs,
messageExpirationMs: messageExpirationMs
messageDisappearingSettings: messageDisappearingSettings
)
}

Expand All @@ -428,8 +411,7 @@ public actor Conversations {
description: String = "",
pinnedFrameUrl: String = "",
permissionPolicySet: FfiPermissionPolicySet? = nil,
messageExpirationFromMs: Int64? = nil,
messageExpirationMs: Int64? = nil
messageDisappearingSettings: FfiMessageDisappearingSettings? = nil
) async throws -> Group {
if inboxIds.contains(where: {
$0.lowercased() == client.inboxID.lowercased()
Expand All @@ -445,8 +427,7 @@ public actor Conversations {
groupDescription: description,
groupPinnedFrameUrl: pinnedFrameUrl,
customPermissionPolicySet: permissionPolicySet,
messageExpirationFromMs: messageExpirationMs,
messageExpirationMs: messageExpirationMs
messageDisappearingSettings: messageDisappearingSettings
)
).groupFromFFI(client: client)
return group
Expand Down
60 changes: 60 additions & 0 deletions Sources/XMTPiOS/Dm.swift
Original file line number Diff line number Diff line change
Expand Up @@ -251,4 +251,64 @@ public struct Dm: Identifiable, Equatable, Hashable {
return Message.create(ffiMessage: ffiMessage)
}
}

public func messagesWithReactions(
beforeNs: Int64? = nil,
afterNs: Int64? = nil,
limit: Int? = nil,
direction: SortDirection? = .descending,
deliveryStatus: MessageDeliveryStatus = .all
) async throws -> [Message] {
var options = FfiListMessagesOptions(
sentBeforeNs: nil,
sentAfterNs: nil,
limit: nil,
deliveryStatus: nil,
direction: nil,
contentTypes: nil
)

if let beforeNs {
options.sentBeforeNs = beforeNs
}

if let afterNs {
options.sentAfterNs = afterNs
}

if let limit {
options.limit = Int64(limit)
}

let status: FfiDeliveryStatus? = {
switch deliveryStatus {
case .published:
return FfiDeliveryStatus.published
case .unpublished:
return FfiDeliveryStatus.unpublished
case .failed:
return FfiDeliveryStatus.failed
default:
return nil
}
}()

options.deliveryStatus = status

let direction: FfiDirection? = {
switch direction {
case .ascending:
return FfiDirection.ascending
default:
return FfiDirection.descending
}
}()

options.direction = direction

return try await ffiConversation.findMessagesWithReactions(opts: options).compactMap {
ffiMessageWithReactions in
return Message.create(ffiMessage: ffiMessageWithReactions)
}
}
}
60 changes: 60 additions & 0 deletions Sources/XMTPiOS/Group.swift
Original file line number Diff line number Diff line change
Expand Up @@ -446,4 +446,64 @@ public struct Group: Identifiable, Equatable, Hashable {
return Message.create(ffiMessage: ffiMessage)
}
}

public func messagesWithReactions(
beforeNs: Int64? = nil,
afterNs: Int64? = nil,
limit: Int? = nil,
direction: SortDirection? = .descending,
deliveryStatus: MessageDeliveryStatus = .all
) async throws -> [Message] {
var options = FfiListMessagesOptions(
sentBeforeNs: nil,
sentAfterNs: nil,
limit: nil,
deliveryStatus: nil,
direction: nil,
contentTypes: nil
)

if let beforeNs {
options.sentBeforeNs = beforeNs
}

if let afterNs {
options.sentAfterNs = afterNs
}

if let limit {
options.limit = Int64(limit)
}

let status: FfiDeliveryStatus? = {
switch deliveryStatus {
case .published:
return FfiDeliveryStatus.published
case .unpublished:
return FfiDeliveryStatus.unpublished
case .failed:
return FfiDeliveryStatus.failed
default:
return nil
}
}()

options.deliveryStatus = status

let direction: FfiDirection? = {
switch direction {
case .ascending:
return FfiDirection.ascending
default:
return FfiDirection.descending
}
}()

options.direction = direction

return try await ffiGroup.findMessagesWithReactions(opts: options).compactMap {
ffiMessageWithReactions in
return Message.create(ffiMessage: ffiMessageWithReactions)
}
}
}
Loading

0 comments on commit f4c7336

Please sign in to comment.