Implement proto conversion

pull/405/head
Niels Andriesse 3 years ago
parent 0153e1cefd
commit f3fef34259

@ -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

@ -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...

@ -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
}

@ -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

@ -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;
}

Loading…
Cancel
Save