mirror of
https://github.com/ichmagmaus111/ghostgram.git
synced 2026-08-19 04:17:14 +02:00
Update Ghostgram features
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import SGSimpleSettings
|
||||
import Foundation
|
||||
import TelegramPresentationData
|
||||
import AccountContext
|
||||
@@ -136,6 +137,10 @@ extension ChatControllerImpl {
|
||||
var voiceMessagesAvailable: Bool = true
|
||||
var requestsState: PeerInvitationImportersState?
|
||||
var dismissedInvitationRequests: [Int64]?
|
||||
|
||||
// MARK: Swiftgram
|
||||
var predictedChatLanguage: String?
|
||||
|
||||
var customEmojiAvailable: Bool = false
|
||||
var threadData: ChatPresentationInterfaceState.ThreadData?
|
||||
var forumTopicData: ChatPresentationInterfaceState.ThreadData?
|
||||
@@ -163,6 +168,9 @@ extension ChatControllerImpl {
|
||||
private var premiumGiftSuggestionDisposable: Disposable?
|
||||
private var translationStateDisposable: Disposable?
|
||||
|
||||
// MARK: Swiftgram
|
||||
private var chatLanguagePredictionDisposable: Disposable?
|
||||
|
||||
private let isPeerInfoReady = ValuePromise<Bool>(false, ignoreRepeated: true)
|
||||
private let isChatLocationInfoReady = ValuePromise<Bool>(false, ignoreRepeated: true)
|
||||
private let isCachedDataReady = ValuePromise<Bool>(false, ignoreRepeated: true)
|
||||
@@ -893,8 +901,7 @@ extension ChatControllerImpl {
|
||||
peerVerification = cachedChannelData.verification
|
||||
}
|
||||
}
|
||||
// GHOSTGRAM: Bypass copy protection if enabled in Misc settings
|
||||
copyProtectionEnabled = MiscSettingsManager.shared.shouldBypassCopyProtection ? false : peer.isCopyProtectionEnabled
|
||||
copyProtectionEnabled = peer.isCopyProtectionEnabled
|
||||
if let cachedGroupData = peerView.cachedData as? CachedGroupData {
|
||||
if !cachedGroupData.botInfos.isEmpty {
|
||||
hasBots = true
|
||||
@@ -983,7 +990,9 @@ extension ChatControllerImpl {
|
||||
}
|
||||
|
||||
var adMessage = adMessage
|
||||
if let peer = peerView.peers[peerView.peerId] as? TelegramUser, peer.botInfo != nil {
|
||||
if MiscSettingsManager.shared.shouldBlockAds {
|
||||
adMessage = nil
|
||||
} else if let peer = peerView.peers[peerView.peerId] as? TelegramUser, peer.botInfo != nil {
|
||||
} else {
|
||||
adMessage = nil
|
||||
}
|
||||
@@ -1028,7 +1037,7 @@ extension ChatControllerImpl {
|
||||
} else {
|
||||
isRegularChat = true
|
||||
}
|
||||
if strongSelf.nextChannelToReadDisposable == nil, let peerId = chatLocation.peerId, let customChatNavigationStack {
|
||||
if strongSelf.nextChannelToReadDisposable == nil, let peerId = chatLocation.peerId, let customChatNavigationStack, !SGSimpleSettings.shared.disableScrollToNextChannel {
|
||||
if let index = customChatNavigationStack.firstIndex(of: peerId), index != customChatNavigationStack.count - 1 {
|
||||
let nextPeerId = customChatNavigationStack[index + 1]
|
||||
strongSelf.nextChannelToReadDisposable = (combineLatest(queue: .mainQueue(),
|
||||
@@ -1072,7 +1081,7 @@ extension ChatControllerImpl {
|
||||
}
|
||||
})
|
||||
}
|
||||
} else if isRegularChat, strongSelf.nextChannelToReadDisposable == nil {
|
||||
} else if isRegularChat, strongSelf.nextChannelToReadDisposable == nil, !SGSimpleSettings.shared.disableScrollToNextChannel {
|
||||
//TODO:loc optimize
|
||||
let accountPeerId = context.account.peerId
|
||||
strongSelf.nextChannelToReadDisposable = (combineLatest(queue: .mainQueue(),
|
||||
@@ -1372,8 +1381,7 @@ extension ChatControllerImpl {
|
||||
var alwaysShowGiftButton = false
|
||||
var disallowedGifts: TelegramDisallowedGifts?
|
||||
if let peer = peerView.peers[peerView.peerId] {
|
||||
// GHOSTGRAM: Bypass copy protection if enabled in Misc settings
|
||||
copyProtectionEnabled = MiscSettingsManager.shared.shouldBypassCopyProtection ? false : peer.isCopyProtectionEnabled
|
||||
copyProtectionEnabled = peer.isCopyProtectionEnabled
|
||||
if let cachedData = peerView.cachedData as? CachedUserData {
|
||||
contactStatus = ChatContactStatus(canAddContact: !peerView.peerIsContact, peerStatusSettings: cachedData.peerStatusSettings, invitedBy: nil, managingBot: managingBot)
|
||||
if case let .known(value) = cachedData.businessIntro {
|
||||
@@ -1701,7 +1709,7 @@ extension ChatControllerImpl {
|
||||
strongSelf.state.alwaysShowGiftButton = alwaysShowGiftButton
|
||||
strongSelf.state.disallowedGifts = disallowedGifts
|
||||
|
||||
if let replyThreadId, let channel = renderedPeer?.peer as? TelegramChannel, channel.isForumOrMonoForum, strongSelf.nextChannelToReadDisposable == nil {
|
||||
if let replyThreadId, let channel = renderedPeer?.peer as? TelegramChannel, channel.isForumOrMonoForum, strongSelf.nextChannelToReadDisposable == nil, !SGSimpleSettings.shared.disableScrollToNextTopic {
|
||||
strongSelf.nextChannelToReadDisposable = (combineLatest(queue: .mainQueue(),
|
||||
context.engine.peers.getNextUnreadForumTopic(peerId: channel.id, topicId: Int32(clamping: replyThreadId)),
|
||||
ApplicationSpecificNotice.getNextChatSuggestionTip(accountManager: context.sharedContext.accountManager)
|
||||
@@ -2112,7 +2120,8 @@ extension ChatControllerImpl {
|
||||
if counterAndTimestamp.0 >= 3 {
|
||||
maybeSuggestPremium = true
|
||||
}
|
||||
if (isPremium || maybeSuggestPremium || hasAutoTranslate) && !isHidden {
|
||||
let sgTranslationAvailable = SGSimpleSettings.shared.translationBackendEnum != .default
|
||||
if (isPremium || maybeSuggestPremium || hasAutoTranslate || sgTranslationAvailable) && !isHidden {
|
||||
return chatTranslationState(context: context, peerId: peerId, threadId: chatLocation.threadId)
|
||||
|> map { translationState -> ChatPresentationTranslationState? in
|
||||
if let translationState, !translationState.fromLang.isEmpty && (translationState.fromLang != baseLanguageCode || translationState.isEnabled) {
|
||||
@@ -2137,6 +2146,27 @@ extension ChatControllerImpl {
|
||||
|
||||
strongSelf.onUpdated?(previousState)
|
||||
})
|
||||
|
||||
// MARK: Swiftgram
|
||||
self.chatLanguagePredictionDisposable = (
|
||||
chatTranslationState(context: context, peerId: peerId, threadId: chatLocation.threadId)
|
||||
|> map { translationState -> ChatPresentationTranslationState? in
|
||||
if let translationState, !translationState.fromLang.isEmpty {
|
||||
return ChatPresentationTranslationState(isEnabled: translationState.isEnabled, fromLang: translationState.fromLang, toLang: translationState.toLang ?? baseLanguageCode)
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|> distinctUntilChanged
|
||||
|> deliverOnMainQueue).startStrict(next: { [weak self] translationState in
|
||||
if let strongSelf = self, let translationState = translationState, strongSelf.state.predictedChatLanguage == nil {
|
||||
let previousState = strongSelf.state
|
||||
|
||||
strongSelf.state.predictedChatLanguage = translationState.fromLang
|
||||
|
||||
strongSelf.onUpdated?(previousState)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
let premiumGiftOptions: Signal<[CachedPremiumGiftOption], NoError> = .single([])
|
||||
@@ -2400,6 +2430,8 @@ extension ChatControllerImpl {
|
||||
self.cachedDataDisposable?.dispose()
|
||||
self.premiumGiftSuggestionDisposable?.dispose()
|
||||
self.translationStateDisposable?.dispose()
|
||||
// MARK: Swiftgram
|
||||
self.chatLanguagePredictionDisposable?.dispose()
|
||||
self.inviteRequestsDisposable?.dispose()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user