mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-08-17 19:09:56 +00:00
102 lines
3.1 KiB
Swift
102 lines
3.1 KiB
Swift
import Foundation
|
|
#if os(macOS)
|
|
import PostboxMac
|
|
#else
|
|
import Postbox
|
|
#endif
|
|
|
|
public struct TelegramChannelAdminRightsFlags: OptionSet {
|
|
public var rawValue: Int32
|
|
|
|
public init(rawValue: Int32) {
|
|
self.rawValue = rawValue
|
|
}
|
|
|
|
public init() {
|
|
self.rawValue = 0
|
|
}
|
|
|
|
public static let canChangeInfo = TelegramChannelAdminRightsFlags(rawValue: 1 << 0)
|
|
public static let canPostMessages = TelegramChannelAdminRightsFlags(rawValue: 1 << 1)
|
|
public static let canEditMessages = TelegramChannelAdminRightsFlags(rawValue: 1 << 2)
|
|
public static let canDeleteMessages = TelegramChannelAdminRightsFlags(rawValue: 1 << 3)
|
|
public static let canBanUsers = TelegramChannelAdminRightsFlags(rawValue: 1 << 4)
|
|
public static let canInviteUsers = TelegramChannelAdminRightsFlags(rawValue: 1 << 5)
|
|
public static let canChangeInviteLink = TelegramChannelAdminRightsFlags(rawValue: 1 << 6)
|
|
public static let canPinMessages = TelegramChannelAdminRightsFlags(rawValue: 1 << 7)
|
|
public static let canAddAdmins = TelegramChannelAdminRightsFlags(rawValue: 1 << 9)
|
|
|
|
public static var groupSpecific: TelegramChannelAdminRightsFlags = [
|
|
.canChangeInfo,
|
|
.canDeleteMessages,
|
|
.canBanUsers,
|
|
.canInviteUsers,
|
|
.canChangeInviteLink,
|
|
.canPinMessages,
|
|
.canAddAdmins
|
|
]
|
|
|
|
public static var broadcastSpecific: TelegramChannelAdminRightsFlags = [
|
|
.canChangeInfo,
|
|
.canInviteUsers,
|
|
.canPostMessages,
|
|
.canEditMessages,
|
|
.canDeleteMessages,
|
|
.canAddAdmins
|
|
]
|
|
|
|
public var count: Int {
|
|
var result = 0
|
|
var index = 0
|
|
while index < 31 {
|
|
let currentValue = self.rawValue >> Int32(index)
|
|
index += 1
|
|
if currentValue == 0 {
|
|
break
|
|
}
|
|
|
|
if (currentValue & 1) != 0 {
|
|
result += 1
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
}
|
|
|
|
public struct TelegramChannelAdminRights: PostboxCoding, Equatable {
|
|
public let flags: TelegramChannelAdminRightsFlags
|
|
|
|
public init(flags: TelegramChannelAdminRightsFlags) {
|
|
self.flags = flags
|
|
}
|
|
|
|
public init(decoder: PostboxDecoder) {
|
|
self.flags = TelegramChannelAdminRightsFlags(rawValue: decoder.decodeInt32ForKey("f", orElse: 0))
|
|
}
|
|
|
|
public func encode(_ encoder: PostboxEncoder) {
|
|
encoder.encodeInt32(self.flags.rawValue, forKey: "f")
|
|
}
|
|
|
|
public static func ==(lhs: TelegramChannelAdminRights, rhs: TelegramChannelAdminRights) -> Bool {
|
|
return lhs.flags == rhs.flags
|
|
}
|
|
|
|
public var isEmpty: Bool {
|
|
return self.flags.isEmpty
|
|
}
|
|
}
|
|
|
|
extension TelegramChannelAdminRights {
|
|
init(apiAdminRights: Api.ChannelAdminRights) {
|
|
switch apiAdminRights {
|
|
case let .channelAdminRights(flags):
|
|
self.init(flags: TelegramChannelAdminRightsFlags(rawValue: flags))
|
|
}
|
|
}
|
|
|
|
var apiAdminRights: Api.ChannelAdminRights {
|
|
return Api.ChannelAdminRights.channelAdminRights(flags: self.flags.rawValue)
|
|
}
|
|
}
|