mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-22 14:20:20 +00:00
Merge commit '982c5dab1f809909aa7b5bd207112edb6a1c6eb5'
This commit is contained in:
@@ -12,11 +12,9 @@ import AccountContext
|
||||
import ChatListFilterSettingsHeaderItem
|
||||
|
||||
private final class PeerAutoremoveSetupArguments {
|
||||
let toggleGlobal: (Bool) -> Void
|
||||
let updateValue: (Int32) -> Void
|
||||
|
||||
init(toggleGlobal: @escaping (Bool) -> Void, updateValue: @escaping (Int32) -> Void) {
|
||||
self.toggleGlobal = toggleGlobal
|
||||
init(updateValue: @escaping (Int32) -> Void) {
|
||||
self.updateValue = updateValue
|
||||
}
|
||||
}
|
||||
@@ -24,7 +22,6 @@ private final class PeerAutoremoveSetupArguments {
|
||||
private enum PeerAutoremoveSetupSection: Int32 {
|
||||
case header
|
||||
case time
|
||||
case global
|
||||
}
|
||||
|
||||
private enum PeerAutoremoveSetupEntry: ItemListNodeEntry {
|
||||
@@ -105,20 +102,15 @@ private enum PeerAutoremoveSetupEntry: ItemListNodeEntry {
|
||||
|
||||
private struct PeerAutoremoveSetupState: Equatable {
|
||||
var changedValue: Int32?
|
||||
var changedGlobalValue: Bool?
|
||||
var applyingSetting: Bool = false
|
||||
}
|
||||
|
||||
private func peerAutoremoveSetupEntries(peer: Peer?, presentationData: PresentationData, isDebug: Bool, defaultMyValue: Int32, peerValue: Int32, defaultGlobalValue: Bool, state: PeerAutoremoveSetupState) -> [PeerAutoremoveSetupEntry] {
|
||||
private func peerAutoremoveSetupEntries(peer: Peer?, presentationData: PresentationData, isDebug: Bool, defaultValue: Int32, state: PeerAutoremoveSetupState) -> [PeerAutoremoveSetupEntry] {
|
||||
var entries: [PeerAutoremoveSetupEntry] = []
|
||||
|
||||
let resolvedValue: Int32
|
||||
|
||||
if peer is TelegramUser {
|
||||
resolvedValue = state.changedValue ?? defaultMyValue
|
||||
} else {
|
||||
resolvedValue = state.changedValue ?? peerValue
|
||||
}
|
||||
resolvedValue = state.changedValue ?? defaultValue
|
||||
|
||||
//TODO:localize
|
||||
entries.append(.header)
|
||||
@@ -145,8 +137,7 @@ private func peerAutoremoveSetupEntries(peer: Peer?, presentationData: Presentat
|
||||
|
||||
public enum PeerAutoremoveSetupScreenResult {
|
||||
public struct Updated {
|
||||
public var myValue: Int32?
|
||||
public var limitedByValue: Int32?
|
||||
public var value: Int32?
|
||||
}
|
||||
|
||||
case unchanged
|
||||
@@ -168,13 +159,7 @@ public func peerAutoremoveSetupScreen(context: AccountContext, peerId: PeerId, c
|
||||
let applyDisposable = MetaDisposable()
|
||||
actionsDisposable.add(applyDisposable)
|
||||
|
||||
let arguments = PeerAutoremoveSetupArguments(toggleGlobal: { value in
|
||||
updateState { state in
|
||||
var state = state
|
||||
state.changedGlobalValue = value
|
||||
return state
|
||||
}
|
||||
}, updateValue: { value in
|
||||
let arguments = PeerAutoremoveSetupArguments(updateValue: { value in
|
||||
updateState { state in
|
||||
var state = state
|
||||
state.changedValue = value
|
||||
@@ -185,26 +170,18 @@ public func peerAutoremoveSetupScreen(context: AccountContext, peerId: PeerId, c
|
||||
let signal = combineLatest(context.sharedContext.presentationData, statePromise.get(), context.account.viewTracker.peerView(peerId))
|
||||
|> deliverOnMainQueue
|
||||
|> map { presentationData, state, view -> (ItemListControllerState, (ItemListNodeState, Any)) in
|
||||
var defaultMyValue: Int32 = Int32.max
|
||||
var peerValue: Int32 = Int32.max
|
||||
var defaultGlobalValue = true
|
||||
var defaultValue: Int32 = Int32.max
|
||||
if let cachedData = view.cachedData as? CachedChannelData {
|
||||
if case let .known(value) = cachedData.autoremoveTimeout {
|
||||
defaultMyValue = value?.myValue ?? Int32.max
|
||||
peerValue = value?.peerValue ?? Int32.max
|
||||
defaultGlobalValue = value?.isGlobal ?? true
|
||||
defaultValue = value?.peerValue ?? Int32.max
|
||||
}
|
||||
} else if let cachedData = view.cachedData as? CachedGroupData {
|
||||
if case let .known(value) = cachedData.autoremoveTimeout {
|
||||
defaultMyValue = value?.myValue ?? Int32.max
|
||||
peerValue = value?.peerValue ?? Int32.max
|
||||
defaultGlobalValue = value?.isGlobal ?? true
|
||||
defaultValue = value?.peerValue ?? Int32.max
|
||||
}
|
||||
} else if let cachedData = view.cachedData as? CachedUserData {
|
||||
if case let .known(value) = cachedData.autoremoveTimeout {
|
||||
defaultMyValue = value?.myValue ?? Int32.max
|
||||
peerValue = value?.peerValue ?? Int32.max
|
||||
defaultGlobalValue = value?.isGlobal ?? true
|
||||
defaultValue = value?.peerValue ?? Int32.max
|
||||
}
|
||||
}
|
||||
|
||||
@@ -219,56 +196,34 @@ public func peerAutoremoveSetupScreen(context: AccountContext, peerId: PeerId, c
|
||||
} else {
|
||||
rightNavigationButton = ItemListNavigationButton(content: .text(presentationData.strings.Common_Done), style: .bold, enabled: true, action: {
|
||||
var changedValue: Int32?
|
||||
var globalValue: Bool?
|
||||
updateState { state in
|
||||
var state = state
|
||||
state.applyingSetting = true
|
||||
changedValue = state.changedValue
|
||||
globalValue = state.changedGlobalValue
|
||||
return state
|
||||
}
|
||||
|
||||
let resolvedDefaultValue: Int32
|
||||
if peer is TelegramUser {
|
||||
resolvedDefaultValue = defaultMyValue
|
||||
} else {
|
||||
resolvedDefaultValue = peerValue
|
||||
}
|
||||
|
||||
var updated = false
|
||||
if let changedValue = changedValue, changedValue != resolvedDefaultValue {
|
||||
updated = true
|
||||
}
|
||||
if let globalValue = globalValue, globalValue != defaultGlobalValue {
|
||||
if let changedValue = changedValue, changedValue != defaultValue {
|
||||
updated = true
|
||||
}
|
||||
|
||||
var resolvedValue: Int32? = changedValue ?? resolvedDefaultValue
|
||||
var resolvedValue: Int32? = changedValue ?? defaultValue
|
||||
if resolvedValue == Int32.max {
|
||||
resolvedValue = nil
|
||||
}
|
||||
|
||||
let resolvedMaxValue: Int32
|
||||
if peer is TelegramUser {
|
||||
resolvedMaxValue = peerValue
|
||||
} else {
|
||||
resolvedMaxValue = Int32.max
|
||||
}
|
||||
|
||||
if updated {
|
||||
let resolvedGlobalValue = globalValue ?? defaultGlobalValue
|
||||
|
||||
let signal = setChatMessageAutoremoveTimeoutInteractively(account: context.account, peerId: peerId, timeout: resolvedValue, isGlobal: resolvedGlobalValue)
|
||||
let signal = setChatMessageAutoremoveTimeoutInteractively(account: context.account, peerId: peerId, timeout: resolvedValue)
|
||||
|> deliverOnMainQueue
|
||||
|
||||
applyDisposable.set((signal
|
||||
|> deliverOnMainQueue).start(error: { _ in
|
||||
}, completed: {
|
||||
dismissImpl?()
|
||||
if resolvedValue != resolvedDefaultValue {
|
||||
if resolvedValue != defaultValue {
|
||||
completion(.updated(PeerAutoremoveSetupScreenResult.Updated(
|
||||
myValue: resolvedValue,
|
||||
limitedByValue: resolvedMaxValue == Int32.max ? nil : resolvedMaxValue
|
||||
value: resolvedValue
|
||||
)))
|
||||
} else {
|
||||
completion(.unchanged)
|
||||
@@ -276,12 +231,7 @@ public func peerAutoremoveSetupScreen(context: AccountContext, peerId: PeerId, c
|
||||
}))
|
||||
} else {
|
||||
dismissImpl?()
|
||||
|
||||
if resolvedMaxValue != Int32.max {
|
||||
completion(.updated(PeerAutoremoveSetupScreenResult.Updated(myValue: resolvedValue, limitedByValue: resolvedMaxValue)))
|
||||
} else {
|
||||
completion(.unchanged)
|
||||
}
|
||||
completion(.unchanged)
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -290,7 +240,7 @@ public func peerAutoremoveSetupScreen(context: AccountContext, peerId: PeerId, c
|
||||
|
||||
//TODO:localize
|
||||
let controllerState = ItemListControllerState(presentationData: ItemListPresentationData(presentationData), title: .text("Auto-Deletion"), leftNavigationButton: leftNavigationButton, rightNavigationButton: rightNavigationButton, backNavigationButton: ItemListBackButton(title: presentationData.strings.Common_Back))
|
||||
let listState = ItemListNodeState(presentationData: ItemListPresentationData(presentationData), entries: peerAutoremoveSetupEntries(peer: peer, presentationData: presentationData, isDebug: isDebug, defaultMyValue: defaultMyValue, peerValue: peerValue, defaultGlobalValue: defaultGlobalValue, state: state), style: .blocks)
|
||||
let listState = ItemListNodeState(presentationData: ItemListPresentationData(presentationData), entries: peerAutoremoveSetupEntries(peer: peer, presentationData: presentationData, isDebug: isDebug, defaultValue: defaultValue, state: state), style: .blocks)
|
||||
|
||||
return (controllerState, (listState, arguments))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user