mirror of
https://github.com/oxen-io/session-ios.git
synced 2023-12-13 21:30:14 +01:00
65f14cf0a1
Removed an unused endpoint Moved 'Dependencies' into the Utilities folder (also out from being nested within 'OpenGroupAPI' since it can be broader than that) Finished adding unit tests for the OpenGroupAPI
144 lines
5.9 KiB
Swift
144 lines
5.9 KiB
Swift
// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
|
|
|
|
import Foundation
|
|
|
|
extension OpenGroupAPI {
|
|
/// This only contains ephemeral data
|
|
public struct RoomPollInfo: Codable {
|
|
enum CodingKeys: String, CodingKey {
|
|
case token
|
|
case activeUsers = "active_users"
|
|
|
|
case admin
|
|
case globalAdmin = "global_admin"
|
|
|
|
case moderator
|
|
case globalModerator = "global_moderator"
|
|
|
|
case read
|
|
case defaultRead = "default_read"
|
|
case defaultAccessible = "default_accessible"
|
|
case write
|
|
case defaultWrite = "default_write"
|
|
case upload
|
|
case defaultUpload = "default_upload"
|
|
|
|
case details
|
|
}
|
|
|
|
/// The room token as used in a URL, e.g. "sudoku"
|
|
public let token: String
|
|
|
|
/// Number of recently active users in the room over a recent time period (as given in the active_users_cutoff value)
|
|
///
|
|
/// Users are considered "active" if they have accessed the room (checking for new messages, etc.) at least once in the given period
|
|
///
|
|
/// **Note:** changes to this field do not update the room's info_updates value
|
|
public let activeUsers: Int64
|
|
|
|
/// This flag is `true` if the current user has admin permissions in the room
|
|
public let admin: Bool
|
|
|
|
/// This flag is `true` if the current user is a global admin
|
|
///
|
|
/// This is not exclusive of `globalModerator`/`moderator`/`admin` (a global admin will have all four set to `true`)
|
|
public let globalAdmin: Bool
|
|
|
|
/// This flag is `true` if the current user has moderator permissions in the room
|
|
public let moderator: Bool
|
|
|
|
/// This flag is `true` if the current user is a global moderator
|
|
///
|
|
/// This is not exclusive of `moderator` (a global moderator will have both flags set to `true`)
|
|
public let globalModerator: Bool
|
|
|
|
/// This flag indicates whether the **current** user has permission to read the room's messages
|
|
///
|
|
/// **Note:** If this value is `false` the user only has access the room metadata
|
|
public let read: Bool
|
|
|
|
/// This field indicates whether new users have read permissions in the room
|
|
///
|
|
/// It is included in the response only if the requesting user has moderator or admin permissions
|
|
public let defaultRead: Bool?
|
|
|
|
/// This field indicates whether new users have access permissions in the room
|
|
///
|
|
/// It is included in the response only if the requesting user has moderator or admin permissions
|
|
public let defaultAccessible: Bool?
|
|
|
|
/// This flag indicates whether the **current** user has permission to post messages in the room
|
|
public let write: Bool
|
|
|
|
/// This field indicates whether new users have write permissions in the room
|
|
///
|
|
/// It is included in the response only if the requesting user has moderator or admin permissions
|
|
public let defaultWrite: Bool?
|
|
|
|
/// This flag indicates whether the **current** user has permission to upload files to the room
|
|
public let upload: Bool
|
|
|
|
/// This field indicates whether new users have upload permissions in the room
|
|
///
|
|
/// It is included in the response only if the requesting user has moderator or admin permissions
|
|
public let defaultUpload: Bool?
|
|
|
|
/// The full room metadata (as would be returned by the `/rooms/{roomToken}` endpoint)
|
|
///
|
|
/// Only populated and different if the `info_updates` counter differs from the provided `info_updated` value
|
|
public let details: Room?
|
|
}
|
|
}
|
|
|
|
// MARK: - Convenience
|
|
|
|
extension OpenGroupAPI.RoomPollInfo {
|
|
init(room: OpenGroupAPI.Room) {
|
|
self.init(
|
|
token: room.token,
|
|
activeUsers: room.activeUsers,
|
|
admin: room.admin,
|
|
globalAdmin: room.globalAdmin,
|
|
moderator: room.moderator,
|
|
globalModerator: room.globalModerator,
|
|
read: room.read,
|
|
defaultRead: room.defaultRead,
|
|
defaultAccessible: room.defaultAccessible,
|
|
write: room.write,
|
|
defaultWrite: room.defaultWrite,
|
|
upload: room.upload,
|
|
defaultUpload: room.defaultUpload,
|
|
details: room
|
|
)
|
|
}
|
|
}
|
|
|
|
// MARK: - Decoding
|
|
|
|
extension OpenGroupAPI.RoomPollInfo {
|
|
public init(from decoder: Decoder) throws {
|
|
let container: KeyedDecodingContainer<CodingKeys> = try decoder.container(keyedBy: CodingKeys.self)
|
|
|
|
self = OpenGroupAPI.RoomPollInfo(
|
|
token: try container.decode(String.self, forKey: .token),
|
|
activeUsers: try container.decode(Int64.self, forKey: .activeUsers),
|
|
|
|
admin: ((try? container.decode(Bool.self, forKey: .admin)) ?? false),
|
|
globalAdmin: ((try? container.decode(Bool.self, forKey: .globalAdmin)) ?? false),
|
|
|
|
moderator: ((try? container.decode(Bool.self, forKey: .moderator)) ?? false),
|
|
globalModerator: ((try? container.decode(Bool.self, forKey: .globalModerator)) ?? false),
|
|
|
|
read: try container.decode(Bool.self, forKey: .read),
|
|
defaultRead: try? container.decode(Bool.self, forKey: .defaultRead),
|
|
defaultAccessible: try? container.decode(Bool.self, forKey: .defaultAccessible),
|
|
write: try container.decode(Bool.self, forKey: .write),
|
|
defaultWrite: try? container.decode(Bool.self, forKey: .defaultWrite),
|
|
upload: try container.decode(Bool.self, forKey: .upload),
|
|
defaultUpload: try? container.decode(Bool.self, forKey: .defaultUpload),
|
|
|
|
details: try? container.decode(OpenGroupAPI.Room.self, forKey: .details)
|
|
)
|
|
}
|
|
}
|