mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-10-08 19:10:53 +00:00
Merge commit 'fd7d20e5db134f20d31d51891bf431d4df3f793a'
This commit is contained in:
commit
5b7d4984ac
@ -49,6 +49,9 @@ extension TelegramUser {
|
||||
}
|
||||
|
||||
var userFlags: UserInfoFlags = []
|
||||
if (flags & (1 << 12)) != 0 {
|
||||
userFlags.insert(.mutualContact)
|
||||
}
|
||||
if (flags & (1 << 17)) != 0 {
|
||||
userFlags.insert(.isVerified)
|
||||
}
|
||||
@ -67,7 +70,9 @@ extension TelegramUser {
|
||||
if (flags2 & (1 << 2)) != 0 {
|
||||
userFlags.insert(.isCloseFriend)
|
||||
}
|
||||
|
||||
if (flags2 & (1 << 6)) != 0 {
|
||||
userFlags.insert(.requirePremium)
|
||||
}
|
||||
var storiesHidden: Bool?
|
||||
if !isMin {
|
||||
storiesHidden = (flags2 & (1 << 3)) != 0
|
||||
@ -142,6 +147,9 @@ extension TelegramUser {
|
||||
|
||||
if let lhs = lhs {
|
||||
var userFlags: UserInfoFlags = []
|
||||
if (flags & (1 << 12)) != 0 {
|
||||
userFlags.insert(.mutualContact)
|
||||
}
|
||||
if (flags & (1 << 17)) != 0 {
|
||||
userFlags.insert(.isVerified)
|
||||
}
|
||||
@ -161,7 +169,9 @@ extension TelegramUser {
|
||||
if lhs.flags.contains(.isCloseFriend) {
|
||||
userFlags.insert(.isCloseFriend)
|
||||
}
|
||||
|
||||
if lhs.flags.contains(.requirePremium) {
|
||||
userFlags.insert(.requirePremium)
|
||||
}
|
||||
var botInfo: BotUserInfo?
|
||||
if (flags & (1 << 14)) != 0 {
|
||||
var botFlags = BotUserInfoFlags()
|
||||
|
@ -0,0 +1,42 @@
|
||||
import SwiftSignalKit
|
||||
import Postbox
|
||||
import TelegramApi
|
||||
|
||||
internal func _internal_updateIsPremiumRequiredToContact(account: Account, peerIds: [EnginePeer.Id]) -> Signal<[EnginePeer.Id], NoError> {
|
||||
return account.postbox.transaction { transaction -> [Api.InputUser] in
|
||||
var inputUsers: [Api.InputUser] = []
|
||||
for id in peerIds {
|
||||
if let peer = transaction.getPeer(id), let inputUser = apiInputUser(peer) {
|
||||
inputUsers.append(inputUser)
|
||||
}
|
||||
}
|
||||
return inputUsers
|
||||
} |> mapToSignal { inputUsers -> Signal<[EnginePeer.Id], NoError> in
|
||||
return account.network.request(Api.functions.users.getIsPremiumRequiredToContact(id: inputUsers))
|
||||
|> retryRequest
|
||||
|> mapToSignal { result in
|
||||
return account.postbox.transaction { transaction in
|
||||
var requiredPeerIds: [EnginePeer.Id] = []
|
||||
for (i, req) in result.enumerated() {
|
||||
let peerId = peerIds[i]
|
||||
let required = req == .boolTrue
|
||||
transaction.updatePeerCachedData(peerIds: Set([peerId]), update: { _, cachedData in
|
||||
let data = cachedData as? CachedUserData ?? CachedUserData()
|
||||
var flags = data.flags
|
||||
if required {
|
||||
flags.insert(.premiumRequired)
|
||||
} else {
|
||||
flags.remove(.premiumRequired)
|
||||
}
|
||||
return data.withUpdatedFlags(flags)
|
||||
})
|
||||
if required {
|
||||
requiredPeerIds.append(peerId)
|
||||
}
|
||||
}
|
||||
|
||||
return requiredPeerIds
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -204,6 +204,7 @@ public struct CachedUserFlags: OptionSet {
|
||||
public static let translationHidden = CachedUserFlags(rawValue: 1 << 0)
|
||||
public static let isBlockedFromStories = CachedUserFlags(rawValue: 1 << 1)
|
||||
public static let readDatesPrivate = CachedUserFlags(rawValue: 1 << 2)
|
||||
public static let premiumRequired = CachedUserFlags(rawValue: 1 << 3)
|
||||
}
|
||||
|
||||
public final class EditableBotInfo: PostboxCoding, Equatable {
|
||||
|
@ -17,6 +17,8 @@ public struct UserInfoFlags: OptionSet {
|
||||
public static let isFake = UserInfoFlags(rawValue: (1 << 3))
|
||||
public static let isPremium = UserInfoFlags(rawValue: (1 << 4))
|
||||
public static let isCloseFriend = UserInfoFlags(rawValue: (1 << 5))
|
||||
public static let requirePremium = UserInfoFlags(rawValue: (1 << 6))
|
||||
public static let mutualContact = UserInfoFlags(rawValue: (1 << 7))
|
||||
}
|
||||
|
||||
public struct BotUserInfoFlags: OptionSet {
|
||||
|
@ -1273,6 +1273,10 @@ public extension TelegramEngine {
|
||||
public func requestRecommendedChannels(peerId: EnginePeer.Id, forceUpdate: Bool = false) -> Signal<Never, NoError> {
|
||||
return _internal_requestRecommendedChannels(account: self.account, peerId: peerId, forceUpdate: forceUpdate)
|
||||
}
|
||||
|
||||
public func isPremiumRequiredToContact(_ peerIds: [EnginePeer.Id]) -> Signal<[EnginePeer.Id], NoError> {
|
||||
return _internal_updateIsPremiumRequiredToContact(account: self.account, peerIds: peerIds)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -236,9 +236,15 @@ func _internal_fetchAndUpdateCachedPeerData(accountPeerId: PeerId, peerId rawPee
|
||||
let videoCallsAvailable = (userFullFlags & (1 << 13)) != 0
|
||||
let voiceMessagesAvailable = (userFullFlags & (1 << 20)) == 0
|
||||
let readDatesPrivate = (userFullFlags & (1 << 30)) != 0
|
||||
let premiumRequired = (userFullFlags & (1 << 29)) != 0
|
||||
let translationsDisabled = (userFullFlags & (1 << 23)) != 0
|
||||
|
||||
var flags: CachedUserFlags = previous.flags
|
||||
if premiumRequired {
|
||||
flags.insert(.premiumRequired)
|
||||
} else {
|
||||
flags.remove(.premiumRequired)
|
||||
}
|
||||
if readDatesPrivate {
|
||||
flags.insert(.readDatesPrivate)
|
||||
} else {
|
||||
|
Loading…
x
Reference in New Issue
Block a user