mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2026-02-15 07:19:57 +00:00
Fix story privacy layout
This commit is contained in:
@@ -3214,7 +3214,7 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
|
||||
public var willDismiss: () -> Void = { }
|
||||
|
||||
private var closeFriends = Promise<[EnginePeer]>()
|
||||
private let storiesGrayList: BlockedPeersContext
|
||||
private let storiesBlockedPeers: BlockedPeersContext
|
||||
|
||||
private let hapticFeedback = HapticFeedback()
|
||||
|
||||
@@ -3239,7 +3239,7 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
|
||||
self.transitionOut = transitionOut
|
||||
self.completion = completion
|
||||
|
||||
self.storiesGrayList = BlockedPeersContext(account: context.account, subject: .stories)
|
||||
self.storiesBlockedPeers = BlockedPeersContext(account: context.account, subject: .stories)
|
||||
|
||||
if let transitionIn, case .camera = transitionIn {
|
||||
self.isSavingAvailable = true
|
||||
@@ -3314,7 +3314,7 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
|
||||
subject: .stories(editing: false),
|
||||
initialPeerIds: Set(privacy.privacy.additionallyIncludePeers),
|
||||
closeFriends: self.closeFriends.get(),
|
||||
storiesGrayList: self.storiesGrayList
|
||||
blockedPeersContext: self.storiesBlockedPeers
|
||||
)
|
||||
let _ = (stateContext.ready |> filter { $0 } |> take(1) |> deliverOnMainQueue).start(next: { [weak self] _ in
|
||||
guard let self else {
|
||||
@@ -3342,7 +3342,7 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
|
||||
guard let self else {
|
||||
return
|
||||
}
|
||||
self.openEditCategory(privacy: privacy, isForwardingDisabled: !allowScreenshots, pin: pin, grayList: false, completion: { [weak self] privacy in
|
||||
self.openEditCategory(privacy: privacy, isForwardingDisabled: !allowScreenshots, pin: pin, blockedPeers: false, completion: { [weak self] privacy in
|
||||
guard let self else {
|
||||
return
|
||||
}
|
||||
@@ -3354,11 +3354,11 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
|
||||
), completion: completion)
|
||||
})
|
||||
},
|
||||
editGrayList: { [weak self] privacy, allowScreenshots, pin in
|
||||
editBlockedPeers: { [weak self] privacy, allowScreenshots, pin in
|
||||
guard let self else {
|
||||
return
|
||||
}
|
||||
self.openEditCategory(privacy: privacy, isForwardingDisabled: !allowScreenshots, pin: pin, grayList: true, completion: { [weak self] privacy in
|
||||
self.openEditCategory(privacy: privacy, isForwardingDisabled: !allowScreenshots, pin: pin, blockedPeers: true, completion: { [weak self] privacy in
|
||||
guard let self else {
|
||||
return
|
||||
}
|
||||
@@ -3378,12 +3378,12 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
|
||||
})
|
||||
}
|
||||
|
||||
private func openEditCategory(privacy: EngineStoryPrivacy, isForwardingDisabled: Bool, pin: Bool, grayList: Bool, completion: @escaping (EngineStoryPrivacy) -> Void) {
|
||||
private func openEditCategory(privacy: EngineStoryPrivacy, isForwardingDisabled: Bool, pin: Bool, blockedPeers: Bool, completion: @escaping (EngineStoryPrivacy) -> Void) {
|
||||
let subject: ShareWithPeersScreen.StateContext.Subject
|
||||
if grayList {
|
||||
subject = .chats(grayList: true)
|
||||
if blockedPeers {
|
||||
subject = .chats(blocked: true)
|
||||
} else if privacy.base == .nobody {
|
||||
subject = .chats(grayList: false)
|
||||
subject = .chats(blocked: false)
|
||||
} else {
|
||||
subject = .contacts(privacy.base)
|
||||
}
|
||||
@@ -3391,7 +3391,7 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
|
||||
context: self.context,
|
||||
subject: subject,
|
||||
initialPeerIds: Set(privacy.additionallyIncludePeers),
|
||||
storiesGrayList: self.storiesGrayList
|
||||
blockedPeersContext: self.storiesBlockedPeers
|
||||
)
|
||||
let _ = (stateContext.ready |> filter { $0 } |> take(1) |> deliverOnMainQueue).start(next: { [weak self] _ in
|
||||
guard let self else {
|
||||
@@ -3407,8 +3407,8 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
|
||||
guard let self else {
|
||||
return
|
||||
}
|
||||
if grayList {
|
||||
let _ = self.storiesGrayList.updatePeerIds(result.additionallyIncludePeers).start()
|
||||
if blockedPeers {
|
||||
let _ = self.storiesBlockedPeers.updatePeerIds(result.additionallyIncludePeers).start()
|
||||
completion(privacy)
|
||||
} else if case .closeFriends = privacy.base {
|
||||
let _ = self.context.engine.privacy.updateCloseFriends(peerIds: result.additionallyIncludePeers).start()
|
||||
@@ -3419,7 +3419,7 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
|
||||
}
|
||||
},
|
||||
editCategory: { _, _, _ in },
|
||||
editGrayList: { _, _, _ in }
|
||||
editBlockedPeers: { _, _, _ in }
|
||||
)
|
||||
controller.dismissed = {
|
||||
self.node.mediaEditor?.play()
|
||||
|
||||
@@ -39,7 +39,7 @@ final class ShareWithPeersScreenComponent: Component {
|
||||
let optionItems: [OptionItem]
|
||||
let completion: (EngineStoryPrivacy, Bool, Bool, [EnginePeer]) -> Void
|
||||
let editCategory: (EngineStoryPrivacy, Bool, Bool) -> Void
|
||||
let editGrayList: (EngineStoryPrivacy, Bool, Bool) -> Void
|
||||
let editBlockedPeers: (EngineStoryPrivacy, Bool, Bool) -> Void
|
||||
|
||||
init(
|
||||
context: AccountContext,
|
||||
@@ -53,7 +53,7 @@ final class ShareWithPeersScreenComponent: Component {
|
||||
optionItems: [OptionItem],
|
||||
completion: @escaping (EngineStoryPrivacy, Bool, Bool, [EnginePeer]) -> Void,
|
||||
editCategory: @escaping (EngineStoryPrivacy, Bool, Bool) -> Void,
|
||||
editGrayList: @escaping (EngineStoryPrivacy, Bool, Bool) -> Void
|
||||
editBlockedPeers: @escaping (EngineStoryPrivacy, Bool, Bool) -> Void
|
||||
) {
|
||||
self.context = context
|
||||
self.stateContext = stateContext
|
||||
@@ -66,7 +66,7 @@ final class ShareWithPeersScreenComponent: Component {
|
||||
self.optionItems = optionItems
|
||||
self.completion = completion
|
||||
self.editCategory = editCategory
|
||||
self.editGrayList = editGrayList
|
||||
self.editBlockedPeers = editBlockedPeers
|
||||
}
|
||||
|
||||
static func ==(lhs: ShareWithPeersScreenComponent, rhs: ShareWithPeersScreenComponent) -> Bool {
|
||||
@@ -1024,7 +1024,7 @@ final class ShareWithPeersScreenComponent: Component {
|
||||
guard let self, let environment = self.environment, let controller = environment.controller() as? ShareWithPeersScreen else {
|
||||
return
|
||||
}
|
||||
component.editGrayList(
|
||||
component.editBlockedPeers(
|
||||
EngineStoryPrivacy(base: .nobody, additionallyIncludePeers: []),
|
||||
self.selectedOptions.contains(.screenshot),
|
||||
self.selectedOptions.contains(.pin)
|
||||
@@ -1672,7 +1672,7 @@ final class ShareWithPeersScreenComponent: Component {
|
||||
))
|
||||
sections.append(ItemLayout.Section(
|
||||
id: 2,
|
||||
insets: UIEdgeInsets(top: 28.0, left: 0.0, bottom: 0.0, right: 0.0),
|
||||
insets: UIEdgeInsets(top: 28.0, left: 0.0, bottom: 24.0, right: 0.0),
|
||||
itemHeight: optionItemSize.height,
|
||||
itemCount: component.optionItems.count
|
||||
))
|
||||
@@ -1782,9 +1782,9 @@ final class ShareWithPeersScreenComponent: Component {
|
||||
let inset: CGFloat
|
||||
if case let .stories(editing) = component.stateContext.subject {
|
||||
if editing {
|
||||
inset = 446.0
|
||||
inset = 478.0
|
||||
} else {
|
||||
inset = 605.0
|
||||
inset = 630.0
|
||||
}
|
||||
} else {
|
||||
inset = 600.0
|
||||
@@ -2074,7 +2074,7 @@ public class ShareWithPeersScreen: ViewControllerComponentContainer {
|
||||
public final class StateContext {
|
||||
public enum Subject: Equatable {
|
||||
case stories(editing: Bool)
|
||||
case chats(grayList: Bool)
|
||||
case chats(blocked: Bool)
|
||||
case contacts(EngineStoryPrivacy.Base)
|
||||
case search(query: String, onlyContacts: Bool)
|
||||
}
|
||||
@@ -2083,7 +2083,7 @@ public class ShareWithPeersScreen: ViewControllerComponentContainer {
|
||||
|
||||
public let subject: Subject
|
||||
public private(set) var initialPeerIds: Set<EnginePeer.Id> = Set()
|
||||
fileprivate let storiesGrayList: BlockedPeersContext?
|
||||
fileprivate let blockedPeersContext: BlockedPeersContext?
|
||||
|
||||
private var stateDisposable: Disposable?
|
||||
private let stateSubject = Promise<State>()
|
||||
@@ -2097,18 +2097,18 @@ public class ShareWithPeersScreen: ViewControllerComponentContainer {
|
||||
|
||||
public init(
|
||||
context: AccountContext,
|
||||
subject: Subject = .chats(grayList: false),
|
||||
subject: Subject = .chats(blocked: false),
|
||||
initialPeerIds: Set<EnginePeer.Id> = Set(),
|
||||
closeFriends: Signal<[EnginePeer], NoError> = .single([]),
|
||||
storiesGrayList: BlockedPeersContext? = nil
|
||||
blockedPeersContext: BlockedPeersContext? = nil
|
||||
) {
|
||||
self.subject = subject
|
||||
self.initialPeerIds = initialPeerIds
|
||||
self.storiesGrayList = storiesGrayList
|
||||
self.blockedPeersContext = blockedPeersContext
|
||||
|
||||
let grayListPeers: Signal<[EnginePeer], NoError>
|
||||
if let storiesGrayList {
|
||||
grayListPeers = storiesGrayList.state
|
||||
if let blockedPeersContext {
|
||||
grayListPeers = blockedPeersContext.state
|
||||
|> map { state -> [EnginePeer] in
|
||||
return state.peers.compactMap { $0.peer.flatMap(EnginePeer.init) }
|
||||
}
|
||||
@@ -2426,7 +2426,7 @@ public class ShareWithPeersScreen: ViewControllerComponentContainer {
|
||||
stateContext: StateContext,
|
||||
completion: @escaping (EngineStoryPrivacy, Bool, Bool, [EnginePeer]) -> Void,
|
||||
editCategory: @escaping (EngineStoryPrivacy, Bool, Bool) -> Void,
|
||||
editGrayList: @escaping (EngineStoryPrivacy, Bool, Bool) -> Void
|
||||
editBlockedPeers: @escaping (EngineStoryPrivacy, Bool, Bool) -> Void
|
||||
) {
|
||||
self.context = context
|
||||
|
||||
@@ -2537,7 +2537,7 @@ public class ShareWithPeersScreen: ViewControllerComponentContainer {
|
||||
optionItems: optionItems,
|
||||
completion: completion,
|
||||
editCategory: editCategory,
|
||||
editGrayList: editGrayList
|
||||
editBlockedPeers: editBlockedPeers
|
||||
), navigationBarAppearance: .none, theme: .dark)
|
||||
|
||||
self.statusBar.statusBarStyle = .Ignore
|
||||
|
||||
@@ -3466,19 +3466,23 @@ public final class StoryItemSetContainerComponent: Component {
|
||||
guard let self else {
|
||||
return
|
||||
}
|
||||
self.openItemPrivacyCategory(privacy: privacy, completion: { [weak self] privacy in
|
||||
self.openItemPrivacyCategory(privacy: privacy, blockedPeers: false, completion: { [weak self] privacy in
|
||||
guard let self else {
|
||||
return
|
||||
}
|
||||
self.openItemPrivacySettings(initialPrivacy: privacy)
|
||||
})
|
||||
},
|
||||
editGrayList: { [weak self] privacy, _, _ in
|
||||
editBlockedPeers: { [weak self] privacy, _, _ in
|
||||
guard let self else {
|
||||
return
|
||||
}
|
||||
let _ = self
|
||||
let _ = privacy
|
||||
self.openItemPrivacyCategory(privacy: privacy, blockedPeers: true, completion: { [weak self] privacy in
|
||||
guard let self else {
|
||||
return
|
||||
}
|
||||
self.openItemPrivacySettings(initialPrivacy: privacy)
|
||||
})
|
||||
}
|
||||
)
|
||||
controller.dismissed = { [weak self] in
|
||||
@@ -3494,13 +3498,15 @@ public final class StoryItemSetContainerComponent: Component {
|
||||
})
|
||||
}
|
||||
|
||||
private func openItemPrivacyCategory(privacy: EngineStoryPrivacy, completion: @escaping (EngineStoryPrivacy) -> Void) {
|
||||
private func openItemPrivacyCategory(privacy: EngineStoryPrivacy, blockedPeers: Bool, completion: @escaping (EngineStoryPrivacy) -> Void) {
|
||||
guard let context = self.component?.context else {
|
||||
return
|
||||
}
|
||||
let subject: ShareWithPeersScreen.StateContext.Subject
|
||||
if privacy.base == .nobody {
|
||||
subject = .chats(grayList: false)
|
||||
if blockedPeers {
|
||||
subject = .chats(blocked: true)
|
||||
} else if privacy.base == .nobody {
|
||||
subject = .chats(blocked: false)
|
||||
} else {
|
||||
subject = .contacts(privacy.base)
|
||||
}
|
||||
@@ -3514,7 +3520,10 @@ public final class StoryItemSetContainerComponent: Component {
|
||||
initialPrivacy: privacy,
|
||||
stateContext: stateContext,
|
||||
completion: { [weak self] result, _, _, peers in
|
||||
if case .closeFriends = privacy.base {
|
||||
if blockedPeers {
|
||||
// let _ = self.storiesBlockedPeers.updatePeerIds(result.additionallyIncludePeers).start()
|
||||
completion(privacy)
|
||||
} else if case .closeFriends = privacy.base {
|
||||
let _ = context.engine.privacy.updateCloseFriends(peerIds: result.additionallyIncludePeers).start()
|
||||
if let component = self?.component {
|
||||
component.closeFriends.set(.single(peers))
|
||||
@@ -3525,7 +3534,7 @@ public final class StoryItemSetContainerComponent: Component {
|
||||
}
|
||||
},
|
||||
editCategory: { _, _, _ in },
|
||||
editGrayList: { _, _, _ in }
|
||||
editBlockedPeers: { _, _, _ in }
|
||||
)
|
||||
controller.dismissed = { [weak self] in
|
||||
if let self {
|
||||
|
||||
Reference in New Issue
Block a user