mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-23 14:45:21 +00:00
Refactor SyncCore
This commit is contained in:
116
submodules/SyncCore/Sources/TelegramUserPresence.swift
Normal file
116
submodules/SyncCore/Sources/TelegramUserPresence.swift
Normal file
@@ -0,0 +1,116 @@
|
||||
import Postbox
|
||||
|
||||
public enum UserPresenceStatus: Comparable, PostboxCoding {
|
||||
case none
|
||||
case present(until: Int32)
|
||||
case recently
|
||||
case lastWeek
|
||||
case lastMonth
|
||||
|
||||
public static func <(lhs: UserPresenceStatus, rhs: UserPresenceStatus) -> Bool {
|
||||
switch lhs {
|
||||
case .none:
|
||||
switch rhs {
|
||||
case .none:
|
||||
return false
|
||||
case .lastMonth, .lastWeek, .recently, .present:
|
||||
return true
|
||||
}
|
||||
case let .present(until):
|
||||
switch rhs {
|
||||
case .none:
|
||||
return false
|
||||
case let .present(rhsUntil):
|
||||
return until < rhsUntil
|
||||
case .lastWeek, .lastMonth, .recently:
|
||||
return false
|
||||
}
|
||||
case .recently:
|
||||
switch rhs {
|
||||
case .none, .lastWeek, .lastMonth, .recently:
|
||||
return false
|
||||
case .present:
|
||||
return true
|
||||
}
|
||||
case .lastWeek:
|
||||
switch rhs {
|
||||
case .none, .lastMonth, .lastWeek:
|
||||
return false
|
||||
case .present, .recently:
|
||||
return true
|
||||
}
|
||||
case .lastMonth:
|
||||
switch rhs {
|
||||
case .none, .lastMonth:
|
||||
return false
|
||||
case .present, .recently, lastWeek:
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public init(decoder: PostboxDecoder) {
|
||||
switch decoder.decodeInt32ForKey("v", orElse: 0) {
|
||||
case 0:
|
||||
self = .none
|
||||
case 1:
|
||||
self = .present(until: decoder.decodeInt32ForKey("t", orElse: 0))
|
||||
case 2:
|
||||
self = .recently
|
||||
case 3:
|
||||
self = .lastWeek
|
||||
case 4:
|
||||
self = .lastMonth
|
||||
default:
|
||||
self = .none
|
||||
}
|
||||
}
|
||||
|
||||
public func encode(_ encoder: PostboxEncoder) {
|
||||
switch self {
|
||||
case .none:
|
||||
encoder.encodeInt32(0, forKey: "v")
|
||||
case let .present(timestamp):
|
||||
encoder.encodeInt32(1, forKey: "v")
|
||||
encoder.encodeInt32(timestamp, forKey: "t")
|
||||
case .recently:
|
||||
encoder.encodeInt32(2, forKey: "v")
|
||||
case .lastWeek:
|
||||
encoder.encodeInt32(3, forKey: "v")
|
||||
case .lastMonth:
|
||||
encoder.encodeInt32(4, forKey: "v")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public final class TelegramUserPresence: PeerPresence, Equatable {
|
||||
public let status: UserPresenceStatus
|
||||
public let lastActivity: Int32
|
||||
|
||||
public init(status: UserPresenceStatus, lastActivity: Int32) {
|
||||
self.status = status
|
||||
self.lastActivity = lastActivity
|
||||
}
|
||||
|
||||
public init(decoder: PostboxDecoder) {
|
||||
self.status = UserPresenceStatus(decoder: decoder)
|
||||
self.lastActivity = decoder.decodeInt32ForKey("la", orElse: 0)
|
||||
}
|
||||
|
||||
public func encode(_ encoder: PostboxEncoder) {
|
||||
self.status.encode(encoder)
|
||||
encoder.encodeInt32(self.lastActivity, forKey: "la")
|
||||
}
|
||||
|
||||
public static func ==(lhs: TelegramUserPresence, rhs: TelegramUserPresence) -> Bool {
|
||||
return lhs.status == rhs.status && lhs.lastActivity == rhs.lastActivity
|
||||
}
|
||||
|
||||
public func isEqual(to: PeerPresence) -> Bool {
|
||||
if let to = to as? TelegramUserPresence {
|
||||
return self == to
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user