Update Ghostgram features

This commit is contained in:
ichmagmaus 812
2026-03-07 18:15:32 +01:00
parent 1a3303b059
commit 24a7ec39d9
902 changed files with 148295 additions and 62348 deletions
@@ -85,35 +85,39 @@ public final class BlockedPeersContext {
}
return postbox.transaction { transaction -> (peers: [RenderedPeer], canLoadMore: Bool, totalCount: Int?) in
switch result {
case let .blocked(blocked, chats, users):
case let .blocked(blockedData):
let (blocked, chats, users) = (blockedData.blocked, blockedData.chats, blockedData.users)
let parsedPeers = AccumulatedPeers(transaction: transaction, chats: chats, users: users)
updatePeers(transaction: transaction, accountPeerId: accountPeerId, peers: parsedPeers)
var renderedPeers: [RenderedPeer] = []
for blockedPeer in blocked {
switch blockedPeer {
case let .peerBlocked(peerId, _):
case let .peerBlocked(peerBlockedData):
let peerId = peerBlockedData.peerId
if let peer = transaction.getPeer(peerId.peerId) {
renderedPeers.append(RenderedPeer(peer: peer))
}
}
}
return (renderedPeers, false, nil)
case let .blockedSlice(count, blocked, chats, users):
case let .blockedSlice(blockedSliceData):
let (count, blocked, chats, users) = (blockedSliceData.count, blockedSliceData.blocked, blockedSliceData.chats, blockedSliceData.users)
let parsedPeers = AccumulatedPeers(transaction: transaction, chats: chats, users: users)
updatePeers(transaction: transaction, accountPeerId: accountPeerId, peers: parsedPeers)
var renderedPeers: [RenderedPeer] = []
for blockedPeer in blocked {
switch blockedPeer {
case let .peerBlocked(peerId, _):
case let .peerBlocked(peerBlockedData):
let peerId = peerBlockedData.peerId
if let peer = transaction.getPeer(peerId.peerId) {
renderedPeers.append(RenderedPeer(peer: peer))
}
}
}
return (renderedPeers, true, Int(count))
}
}
@@ -104,7 +104,8 @@ public struct RecentAccountSession: Equatable {
extension RecentAccountSession {
init(apiAuthorization: Api.Authorization) {
switch apiAuthorization {
case let .authorization(flags, hash, deviceModel, platform, systemVersion, apiId, appName, appVersion, dateCreated, dateActive, ip, country, region):
case let .authorization(authorizationData):
let (flags, hash, deviceModel, platform, systemVersion, apiId, appName, appVersion, dateCreated, dateActive, ip, country, region) = (authorizationData.flags, authorizationData.hash, authorizationData.deviceModel, authorizationData.platform, authorizationData.systemVersion, authorizationData.apiId, authorizationData.appName, authorizationData.appVersion, authorizationData.dateCreated, authorizationData.dateActive, authorizationData.ip, authorizationData.country, authorizationData.region)
var accountSessionFlags: AccountSessionFlags = []
if (flags & (1 << 1)) != 0 {
accountSessionFlags.insert(.isOfficial)
@@ -13,7 +13,8 @@ func requestRecentAccountSessions(account: Account) -> Signal<([RecentAccountSes
var sessions: [RecentAccountSession] = []
var ttlDays: Int32 = 1
switch result {
case let .authorizations(authorizationTtlDays, authorizations):
case let .authorizations(authorizationsData):
let (authorizationTtlDays, authorizations) = (authorizationsData.authorizationTtlDays, authorizationsData.authorizations)
for authorization in authorizations {
sessions.append(RecentAccountSession(apiAuthorization: authorization))
}
@@ -30,12 +30,14 @@ func webSessions(network: Network) -> Signal<([WebAuthorization], [PeerId: Peer]
var sessions: [WebAuthorization] = []
var peers:[PeerId : Peer] = [:]
switch result {
case let .webAuthorizations(authorizations, users):
case let .webAuthorizations(webAuthorizationsData):
let (authorizations, users) = (webAuthorizationsData.authorizations, webAuthorizationsData.users)
for authorization in authorizations {
switch authorization {
case let .webAuthorization(hash, botId, domain, browser, platform, dateCreated, dateActive, ip, region):
case let .webAuthorization(webAuthorizationData):
let (hash, botId, domain, browser, platform, dateCreated, dateActive, ip, region) = (webAuthorizationData.hash, webAuthorizationData.botId, webAuthorizationData.domain, webAuthorizationData.browser, webAuthorizationData.platform, webAuthorizationData.dateCreated, webAuthorizationData.dateActive, webAuthorizationData.ip, webAuthorizationData.region)
sessions.append(WebAuthorization(hash: hash, botId: PeerId(namespace: Namespaces.Peer.CloudUser, id: PeerId.Id._internalFromInt64Value(botId)), domain: domain, browser: browser, platform: platform, dateCreated: dateCreated, dateActive: dateActive, ip: ip, region: region))
}
}
for user in users {
@@ -16,7 +16,8 @@ func _internal_updateGlobalPrivacySettings(account: Account) -> Signal<Never, No
}
let globalSettings: GlobalPrivacySettings
switch result {
case let .globalPrivacySettings(flags, nonContactPeersPaidStars, disallowedStarGifts):
case let .globalPrivacySettings(globalPrivacySettingsData):
let (flags, nonContactPeersPaidStars, disallowedStarGifts) = (globalPrivacySettingsData.flags, globalPrivacySettingsData.noncontactPeersPaidStars, globalPrivacySettingsData.disallowedGifts)
let automaticallyArchiveAndMuteNonContacts = (flags & (1 << 0)) != 0
let keepArchivedUnmuted = (flags & (1 << 1)) != 0
let keepArchivedFolders = (flags & (1 << 2)) != 0
@@ -80,13 +81,14 @@ func _internal_requestAccountPrivacySettings(account: Account) -> Signal<Account
|> mapToSignal { lastSeenPrivacy, groupPrivacy, voiceCallPrivacy, voiceCallP2P, profilePhotoPrivacy, forwardPrivacy, phoneNumberPrivacy, phoneDiscoveryPrivacy, voiceMessagesPrivacy, bioPrivacy, birthdayPrivacy, giftsAutoSavePrivacy, noPaidMessagesPrivacy, savedMusicPrivacy, autoremoveTimeout, globalPrivacySettings, messageAutoremoveTimeout -> Signal<AccountPrivacySettings, NoError> in
let accountTimeoutSeconds: Int32
switch autoremoveTimeout {
case let .accountDaysTTL(days):
accountTimeoutSeconds = days * 24 * 60 * 60
case let .accountDaysTTL(accountDaysTTL):
accountTimeoutSeconds = accountDaysTTL.days * 24 * 60 * 60
}
let messageAutoremoveSeconds: Int32?
switch messageAutoremoveTimeout {
case let .defaultHistoryTTL(period):
case let .defaultHistoryTTL(defaultHistoryTTLData):
let period = defaultHistoryTTLData.period
if period != 0 {
messageAutoremoveSeconds = period
} else {
@@ -111,49 +113,56 @@ func _internal_requestAccountPrivacySettings(account: Account) -> Signal<Account
var apiChats: [Api.Chat] = []
switch lastSeenPrivacy {
case let .privacyRules(rules, chats, users):
case let .privacyRules(privacyRulesData):
let (rules, chats, users) = (privacyRulesData.rules, privacyRulesData.chats, privacyRulesData.users)
apiUsers.append(contentsOf: users)
apiChats.append(contentsOf: chats)
lastSeenRules = rules
}
switch groupPrivacy {
case let .privacyRules(rules, chats, users):
case let .privacyRules(privacyRulesData):
let (rules, chats, users) = (privacyRulesData.rules, privacyRulesData.chats, privacyRulesData.users)
apiUsers.append(contentsOf: users)
apiChats.append(contentsOf: chats)
groupRules = rules
}
switch voiceCallPrivacy {
case let .privacyRules(rules, chats, users):
case let .privacyRules(privacyRulesData):
let (rules, chats, users) = (privacyRulesData.rules, privacyRulesData.chats, privacyRulesData.users)
apiUsers.append(contentsOf: users)
apiChats.append(contentsOf: chats)
voiceRules = rules
}
switch voiceCallP2P {
case let .privacyRules(rules, chats, users):
case let .privacyRules(privacyRulesData):
let (rules, chats, users) = (privacyRulesData.rules, privacyRulesData.chats, privacyRulesData.users)
apiUsers.append(contentsOf: users)
apiChats.append(contentsOf: chats)
voiceP2PRules = rules
}
switch profilePhotoPrivacy {
case let .privacyRules(rules, chats, users):
case let .privacyRules(privacyRulesData):
let (rules, chats, users) = (privacyRulesData.rules, privacyRulesData.chats, privacyRulesData.users)
apiUsers.append(contentsOf: users)
apiChats.append(contentsOf: chats)
profilePhotoRules = rules
}
switch forwardPrivacy {
case let .privacyRules(rules, chats, users):
case let .privacyRules(privacyRulesData):
let (rules, chats, users) = (privacyRulesData.rules, privacyRulesData.chats, privacyRulesData.users)
apiUsers.append(contentsOf: users)
apiChats.append(contentsOf: chats)
forwardRules = rules
}
switch phoneNumberPrivacy {
case let .privacyRules(rules, chats, users):
case let .privacyRules(privacyRulesData):
let (rules, chats, users) = (privacyRulesData.rules, privacyRulesData.chats, privacyRulesData.users)
apiUsers.append(contentsOf: users)
apiChats.append(contentsOf: chats)
phoneNumberRules = rules
@@ -161,7 +170,8 @@ func _internal_requestAccountPrivacySettings(account: Account) -> Signal<Account
var phoneDiscoveryValue = false
switch phoneDiscoveryPrivacy {
case let .privacyRules(rules, _, _):
case let .privacyRules(privacyRulesData):
let rules = privacyRulesData.rules
for rule in rules {
switch rule {
case .privacyValueAllowAll:
@@ -173,40 +183,46 @@ func _internal_requestAccountPrivacySettings(account: Account) -> Signal<Account
}
switch voiceMessagesPrivacy {
case let .privacyRules(rules, chats, users):
case let .privacyRules(privacyRulesData):
let (rules, chats, users) = (privacyRulesData.rules, privacyRulesData.chats, privacyRulesData.users)
apiUsers.append(contentsOf: users)
apiChats.append(contentsOf: chats)
voiceMessagesRules = rules
}
switch bioPrivacy {
case let .privacyRules(rules, chats, users):
case let .privacyRules(privacyRulesData):
let (rules, chats, users) = (privacyRulesData.rules, privacyRulesData.chats, privacyRulesData.users)
apiUsers.append(contentsOf: users)
apiChats.append(contentsOf: chats)
bioRules = rules
}
switch birthdayPrivacy {
case let .privacyRules(rules, chats, users):
case let .privacyRules(privacyRulesData):
let (rules, chats, users) = (privacyRulesData.rules, privacyRulesData.chats, privacyRulesData.users)
apiUsers.append(contentsOf: users)
apiChats.append(contentsOf: chats)
birthdayRules = rules
}
switch giftsAutoSavePrivacy {
case let .privacyRules(rules, chats, users):
case let .privacyRules(privacyRulesData):
let (rules, chats, users) = (privacyRulesData.rules, privacyRulesData.chats, privacyRulesData.users)
apiUsers.append(contentsOf: users)
apiChats.append(contentsOf: chats)
giftsAutoSaveRules = rules
}
switch noPaidMessagesPrivacy {
case let .privacyRules(rules, chats, users):
case let .privacyRules(privacyRulesData):
let (rules, chats, users) = (privacyRulesData.rules, privacyRulesData.chats, privacyRulesData.users)
apiUsers.append(contentsOf: users)
apiChats.append(contentsOf: chats)
noPaidMessagesRules = rules
}
switch savedMusicPrivacy {
case let .privacyRules(rules, chats, users):
case let .privacyRules(privacyRulesData):
let (rules, chats, users) = (privacyRulesData.rules, privacyRulesData.chats, privacyRulesData.users)
apiUsers.append(contentsOf: users)
apiChats.append(contentsOf: chats)
savedMusicRules = rules
@@ -220,7 +236,8 @@ func _internal_requestAccountPrivacySettings(account: Account) -> Signal<Account
if let peer = parseTelegramGroupOrChannel(chat: chat) {
var participantCount: Int32? = nil
switch chat {
case let .channel(_, _, _, _, _, _, _, _, _, _, _, _, participantsCountValue, _, _, _, _, _, _, _, _, _, _):
case let .channel(channelData):
let participantsCountValue = channelData.participantsCount
participantCount = participantsCountValue
default:
break
@@ -235,7 +252,8 @@ func _internal_requestAccountPrivacySettings(account: Account) -> Signal<Account
let globalSettings: GlobalPrivacySettings
switch globalPrivacySettings {
case let .globalPrivacySettings(flags, nonContactPeersPaidStars, disallowedStarGifts):
case let .globalPrivacySettings(globalPrivacySettingsData):
let (flags, nonContactPeersPaidStars, disallowedStarGifts) = (globalPrivacySettingsData.flags, globalPrivacySettingsData.noncontactPeersPaidStars, globalPrivacySettingsData.disallowedGifts)
let automaticallyArchiveAndMuteNonContacts = (flags & (1 << 0)) != 0
let keepArchivedUnmuted = (flags & (1 << 1)) != 0
let keepArchivedFolders = (flags & (1 << 2)) != 0
@@ -403,16 +421,16 @@ func _internal_updateGlobalPrivacySettings(account: Account, settings: GlobalPri
}
flags |= 1 << 6
let disallowedStargifts: Api.DisallowedGiftsSettings = .disallowedGiftsSettings(flags: giftFlags)
let disallowedStargifts: Api.DisallowedGiftsSettings = .disallowedGiftsSettings(.init(flags: giftFlags))
return account.network.request(Api.functions.account.setGlobalPrivacySettings(
settings: .globalPrivacySettings(flags: flags, noncontactPeersPaidStars: noncontactPeersPaidStars, disallowedGifts: disallowedStargifts)
settings: .globalPrivacySettings(.init(flags: flags, noncontactPeersPaidStars: noncontactPeersPaidStars, disallowedGifts: disallowedStargifts))
))
|> retryRequest
|> ignoreValues
}
func _internal_updateAccountRemovalTimeout(account: Account, timeout: Int32) -> Signal<Void, NoError> {
return account.network.request(Api.functions.account.setAccountTTL(ttl: .accountDaysTTL(days: timeout / (24 * 60 * 60))))
return account.network.request(Api.functions.account.setAccountTTL(ttl: .accountDaysTTL(Api.AccountDaysTTL.Cons_accountDaysTTL(days: timeout / (24 * 60 * 60)))))
|> retryRequest
|> mapToSignal { _ -> Signal<Void, NoError> in
return .complete()
@@ -529,10 +547,10 @@ func _internal_updateSelectiveAccountPrivacySettings(account: Account, type: Upd
let enablePeers = apiUserAndGroupIds(peerIds: enableFor)
if !enablePeers.users.isEmpty {
rules.append(Api.InputPrivacyRule.inputPrivacyValueAllowUsers(users: apiInputUsers(transaction: transaction, peerIds: enablePeers.users)))
rules.append(Api.InputPrivacyRule.inputPrivacyValueAllowUsers(.init(users: apiInputUsers(transaction: transaction, peerIds: enablePeers.users))))
}
if !enablePeers.groups.isEmpty {
rules.append(Api.InputPrivacyRule.inputPrivacyValueAllowChatParticipants(chats: enablePeers.groups.map({ $0.id._internalGetInt64Value() })))
rules.append(Api.InputPrivacyRule.inputPrivacyValueAllowChatParticipants(.init(chats: enablePeers.groups.map({ $0.id._internalGetInt64Value() }))))
}
rules.append(Api.InputPrivacyRule.inputPrivacyValueDisallowAll)
@@ -550,17 +568,17 @@ func _internal_updateSelectiveAccountPrivacySettings(account: Account, type: Upd
let disablePeers = apiUserAndGroupIds(peerIds: disableFor)
if !enablePeers.users.isEmpty {
rules.append(Api.InputPrivacyRule.inputPrivacyValueAllowUsers(users: apiInputUsers(transaction: transaction, peerIds: enablePeers.users)))
rules.append(Api.InputPrivacyRule.inputPrivacyValueAllowUsers(.init(users: apiInputUsers(transaction: transaction, peerIds: enablePeers.users))))
}
if !enablePeers.groups.isEmpty {
rules.append(Api.InputPrivacyRule.inputPrivacyValueAllowChatParticipants(chats: enablePeers.groups.map({ $0.id._internalGetInt64Value() })))
rules.append(Api.InputPrivacyRule.inputPrivacyValueAllowChatParticipants(.init(chats: enablePeers.groups.map({ $0.id._internalGetInt64Value() }))))
}
if !disablePeers.users.isEmpty {
rules.append(Api.InputPrivacyRule.inputPrivacyValueDisallowUsers(users: apiInputUsers(transaction: transaction, peerIds: disablePeers.users)))
rules.append(Api.InputPrivacyRule.inputPrivacyValueDisallowUsers(.init(users: apiInputUsers(transaction: transaction, peerIds: disablePeers.users))))
}
if !disablePeers.groups.isEmpty {
rules.append(Api.InputPrivacyRule.inputPrivacyValueDisallowChatParticipants(chats: disablePeers.groups.map({ $0.id._internalGetInt64Value() })))
rules.append(Api.InputPrivacyRule.inputPrivacyValueDisallowChatParticipants(.init(chats: disablePeers.groups.map({ $0.id._internalGetInt64Value() }))))
}
rules.append(Api.InputPrivacyRule.inputPrivacyValueAllowContacts)
@@ -574,10 +592,10 @@ func _internal_updateSelectiveAccountPrivacySettings(account: Account, type: Upd
let disablePeers = apiUserAndGroupIds(peerIds: disableFor)
if !disablePeers.users.isEmpty {
rules.append(Api.InputPrivacyRule.inputPrivacyValueDisallowUsers(users: apiInputUsers(transaction: transaction, peerIds: disablePeers.users)))
rules.append(Api.InputPrivacyRule.inputPrivacyValueDisallowUsers(.init(users: apiInputUsers(transaction: transaction, peerIds: disablePeers.users))))
}
if !disablePeers.groups.isEmpty {
rules.append(Api.InputPrivacyRule.inputPrivacyValueDisallowChatParticipants(chats: disablePeers.groups.map({ $0.id._internalGetInt64Value() })))
rules.append(Api.InputPrivacyRule.inputPrivacyValueDisallowChatParticipants(.init(chats: disablePeers.groups.map({ $0.id._internalGetInt64Value() }))))
}
rules.append(Api.InputPrivacyRule.inputPrivacyValueAllowAll)