mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-22 22:25:57 +00:00
Refactor SyncCore
This commit is contained in:
84
submodules/SyncCore/Sources/CachedGroupParticipants.swift
Normal file
84
submodules/SyncCore/Sources/CachedGroupParticipants.swift
Normal file
@@ -0,0 +1,84 @@
|
||||
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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user