Merge commit '982c5dab1f809909aa7b5bd207112edb6a1c6eb5'

This commit is contained in:
Ali
2021-02-12 23:16:45 +04:00
29 changed files with 4404 additions and 4362 deletions

View File

@@ -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))
}