mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Various fixes
This commit is contained in:
parent
e167e794cc
commit
5229c1666c
@ -117,7 +117,7 @@ public enum AvatarNodeImageOverride: Equatable {
|
||||
case savedMessagesIcon
|
||||
case repliesIcon
|
||||
case archivedChatsIcon(hiddenByDefault: Bool)
|
||||
case editAvatarIcon
|
||||
case editAvatarIcon(forceNone: Bool)
|
||||
case deletedIcon
|
||||
case phoneIcon
|
||||
}
|
||||
@ -322,8 +322,8 @@ public final class AvatarNode: ASDisplayNode {
|
||||
case let .archivedChatsIcon(hiddenByDefault):
|
||||
representation = nil
|
||||
icon = .archivedChatsIcon(hiddenByDefault: hiddenByDefault)
|
||||
case .editAvatarIcon:
|
||||
representation = peer?.smallProfileImage
|
||||
case let .editAvatarIcon(forceNone):
|
||||
representation = forceNone ? nil : peer?.smallProfileImage
|
||||
icon = .editAvatarIcon
|
||||
case .deletedIcon:
|
||||
representation = nil
|
||||
|
@ -660,7 +660,7 @@ public class ItemListAvatarAndNameInfoItemNode: ListViewItemNode, ItemListItemNo
|
||||
overrideImage = .image(representation)
|
||||
}
|
||||
} else if case .editSettings = item.mode {
|
||||
overrideImage = AvatarNodeImageOverride.editAvatarIcon
|
||||
overrideImage = AvatarNodeImageOverride.editAvatarIcon(forceNone: false)
|
||||
} else if peer.isDeleted {
|
||||
overrideImage = .deletedIcon
|
||||
}
|
||||
|
@ -312,27 +312,45 @@ final class PeerAvatarImageGalleryItemNode: ZoomableContentGalleryItemNode {
|
||||
guard let videoNode = self.videoNode, self.isCentral else {
|
||||
return
|
||||
}
|
||||
if let _ = self.videoStartTimestamp {
|
||||
if let videoStartTimestamp = self.videoStartTimestamp {
|
||||
videoNode.isHidden = true
|
||||
self.playbackStatusDisposable.set((videoNode.status
|
||||
|> map { status -> Bool in
|
||||
if let status = status, case .playing = status.status {
|
||||
return true
|
||||
} else {
|
||||
return false
|
||||
|> castError(Bool.self)
|
||||
|> mapToSignal { status -> Signal<Bool, Bool> in
|
||||
if let status = status, case .playing = status.status {
|
||||
if videoStartTimestamp > 0.0 && videoStartTimestamp > status.duration - 1.0 {
|
||||
return .fail(true)
|
||||
}
|
||||
return .single(true)
|
||||
} else {
|
||||
return .single(false)
|
||||
}
|
||||
|> filter { playing in
|
||||
return playing
|
||||
}
|
||||
|> take(1)
|
||||
|> deliverOnMainQueue).start(completed: { [weak self] in
|
||||
if let strongSelf = self {
|
||||
}
|
||||
|> filter { playing in
|
||||
return playing
|
||||
}
|
||||
|> take(1)
|
||||
|> deliverOnMainQueue).start(error: { [weak self] _ in
|
||||
if let strongSelf = self {
|
||||
if let _ = strongSelf.videoNode {
|
||||
videoNode.seek(0.0)
|
||||
Queue.mainQueue().after(0.1) {
|
||||
strongSelf.videoNode?.layer.allowsGroupOpacity = true
|
||||
strongSelf.videoNode?.alpha = 0.0
|
||||
strongSelf.videoNode?.isHidden = false
|
||||
|
||||
strongSelf.videoNode?.alpha = 1.0
|
||||
strongSelf.videoNode?.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.25, delay: 0.01)
|
||||
}
|
||||
}
|
||||
}))
|
||||
}
|
||||
}, completed: { [weak self] in
|
||||
if let strongSelf = self {
|
||||
Queue.mainQueue().after(0.1) {
|
||||
strongSelf.videoNode?.isHidden = false
|
||||
}
|
||||
}
|
||||
}))
|
||||
} else {
|
||||
self.playbackStatusDisposable.set(nil)
|
||||
videoNode.isHidden = false
|
||||
|
@ -340,20 +340,38 @@ public final class PeerInfoAvatarListItemNode: ASDisplayNode {
|
||||
videoNode.canAttachContent = true
|
||||
videoNode.isHidden = true
|
||||
|
||||
if let _ = self.videoStartTimestamp {
|
||||
if let videoStartTimestamp = self.videoStartTimestamp {
|
||||
self.playbackStartDisposable.set((videoNode.status
|
||||
|> map { status -> Bool in
|
||||
|> castError(Bool.self)
|
||||
|> mapToSignal { status -> Signal<Bool, Bool> in
|
||||
if let status = status, case .playing = status.status {
|
||||
return true
|
||||
if videoStartTimestamp > 0.0 && videoStartTimestamp > status.duration - 1.0 {
|
||||
return .fail(true)
|
||||
}
|
||||
return .single(true)
|
||||
} else {
|
||||
return false
|
||||
return .single(false)
|
||||
}
|
||||
}
|
||||
|> filter { playing in
|
||||
return playing
|
||||
}
|
||||
|> take(1)
|
||||
|> deliverOnMainQueue).start(completed: { [weak self] in
|
||||
|> deliverOnMainQueue).start(error: { [weak self] _ in
|
||||
if let strongSelf = self {
|
||||
if let _ = strongSelf.videoNode {
|
||||
videoNode.seek(0.0)
|
||||
Queue.mainQueue().after(0.1) {
|
||||
strongSelf.videoNode?.layer.allowsGroupOpacity = true
|
||||
strongSelf.videoNode?.alpha = 0.0
|
||||
strongSelf.videoNode?.isHidden = false
|
||||
|
||||
strongSelf.videoNode?.alpha = 1.0
|
||||
strongSelf.videoNode?.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.25, delay: 0.01)
|
||||
}
|
||||
}
|
||||
}
|
||||
}, completed: { [weak self] in
|
||||
if let strongSelf = self {
|
||||
Queue.mainQueue().after(0.1) {
|
||||
strongSelf.videoNode?.isHidden = false
|
||||
|
@ -320,6 +320,17 @@ func _internal_updatePeerPhotoInternal(postbox: Postbox, network: Network, state
|
||||
updatePeers(transaction: transaction, peers: [groupOrChannel], update: { _, updated in
|
||||
return updated
|
||||
})
|
||||
|
||||
transaction.updatePeerCachedData(peerIds: Set([peer.id]), update: { _, current in
|
||||
if let current = current as? CachedChannelData {
|
||||
return current.withUpdatedPhoto(nil)
|
||||
} else if let current = current as? CachedGroupData {
|
||||
return current.withUpdatedPhoto(nil)
|
||||
} else {
|
||||
return current
|
||||
}
|
||||
})
|
||||
|
||||
return .complete(groupOrChannel.profileImageRepresentations)
|
||||
}
|
||||
|> mapError { _ -> UploadPeerPhotoError in }
|
||||
|
@ -681,24 +681,26 @@ final class PeerInfoEditingAvatarNode: ASDisplayNode {
|
||||
return
|
||||
}
|
||||
|
||||
let canEdit = canEditPeerInfo(context: self.context, peer: peer)
|
||||
|
||||
let previousItem = self.item
|
||||
var item = item
|
||||
self.item = item
|
||||
|
||||
|
||||
let overrideImage: AvatarNodeImageOverride?
|
||||
if canEditPeerInfo(context: self.context, peer: peer), peer.profileImageRepresentations.isEmpty {
|
||||
overrideImage = .editAvatarIcon
|
||||
if canEdit, peer.profileImageRepresentations.isEmpty {
|
||||
overrideImage = .editAvatarIcon(forceNone: true)
|
||||
} else if let previousItem = previousItem, item == nil {
|
||||
if case let .image(_, representations, _, _) = previousItem, let rep = representations.last {
|
||||
self.removedPhotoResourceIds.insert(rep.representation.resource.id.stringRepresentation)
|
||||
}
|
||||
overrideImage = AvatarNodeImageOverride.none
|
||||
overrideImage = canEdit ? .editAvatarIcon(forceNone: true) : AvatarNodeImageOverride.none
|
||||
item = nil
|
||||
} else if let rep = peer.profileImageRepresentations.last, self.removedPhotoResourceIds.contains(rep.resource.id.stringRepresentation) {
|
||||
overrideImage = AvatarNodeImageOverride.none
|
||||
} else if let representation = peer.profileImageRepresentations.last, self.removedPhotoResourceIds.contains(representation.resource.id.stringRepresentation) {
|
||||
overrideImage = canEdit ? .editAvatarIcon(forceNone: true) : AvatarNodeImageOverride.none
|
||||
item = nil
|
||||
} else {
|
||||
overrideImage = nil
|
||||
overrideImage = item == nil && canEdit ? .editAvatarIcon(forceNone: true) : nil
|
||||
}
|
||||
self.avatarNode.font = avatarPlaceholderFont(size: floor(avatarSize * 16.0 / 37.0))
|
||||
self.avatarNode.setPeer(context: self.context, theme: theme, peer: EnginePeer(peer), overrideImage: overrideImage, synchronousLoad: false, displayDimensions: CGSize(width: avatarSize, height: avatarSize))
|
||||
|
@ -5323,11 +5323,21 @@ final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewDelegate
|
||||
}
|
||||
|
||||
private func editingOpenPublicLinkSetup() {
|
||||
self.controller?.push(channelVisibilityController(context: self.context, updatedPresentationData: self.controller?.updatedPresentationData, peerId: self.peerId, mode: .generic, upgradedToSupergroup: { _, f in f() }))
|
||||
var upgradedToSupergroupImpl: (() -> Void)?
|
||||
let controller = channelVisibilityController(context: self.context, updatedPresentationData: self.controller?.updatedPresentationData, peerId: self.peerId, mode: .generic, upgradedToSupergroup: { _, f in
|
||||
upgradedToSupergroupImpl?()
|
||||
f()
|
||||
})
|
||||
self.controller?.push(controller)
|
||||
|
||||
upgradedToSupergroupImpl = { [weak controller] in
|
||||
if let controller = controller, let navigationController = controller.navigationController as? NavigationController {
|
||||
rebuildControllerStackAfterSupergroupUpgrade(controller: controller, navigationController: navigationController)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func editingOpenInviteLinksSetup() {
|
||||
|
||||
self.controller?.push(inviteLinkListController(context: self.context, updatedPresentationData: self.controller?.updatedPresentationData, peerId: self.peerId, admin: nil))
|
||||
}
|
||||
|
||||
@ -5481,13 +5491,38 @@ final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewDelegate
|
||||
switch action {
|
||||
case .promote:
|
||||
if case let .channelMember(channelMember) = member {
|
||||
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 }))
|
||||
var upgradedToSupergroupImpl: (() -> Void)?
|
||||
let controller = channelAdminController(context: self.context, updatedPresentationData: self.controller?.updatedPresentationData, peerId: peer.id, adminId: member.id, initialParticipant: channelMember.participant, updated: { _ in
|
||||
}, upgradedToSupergroup: { _, f in
|
||||
upgradedToSupergroupImpl?()
|
||||
f()
|
||||
}, transferedOwnership: { _ in })
|
||||
|
||||
self.controller?.push(controller)
|
||||
|
||||
upgradedToSupergroupImpl = { [weak controller] in
|
||||
if let controller = controller, let navigationController = controller.navigationController as? NavigationController {
|
||||
rebuildControllerStackAfterSupergroupUpgrade(controller: controller, navigationController: navigationController)
|
||||
}
|
||||
}
|
||||
}
|
||||
case .restrict:
|
||||
if case let .channelMember(channelMember) = member {
|
||||
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() }))
|
||||
var upgradedToSupergroupImpl: (() -> Void)?
|
||||
|
||||
let controller = channelBannedMemberController(context: self.context, updatedPresentationData: self.controller?.updatedPresentationData, peerId: peer.id, memberId: member.id, initialParticipant: channelMember.participant, updated: { _ in
|
||||
}, upgradedToSupergroup: { _, f in
|
||||
upgradedToSupergroupImpl?()
|
||||
f()
|
||||
})
|
||||
|
||||
self.controller?.push(controller)
|
||||
|
||||
upgradedToSupergroupImpl = { [weak controller] in
|
||||
if let controller = controller, let navigationController = controller.navigationController as? NavigationController {
|
||||
rebuildControllerStackAfterSupergroupUpgrade(controller: controller, navigationController: navigationController)
|
||||
}
|
||||
}
|
||||
}
|
||||
case .remove:
|
||||
data.members?.membersContext.removeMember(memberId: member.id)
|
||||
@ -5711,25 +5746,16 @@ final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewDelegate
|
||||
}
|
||||
}
|
||||
|
||||
private func deleteAvatar(_ item: PeerInfoAvatarListItem, remove: Bool = true) {
|
||||
if self.data?.peer?.id == self.context.account.peerId {
|
||||
if case let .image(reference, _, _, _) = item {
|
||||
if let reference = reference {
|
||||
if remove {
|
||||
let _ = self.context.engine.accountData.removeAccountPhoto(reference: reference).start()
|
||||
}
|
||||
let dismiss = self.headerNode.avatarListNode.listContainerNode.deleteItem(item)
|
||||
if dismiss {
|
||||
if self.headerNode.isAvatarExpanded {
|
||||
self.headerNode.updateIsAvatarExpanded(false, transition: .immediate)
|
||||
self.updateNavigationExpansionPresentation(isExpanded: false, animated: true)
|
||||
}
|
||||
if let (layout, navigationHeight) = self.validLayout {
|
||||
self.scrollNode.view.setContentOffset(CGPoint(), animated: false)
|
||||
self.containerLayoutUpdated(layout: layout, navigationHeight: navigationHeight, transition: .immediate, additive: false)
|
||||
}
|
||||
}
|
||||
}
|
||||
private func deleteProfilePhoto(_ item: PeerInfoAvatarListItem) {
|
||||
let dismiss = self.headerNode.avatarListNode.listContainerNode.deleteItem(item)
|
||||
if dismiss {
|
||||
if self.headerNode.isAvatarExpanded {
|
||||
self.headerNode.updateIsAvatarExpanded(false, transition: .immediate)
|
||||
self.updateNavigationExpansionPresentation(isExpanded: false, animated: true)
|
||||
}
|
||||
if let (layout, navigationHeight) = self.validLayout {
|
||||
self.scrollNode.view.setContentOffset(CGPoint(), animated: false)
|
||||
self.containerLayoutUpdated(layout: layout, navigationHeight: navigationHeight, transition: .immediate, additive: false)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -6006,7 +6032,7 @@ final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewDelegate
|
||||
|
||||
let proceed = {
|
||||
if let item = item {
|
||||
strongSelf.deleteAvatar(item, remove: false)
|
||||
strongSelf.deleteProfilePhoto(item)
|
||||
}
|
||||
|
||||
let _ = strongSelf.currentAvatarMixin.swap(nil)
|
||||
|
Loading…
x
Reference in New Issue
Block a user