mirror of https://github.com/oxen-io/session-ios
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
3.1 KiB
Swift
74 lines
3.1 KiB
Swift
// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
|
|
|
|
import Foundation
|
|
|
|
extension OpenGroupAPI {
|
|
public struct SendMessageRequest: Codable {
|
|
enum CodingKeys: String, CodingKey {
|
|
case data
|
|
case signature
|
|
case whisperTo = "whisper_to"
|
|
case whisperMods = "whisper_mods"
|
|
case fileIds = "files"
|
|
}
|
|
|
|
/// The serialized message body (encoded in base64 when encoding)
|
|
let data: Data
|
|
|
|
/// A 64-byte Ed25519 signature of the message body, signed by the current user's keys (encoded in base64 when
|
|
/// encoding - ie. 88 base64 chars)
|
|
let signature: Data
|
|
|
|
/// If present this indicates that this message is a whisper that should only be shown to the given user (via their sessionId)
|
|
let whisperTo: String?
|
|
|
|
/// If `true`, then this message will be visible to moderators but not ordinary users
|
|
///
|
|
/// If this and `whisper_to` are used together then the message will be visible to the given user and any room
|
|
/// moderators (this can be used, for instance, to issue a warning to a user that only the user and other mods can see)
|
|
///
|
|
/// **Note:** Only moderators may set this flag
|
|
let whisperMods: Bool?
|
|
|
|
/// Array of file IDs of new files uploaded as attachments of this post
|
|
///
|
|
/// This is required to preserve uploads for the default expiry period (15 days, unless otherwise configured by the SOGS
|
|
/// administrator); uploaded files that are not attached to a post will be deleted much sooner
|
|
///
|
|
/// If any of the given file ids are already associated with another message then the association is ignored (i.e. the files remain
|
|
/// associated with the original message)
|
|
///
|
|
/// When submitting a message edit this field must contain the IDs of any newly uploaded files that are part of the edit; existing
|
|
/// attachment IDs may also be included, but are not required
|
|
let fileIds: [Int64]?
|
|
|
|
// MARK: - Initialization
|
|
|
|
init(
|
|
data: Data,
|
|
signature: Data,
|
|
whisperTo: String? = nil,
|
|
whisperMods: Bool? = nil,
|
|
fileIds: [Int64]? = nil
|
|
) {
|
|
self.data = data
|
|
self.signature = signature
|
|
self.whisperTo = whisperTo
|
|
self.whisperMods = whisperMods
|
|
self.fileIds = fileIds
|
|
}
|
|
|
|
// MARK: - Encodable
|
|
|
|
public func encode(to encoder: Encoder) throws {
|
|
var container: KeyedEncodingContainer<CodingKeys> = encoder.container(keyedBy: CodingKeys.self)
|
|
|
|
try container.encode(data.base64EncodedString(), forKey: .data)
|
|
try container.encode(signature.base64EncodedString(), forKey: .signature)
|
|
try container.encodeIfPresent(whisperTo, forKey: .whisperTo)
|
|
try container.encodeIfPresent(whisperMods, forKey: .whisperMods)
|
|
try container.encodeIfPresent(fileIds, forKey: .fileIds)
|
|
}
|
|
}
|
|
}
|