diff --git a/SessionMessagingKit/Messages/Visible Messages/VisibleMessage+OpenGroupInvitation.swift b/SessionMessagingKit/Messages/Visible Messages/VisibleMessage+OpenGroupInvitation.swift index 97295578a..678eeb04a 100644 --- a/SessionMessagingKit/Messages/Visible Messages/VisibleMessage+OpenGroupInvitation.swift +++ b/SessionMessagingKit/Messages/Visible Messages/VisibleMessage+OpenGroupInvitation.swift @@ -23,12 +23,24 @@ public extension VisibleMessage { coder.encode(url, forKey: "url") } - public static func fromProto(_ proto: SNProtoDataMessage) -> Profile? { - notImplemented() + public static func fromProto(_ proto: SNProtoDataMessageOpenGroupInvitation) -> OpenGroupInvitation? { + let url = proto.url + let name = proto.name + return OpenGroupInvitation(name: name, url: url) } - public func toProto() -> SNProtoDataMessage? { - notImplemented() + public func toProto() -> SNProtoDataMessageOpenGroupInvitation? { + guard let url = url, let name = name else { + SNLog("Couldn't construct open group invitation proto from: \(self).") + return nil + } + let openGroupInvitationProto = SNProtoDataMessageOpenGroupInvitation.builder(url: url, name: name) + do { + return try openGroupInvitationProto.build() + } catch { + SNLog("Couldn't construct open group invitation proto from: \(self).") + return nil + } } // MARK: Description diff --git a/SessionMessagingKit/Messages/Visible Messages/VisibleMessage.swift b/SessionMessagingKit/Messages/Visible Messages/VisibleMessage.swift index a8d856382..49e70e2c8 100644 --- a/SessionMessagingKit/Messages/Visible Messages/VisibleMessage.swift +++ b/SessionMessagingKit/Messages/Visible Messages/VisibleMessage.swift @@ -63,6 +63,8 @@ public final class VisibleMessage : Message { if let linkPreviewProto = dataMessage.preview.first, let linkPreview = LinkPreview.fromProto(linkPreviewProto) { result.linkPreview = linkPreview } // TODO: Contact if let profile = Profile.fromProto(dataMessage) { result.profile = profile } + if let openGroupInvitationProto = dataMessage.openGroupInvitation, + let openGroupInvitation = OpenGroupInvitation.fromProto(openGroupInvitationProto) { result.openGroupInvitation = openGroupInvitation } result.syncTarget = dataMessage.syncTarget return result } @@ -99,6 +101,8 @@ public final class VisibleMessage : Message { let attachmentProtos = attachments.compactMap { $0.buildProto() } dataMessage.setAttachments(attachmentProtos) // TODO: Contact + // Open group invitation + if let openGroupInvitation = openGroupInvitation, let openGroupInvitationProto = openGroupInvitation.toProto() { dataMessage.setOpenGroupInvitation(openGroupInvitationProto) } // Expiration timer // TODO: We * want * expiration timer updates to be explicit. But currently Android will disable the expiration timer for a conversation // if it receives a message without the current expiration timer value attached to it... diff --git a/SessionMessagingKit/Protos/Generated/SNProto.swift b/SessionMessagingKit/Protos/Generated/SNProto.swift index da1d9dc85..ea256a14d 100644 --- a/SessionMessagingKit/Protos/Generated/SNProto.swift +++ b/SessionMessagingKit/Protos/Generated/SNProto.swift @@ -1808,6 +1808,9 @@ extension SNProtoDataMessageClosedGroupControlMessage.SNProtoDataMessageClosedGr if let _value = profile { builder.setProfile(_value) } + if let _value = openGroupInvitation { + builder.setOpenGroupInvitation(_value) + } if let _value = closedGroupControlMessage { builder.setClosedGroupControlMessage(_value) } @@ -1875,6 +1878,10 @@ extension SNProtoDataMessageClosedGroupControlMessage.SNProtoDataMessageClosedGr proto.profile = valueParam.proto } + @objc public func setOpenGroupInvitation(_ valueParam: SNProtoDataMessageOpenGroupInvitation) { + proto.openGroupInvitation = valueParam.proto + } + @objc public func setClosedGroupControlMessage(_ valueParam: SNProtoDataMessageClosedGroupControlMessage) { proto.closedGroupControlMessage = valueParam.proto } @@ -1904,6 +1911,8 @@ extension SNProtoDataMessageClosedGroupControlMessage.SNProtoDataMessageClosedGr @objc public let profile: SNProtoDataMessageLokiProfile? + @objc public let openGroupInvitation: SNProtoDataMessageOpenGroupInvitation? + @objc public let closedGroupControlMessage: SNProtoDataMessageClosedGroupControlMessage? @objc public var body: String? { @@ -1963,6 +1972,7 @@ extension SNProtoDataMessageClosedGroupControlMessage.SNProtoDataMessageClosedGr quote: SNProtoDataMessageQuote?, preview: [SNProtoDataMessagePreview], profile: SNProtoDataMessageLokiProfile?, + openGroupInvitation: SNProtoDataMessageOpenGroupInvitation?, closedGroupControlMessage: SNProtoDataMessageClosedGroupControlMessage?) { self.proto = proto self.attachments = attachments @@ -1970,6 +1980,7 @@ extension SNProtoDataMessageClosedGroupControlMessage.SNProtoDataMessageClosedGr self.quote = quote self.preview = preview self.profile = profile + self.openGroupInvitation = openGroupInvitation self.closedGroupControlMessage = closedGroupControlMessage } @@ -2005,6 +2016,11 @@ extension SNProtoDataMessageClosedGroupControlMessage.SNProtoDataMessageClosedGr profile = try SNProtoDataMessageLokiProfile.parseProto(proto.profile) } + var openGroupInvitation: SNProtoDataMessageOpenGroupInvitation? = nil + if proto.hasOpenGroupInvitation { + openGroupInvitation = try SNProtoDataMessageOpenGroupInvitation.parseProto(proto.openGroupInvitation) + } + var closedGroupControlMessage: SNProtoDataMessageClosedGroupControlMessage? = nil if proto.hasClosedGroupControlMessage { closedGroupControlMessage = try SNProtoDataMessageClosedGroupControlMessage.parseProto(proto.closedGroupControlMessage) @@ -2020,6 +2036,7 @@ extension SNProtoDataMessageClosedGroupControlMessage.SNProtoDataMessageClosedGr quote: quote, preview: preview, profile: profile, + openGroupInvitation: openGroupInvitation, closedGroupControlMessage: closedGroupControlMessage) return result } diff --git a/SessionMessagingKit/Protos/Generated/SessionProtos.pb.swift b/SessionMessagingKit/Protos/Generated/SessionProtos.pb.swift index 4f5b5cfe0..d9e4a94cf 100644 --- a/SessionMessagingKit/Protos/Generated/SessionProtos.pb.swift +++ b/SessionMessagingKit/Protos/Generated/SessionProtos.pb.swift @@ -440,6 +440,15 @@ struct SessionProtos_DataMessage { /// Clears the value of `profile`. Subsequent reads from it will return its default value. mutating func clearProfile() {_uniqueStorage()._profile = nil} + var openGroupInvitation: SessionProtos_DataMessage.OpenGroupInvitation { + get {return _storage._openGroupInvitation ?? SessionProtos_DataMessage.OpenGroupInvitation()} + set {_uniqueStorage()._openGroupInvitation = newValue} + } + /// Returns true if `openGroupInvitation` has been explicitly set. + var hasOpenGroupInvitation: Bool {return _storage._openGroupInvitation != nil} + /// Clears the value of `openGroupInvitation`. Subsequent reads from it will return its default value. + mutating func clearOpenGroupInvitation() {_uniqueStorage()._openGroupInvitation = nil} + var closedGroupControlMessage: SessionProtos_DataMessage.ClosedGroupControlMessage { get {return _storage._closedGroupControlMessage ?? SessionProtos_DataMessage.ClosedGroupControlMessage()} set {_uniqueStorage()._closedGroupControlMessage = newValue} @@ -1666,6 +1675,7 @@ extension SessionProtos_DataMessage: SwiftProtobuf.Message, SwiftProtobuf._Messa 8: .same(proto: "quote"), 10: .same(proto: "preview"), 101: .same(proto: "profile"), + 102: .same(proto: "openGroupInvitation"), 104: .same(proto: "closedGroupControlMessage"), 105: .same(proto: "syncTarget"), ] @@ -1681,6 +1691,7 @@ extension SessionProtos_DataMessage: SwiftProtobuf.Message, SwiftProtobuf._Messa var _quote: SessionProtos_DataMessage.Quote? = nil var _preview: [SessionProtos_DataMessage.Preview] = [] var _profile: SessionProtos_DataMessage.LokiProfile? = nil + var _openGroupInvitation: SessionProtos_DataMessage.OpenGroupInvitation? = nil var _closedGroupControlMessage: SessionProtos_DataMessage.ClosedGroupControlMessage? = nil var _syncTarget: String? = nil @@ -1699,6 +1710,7 @@ extension SessionProtos_DataMessage: SwiftProtobuf.Message, SwiftProtobuf._Messa _quote = source._quote _preview = source._preview _profile = source._profile + _openGroupInvitation = source._openGroupInvitation _closedGroupControlMessage = source._closedGroupControlMessage _syncTarget = source._syncTarget } @@ -1717,6 +1729,7 @@ extension SessionProtos_DataMessage: SwiftProtobuf.Message, SwiftProtobuf._Messa if let v = _storage._group, !v.isInitialized {return false} if let v = _storage._quote, !v.isInitialized {return false} if !SwiftProtobuf.Internal.areAllInitialized(_storage._preview) {return false} + if let v = _storage._openGroupInvitation, !v.isInitialized {return false} if let v = _storage._closedGroupControlMessage, !v.isInitialized {return false} return true } @@ -1737,6 +1750,7 @@ extension SessionProtos_DataMessage: SwiftProtobuf.Message, SwiftProtobuf._Messa case 8: try decoder.decodeSingularMessageField(value: &_storage._quote) case 10: try decoder.decodeRepeatedMessageField(value: &_storage._preview) case 101: try decoder.decodeSingularMessageField(value: &_storage._profile) + case 102: try decoder.decodeSingularMessageField(value: &_storage._openGroupInvitation) case 104: try decoder.decodeSingularMessageField(value: &_storage._closedGroupControlMessage) case 105: try decoder.decodeSingularStringField(value: &_storage._syncTarget) default: break @@ -1777,6 +1791,9 @@ extension SessionProtos_DataMessage: SwiftProtobuf.Message, SwiftProtobuf._Messa if let v = _storage._profile { try visitor.visitSingularMessageField(value: v, fieldNumber: 101) } + if let v = _storage._openGroupInvitation { + try visitor.visitSingularMessageField(value: v, fieldNumber: 102) + } if let v = _storage._closedGroupControlMessage { try visitor.visitSingularMessageField(value: v, fieldNumber: 104) } @@ -1802,6 +1819,7 @@ extension SessionProtos_DataMessage: SwiftProtobuf.Message, SwiftProtobuf._Messa if _storage._quote != rhs_storage._quote {return false} if _storage._preview != rhs_storage._preview {return false} if _storage._profile != rhs_storage._profile {return false} + if _storage._openGroupInvitation != rhs_storage._openGroupInvitation {return false} if _storage._closedGroupControlMessage != rhs_storage._closedGroupControlMessage {return false} if _storage._syncTarget != rhs_storage._syncTarget {return false} return true diff --git a/SessionMessagingKit/Protos/SessionProtos.proto b/SessionMessagingKit/Protos/SessionProtos.proto index 2e22da754..bdb101bcc 100644 --- a/SessionMessagingKit/Protos/SessionProtos.proto +++ b/SessionMessagingKit/Protos/SessionProtos.proto @@ -147,6 +147,7 @@ message DataMessage { optional Quote quote = 8; repeated Preview preview = 10; optional LokiProfile profile = 101; + optional OpenGroupInvitation openGroupInvitation = 102; optional ClosedGroupControlMessage closedGroupControlMessage = 104; optional string syncTarget = 105; }