mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
85 lines
3.2 KiB
Swift
85 lines
3.2 KiB
Swift
import Postbox
|
|
|
|
public enum GroupParticipant: PostboxCoding, Equatable {
|
|
case member(id: PeerId, invitedBy: PeerId, invitedAt: Int32)
|
|
case creator(id: PeerId)
|
|
case admin(id: PeerId, invitedBy: PeerId, invitedAt: Int32)
|
|
|
|
public var peerId: PeerId {
|
|
switch self {
|
|
case let .member(id, _, _):
|
|
return id
|
|
case let .creator(id):
|
|
return id
|
|
case let .admin(id, _, _):
|
|
return id
|
|
}
|
|
}
|
|
|
|
public init(decoder: PostboxDecoder) {
|
|
switch decoder.decodeInt32ForKey("v", orElse: 0) {
|
|
case 0:
|
|
self = .member(id: PeerId(decoder.decodeInt64ForKey("i", orElse: 0)), invitedBy: PeerId(decoder.decodeInt64ForKey("b", orElse: 0)), invitedAt: decoder.decodeInt32ForKey("t", orElse: 0))
|
|
case 1:
|
|
self = .creator(id: PeerId(decoder.decodeInt64ForKey("i", orElse: 0)))
|
|
case 2:
|
|
self = .admin(id: PeerId(decoder.decodeInt64ForKey("i", orElse: 0)), invitedBy: PeerId(decoder.decodeInt64ForKey("b", orElse: 0)), invitedAt: decoder.decodeInt32ForKey("t", orElse: 0))
|
|
default:
|
|
self = .member(id: PeerId(decoder.decodeInt64ForKey("i", orElse: 0)), invitedBy: PeerId(decoder.decodeInt64ForKey("b", orElse: 0)), invitedAt: decoder.decodeInt32ForKey("t", orElse: 0))
|
|
}
|
|
}
|
|
|
|
public func encode(_ encoder: PostboxEncoder) {
|
|
switch self {
|
|
case let .member(id, invitedBy, invitedAt):
|
|
encoder.encodeInt32(0, forKey: "v")
|
|
encoder.encodeInt64(id.toInt64(), forKey: "i")
|
|
encoder.encodeInt64(invitedBy.toInt64(), forKey: "b")
|
|
encoder.encodeInt32(invitedAt, forKey: "t")
|
|
case let .creator(id):
|
|
encoder.encodeInt32(1, forKey: "v")
|
|
encoder.encodeInt64(id.toInt64(), forKey: "i")
|
|
case let .admin(id, invitedBy, invitedAt):
|
|
encoder.encodeInt32(2, forKey: "v")
|
|
encoder.encodeInt64(id.toInt64(), forKey: "i")
|
|
encoder.encodeInt64(invitedBy.toInt64(), forKey: "b")
|
|
encoder.encodeInt32(invitedAt, forKey: "t")
|
|
}
|
|
}
|
|
|
|
public var invitedBy: PeerId {
|
|
switch self {
|
|
case let .admin(_, invitedBy, _):
|
|
return invitedBy
|
|
case let .member(_, invitedBy, _):
|
|
return invitedBy
|
|
case let .creator(id):
|
|
return id
|
|
}
|
|
}
|
|
}
|
|
|
|
public final class CachedGroupParticipants: PostboxCoding, Equatable {
|
|
public let participants: [GroupParticipant]
|
|
public let version: Int32
|
|
|
|
public init(participants: [GroupParticipant], version: Int32) {
|
|
self.participants = participants
|
|
self.version = version
|
|
}
|
|
|
|
public init(decoder: PostboxDecoder) {
|
|
self.participants = decoder.decodeObjectArrayWithDecoderForKey("p")
|
|
self.version = decoder.decodeInt32ForKey("v", orElse: 0)
|
|
}
|
|
|
|
public func encode(_ encoder: PostboxEncoder) {
|
|
encoder.encodeObjectArray(self.participants, forKey: "p")
|
|
encoder.encodeInt32(self.version, forKey: "v")
|
|
}
|
|
|
|
public static func ==(lhs: CachedGroupParticipants, rhs: CachedGroupParticipants) -> Bool {
|
|
return lhs.version == rhs.version && lhs.participants == rhs.participants
|
|
}
|
|
}
|