mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Various Improvements
This commit is contained in:
parent
55f464f19d
commit
60c51d8008
@ -321,7 +321,7 @@ private struct InviteLinkEditControllerState: Equatable {
|
|||||||
var updating = false
|
var updating = false
|
||||||
}
|
}
|
||||||
|
|
||||||
public func inviteLinkEditController(context: AccountContext, peerId: PeerId, invite: ExportedInvitation?, completion: ((ExportedInvitation?) -> Void)? = nil) -> ViewController {
|
public func inviteLinkEditController(context: AccountContext, updatedPresentationData: (initial: PresentationData, signal: Signal<PresentationData, NoError>)? = nil, peerId: PeerId, invite: ExportedInvitation?, completion: ((ExportedInvitation?) -> Void)? = nil) -> ViewController {
|
||||||
var presentControllerImpl: ((ViewController, ViewControllerPresentationArguments?) -> Void)?
|
var presentControllerImpl: ((ViewController, ViewControllerPresentationArguments?) -> Void)?
|
||||||
let actionsDisposable = DisposableSet()
|
let actionsDisposable = DisposableSet()
|
||||||
|
|
||||||
@ -374,7 +374,7 @@ public func inviteLinkEditController(context: AccountContext, peerId: PeerId, in
|
|||||||
} else {
|
} else {
|
||||||
isGroup = true
|
isGroup = true
|
||||||
}
|
}
|
||||||
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
let presentationData = updatedPresentationData?.initial ?? context.sharedContext.currentPresentationData.with { $0 }
|
||||||
let controller = ActionSheetController(presentationData: presentationData)
|
let controller = ActionSheetController(presentationData: presentationData)
|
||||||
let dismissAction: () -> Void = { [weak controller] in
|
let dismissAction: () -> Void = { [weak controller] in
|
||||||
controller?.dismissAnimated()
|
controller?.dismissAnimated()
|
||||||
@ -416,8 +416,10 @@ public func inviteLinkEditController(context: AccountContext, peerId: PeerId, in
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
let presentationData = updatedPresentationData?.signal ?? context.sharedContext.presentationData
|
||||||
|
|
||||||
let previousState = Atomic<InviteLinkEditControllerState?>(value: nil)
|
let previousState = Atomic<InviteLinkEditControllerState?>(value: nil)
|
||||||
let signal = combineLatest(context.sharedContext.presentationData, statePromise.get())
|
let signal = combineLatest(presentationData, statePromise.get())
|
||||||
|> deliverOnMainQueue
|
|> deliverOnMainQueue
|
||||||
|> map { presentationData, state -> (ItemListControllerState, (ItemListNodeState, Any)) in
|
|> map { presentationData, state -> (ItemListControllerState, (ItemListNodeState, Any)) in
|
||||||
let leftNavigationButton = ItemListNavigationButton(content: .text(presentationData.strings.Common_Cancel), style: .regular, enabled: true, action: {
|
let leftNavigationButton = ItemListNavigationButton(content: .text(presentationData.strings.Common_Cancel), style: .regular, enabled: true, action: {
|
||||||
|
@ -749,7 +749,7 @@ private func channelAdminControllerEntries(presentationData: PresentationData, s
|
|||||||
return entries
|
return entries
|
||||||
}
|
}
|
||||||
|
|
||||||
public func channelAdminController(context: AccountContext, peerId: PeerId, adminId: PeerId, initialParticipant: ChannelParticipant?, updated: @escaping (TelegramChatAdminRights?) -> Void, upgradedToSupergroup: @escaping (PeerId, @escaping () -> Void) -> Void, transferedOwnership: @escaping (PeerId) -> Void) -> ViewController {
|
public func channelAdminController(context: AccountContext, updatedPresentationData: (initial: PresentationData, signal: Signal<PresentationData, NoError>)? = nil, peerId: PeerId, adminId: PeerId, initialParticipant: ChannelParticipant?, updated: @escaping (TelegramChatAdminRights?) -> Void, upgradedToSupergroup: @escaping (PeerId, @escaping () -> Void) -> Void, transferedOwnership: @escaping (PeerId) -> Void) -> ViewController {
|
||||||
let statePromise = ValuePromise(ChannelAdminControllerState(), ignoreRepeated: true)
|
let statePromise = ValuePromise(ChannelAdminControllerState(), ignoreRepeated: true)
|
||||||
let stateValue = Atomic(value: ChannelAdminControllerState())
|
let stateValue = Atomic(value: ChannelAdminControllerState())
|
||||||
let updateState: ((ChannelAdminControllerState) -> ChannelAdminControllerState) -> Void = { f in
|
let updateState: ((ChannelAdminControllerState) -> ChannelAdminControllerState) -> Void = { f in
|
||||||
@ -883,7 +883,8 @@ public func channelAdminController(context: AccountContext, peerId: PeerId, admi
|
|||||||
|
|
||||||
let combinedView = context.account.postbox.combinedView(keys: [.peer(peerId: peerId, components: .all), .peer(peerId: adminId, components: .all)])
|
let combinedView = context.account.postbox.combinedView(keys: [.peer(peerId: peerId, components: .all), .peer(peerId: adminId, components: .all)])
|
||||||
|
|
||||||
let signal = combineLatest(context.sharedContext.presentationData, statePromise.get(), combinedView)
|
let presentationData = updatedPresentationData?.signal ?? context.sharedContext.presentationData
|
||||||
|
let signal = combineLatest(presentationData, statePromise.get(), combinedView)
|
||||||
|> deliverOnMainQueue
|
|> deliverOnMainQueue
|
||||||
|> map { presentationData, state, combinedView -> (ItemListControllerState, (ItemListNodeState, Any)) in
|
|> map { presentationData, state, combinedView -> (ItemListControllerState, (ItemListNodeState, Any)) in
|
||||||
let channelView = combinedView.views[.peer(peerId: peerId, components: .all)] as! PeerView
|
let channelView = combinedView.views[.peer(peerId: peerId, components: .all)] as! PeerView
|
||||||
|
@ -470,7 +470,7 @@ private func channelAdminsControllerEntries(presentationData: PresentationData,
|
|||||||
return entries
|
return entries
|
||||||
}
|
}
|
||||||
|
|
||||||
public func channelAdminsController(context: AccountContext, peerId initialPeerId: PeerId, loadCompleted: @escaping () -> Void = {}) -> ViewController {
|
public func channelAdminsController(context: AccountContext, updatedPresentationData: (initial: PresentationData, signal: Signal<PresentationData, NoError>)? = nil, peerId initialPeerId: PeerId, loadCompleted: @escaping () -> Void = {}) -> ViewController {
|
||||||
let statePromise = ValuePromise(ChannelAdminsControllerState(), ignoreRepeated: true)
|
let statePromise = ValuePromise(ChannelAdminsControllerState(), ignoreRepeated: true)
|
||||||
let stateValue = Atomic(value: ChannelAdminsControllerState())
|
let stateValue = Atomic(value: ChannelAdminsControllerState())
|
||||||
let updateState: ((ChannelAdminsControllerState) -> ChannelAdminsControllerState) -> Void = { f in
|
let updateState: ((ChannelAdminsControllerState) -> ChannelAdminsControllerState) -> Void = { f in
|
||||||
@ -493,9 +493,7 @@ public func channelAdminsController(context: AccountContext, peerId initialPeerI
|
|||||||
actionsDisposable.add(upgradeDisposable)
|
actionsDisposable.add(upgradeDisposable)
|
||||||
|
|
||||||
let adminsPromise = Promise<[RenderedChannelParticipant]?>(nil)
|
let adminsPromise = Promise<[RenderedChannelParticipant]?>(nil)
|
||||||
|
|
||||||
let presentationDataSignal = context.sharedContext.presentationData
|
|
||||||
|
|
||||||
var upgradedToSupergroupImpl: ((PeerId, @escaping () -> Void) -> Void)?
|
var upgradedToSupergroupImpl: ((PeerId, @escaping () -> Void) -> Void)?
|
||||||
|
|
||||||
let currentPeerId = ValuePromise<PeerId>(initialPeerId)
|
let currentPeerId = ValuePromise<PeerId>(initialPeerId)
|
||||||
@ -608,7 +606,7 @@ public func channelAdminsController(context: AccountContext, peerId initialPeerI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pushControllerImpl?(channelAdminController(context: context, peerId: peerId, adminId: peer.id, initialParticipant: participant?.participant, updated: { _ in
|
pushControllerImpl?(channelAdminController(context: context, updatedPresentationData: updatedPresentationData, peerId: peerId, adminId: peer.id, initialParticipant: participant?.participant, updated: { _ in
|
||||||
}, upgradedToSupergroup: upgradedToSupergroup, transferedOwnership: transferedOwnership))
|
}, upgradedToSupergroup: upgradedToSupergroup, transferedOwnership: transferedOwnership))
|
||||||
})
|
})
|
||||||
dismissController = { [weak controller] in
|
dismissController = { [weak controller] in
|
||||||
@ -624,7 +622,7 @@ public func channelAdminsController(context: AccountContext, peerId initialPeerI
|
|||||||
let _ = (currentPeerId.get()
|
let _ = (currentPeerId.get()
|
||||||
|> take(1)
|
|> take(1)
|
||||||
|> deliverOnMainQueue).start(next: { peerId in
|
|> deliverOnMainQueue).start(next: { peerId in
|
||||||
pushControllerImpl?(channelAdminController(context: context, peerId: peerId, adminId: participant.peerId, initialParticipant: participant, updated: { _ in
|
pushControllerImpl?(channelAdminController(context: context, updatedPresentationData: updatedPresentationData, peerId: peerId, adminId: participant.peerId, initialParticipant: participant, updated: { _ in
|
||||||
}, upgradedToSupergroup: upgradedToSupergroup, transferedOwnership: transferedOwnership))
|
}, upgradedToSupergroup: upgradedToSupergroup, transferedOwnership: transferedOwnership))
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@ -700,7 +698,8 @@ public func channelAdminsController(context: AccountContext, peerId initialPeerI
|
|||||||
|
|
||||||
var previousPeers: [RenderedChannelParticipant]?
|
var previousPeers: [RenderedChannelParticipant]?
|
||||||
|
|
||||||
let signal = combineLatest(queue: .mainQueue(), presentationDataSignal, statePromise.get(), peerView.get(), adminsPromise.get() |> deliverOnMainQueue)
|
let presentationData = updatedPresentationData?.signal ?? context.sharedContext.presentationData
|
||||||
|
let signal = combineLatest(queue: .mainQueue(), presentationData, statePromise.get(), peerView.get(), adminsPromise.get() |> deliverOnMainQueue)
|
||||||
|> deliverOnMainQueue
|
|> deliverOnMainQueue
|
||||||
|> map { presentationData, state, view, admins -> (ItemListControllerState, (ItemListNodeState, Any)) in
|
|> map { presentationData, state, view, admins -> (ItemListControllerState, (ItemListNodeState, Any)) in
|
||||||
let peerId = view.peerId
|
let peerId = view.peerId
|
||||||
@ -757,7 +756,7 @@ public func channelAdminsController(context: AccountContext, peerId initialPeerI
|
|||||||
}
|
}
|
||||||
}, openPeer: { _, participant in
|
}, openPeer: { _, participant in
|
||||||
if let participant = participant?.participant, case .member = participant {
|
if let participant = participant?.participant, case .member = participant {
|
||||||
pushControllerImpl?(channelAdminController(context: context, peerId: peerId, adminId: participant.peerId, initialParticipant: participant, updated: { _ in
|
pushControllerImpl?(channelAdminController(context: context, updatedPresentationData: updatedPresentationData, peerId: peerId, adminId: participant.peerId, initialParticipant: participant, updated: { _ in
|
||||||
updateState { state in
|
updateState { state in
|
||||||
return state.withUpdatedSearchingMembers(false)
|
return state.withUpdatedSearchingMembers(false)
|
||||||
}
|
}
|
||||||
|
@ -354,7 +354,7 @@ private func channelBannedMemberControllerEntries(presentationData: Presentation
|
|||||||
return entries
|
return entries
|
||||||
}
|
}
|
||||||
|
|
||||||
public func channelBannedMemberController(context: AccountContext, peerId: PeerId, memberId: PeerId, initialParticipant: ChannelParticipant?, updated: @escaping (TelegramChatBannedRights?) -> Void, upgradedToSupergroup: @escaping (PeerId, @escaping () -> Void) -> Void) -> ViewController {
|
public func channelBannedMemberController(context: AccountContext, updatedPresentationData: (initial: PresentationData, signal: Signal<PresentationData, NoError>)? = nil, peerId: PeerId, memberId: PeerId, initialParticipant: ChannelParticipant?, updated: @escaping (TelegramChatBannedRights?) -> Void, upgradedToSupergroup: @escaping (PeerId, @escaping () -> Void) -> Void) -> ViewController {
|
||||||
let initialState = ChannelBannedMemberControllerState(referenceTimestamp: Int32(Date().timeIntervalSince1970), updatedFlags: nil, updatedTimeout: nil, updating: false)
|
let initialState = ChannelBannedMemberControllerState(referenceTimestamp: Int32(Date().timeIntervalSince1970), updatedFlags: nil, updatedTimeout: nil, updating: false)
|
||||||
let statePromise = ValuePromise(initialState, ignoreRepeated: true)
|
let statePromise = ValuePromise(initialState, ignoreRepeated: true)
|
||||||
let stateValue = Atomic(value: initialState)
|
let stateValue = Atomic(value: initialState)
|
||||||
@ -426,7 +426,7 @@ public func channelBannedMemberController(context: AccountContext, peerId: PeerI
|
|||||||
guard let defaultBannedRights = channel.defaultBannedRights else {
|
guard let defaultBannedRights = channel.defaultBannedRights else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
let presentationData = updatedPresentationData?.initial ?? context.sharedContext.currentPresentationData.with { $0 }
|
||||||
let text: String
|
let text: String
|
||||||
if channel.hasPermission(.banMembers) {
|
if channel.hasPermission(.banMembers) {
|
||||||
if defaultBannedRights.flags.contains(right) {
|
if defaultBannedRights.flags.contains(right) {
|
||||||
@ -440,7 +440,7 @@ public func channelBannedMemberController(context: AccountContext, peerId: PeerI
|
|||||||
presentControllerImpl?(textAlertController(context: context, title: nil, text: text, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), nil)
|
presentControllerImpl?(textAlertController(context: context, title: nil, text: text, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), nil)
|
||||||
})
|
})
|
||||||
}, openTimeout: {
|
}, openTimeout: {
|
||||||
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
let presentationData = updatedPresentationData?.initial ?? context.sharedContext.currentPresentationData.with { $0 }
|
||||||
let actionSheet = ActionSheetController(presentationData: presentationData)
|
let actionSheet = ActionSheetController(presentationData: presentationData)
|
||||||
let intervals: [Int32] = [
|
let intervals: [Int32] = [
|
||||||
1 * 60 * 60 * 24,
|
1 * 60 * 60 * 24,
|
||||||
@ -478,7 +478,7 @@ public func channelBannedMemberController(context: AccountContext, peerId: PeerI
|
|||||||
])])
|
])])
|
||||||
presentControllerImpl?(actionSheet, nil)
|
presentControllerImpl?(actionSheet, nil)
|
||||||
}, delete: {
|
}, delete: {
|
||||||
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
let presentationData = updatedPresentationData?.initial ?? context.sharedContext.currentPresentationData.with { $0 }
|
||||||
let actionSheet = ActionSheetController(presentationData: presentationData)
|
let actionSheet = ActionSheetController(presentationData: presentationData)
|
||||||
var items: [ActionSheetItem] = []
|
var items: [ActionSheetItem] = []
|
||||||
items.append(ActionSheetButtonItem(title: presentationData.strings.GroupPermission_Delete, color: .destructive, font: .default, enabled: true, action: { [weak actionSheet] in
|
items.append(ActionSheetButtonItem(title: presentationData.strings.GroupPermission_Delete, color: .destructive, font: .default, enabled: true, action: { [weak actionSheet] in
|
||||||
@ -512,7 +512,8 @@ public func channelBannedMemberController(context: AccountContext, peerId: PeerI
|
|||||||
|
|
||||||
let canEdit = true
|
let canEdit = true
|
||||||
|
|
||||||
let signal = combineLatest(context.sharedContext.presentationData, statePromise.get(), combinedView)
|
let presentationData = updatedPresentationData?.signal ?? context.sharedContext.presentationData
|
||||||
|
let signal = combineLatest(presentationData, statePromise.get(), combinedView)
|
||||||
|> deliverOnMainQueue
|
|> deliverOnMainQueue
|
||||||
|> map { presentationData, state, combinedView -> (ItemListControllerState, (ItemListNodeState, Any)) in
|
|> map { presentationData, state, combinedView -> (ItemListControllerState, (ItemListNodeState, Any)) in
|
||||||
let channelView = combinedView.views[.peer(peerId: peerId, components: .all)] as! PeerView
|
let channelView = combinedView.views[.peer(peerId: peerId, components: .all)] as! PeerView
|
||||||
@ -682,7 +683,7 @@ public func channelBannedMemberController(context: AccountContext, peerId: PeerI
|
|||||||
|
|
||||||
}, completed: {
|
}, completed: {
|
||||||
if previousRights == nil {
|
if previousRights == nil {
|
||||||
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
let presentationData = updatedPresentationData?.initial ?? context.sharedContext.currentPresentationData.with { $0 }
|
||||||
presentControllerImpl?(OverlayStatusController(theme: presentationData.theme, type: .genericSuccess(presentationData.strings.GroupPermission_AddSuccess, false)), nil)
|
presentControllerImpl?(OverlayStatusController(theme: presentationData.theme, type: .genericSuccess(presentationData.strings.GroupPermission_AddSuccess, false)), nil)
|
||||||
}
|
}
|
||||||
updated(cleanResolvedRights.flags.isEmpty ? nil : cleanResolvedRights)
|
updated(cleanResolvedRights.flags.isEmpty ? nil : cleanResolvedRights)
|
||||||
@ -691,7 +692,7 @@ public func channelBannedMemberController(context: AccountContext, peerId: PeerI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
let presentationData = updatedPresentationData?.initial ?? context.sharedContext.currentPresentationData.with { $0 }
|
||||||
let actionSheet = ActionSheetController(presentationData: presentationData)
|
let actionSheet = ActionSheetController(presentationData: presentationData)
|
||||||
var items: [ActionSheetItem] = []
|
var items: [ActionSheetItem] = []
|
||||||
items.append(ActionSheetTextItem(title: presentationData.strings.GroupPermission_ApplyAlertText(peer.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)).string))
|
items.append(ActionSheetTextItem(title: presentationData.strings.GroupPermission_ApplyAlertText(peer.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)).string))
|
||||||
|
@ -267,7 +267,7 @@ private func channelBlacklistControllerEntries(presentationData: PresentationDat
|
|||||||
return entries
|
return entries
|
||||||
}
|
}
|
||||||
|
|
||||||
public func channelBlacklistController(context: AccountContext, peerId: PeerId) -> ViewController {
|
public func channelBlacklistController(context: AccountContext, updatedPresentationData: (initial: PresentationData, signal: Signal<PresentationData, NoError>)? = nil, peerId: PeerId) -> ViewController {
|
||||||
let statePromise = ValuePromise(ChannelBlacklistControllerState(referenceTimestamp: Int32(Date().timeIntervalSince1970)), ignoreRepeated: true)
|
let statePromise = ValuePromise(ChannelBlacklistControllerState(referenceTimestamp: Int32(Date().timeIntervalSince1970)), ignoreRepeated: true)
|
||||||
let stateValue = Atomic(value: ChannelBlacklistControllerState(referenceTimestamp: Int32(Date().timeIntervalSince1970)))
|
let stateValue = Atomic(value: ChannelBlacklistControllerState(referenceTimestamp: Int32(Date().timeIntervalSince1970)))
|
||||||
let updateState: ((ChannelBlacklistControllerState) -> ChannelBlacklistControllerState) -> Void = { f in
|
let updateState: ((ChannelBlacklistControllerState) -> ChannelBlacklistControllerState) -> Void = { f in
|
||||||
@ -435,7 +435,8 @@ public func channelBlacklistController(context: AccountContext, peerId: PeerId)
|
|||||||
|
|
||||||
let previousParticipantsValue = Atomic<[RenderedChannelParticipant]?>(value: nil)
|
let previousParticipantsValue = Atomic<[RenderedChannelParticipant]?>(value: nil)
|
||||||
|
|
||||||
let signal = combineLatest(queue: .mainQueue(), context.sharedContext.presentationData, statePromise.get(), peerView.get(), blacklistPromise.get())
|
let presentationData = updatedPresentationData?.signal ?? context.sharedContext.presentationData
|
||||||
|
let signal = combineLatest(queue: .mainQueue(), presentationData, statePromise.get(), peerView.get(), blacklistPromise.get())
|
||||||
|> deliverOnMainQueue
|
|> deliverOnMainQueue
|
||||||
|> map { presentationData, state, view, participants -> (ItemListControllerState, (ItemListNodeState, Any)) in
|
|> map { presentationData, state, view, participants -> (ItemListControllerState, (ItemListNodeState, Any)) in
|
||||||
var rightNavigationButton: ItemListNavigationButton?
|
var rightNavigationButton: ItemListNavigationButton?
|
||||||
|
@ -291,7 +291,7 @@ private func channelMembersControllerEntries(context: AccountContext, presentati
|
|||||||
return entries
|
return entries
|
||||||
}
|
}
|
||||||
|
|
||||||
public func channelMembersController(context: AccountContext, peerId: PeerId) -> ViewController {
|
public func channelMembersController(context: AccountContext, updatedPresentationData: (initial: PresentationData, signal: Signal<PresentationData, NoError>)? = nil, peerId: PeerId) -> ViewController {
|
||||||
let statePromise = ValuePromise(ChannelMembersControllerState(), ignoreRepeated: true)
|
let statePromise = ValuePromise(ChannelMembersControllerState(), ignoreRepeated: true)
|
||||||
let stateValue = Atomic(value: ChannelMembersControllerState())
|
let stateValue = Atomic(value: ChannelMembersControllerState())
|
||||||
let updateState: ((ChannelMembersControllerState) -> ChannelMembersControllerState) -> Void = { f in
|
let updateState: ((ChannelMembersControllerState) -> ChannelMembersControllerState) -> Void = { f in
|
||||||
@ -442,7 +442,8 @@ public func channelMembersController(context: AccountContext, peerId: PeerId) ->
|
|||||||
|
|
||||||
var previousPeers: [RenderedChannelParticipant]?
|
var previousPeers: [RenderedChannelParticipant]?
|
||||||
|
|
||||||
let signal = combineLatest(queue: .mainQueue(), context.sharedContext.presentationData, statePromise.get(), peerView, peersPromise.get())
|
let presentationData = updatedPresentationData?.signal ?? context.sharedContext.presentationData
|
||||||
|
let signal = combineLatest(queue: .mainQueue(), presentationData, statePromise.get(), peerView, peersPromise.get())
|
||||||
|> deliverOnMainQueue
|
|> deliverOnMainQueue
|
||||||
|> map { presentationData, state, view, peers -> (ItemListControllerState, (ItemListNodeState, Any)) in
|
|> map { presentationData, state, view, peers -> (ItemListControllerState, (ItemListNodeState, Any)) in
|
||||||
var isGroup = true
|
var isGroup = true
|
||||||
|
@ -494,7 +494,7 @@ private func channelPermissionsControllerEntries(context: AccountContext, presen
|
|||||||
return entries
|
return entries
|
||||||
}
|
}
|
||||||
|
|
||||||
public func channelPermissionsController(context: AccountContext, peerId originalPeerId: PeerId, loadCompleted: @escaping () -> Void = {}) -> ViewController {
|
public func channelPermissionsController(context: AccountContext, updatedPresentationData: (initial: PresentationData, signal: Signal<PresentationData, NoError>)? = nil, peerId originalPeerId: PeerId, loadCompleted: @escaping () -> Void = {}) -> ViewController {
|
||||||
let statePromise = ValuePromise(ChannelPermissionsControllerState(), ignoreRepeated: true)
|
let statePromise = ValuePromise(ChannelPermissionsControllerState(), ignoreRepeated: true)
|
||||||
let stateValue = Atomic(value: ChannelPermissionsControllerState())
|
let stateValue = Atomic(value: ChannelPermissionsControllerState())
|
||||||
let updateState: ((ChannelPermissionsControllerState) -> ChannelPermissionsControllerState) -> Void = { f in
|
let updateState: ((ChannelPermissionsControllerState) -> ChannelPermissionsControllerState) -> Void = { f in
|
||||||
@ -643,7 +643,7 @@ public func channelPermissionsController(context: AccountContext, peerId origina
|
|||||||
var dismissController: (() -> Void)?
|
var dismissController: (() -> Void)?
|
||||||
let controller = ChannelMembersSearchController(context: context, peerId: peerId, mode: .ban, openPeer: { peer, participant in
|
let controller = ChannelMembersSearchController(context: context, peerId: peerId, mode: .ban, openPeer: { peer, participant in
|
||||||
if let participant = participant {
|
if let participant = participant {
|
||||||
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
let presentationData = updatedPresentationData?.initial ?? context.sharedContext.currentPresentationData.with { $0 }
|
||||||
switch participant.participant {
|
switch participant.participant {
|
||||||
case .creator:
|
case .creator:
|
||||||
return
|
return
|
||||||
@ -717,7 +717,7 @@ public func channelPermissionsController(context: AccountContext, peerId origina
|
|||||||
for (listRight, permission) in allGroupPermissionList {
|
for (listRight, permission) in allGroupPermissionList {
|
||||||
if listRight == right {
|
if listRight == right {
|
||||||
let text: String
|
let text: String
|
||||||
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
let presentationData = updatedPresentationData?.initial ?? context.sharedContext.currentPresentationData.with { $0 }
|
||||||
if !channel.hasPermission(permission) {
|
if !channel.hasPermission(permission) {
|
||||||
text = presentationData.strings.GroupInfo_Permissions_EditingDisabled
|
text = presentationData.strings.GroupInfo_Permissions_EditingDisabled
|
||||||
} else if right.contains(.banAddMembers) {
|
} else if right.contains(.banAddMembers) {
|
||||||
@ -731,7 +731,7 @@ public func channelPermissionsController(context: AccountContext, peerId origina
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}, presentConversionToBroadcastGroup: {
|
}, presentConversionToBroadcastGroup: {
|
||||||
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
let presentationData = updatedPresentationData?.initial ?? context.sharedContext.currentPresentationData.with { $0 }
|
||||||
let controller = PermissionController(context: context, splashScreen: true)
|
let controller = PermissionController(context: context, splashScreen: true)
|
||||||
controller.navigationPresentation = .modal
|
controller.navigationPresentation = .modal
|
||||||
controller.setState(.custom(icon: .animation("BroadcastGroup"), title: presentationData.strings.BroadcastGroups_IntroTitle, subtitle: nil, text: presentationData.strings.BroadcastGroups_IntroText, buttonTitle: presentationData.strings.BroadcastGroups_Convert, secondaryButtonTitle: presentationData.strings.BroadcastGroups_Cancel, footerText: nil), animated: false)
|
controller.setState(.custom(icon: .animation("BroadcastGroup"), title: presentationData.strings.BroadcastGroups_IntroTitle, subtitle: nil, text: presentationData.strings.BroadcastGroups_IntroText, buttonTitle: presentationData.strings.BroadcastGroups_Convert, secondaryButtonTitle: presentationData.strings.BroadcastGroups_Cancel, footerText: nil), animated: false)
|
||||||
@ -787,7 +787,7 @@ public func channelPermissionsController(context: AccountContext, peerId origina
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
let presentationData = updatedPresentationData?.initial ?? context.sharedContext.currentPresentationData.with { $0 }
|
||||||
let progress = OverlayStatusController(theme: presentationData.theme, type: .loading(cancelled: nil))
|
let progress = OverlayStatusController(theme: presentationData.theme, type: .loading(cancelled: nil))
|
||||||
presentControllerImpl?(progress, nil)
|
presentControllerImpl?(progress, nil)
|
||||||
|
|
||||||
@ -855,7 +855,8 @@ public func channelPermissionsController(context: AccountContext, peerId origina
|
|||||||
return .single((view, peers.1))
|
return .single((view, peers.1))
|
||||||
}
|
}
|
||||||
|
|
||||||
let signal = combineLatest(queue: .mainQueue(), context.sharedContext.presentationData, statePromise.get(), viewAndParticipants)
|
let presentationData = updatedPresentationData?.signal ?? context.sharedContext.presentationData
|
||||||
|
let signal = combineLatest(queue: .mainQueue(), presentationData, statePromise.get(), viewAndParticipants)
|
||||||
|> deliverOnMainQueue
|
|> deliverOnMainQueue
|
||||||
|> map { presentationData, state, viewAndParticipants -> (ItemListControllerState, (ItemListNodeState, Any)) in
|
|> map { presentationData, state, viewAndParticipants -> (ItemListControllerState, (ItemListNodeState, Any)) in
|
||||||
let (view, participants) = viewAndParticipants
|
let (view, participants) = viewAndParticipants
|
||||||
|
@ -116,7 +116,7 @@ private func groupPreHistorySetupEntries(isSupergroup: Bool, presentationData: P
|
|||||||
return entries
|
return entries
|
||||||
}
|
}
|
||||||
|
|
||||||
public func groupPreHistorySetupController(context: AccountContext, peerId: PeerId, upgradedToSupergroup: @escaping (PeerId, @escaping () -> Void) -> Void) -> ViewController {
|
public func groupPreHistorySetupController(context: AccountContext, updatedPresentationData: (initial: PresentationData, signal: Signal<PresentationData, NoError>)? = nil, peerId: PeerId, upgradedToSupergroup: @escaping (PeerId, @escaping () -> Void) -> Void) -> ViewController {
|
||||||
let statePromise = ValuePromise(GroupPreHistorySetupState(), ignoreRepeated: true)
|
let statePromise = ValuePromise(GroupPreHistorySetupState(), ignoreRepeated: true)
|
||||||
let stateValue = Atomic(value: GroupPreHistorySetupState())
|
let stateValue = Atomic(value: GroupPreHistorySetupState())
|
||||||
let updateState: ((GroupPreHistorySetupState) -> GroupPreHistorySetupState) -> Void = { f in
|
let updateState: ((GroupPreHistorySetupState) -> GroupPreHistorySetupState) -> Void = { f in
|
||||||
@ -139,7 +139,8 @@ public func groupPreHistorySetupController(context: AccountContext, peerId: Peer
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
let signal = combineLatest(context.sharedContext.presentationData, statePromise.get(), context.account.viewTracker.peerView(peerId))
|
let presentationData = updatedPresentationData?.signal ?? context.sharedContext.presentationData
|
||||||
|
let signal = combineLatest(presentationData, statePromise.get(), context.account.viewTracker.peerView(peerId))
|
||||||
|> deliverOnMainQueue
|
|> deliverOnMainQueue
|
||||||
|> map { presentationData, state, view -> (ItemListControllerState, (ItemListNodeState, Any)) in
|
|> map { presentationData, state, view -> (ItemListControllerState, (ItemListNodeState, Any)) in
|
||||||
let defaultValue: Bool = (view.cachedData as? CachedChannelData)?.flags.contains(.preHistoryEnabled) ?? false
|
let defaultValue: Bool = (view.cachedData as? CachedChannelData)?.flags.contains(.preHistoryEnabled) ?? false
|
||||||
|
@ -300,7 +300,7 @@ private func groupStickerPackSetupControllerEntries(presentationData: Presentati
|
|||||||
return entries
|
return entries
|
||||||
}
|
}
|
||||||
|
|
||||||
public func groupStickerPackSetupController(context: AccountContext, peerId: PeerId, currentPackInfo: StickerPackCollectionInfo?) -> ViewController {
|
public func groupStickerPackSetupController(context: AccountContext, updatedPresentationData: (initial: PresentationData, signal: Signal<PresentationData, NoError>)? = nil, peerId: PeerId, currentPackInfo: StickerPackCollectionInfo?) -> ViewController {
|
||||||
let initialState = GroupStickerPackSetupControllerState(isSaving: false)
|
let initialState = GroupStickerPackSetupControllerState(isSaving: false)
|
||||||
|
|
||||||
let statePromise = ValuePromise(initialState, ignoreRepeated: true)
|
let statePromise = ValuePromise(initialState, ignoreRepeated: true)
|
||||||
@ -402,7 +402,8 @@ public func groupStickerPackSetupController(context: AccountContext, peerId: Pee
|
|||||||
|
|
||||||
let previousHadData = Atomic<Bool>(value: false)
|
let previousHadData = Atomic<Bool>(value: false)
|
||||||
|
|
||||||
let signal = combineLatest(context.sharedContext.presentationData, statePromise.get() |> deliverOnMainQueue, initialData.get() |> deliverOnMainQueue, stickerPacks.get() |> deliverOnMainQueue, searchState.get() |> deliverOnMainQueue, context.sharedContext.accountManager.sharedData(keys: [ApplicationSpecificSharedDataKeys.stickerSettings]) |> deliverOnMainQueue)
|
let presentationData = updatedPresentationData?.signal ?? context.sharedContext.presentationData
|
||||||
|
let signal = combineLatest(presentationData, statePromise.get() |> deliverOnMainQueue, initialData.get() |> deliverOnMainQueue, stickerPacks.get() |> deliverOnMainQueue, searchState.get() |> deliverOnMainQueue, context.sharedContext.accountManager.sharedData(keys: [ApplicationSpecificSharedDataKeys.stickerSettings]) |> deliverOnMainQueue)
|
||||||
|> map { presentationData, state, initialData, view, searchState, sharedData -> (ItemListControllerState, (ItemListNodeState, Any)) in
|
|> map { presentationData, state, initialData, view, searchState, sharedData -> (ItemListControllerState, (ItemListNodeState, Any)) in
|
||||||
var stickerSettings = StickerSettings.defaultSettings
|
var stickerSettings = StickerSettings.defaultSettings
|
||||||
if let value = sharedData.entries[ApplicationSpecificSharedDataKeys.stickerSettings] as? StickerSettings {
|
if let value = sharedData.entries[ApplicationSpecificSharedDataKeys.stickerSettings] as? StickerSettings {
|
||||||
|
@ -143,7 +143,7 @@ public enum PeerAutoremoveSetupScreenResult {
|
|||||||
case updated(Updated)
|
case updated(Updated)
|
||||||
}
|
}
|
||||||
|
|
||||||
public func peerAutoremoveSetupScreen(context: AccountContext, peerId: PeerId, completion: @escaping (PeerAutoremoveSetupScreenResult) -> Void = { _ in }) -> ViewController {
|
public func peerAutoremoveSetupScreen(context: AccountContext, updatedPresentationData: (initial: PresentationData, signal: Signal<PresentationData, NoError>)? = nil, peerId: PeerId, completion: @escaping (PeerAutoremoveSetupScreenResult) -> Void = { _ in }) -> ViewController {
|
||||||
let statePromise = ValuePromise(PeerAutoremoveSetupState(), ignoreRepeated: true)
|
let statePromise = ValuePromise(PeerAutoremoveSetupState(), ignoreRepeated: true)
|
||||||
let stateValue = Atomic(value: PeerAutoremoveSetupState())
|
let stateValue = Atomic(value: PeerAutoremoveSetupState())
|
||||||
let updateState: ((PeerAutoremoveSetupState) -> PeerAutoremoveSetupState) -> Void = { f in
|
let updateState: ((PeerAutoremoveSetupState) -> PeerAutoremoveSetupState) -> Void = { f in
|
||||||
@ -165,7 +165,8 @@ public func peerAutoremoveSetupScreen(context: AccountContext, peerId: PeerId, c
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
let signal = combineLatest(context.sharedContext.presentationData, statePromise.get(), context.account.viewTracker.peerView(peerId))
|
let presentationData = updatedPresentationData?.signal ?? context.sharedContext.presentationData
|
||||||
|
let signal = combineLatest(presentationData, statePromise.get(), context.account.viewTracker.peerView(peerId))
|
||||||
|> deliverOnMainQueue
|
|> deliverOnMainQueue
|
||||||
|> map { presentationData, state, view -> (ItemListControllerState, (ItemListNodeState, Any)) in
|
|> map { presentationData, state, view -> (ItemListControllerState, (ItemListNodeState, Any)) in
|
||||||
var defaultValue: Int32 = Int32.max
|
var defaultValue: Int32 = Int32.max
|
||||||
|
@ -410,7 +410,7 @@ private func channelStatsControllerEntries(data: ChannelStats?, messages: [Messa
|
|||||||
return entries
|
return entries
|
||||||
}
|
}
|
||||||
|
|
||||||
public func channelStatsController(context: AccountContext, peerId: PeerId, cachedPeerData: CachedPeerData) -> ViewController {
|
public func channelStatsController(context: AccountContext, updatedPresentationData: (initial: PresentationData, signal: Signal<PresentationData, NoError>)? = nil, peerId: PeerId, cachedPeerData: CachedPeerData) -> ViewController {
|
||||||
var openMessageStatsImpl: ((MessageId) -> Void)?
|
var openMessageStatsImpl: ((MessageId) -> Void)?
|
||||||
var contextActionImpl: ((MessageId, ASDisplayNode, ContextGesture?) -> Void)?
|
var contextActionImpl: ((MessageId, ASDisplayNode, ContextGesture?) -> Void)?
|
||||||
|
|
||||||
@ -460,7 +460,8 @@ public func channelStatsController(context: AccountContext, peerId: PeerId, cach
|
|||||||
|
|
||||||
let previousData = Atomic<ChannelStats?>(value: nil)
|
let previousData = Atomic<ChannelStats?>(value: nil)
|
||||||
|
|
||||||
let signal = combineLatest(context.sharedContext.presentationData, dataPromise.get(), messagesPromise.get(), longLoadingSignal)
|
let presentationData = updatedPresentationData?.signal ?? context.sharedContext.presentationData
|
||||||
|
let signal = combineLatest(presentationData, dataPromise.get(), messagesPromise.get(), longLoadingSignal)
|
||||||
|> deliverOnMainQueue
|
|> deliverOnMainQueue
|
||||||
|> map { presentationData, data, messageView, longLoading -> (ItemListControllerState, (ItemListNodeState, Any)) in
|
|> map { presentationData, data, messageView, longLoading -> (ItemListControllerState, (ItemListNodeState, Any)) in
|
||||||
let previous = previousData.swap(data)
|
let previous = previousData.swap(data)
|
||||||
|
@ -708,7 +708,7 @@ private func canEditAdminRights(accountPeerId: PeerId, channelPeer: Peer, initia
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public func groupStatsController(context: AccountContext, peerId: PeerId, cachedPeerData: CachedPeerData) -> ViewController {
|
public func groupStatsController(context: AccountContext, updatedPresentationData: (initial: PresentationData, signal: Signal<PresentationData, NoError>)? = nil, peerId: PeerId, cachedPeerData: CachedPeerData) -> ViewController {
|
||||||
let statePromise = ValuePromise(GroupStatsState())
|
let statePromise = ValuePromise(GroupStatsState())
|
||||||
let stateValue = Atomic(value: GroupStatsState())
|
let stateValue = Atomic(value: GroupStatsState())
|
||||||
let updateState: ((GroupStatsState) -> GroupStatsState) -> Void = { f in
|
let updateState: ((GroupStatsState) -> GroupStatsState) -> Void = { f in
|
||||||
@ -833,8 +833,8 @@ public func groupStatsController(context: AccountContext, peerId: PeerId, cached
|
|||||||
|
|
||||||
let previousData = Atomic<GroupStats?>(value: nil)
|
let previousData = Atomic<GroupStats?>(value: nil)
|
||||||
|
|
||||||
|
let presentationData = updatedPresentationData?.signal ?? context.sharedContext.presentationData
|
||||||
let signal = combineLatest(statePromise.get(), context.sharedContext.presentationData, dataPromise.get(), context.account.postbox.loadedPeerWithId(peerId), peersPromise.get(), longLoadingSignal)
|
let signal = combineLatest(statePromise.get(), presentationData, dataPromise.get(), context.account.postbox.loadedPeerWithId(peerId), peersPromise.get(), longLoadingSignal)
|
||||||
|> deliverOnMainQueue
|
|> deliverOnMainQueue
|
||||||
|> map { state, presentationData, data, channelPeer, peers, longLoading -> (ItemListControllerState, (ItemListNodeState, Any)) in
|
|> map { state, presentationData, data, channelPeer, peers, longLoading -> (ItemListControllerState, (ItemListNodeState, Any)) in
|
||||||
let previous = previousData.swap(data)
|
let previous = previousData.swap(data)
|
||||||
|
@ -2647,40 +2647,40 @@ public final class VoiceChatController: ViewController {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// let controller = VoiceChatRecordingSetupController(context: strongSelf.context, completion: { [weak self] videoOrientation in
|
let controller = VoiceChatRecordingSetupController(context: strongSelf.context, completion: { [weak self] videoOrientation in
|
||||||
// if let strongSelf = self {
|
if let strongSelf = self {
|
||||||
// strongSelf.call.setShouldBeRecording(true, title: "", videoOrientation: videoOrientation)
|
strongSelf.call.setShouldBeRecording(true, title: "", videoOrientation: videoOrientation)
|
||||||
//
|
|
||||||
// strongSelf.presentUndoOverlay(content: .voiceChatRecording(text: text), action: { _ in return false })
|
|
||||||
// strongSelf.call.playTone(.recordingStarted)
|
|
||||||
// }
|
|
||||||
// })
|
|
||||||
|
|
||||||
let title: String
|
|
||||||
let text: String
|
|
||||||
if let channel = strongSelf.peer as? TelegramChannel, case .broadcast = channel.info {
|
|
||||||
title = strongSelf.presentationData.strings.LiveStream_StartRecordingTitle
|
|
||||||
text = strongSelf.presentationData.strings.LiveStream_StartRecordingText
|
|
||||||
} else {
|
|
||||||
title = strongSelf.presentationData.strings.VoiceChat_StartRecordingTitle
|
|
||||||
text = strongSelf.presentationData.strings.VoiceChat_StartRecordingText
|
|
||||||
}
|
|
||||||
|
|
||||||
let controller = voiceChatTitleEditController(sharedContext: strongSelf.context.sharedContext, account: strongSelf.context.account, forceTheme: strongSelf.darkTheme, title: title, text: text, placeholder: strongSelf.presentationData.strings.VoiceChat_RecordingTitlePlaceholder, value: nil, maxLength: 40, apply: { title in
|
|
||||||
if let strongSelf = self, let title = title {
|
|
||||||
strongSelf.call.setShouldBeRecording(true, title: title, videoOrientation: nil)
|
|
||||||
|
|
||||||
let text: String
|
|
||||||
if let channel = strongSelf.peer as? TelegramChannel, case .broadcast = channel.info {
|
|
||||||
text = strongSelf.presentationData.strings.LiveStream_RecordingStarted
|
|
||||||
} else {
|
|
||||||
text = strongSelf.presentationData.strings.VoiceChat_RecordingStarted
|
|
||||||
}
|
|
||||||
|
|
||||||
strongSelf.presentUndoOverlay(content: .voiceChatRecording(text: text), action: { _ in return false })
|
strongSelf.presentUndoOverlay(content: .voiceChatRecording(text: text), action: { _ in return false })
|
||||||
strongSelf.call.playTone(.recordingStarted)
|
strongSelf.call.playTone(.recordingStarted)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// let title: String
|
||||||
|
// let text: String
|
||||||
|
// if let channel = strongSelf.peer as? TelegramChannel, case .broadcast = channel.info {
|
||||||
|
// title = strongSelf.presentationData.strings.LiveStream_StartRecordingTitle
|
||||||
|
// text = strongSelf.presentationData.strings.LiveStream_StartRecordingText
|
||||||
|
// } else {
|
||||||
|
// title = strongSelf.presentationData.strings.VoiceChat_StartRecordingTitle
|
||||||
|
// text = strongSelf.presentationData.strings.VoiceChat_StartRecordingText
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// let controller = voiceChatTitleEditController(sharedContext: strongSelf.context.sharedContext, account: strongSelf.context.account, forceTheme: strongSelf.darkTheme, title: title, text: text, placeholder: strongSelf.presentationData.strings.VoiceChat_RecordingTitlePlaceholder, value: nil, maxLength: 40, apply: { title in
|
||||||
|
// if let strongSelf = self, let title = title {
|
||||||
|
// strongSelf.call.setShouldBeRecording(true, title: title, videoOrientation: nil)
|
||||||
|
//
|
||||||
|
// let text: String
|
||||||
|
// if let channel = strongSelf.peer as? TelegramChannel, case .broadcast = channel.info {
|
||||||
|
// text = strongSelf.presentationData.strings.LiveStream_RecordingStarted
|
||||||
|
// } else {
|
||||||
|
// text = strongSelf.presentationData.strings.VoiceChat_RecordingStarted
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// strongSelf.presentUndoOverlay(content: .voiceChatRecording(text: text), action: { _ in return false })
|
||||||
|
// strongSelf.call.playTone(.recordingStarted)
|
||||||
|
// }
|
||||||
|
// })
|
||||||
self?.controller?.present(controller, in: .window(.root))
|
self?.controller?.present(controller, in: .window(.root))
|
||||||
})))
|
})))
|
||||||
}
|
}
|
||||||
|
@ -357,12 +357,12 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
private var themeEmoticonPreviewPromise = ValuePromise<String?>(nil)
|
private var themeEmoticonPreviewPromise = ValuePromise<String?>(nil)
|
||||||
private var themeDarkAppearancePreviewPromise = ValuePromise<Bool?>(nil)
|
private var themeDarkAppearancePreviewPromise = ValuePromise<Bool?>(nil)
|
||||||
private var didSetPresentationData = false
|
private var didSetPresentationData = false
|
||||||
private var presentationDataPromise = Promise<PresentationData>()
|
|
||||||
private var presentationData: PresentationData
|
private var presentationData: PresentationData
|
||||||
private var presentationDataDisposable: Disposable?
|
private var presentationDataPromise = Promise<PresentationData>()
|
||||||
override public var updatedPresentationData: (PresentationData, Signal<PresentationData, NoError>) {
|
override public var updatedPresentationData: (PresentationData, Signal<PresentationData, NoError>) {
|
||||||
return (self.presentationData, self.presentationDataPromise.get())
|
return (self.presentationData, self.presentationDataPromise.get())
|
||||||
}
|
}
|
||||||
|
private var presentationDataDisposable: Disposable?
|
||||||
|
|
||||||
private var automaticMediaDownloadSettings: MediaAutoDownloadSettings
|
private var automaticMediaDownloadSettings: MediaAutoDownloadSettings
|
||||||
private var automaticMediaDownloadSettingsDisposable: Disposable?
|
private var automaticMediaDownloadSettingsDisposable: Disposable?
|
||||||
@ -2956,9 +2956,9 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
|
|
||||||
let statsController: ViewController
|
let statsController: ViewController
|
||||||
if let channel = peer as? TelegramChannel, case .group = channel.info {
|
if let channel = peer as? TelegramChannel, case .group = channel.info {
|
||||||
statsController = groupStatsController(context: context, peerId: peer.id, cachedPeerData: cachedData)
|
statsController = groupStatsController(context: context, updatedPresentationData: strongSelf.updatedPresentationData, peerId: peer.id, cachedPeerData: cachedData)
|
||||||
} else {
|
} else {
|
||||||
statsController = channelStatsController(context: context, peerId: peer.id, cachedPeerData: cachedData)
|
statsController = channelStatsController(context: context, updatedPresentationData: strongSelf.updatedPresentationData, peerId: peer.id, cachedPeerData: cachedData)
|
||||||
}
|
}
|
||||||
strongSelf.push(statsController)
|
strongSelf.push(statsController)
|
||||||
})))
|
})))
|
||||||
@ -3898,7 +3898,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
}
|
}
|
||||||
|
|
||||||
let accountManager = context.sharedContext.accountManager
|
let accountManager = context.sharedContext.accountManager
|
||||||
self.presentationDataDisposable = combineLatest(queue: Queue.mainQueue(), context.sharedContext.presentationData, themeSettings, context.engine.themes.getChatThemes(accountManager: accountManager, onlyCached: false), themeEmoticon, self.themeEmoticonPreviewPromise.get(), self.themeDarkAppearancePreviewPromise.get()).start(next: { [weak self] presentationData, themeSettings, chatThemes, themeEmoticon, themeEmoticonPreview, darkAppearancePreview in
|
self.presentationDataDisposable = combineLatest(queue: Queue.mainQueue(), context.sharedContext.presentationData, themeSettings, context.engine.themes.getChatThemes(accountManager: accountManager, onlyCached: true), themeEmoticon, self.themeEmoticonPreviewPromise.get(), self.themeDarkAppearancePreviewPromise.get()).start(next: { [weak self] presentationData, themeSettings, chatThemes, themeEmoticon, themeEmoticonPreview, darkAppearancePreview in
|
||||||
if let strongSelf = self {
|
if let strongSelf = self {
|
||||||
let previousTheme = strongSelf.presentationData.theme
|
let previousTheme = strongSelf.presentationData.theme
|
||||||
let previousStrings = strongSelf.presentationData.strings
|
let previousStrings = strongSelf.presentationData.strings
|
||||||
@ -3915,11 +3915,11 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
|
|
||||||
var presentationData = presentationData
|
var presentationData = presentationData
|
||||||
if let themeEmoticon = themeEmoticon, let theme = chatThemes.first(where: { $0.emoji == themeEmoticon }) {
|
if let themeEmoticon = themeEmoticon, let theme = chatThemes.first(where: { $0.emoji == themeEmoticon }) {
|
||||||
var isDarkAppearance = presentationData.theme.overallDarkAppearance
|
var useDarkAppearance = presentationData.autoNightModeTriggered
|
||||||
if let darkAppearancePreview = darkAppearancePreview {
|
if let darkAppearancePreview = darkAppearancePreview {
|
||||||
isDarkAppearance = darkAppearancePreview
|
useDarkAppearance = darkAppearancePreview
|
||||||
}
|
}
|
||||||
let customTheme = isDarkAppearance ? theme.darkTheme : theme.theme
|
let customTheme = useDarkAppearance ? theme.darkTheme : theme.theme
|
||||||
if let settings = customTheme.settings, let theme = makePresentationTheme(settings: settings, specialMode: true) {
|
if let settings = customTheme.settings, let theme = makePresentationTheme(settings: settings, specialMode: true) {
|
||||||
presentationData = presentationData.withUpdated(theme: theme)
|
presentationData = presentationData.withUpdated(theme: theme)
|
||||||
presentationData = presentationData.withUpdated(chatWallpaper: theme.chat.defaultWallpaper)
|
presentationData = presentationData.withUpdated(chatWallpaper: theme.chat.defaultWallpaper)
|
||||||
@ -13282,7 +13282,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
let controller = peerAutoremoveSetupScreen(context: self.context, peerId: peer.id, completion: { [weak self] updatedValue in
|
let controller = peerAutoremoveSetupScreen(context: self.context, updatedPresentationData: self.updatedPresentationData, peerId: peer.id, completion: { [weak self] updatedValue in
|
||||||
if case let .updated(value) = updatedValue {
|
if case let .updated(value) = updatedValue {
|
||||||
guard let strongSelf = self else {
|
guard let strongSelf = self else {
|
||||||
return
|
return
|
||||||
|
@ -19,6 +19,10 @@ final class ChatRecentActionsController: TelegramBaseController {
|
|||||||
private let peer: Peer
|
private let peer: Peer
|
||||||
private let initialAdminPeerId: PeerId?
|
private let initialAdminPeerId: PeerId?
|
||||||
private var presentationData: PresentationData
|
private var presentationData: PresentationData
|
||||||
|
private var presentationDataPromise = Promise<PresentationData>()
|
||||||
|
override var updatedPresentationData: (PresentationData, Signal<PresentationData, NoError>) {
|
||||||
|
return (self.presentationData, self.presentationDataPromise.get())
|
||||||
|
}
|
||||||
private var presentationDataDisposable: Disposable?
|
private var presentationDataDisposable: Disposable?
|
||||||
|
|
||||||
private var interaction: ChatRecentActionsInteraction!
|
private var interaction: ChatRecentActionsInteraction!
|
||||||
@ -151,14 +155,39 @@ final class ChatRecentActionsController: TelegramBaseController {
|
|||||||
self?.openFilterSetup()
|
self?.openFilterSetup()
|
||||||
}
|
}
|
||||||
|
|
||||||
self.presentationDataDisposable = (context.sharedContext.presentationData
|
let themeEmoticon = self.context.account.postbox.peerView(id: peer.id)
|
||||||
|> deliverOnMainQueue).start(next: { [weak self] presentationData in
|
|> map { view -> String? in
|
||||||
|
let cachedData = view.cachedData
|
||||||
|
if let cachedData = cachedData as? CachedUserData {
|
||||||
|
return cachedData.themeEmoticon
|
||||||
|
} else if let cachedData = cachedData as? CachedGroupData {
|
||||||
|
return cachedData.themeEmoticon
|
||||||
|
} else if let cachedData = cachedData as? CachedChannelData {
|
||||||
|
return cachedData.themeEmoticon
|
||||||
|
} else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|> distinctUntilChanged
|
||||||
|
|
||||||
|
self.presentationDataDisposable = combineLatest(queue: Queue.mainQueue(), context.sharedContext.presentationData, context.engine.themes.getChatThemes(accountManager: context.sharedContext.accountManager, onlyCached: true), themeEmoticon).start(next: { [weak self] presentationData, chatThemes, themeEmoticon in
|
||||||
if let strongSelf = self {
|
if let strongSelf = self {
|
||||||
let previousTheme = strongSelf.presentationData.theme
|
let previousTheme = strongSelf.presentationData.theme
|
||||||
let previousStrings = strongSelf.presentationData.strings
|
let previousStrings = strongSelf.presentationData.strings
|
||||||
|
|
||||||
|
var presentationData = presentationData
|
||||||
|
if let themeEmoticon = themeEmoticon, let theme = chatThemes.first(where: { $0.emoji == themeEmoticon }) {
|
||||||
|
let useDarkAppearance = presentationData.autoNightModeTriggered
|
||||||
|
let customTheme = useDarkAppearance ? theme.darkTheme : theme.theme
|
||||||
|
if let settings = customTheme.settings, let theme = makePresentationTheme(settings: settings, specialMode: true) {
|
||||||
|
presentationData = presentationData.withUpdated(theme: theme)
|
||||||
|
presentationData = presentationData.withUpdated(chatWallpaper: theme.chat.defaultWallpaper)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
strongSelf.presentationData = presentationData
|
strongSelf.presentationData = presentationData
|
||||||
|
strongSelf.presentationDataPromise.set(.single(presentationData))
|
||||||
|
|
||||||
if previousTheme !== presentationData.theme || previousStrings !== presentationData.strings {
|
if previousTheme !== presentationData.theme || previousStrings !== presentationData.strings {
|
||||||
strongSelf.updateThemeAndStrings()
|
strongSelf.updateThemeAndStrings()
|
||||||
}
|
}
|
||||||
@ -179,10 +208,12 @@ final class ChatRecentActionsController: TelegramBaseController {
|
|||||||
|
|
||||||
self.statusBar.statusBarStyle = self.presentationData.theme.rootController.statusBarStyle.style
|
self.statusBar.statusBarStyle = self.presentationData.theme.rootController.statusBarStyle.style
|
||||||
self.navigationBar?.updatePresentationData(NavigationBarPresentationData(presentationData: self.presentationData))
|
self.navigationBar?.updatePresentationData(NavigationBarPresentationData(presentationData: self.presentationData))
|
||||||
|
|
||||||
|
self.controllerNode.updatePresentationData(self.presentationData)
|
||||||
}
|
}
|
||||||
|
|
||||||
override func loadDisplayNode() {
|
override func loadDisplayNode() {
|
||||||
self.displayNode = ChatRecentActionsControllerNode(context: self.context, peer: self.peer, presentationData: self.presentationData, interaction: self.interaction, pushController: { [weak self] c in
|
self.displayNode = ChatRecentActionsControllerNode(context: self.context, controller: self, peer: self.peer, presentationData: self.presentationData, interaction: self.interaction, pushController: { [weak self] c in
|
||||||
(self?.navigationController as? NavigationController)?.pushViewController(c)
|
(self?.navigationController as? NavigationController)?.pushViewController(c)
|
||||||
}, presentController: { [weak self] c, t, a in
|
}, presentController: { [weak self] c, t, a in
|
||||||
self?.present(c, in: t, with: a, blockInteraction: true)
|
self?.present(c, in: t, with: a, blockInteraction: true)
|
||||||
@ -232,7 +263,7 @@ final class ChatRecentActionsController: TelegramBaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func openFilterSetup() {
|
private func openFilterSetup() {
|
||||||
self.present(channelRecentActionsFilterController(context: self.context, peer: self.peer, events: self.controllerNode.filter.events, adminPeerIds: self.controllerNode.filter.adminPeerIds, apply: { [weak self] events, adminPeerIds in
|
self.present(channelRecentActionsFilterController(context: self.context, updatedPresentationData: self.updatedPresentationData, peer: self.peer, events: self.controllerNode.filter.events, adminPeerIds: self.controllerNode.filter.adminPeerIds, apply: { [weak self] events, adminPeerIds in
|
||||||
self?.controllerNode.updateFilter(events: events, adminPeerIds: adminPeerIds)
|
self?.controllerNode.updateFilter(events: events, adminPeerIds: adminPeerIds)
|
||||||
self?.updateTitle()
|
self?.updateTitle()
|
||||||
}), in: .window(.root), with: ViewControllerPresentationArguments(presentationAnimation: .modalSheet))
|
}), in: .window(.root), with: ViewControllerPresentationArguments(presentationAnimation: .modalSheet))
|
||||||
|
@ -50,11 +50,9 @@ final class ChatRecentActionsControllerNode: ViewControllerTracingNode {
|
|||||||
private let temporaryHiddenGalleryMediaDisposable = MetaDisposable()
|
private let temporaryHiddenGalleryMediaDisposable = MetaDisposable()
|
||||||
|
|
||||||
private var chatPresentationDataPromise: Promise<ChatPresentationData>
|
private var chatPresentationDataPromise: Promise<ChatPresentationData>
|
||||||
private var presentationDataDisposable: Disposable?
|
|
||||||
|
|
||||||
private var automaticMediaDownloadSettings: MediaAutoDownloadSettings
|
private var automaticMediaDownloadSettings: MediaAutoDownloadSettings
|
||||||
|
|
||||||
private var state: ChatRecentActionsControllerState
|
|
||||||
private var containerLayout: (ContainerViewLayout, CGFloat)?
|
private var containerLayout: (ContainerViewLayout, CGFloat)?
|
||||||
|
|
||||||
private let backgroundNode: WallpaperBackgroundNode
|
private let backgroundNode: WallpaperBackgroundNode
|
||||||
@ -87,8 +85,11 @@ final class ChatRecentActionsControllerNode: ViewControllerTracingNode {
|
|||||||
private var adminsState: ChannelMemberListState?
|
private var adminsState: ChannelMemberListState?
|
||||||
private let banDisposables = DisposableDict<PeerId>()
|
private let banDisposables = DisposableDict<PeerId>()
|
||||||
|
|
||||||
init(context: AccountContext, peer: Peer, presentationData: PresentationData, interaction: ChatRecentActionsInteraction, pushController: @escaping (ViewController) -> Void, presentController: @escaping (ViewController, PresentationContextType, Any?) -> Void, getNavigationController: @escaping () -> NavigationController?) {
|
private weak var controller: ChatRecentActionsController?
|
||||||
|
|
||||||
|
init(context: AccountContext, controller: ChatRecentActionsController, peer: Peer, presentationData: PresentationData, interaction: ChatRecentActionsInteraction, pushController: @escaping (ViewController) -> Void, presentController: @escaping (ViewController, PresentationContextType, Any?) -> Void, getNavigationController: @escaping () -> NavigationController?) {
|
||||||
self.context = context
|
self.context = context
|
||||||
|
self.controller = controller
|
||||||
self.peer = peer
|
self.peer = peer
|
||||||
self.presentationData = presentationData
|
self.presentationData = presentationData
|
||||||
self.interaction = interaction
|
self.interaction = interaction
|
||||||
@ -117,18 +118,13 @@ final class ChatRecentActionsControllerNode: ViewControllerTracingNode {
|
|||||||
self.loadingNode = ChatLoadingNode(theme: self.presentationData.theme, chatWallpaper: self.presentationData.chatWallpaper, bubbleCorners: self.presentationData.chatBubbleCorners)
|
self.loadingNode = ChatLoadingNode(theme: self.presentationData.theme, chatWallpaper: self.presentationData.chatWallpaper, bubbleCorners: self.presentationData.chatBubbleCorners)
|
||||||
self.emptyNode = ChatRecentActionsEmptyNode(theme: self.presentationData.theme, chatWallpaper: self.presentationData.chatWallpaper, chatBubbleCorners: self.presentationData.chatBubbleCorners)
|
self.emptyNode = ChatRecentActionsEmptyNode(theme: self.presentationData.theme, chatWallpaper: self.presentationData.chatWallpaper, chatBubbleCorners: self.presentationData.chatBubbleCorners)
|
||||||
self.emptyNode.alpha = 0.0
|
self.emptyNode.alpha = 0.0
|
||||||
|
|
||||||
self.state = ChatRecentActionsControllerState(chatWallpaper: self.presentationData.chatWallpaper, theme: self.presentationData.theme, strings: self.presentationData.strings, fontSize: self.presentationData.chatFontSize)
|
self.chatPresentationDataPromise = Promise()
|
||||||
|
|
||||||
self.chatPresentationDataPromise = Promise(ChatPresentationData(theme: ChatPresentationThemeData(theme: self.presentationData.theme, wallpaper: self.presentationData.chatWallpaper), fontSize: self.presentationData.chatFontSize, strings: self.presentationData.strings, dateTimeFormat: self.presentationData.dateTimeFormat, nameDisplayOrder: self.presentationData.nameDisplayOrder, disableAnimations: true, largeEmoji: self.presentationData.largeEmoji, chatBubbleCorners: self.presentationData.chatBubbleCorners))
|
|
||||||
|
|
||||||
self.eventLogContext = self.context.engine.peers.channelAdminEventLog(peerId: self.peer.id)
|
self.eventLogContext = self.context.engine.peers.channelAdminEventLog(peerId: self.peer.id)
|
||||||
|
|
||||||
super.init()
|
super.init()
|
||||||
|
|
||||||
self.backgroundNode.update(wallpaper: self.state.chatWallpaper)
|
|
||||||
self.backgroundNode.updateBubbleTheme(bubbleTheme: self.presentationData.theme, bubbleCorners: self.presentationData.chatBubbleCorners)
|
|
||||||
|
|
||||||
self.addSubnode(self.backgroundNode)
|
self.addSubnode(self.backgroundNode)
|
||||||
self.addSubnode(self.listNode)
|
self.addSubnode(self.listNode)
|
||||||
self.addSubnode(self.loadingNode)
|
self.addSubnode(self.loadingNode)
|
||||||
@ -180,7 +176,7 @@ final class ChatRecentActionsControllerNode: ViewControllerTracingNode {
|
|||||||
])])
|
])])
|
||||||
strongSelf.presentController(actionSheet, .window(.root), nil)
|
strongSelf.presentController(actionSheet, .window(.root), nil)
|
||||||
} else {
|
} else {
|
||||||
let controller = inviteLinkEditController(context: strongSelf.context, peerId: peer.id, invite: invite, completion: { [weak self] _ in
|
let controller = inviteLinkEditController(context: strongSelf.context, updatedPresentationData: strongSelf.controller?.updatedPresentationData, peerId: peer.id, invite: invite, completion: { [weak self] _ in
|
||||||
self?.eventLogContext.reload()
|
self?.eventLogContext.reload()
|
||||||
})
|
})
|
||||||
controller.navigationPresentation = .modal
|
controller.navigationPresentation = .modal
|
||||||
@ -601,20 +597,9 @@ final class ChatRecentActionsControllerNode: ViewControllerTracingNode {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
|
|
||||||
self.presentationDataDisposable = (context.sharedContext.presentationData
|
|
||||||
|> deliverOnMainQueue).start(next: { [weak self] presentationData in
|
|
||||||
if let strongSelf = self {
|
|
||||||
strongSelf.presentationData = presentationData
|
|
||||||
strongSelf.chatPresentationDataPromise.set(.single(ChatPresentationData(theme: ChatPresentationThemeData(theme: presentationData.theme, wallpaper: presentationData.chatWallpaper), fontSize: presentationData.chatFontSize, strings: presentationData.strings, dateTimeFormat: presentationData.dateTimeFormat, nameDisplayOrder: presentationData.nameDisplayOrder, disableAnimations: true, largeEmoji: presentationData.largeEmoji, chatBubbleCorners: presentationData.chatBubbleCorners)))
|
|
||||||
|
|
||||||
strongSelf.updateThemeAndStrings(theme: presentationData.theme, strings: presentationData.strings)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
deinit {
|
deinit {
|
||||||
self.presentationDataDisposable?.dispose()
|
|
||||||
self.historyDisposable?.dispose()
|
self.historyDisposable?.dispose()
|
||||||
self.navigationActionDisposable.dispose()
|
self.navigationActionDisposable.dispose()
|
||||||
self.galleryHiddenMesageAndMediaDisposable.dispose()
|
self.galleryHiddenMesageAndMediaDisposable.dispose()
|
||||||
@ -624,10 +609,17 @@ final class ChatRecentActionsControllerNode: ViewControllerTracingNode {
|
|||||||
self.banDisposables.dispose()
|
self.banDisposables.dispose()
|
||||||
}
|
}
|
||||||
|
|
||||||
func updateThemeAndStrings(theme: PresentationTheme, strings: PresentationStrings) {
|
func updatePresentationData(_ presentationData: PresentationData) {
|
||||||
self.panelBackgroundNode.updateColor(color: theme.chat.inputPanel.panelBackgroundColor, transition: .immediate)
|
self.presentationData = presentationData
|
||||||
self.panelSeparatorNode.backgroundColor = theme.chat.inputPanel.panelSeparatorColor
|
|
||||||
self.panelButtonNode.setTitle(presentationData.strings.Channel_AdminLog_InfoPanelTitle, with: Font.regular(17.0), with: theme.chat.inputPanel.panelControlAccentColor, for: [])
|
self.chatPresentationDataPromise.set(.single(ChatPresentationData(theme: ChatPresentationThemeData(theme: presentationData.theme, wallpaper: presentationData.chatWallpaper), fontSize: presentationData.chatFontSize, strings: presentationData.strings, dateTimeFormat: presentationData.dateTimeFormat, nameDisplayOrder: presentationData.nameDisplayOrder, disableAnimations: true, largeEmoji: presentationData.largeEmoji, chatBubbleCorners: presentationData.chatBubbleCorners)))
|
||||||
|
|
||||||
|
self.backgroundNode.update(wallpaper: presentationData.chatWallpaper)
|
||||||
|
self.backgroundNode.updateBubbleTheme(bubbleTheme: presentationData.theme, bubbleCorners: presentationData.chatBubbleCorners)
|
||||||
|
|
||||||
|
self.panelBackgroundNode.updateColor(color: presentationData.theme.chat.inputPanel.panelBackgroundColor, transition: .immediate)
|
||||||
|
self.panelSeparatorNode.backgroundColor = presentationData.theme.chat.inputPanel.panelSeparatorColor
|
||||||
|
self.panelButtonNode.setTitle(presentationData.strings.Channel_AdminLog_InfoPanelTitle, with: Font.regular(17.0), with: presentationData.theme.chat.inputPanel.panelControlAccentColor, for: [])
|
||||||
}
|
}
|
||||||
|
|
||||||
func containerLayoutUpdated(_ layout: ContainerViewLayout, navigationBarHeight: CGFloat, transition: ContainedViewLayoutTransition) {
|
func containerLayoutUpdated(_ layout: ContainerViewLayout, navigationBarHeight: CGFloat, transition: ContainedViewLayoutTransition) {
|
||||||
@ -948,7 +940,7 @@ final class ChatRecentActionsControllerNode: ViewControllerTracingNode {
|
|||||||
private func presentAutoremoveSetup() {
|
private func presentAutoremoveSetup() {
|
||||||
let peer = self.peer
|
let peer = self.peer
|
||||||
|
|
||||||
let controller = peerAutoremoveSetupScreen(context: self.context, peerId: peer.id, completion: { [weak self] updatedValue in
|
let controller = peerAutoremoveSetupScreen(context: self.context, updatedPresentationData: self.controller?.updatedPresentationData, peerId: peer.id, completion: { [weak self] updatedValue in
|
||||||
if case let .updated(value) = updatedValue {
|
if case let .updated(value) = updatedValue {
|
||||||
guard let strongSelf = self else {
|
guard let strongSelf = self else {
|
||||||
return
|
return
|
||||||
|
@ -1,35 +0,0 @@
|
|||||||
import Foundation
|
|
||||||
import UIKit
|
|
||||||
import TelegramCore
|
|
||||||
import TelegramPresentationData
|
|
||||||
import TelegramUIPreferences
|
|
||||||
|
|
||||||
final class ChatRecentActionsControllerState: Equatable {
|
|
||||||
let chatWallpaper: TelegramWallpaper
|
|
||||||
let theme: PresentationTheme
|
|
||||||
let strings: PresentationStrings
|
|
||||||
let fontSize: PresentationFontSize
|
|
||||||
|
|
||||||
init(chatWallpaper: TelegramWallpaper, theme: PresentationTheme, strings: PresentationStrings, fontSize: PresentationFontSize) {
|
|
||||||
self.chatWallpaper = chatWallpaper
|
|
||||||
self.theme = theme
|
|
||||||
self.strings = strings
|
|
||||||
self.fontSize = fontSize
|
|
||||||
}
|
|
||||||
|
|
||||||
static func ==(lhs: ChatRecentActionsControllerState, rhs: ChatRecentActionsControllerState) -> Bool {
|
|
||||||
if lhs.chatWallpaper != rhs.chatWallpaper {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
if lhs.theme !== rhs.theme {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
if lhs.strings !== rhs.strings {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
if lhs.fontSize != rhs.fontSize {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
@ -343,7 +343,7 @@ private func channelRecentActionsFilterControllerEntries(presentationData: Prese
|
|||||||
return entries
|
return entries
|
||||||
}
|
}
|
||||||
|
|
||||||
public func channelRecentActionsFilterController(context: AccountContext, peer: Peer, events: AdminLogEventsFlags, adminPeerIds: [PeerId]?, apply: @escaping (_ events: AdminLogEventsFlags, _ adminPeerIds: [PeerId]?) -> Void) -> ViewController {
|
public func channelRecentActionsFilterController(context: AccountContext, updatedPresentationData: (initial: PresentationData, signal: Signal<PresentationData, NoError>)? = nil, peer: Peer, events: AdminLogEventsFlags, adminPeerIds: [PeerId]?, apply: @escaping (_ events: AdminLogEventsFlags, _ adminPeerIds: [PeerId]?) -> Void) -> ViewController {
|
||||||
let statePromise = ValuePromise(ChatRecentActionsFilterControllerState(events: events, adminPeerIds: adminPeerIds), ignoreRepeated: true)
|
let statePromise = ValuePromise(ChatRecentActionsFilterControllerState(events: events, adminPeerIds: adminPeerIds), ignoreRepeated: true)
|
||||||
let stateValue = Atomic(value: ChatRecentActionsFilterControllerState(events: events, adminPeerIds: adminPeerIds))
|
let stateValue = Atomic(value: ChatRecentActionsFilterControllerState(events: events, adminPeerIds: adminPeerIds))
|
||||||
let updateState: ((ChatRecentActionsFilterControllerState) -> ChatRecentActionsFilterControllerState) -> Void = { f in
|
let updateState: ((ChatRecentActionsFilterControllerState) -> ChatRecentActionsFilterControllerState) -> Void = { f in
|
||||||
@ -353,9 +353,7 @@ public func channelRecentActionsFilterController(context: AccountContext, peer:
|
|||||||
var dismissImpl: (() -> Void)?
|
var dismissImpl: (() -> Void)?
|
||||||
|
|
||||||
let adminsPromise = Promise<[RenderedChannelParticipant]?>(nil)
|
let adminsPromise = Promise<[RenderedChannelParticipant]?>(nil)
|
||||||
|
|
||||||
let presentationDataSignal = context.sharedContext.presentationData
|
|
||||||
|
|
||||||
let actionsDisposable = DisposableSet()
|
let actionsDisposable = DisposableSet()
|
||||||
|
|
||||||
let arguments = ChatRecentActionsFilterControllerArguments(context: context, toggleAllActions: { value in
|
let arguments = ChatRecentActionsFilterControllerArguments(context: context, toggleAllActions: { value in
|
||||||
@ -433,7 +431,8 @@ public func channelRecentActionsFilterController(context: AccountContext, peer:
|
|||||||
|
|
||||||
var previousPeers: [RenderedChannelParticipant]?
|
var previousPeers: [RenderedChannelParticipant]?
|
||||||
|
|
||||||
let signal = combineLatest(presentationDataSignal, statePromise.get(), adminsPromise.get() |> deliverOnMainQueue)
|
let presentationData = updatedPresentationData?.signal ?? context.sharedContext.presentationData
|
||||||
|
let signal = combineLatest(presentationData, statePromise.get(), adminsPromise.get() |> deliverOnMainQueue)
|
||||||
|> deliverOnMainQueue
|
|> deliverOnMainQueue
|
||||||
|> map { presentationData, state, admins -> (ItemListControllerState, (ItemListNodeState, Any)) in
|
|> map { presentationData, state, admins -> (ItemListControllerState, (ItemListNodeState, Any)) in
|
||||||
let leftNavigationButton = ItemListNavigationButton(content: .text(presentationData.strings.Common_Cancel), style: .regular, enabled: true, action: {
|
let leftNavigationButton = ItemListNavigationButton(content: .text(presentationData.strings.Common_Cancel), style: .regular, enabled: true, action: {
|
||||||
|
@ -4356,9 +4356,9 @@ private final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewD
|
|||||||
|
|
||||||
let statsController: ViewController
|
let statsController: ViewController
|
||||||
if let channel = peer as? TelegramChannel, case .group = channel.info {
|
if let channel = peer as? TelegramChannel, case .group = channel.info {
|
||||||
statsController = groupStatsController(context: self.context, peerId: peer.id, cachedPeerData: cachedData)
|
statsController = groupStatsController(context: self.context, updatedPresentationData: self.controller?.updatedPresentationData, peerId: peer.id, cachedPeerData: cachedData)
|
||||||
} else {
|
} else {
|
||||||
statsController = channelStatsController(context: self.context, peerId: peer.id, cachedPeerData: cachedData)
|
statsController = channelStatsController(context: self.context, updatedPresentationData: self.controller?.updatedPresentationData, peerId: peer.id, cachedPeerData: cachedData)
|
||||||
}
|
}
|
||||||
controller.push(statsController)
|
controller.push(statsController)
|
||||||
}
|
}
|
||||||
@ -4706,15 +4706,15 @@ private final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewD
|
|||||||
}
|
}
|
||||||
switch section {
|
switch section {
|
||||||
case .members:
|
case .members:
|
||||||
self.controller?.push(channelMembersController(context: self.context, peerId: self.peerId))
|
self.controller?.push(channelMembersController(context: self.context, updatedPresentationData: self.controller?.updatedPresentationData, peerId: self.peerId))
|
||||||
case .admins:
|
case .admins:
|
||||||
if peer is TelegramGroup {
|
if peer is TelegramGroup {
|
||||||
self.controller?.push(channelAdminsController(context: self.context, peerId: self.peerId))
|
self.controller?.push(channelAdminsController(context: self.context, updatedPresentationData: self.controller?.updatedPresentationData, peerId: self.peerId))
|
||||||
} else if peer is TelegramChannel {
|
} else if peer is TelegramChannel {
|
||||||
self.controller?.push(channelAdminsController(context: self.context, peerId: self.peerId))
|
self.controller?.push(channelAdminsController(context: self.context, updatedPresentationData: self.controller?.updatedPresentationData, peerId: self.peerId))
|
||||||
}
|
}
|
||||||
case .banned:
|
case .banned:
|
||||||
self.controller?.push(channelBlacklistController(context: self.context, peerId: self.peerId))
|
self.controller?.push(channelBlacklistController(context: self.context, updatedPresentationData: self.controller?.updatedPresentationData, peerId: self.peerId))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4723,7 +4723,7 @@ private final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewD
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
var upgradedToSupergroupImpl: (() -> Void)?
|
var upgradedToSupergroupImpl: (() -> Void)?
|
||||||
let controller = groupPreHistorySetupController(context: self.context, peerId: peer.id, upgradedToSupergroup: { _, f in
|
let controller = groupPreHistorySetupController(context: self.context, updatedPresentationData: self.controller?.updatedPresentationData, peerId: peer.id, upgradedToSupergroup: { _, f in
|
||||||
upgradedToSupergroupImpl?()
|
upgradedToSupergroupImpl?()
|
||||||
f()
|
f()
|
||||||
})
|
})
|
||||||
@ -4741,7 +4741,7 @@ private final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewD
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
let controller = peerAutoremoveSetupScreen(context: self.context, peerId: peer.id)
|
let controller = peerAutoremoveSetupScreen(context: self.context, updatedPresentationData: self.controller?.updatedPresentationData, peerId: peer.id)
|
||||||
self.controller?.push(controller)
|
self.controller?.push(controller)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4749,14 +4749,14 @@ private final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewD
|
|||||||
guard let data = self.data, let peer = data.peer else {
|
guard let data = self.data, let peer = data.peer else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
self.controller?.push(channelPermissionsController(context: self.context, peerId: peer.id))
|
self.controller?.push(channelPermissionsController(context: self.context, updatedPresentationData: self.controller?.updatedPresentationData, peerId: peer.id))
|
||||||
}
|
}
|
||||||
|
|
||||||
private func editingOpenStickerPackSetup() {
|
private func editingOpenStickerPackSetup() {
|
||||||
guard let data = self.data, let peer = data.peer, let cachedData = data.cachedData as? CachedChannelData else {
|
guard let data = self.data, let peer = data.peer, let cachedData = data.cachedData as? CachedChannelData else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
self.controller?.push(groupStickerPackSetupController(context: self.context, peerId: peer.id, currentPackInfo: cachedData.stickerPack))
|
self.controller?.push(groupStickerPackSetupController(context: self.context, updatedPresentationData: self.controller?.updatedPresentationData, peerId: peer.id, currentPackInfo: cachedData.stickerPack))
|
||||||
}
|
}
|
||||||
|
|
||||||
private func openLocation() {
|
private func openLocation() {
|
||||||
@ -4830,12 +4830,12 @@ private final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewD
|
|||||||
switch action {
|
switch action {
|
||||||
case .promote:
|
case .promote:
|
||||||
if case let .channelMember(channelMember) = member {
|
if case let .channelMember(channelMember) = member {
|
||||||
self.controller?.push(channelAdminController(context: self.context, peerId: peer.id, adminId: member.id, initialParticipant: channelMember.participant, updated: { _ in
|
self.controller?.push(channelAdminController(context: self.context, updatedPresentationData: self.controller?.updatedPresentationData, peerId: peer.id, adminId: member.id, initialParticipant: channelMember.participant, updated: { _ in
|
||||||
}, upgradedToSupergroup: { _, f in f() }, transferedOwnership: { _ in }))
|
}, upgradedToSupergroup: { _, f in f() }, transferedOwnership: { _ in }))
|
||||||
}
|
}
|
||||||
case .restrict:
|
case .restrict:
|
||||||
if case let .channelMember(channelMember) = member {
|
if case let .channelMember(channelMember) = member {
|
||||||
self.controller?.push(channelBannedMemberController(context: self.context, peerId: peer.id, memberId: member.id, initialParticipant: channelMember.participant, updated: { _ in
|
self.controller?.push(channelBannedMemberController(context: self.context, updatedPresentationData: self.controller?.updatedPresentationData, peerId: peer.id, memberId: member.id, initialParticipant: channelMember.participant, updated: { _ in
|
||||||
}, upgradedToSupergroup: { _, f in f() }))
|
}, upgradedToSupergroup: { _, f in f() }))
|
||||||
}
|
}
|
||||||
case .remove:
|
case .remove:
|
||||||
|
@ -363,14 +363,13 @@ private func patternWallpaperDatas(account: Account, accountManager: AccountMana
|
|||||||
targetRepresentation = representations[representations.firstIndex(where: { $0.representation == representation })!]
|
targetRepresentation = representations[representations.firstIndex(where: { $0.representation == representation })!]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if let targetRepresentation = targetRepresentation {
|
if let targetRepresentation = targetRepresentation {
|
||||||
let maybeFullSize = combineLatest(
|
let sharedResource = mode == .screen ? accountManager.mediaBox.cachedResourceRepresentation(targetRepresentation.representation.resource, representation: CachedPreparedPatternWallpaperRepresentation(), complete: false, fetch: true) : accountManager.mediaBox.resourceData(targetRepresentation.representation.resource)
|
||||||
accountManager.mediaBox.cachedResourceRepresentation(targetRepresentation.representation.resource, representation: CachedPreparedPatternWallpaperRepresentation(), complete: false, fetch: true),
|
|
||||||
account.postbox.mediaBox.cachedResourceRepresentation(targetRepresentation.representation.resource, representation: CachedPreparedPatternWallpaperRepresentation(), complete: false, fetch: true)
|
|
||||||
)
|
|
||||||
|
|
||||||
|
let accountResource = mode == .screen ? account.postbox.mediaBox.cachedResourceRepresentation(targetRepresentation.representation.resource, representation: CachedPreparedPatternWallpaperRepresentation(), complete: false, fetch: true) : account.postbox.mediaBox.resourceData(targetRepresentation.representation.resource)
|
||||||
|
|
||||||
|
let maybeFullSize = combineLatest(sharedResource, accountResource)
|
||||||
let signal = maybeFullSize
|
let signal = maybeFullSize
|
||||||
|> take(1)
|
|> take(1)
|
||||||
|> mapToSignal { maybeSharedData, maybeData -> Signal<(Data?, Bool), NoError> in
|
|> mapToSignal { maybeSharedData, maybeData -> Signal<(Data?, Bool), NoError> in
|
||||||
@ -388,7 +387,7 @@ private func patternWallpaperDatas(account: Account, accountManager: AccountMana
|
|||||||
|
|
||||||
let accountFullSizeData = Signal<(Data?, Bool), NoError> { subscriber in
|
let accountFullSizeData = Signal<(Data?, Bool), NoError> { subscriber in
|
||||||
let fetchedFullSizeDisposable = fetchedFullSize.start()
|
let fetchedFullSizeDisposable = fetchedFullSize.start()
|
||||||
let fullSizeDisposable = account.postbox.mediaBox.cachedResourceRepresentation(targetRepresentation.representation.resource, representation: CachedPreparedPatternWallpaperRepresentation(), complete: false, fetch: true).start(next: { next in
|
let fullSizeDisposable = accountResource.start(next: { next in
|
||||||
subscriber.putNext((next.size == 0 ? nil : try? Data(contentsOf: URL(fileURLWithPath: next.path), options: []), next.complete))
|
subscriber.putNext((next.size == 0 ? nil : try? Data(contentsOf: URL(fileURLWithPath: next.path), options: []), next.complete))
|
||||||
|
|
||||||
if next.complete, let data = try? Data(contentsOf: URL(fileURLWithPath: next.path), options: .mappedRead) {
|
if next.complete, let data = try? Data(contentsOf: URL(fileURLWithPath: next.path), options: .mappedRead) {
|
||||||
@ -403,7 +402,7 @@ private func patternWallpaperDatas(account: Account, accountManager: AccountMana
|
|||||||
}
|
}
|
||||||
|
|
||||||
let sharedFullSizeData = Signal<(Data?, Bool), NoError> { subscriber in
|
let sharedFullSizeData = Signal<(Data?, Bool), NoError> { subscriber in
|
||||||
let fullSizeDisposable = accountManager.mediaBox.cachedResourceRepresentation(targetRepresentation.representation.resource, representation: CachedPreparedPatternWallpaperRepresentation(), complete: false, fetch: true).start(next: { next in
|
let fullSizeDisposable = sharedResource.start(next: { next in
|
||||||
subscriber.putNext((next.size == 0 ? nil : try? Data(contentsOf: URL(fileURLWithPath: next.path), options: []), next.complete))
|
subscriber.putNext((next.size == 0 ? nil : try? Data(contentsOf: URL(fileURLWithPath: next.path), options: []), next.complete))
|
||||||
}, error: subscriber.putError, completed: subscriber.putCompletion)
|
}, error: subscriber.putError, completed: subscriber.putCompletion)
|
||||||
|
|
||||||
@ -528,16 +527,12 @@ private func patternWallpaperImageInternal(fullSizeData: Data?, fullSizeComplete
|
|||||||
c.clear(CGRect(origin: CGPoint(), size: size))
|
c.clear(CGRect(origin: CGPoint(), size: size))
|
||||||
var image: UIImage?
|
var image: UIImage?
|
||||||
if let fullSizeData = fullSizeData {
|
if let fullSizeData = fullSizeData {
|
||||||
image = renderPreparedImage(fullSizeData, CGSize(width: size.width * context.scale, height: size.height * context.scale))
|
if mode == .screen {
|
||||||
|
image = renderPreparedImage(fullSizeData, CGSize(width: size.width * context.scale, height: size.height * context.scale))
|
||||||
|
} else {
|
||||||
|
image = UIImage(data: fullSizeData)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// if let fullSizeData = fullSizeData, let unpackedData = TGGUnzipData(fullSizeData, 2 * 1024 * 1024) {
|
|
||||||
// let preparedData = prepareSvgImage(unpackedData)
|
|
||||||
// image = renderPreparedImage(preparedData!, CGSize(width: size.width * context.scale, height: size.height * context.scale))
|
|
||||||
//
|
|
||||||
//// image = drawSvgImage(unpackedData, CGSize(width: size.width * context.scale, height: size.height * context.scale), .black, .white)
|
|
||||||
// } else if let fullSizeData = fullSizeData {
|
|
||||||
// image = UIImage(data: fullSizeData)
|
|
||||||
// }
|
|
||||||
|
|
||||||
if let customPatternColor = customArguments.customPatternColor, customPatternColor.alpha < 1.0 {
|
if let customPatternColor = customArguments.customPatternColor, customPatternColor.alpha < 1.0 {
|
||||||
c.setBlendMode(.copy)
|
c.setBlendMode(.copy)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user