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
37dc9a3b6f
commit
d476aa27e8
@ -178,9 +178,9 @@ public final class EngineStoryViewListContext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public struct ItemHash: Hashable {
|
public struct ItemHash: Hashable {
|
||||||
var peerId: EnginePeer.Id
|
public var peerId: EnginePeer.Id
|
||||||
var storyId: Int32?
|
public var storyId: Int32?
|
||||||
var messageId: EngineMessage.Id?
|
public var messageId: EngineMessage.Id?
|
||||||
}
|
}
|
||||||
|
|
||||||
public var uniqueId: ItemHash {
|
public var uniqueId: ItemHash {
|
||||||
|
@ -2669,6 +2669,9 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if self.stickerScreen != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
return true
|
return true
|
||||||
} else {
|
} else {
|
||||||
return true
|
return true
|
||||||
|
@ -253,7 +253,7 @@ public final class PeerListItemComponent: Component {
|
|||||||
private var fileDisposable: Disposable?
|
private var fileDisposable: Disposable?
|
||||||
|
|
||||||
private var imageButtonView: HighlightTrackingButton?
|
private var imageButtonView: HighlightTrackingButton?
|
||||||
private var imageNode: TransformImageNode?
|
public private(set) var imageNode: TransformImageNode?
|
||||||
|
|
||||||
private var component: PeerListItemComponent?
|
private var component: PeerListItemComponent?
|
||||||
private weak var state: EmptyComponentState?
|
private weak var state: EmptyComponentState?
|
||||||
@ -410,6 +410,10 @@ public final class PeerListItemComponent: Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public func updateIsPreviewing(isPreviewing: Bool) {
|
||||||
|
self.imageNode?.isHidden = isPreviewing
|
||||||
|
}
|
||||||
|
|
||||||
func update(component: PeerListItemComponent, availableSize: CGSize, state: EmptyComponentState, environment: Environment<Empty>, transition: Transition) -> CGSize {
|
func update(component: PeerListItemComponent, availableSize: CGSize, state: EmptyComponentState, environment: Environment<Empty>, transition: Transition) -> CGSize {
|
||||||
let previousComponent = self.component
|
let previousComponent = self.component
|
||||||
|
|
||||||
@ -910,6 +914,7 @@ public final class PeerListItemComponent: Component {
|
|||||||
|
|
||||||
imageButtonView = HighlightTrackingButton()
|
imageButtonView = HighlightTrackingButton()
|
||||||
imageButtonView.addTarget(self, action: #selector(self.imageButtonPressed), for: .touchUpInside)
|
imageButtonView.addTarget(self, action: #selector(self.imageButtonPressed), for: .touchUpInside)
|
||||||
|
imageButtonView.isEnabled = component.message == nil
|
||||||
self.imageButtonView = imageButtonView
|
self.imageButtonView = imageButtonView
|
||||||
|
|
||||||
self.containerButton.addSubview(imageNode.view)
|
self.containerButton.addSubview(imageNode.view)
|
||||||
|
@ -2454,6 +2454,7 @@ public final class RepostStoriesContentContextImpl: StoryContentContext {
|
|||||||
readGlobally: Bool
|
readGlobally: Bool
|
||||||
) {
|
) {
|
||||||
self.context = context
|
self.context = context
|
||||||
|
self.focusedItem = (focusedStoryId.peerId, focusedStoryId.id)
|
||||||
self.viewListContext = viewListContext
|
self.viewListContext = viewListContext
|
||||||
self.readGlobally = readGlobally
|
self.readGlobally = readGlobally
|
||||||
|
|
||||||
|
@ -5199,7 +5199,7 @@ public final class StoryItemSetContainerComponent: Component {
|
|||||||
let storyContent = RepostStoriesContentContextImpl(context: context, focusedStoryId: StoryId(peerId: peer.id, id: id), viewListContext: viewListContext, readGlobally: false)
|
let storyContent = RepostStoriesContentContextImpl(context: context, focusedStoryId: StoryId(peerId: peer.id, id: id), viewListContext: viewListContext, readGlobally: false)
|
||||||
let _ = (storyContent.state
|
let _ = (storyContent.state
|
||||||
|> take(1)
|
|> take(1)
|
||||||
|> deliverOnMainQueue).startStandalone(next: { [weak controller, weak sourceView] _ in
|
|> deliverOnMainQueue).startStandalone(next: { [weak controller, weak viewListView, weak sourceView] _ in
|
||||||
guard let controller, let sourceView else {
|
guard let controller, let sourceView else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -5214,9 +5214,14 @@ public final class StoryItemSetContainerComponent: Component {
|
|||||||
context: context,
|
context: context,
|
||||||
content: storyContent,
|
content: storyContent,
|
||||||
transitionIn: transitionIn,
|
transitionIn: transitionIn,
|
||||||
transitionOut: { [weak sourceView] peerId, storyIdValue in
|
transitionOut: { [weak sourceView, weak viewListView] peerId, storyIdValue in
|
||||||
if let sourceView {
|
var destinationView: UIView?
|
||||||
let destinationView = sourceView
|
if let view = viewListView?.sourceView(storyId: StoryId(peerId: peerId, id: storyIdValue as? Int32 ?? 0)) {
|
||||||
|
destinationView = view
|
||||||
|
} else {
|
||||||
|
destinationView = sourceView
|
||||||
|
}
|
||||||
|
if let destinationView {
|
||||||
return StoryContainerScreen.TransitionOut(
|
return StoryContainerScreen.TransitionOut(
|
||||||
destinationView: destinationView,
|
destinationView: destinationView,
|
||||||
transitionView: StoryContainerScreen.TransitionView(
|
transitionView: StoryContainerScreen.TransitionView(
|
||||||
@ -5252,6 +5257,7 @@ public final class StoryItemSetContainerComponent: Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
viewListView?.setPreviewedItem(signal: storyContainerScreen.focusedItem)
|
||||||
controller.push(storyContainerScreen)
|
controller.push(storyContainerScreen)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -293,6 +293,9 @@ final class StoryItemSetViewListComponent: Component {
|
|||||||
var viewListState: EngineStoryViewListContext.State?
|
var viewListState: EngineStoryViewListContext.State?
|
||||||
var requestedLoadMoreToken: EngineStoryViewListContext.LoadMoreToken?
|
var requestedLoadMoreToken: EngineStoryViewListContext.LoadMoreToken?
|
||||||
|
|
||||||
|
private var previewedItemDisposable: Disposable?
|
||||||
|
private var previewedItemId: StoryId?
|
||||||
|
|
||||||
var eventCycleState: EventCycleState?
|
var eventCycleState: EventCycleState?
|
||||||
|
|
||||||
var totalCount: Int? {
|
var totalCount: Int? {
|
||||||
@ -339,6 +342,42 @@ final class StoryItemSetViewListComponent: Component {
|
|||||||
|
|
||||||
deinit {
|
deinit {
|
||||||
self.viewListDisposable?.dispose()
|
self.viewListDisposable?.dispose()
|
||||||
|
self.previewedItemDisposable?.dispose()
|
||||||
|
}
|
||||||
|
|
||||||
|
func setPreviewedItem(signal: Signal<StoryId?, NoError>) {
|
||||||
|
self.previewedItemDisposable?.dispose()
|
||||||
|
self.previewedItemDisposable = (signal |> distinctUntilChanged |> deliverOnMainQueue).start(next: { [weak self] previewedItemId in
|
||||||
|
guard let self else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
self.previewedItemId = previewedItemId
|
||||||
|
|
||||||
|
for (itemId, visibleItem) in self.visibleItems {
|
||||||
|
if let itemView = visibleItem.view as? PeerListItemComponent.View {
|
||||||
|
let isPreviewing = itemId.peerId == previewedItemId?.peerId && itemId.storyId == previewedItemId?.id
|
||||||
|
itemView.updateIsPreviewing(isPreviewing: isPreviewing)
|
||||||
|
|
||||||
|
if isPreviewing {
|
||||||
|
let itemFrame = itemView.frame.offsetBy(dx: 0.0, dy: self.scrollView.bounds.minY)
|
||||||
|
if !self.scrollView.bounds.intersects(itemFrame.insetBy(dx: 0.0, dy: 20.0)) {
|
||||||
|
self.scrollView.scrollRectToVisible(itemFrame.insetBy(dx: 0.0, dy: -40.0), animated: false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func sourceView(storyId: StoryId) -> UIView? {
|
||||||
|
for (itemId, visibleItem) in self.visibleItems {
|
||||||
|
if let itemView = visibleItem.view as? PeerListItemComponent.View {
|
||||||
|
if itemId.peerId == storyId.peerId && itemId.storyId == storyId.id {
|
||||||
|
return itemView.imageNode?.view
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func scrollViewDidScroll(_ scrollView: UIScrollView) {
|
func scrollViewDidScroll(_ scrollView: UIScrollView) {
|
||||||
@ -577,7 +616,7 @@ final class StoryItemSetViewListComponent: Component {
|
|||||||
environment: {},
|
environment: {},
|
||||||
containerSize: itemFrame.size
|
containerSize: itemFrame.size
|
||||||
)
|
)
|
||||||
if let itemView = visibleItem.view {
|
if let itemView = visibleItem.view as? PeerListItemComponent.View {
|
||||||
var animateIn = false
|
var animateIn = false
|
||||||
if itemView.superview == nil {
|
if itemView.superview == nil {
|
||||||
animateIn = true
|
animateIn = true
|
||||||
@ -585,6 +624,8 @@ final class StoryItemSetViewListComponent: Component {
|
|||||||
}
|
}
|
||||||
itemTransition.setFrame(view: itemView, frame: itemFrame)
|
itemTransition.setFrame(view: itemView, frame: itemFrame)
|
||||||
|
|
||||||
|
itemView.updateIsPreviewing(isPreviewing: self.previewedItemId?.peerId == item.peer.id && self.previewedItemId?.id == item.story?.id)
|
||||||
|
|
||||||
if animateIn, synchronousLoad {
|
if animateIn, synchronousLoad {
|
||||||
itemView.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2)
|
itemView.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2)
|
||||||
}
|
}
|
||||||
@ -1310,6 +1351,14 @@ final class StoryItemSetViewListComponent: Component {
|
|||||||
return super.hitTest(point, with: event)
|
return super.hitTest(point, with: event)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public func setPreviewedItem(signal: Signal<StoryId?, NoError>) {
|
||||||
|
self.currentContentView?.setPreviewedItem(signal: signal)
|
||||||
|
}
|
||||||
|
|
||||||
|
public func sourceView(storyId: StoryId) -> UIView? {
|
||||||
|
self.currentContentView?.sourceView(storyId: storyId)
|
||||||
|
}
|
||||||
|
|
||||||
func animateIn(transition: Transition) {
|
func animateIn(transition: Transition) {
|
||||||
let offset = self.bounds.height - self.navigationBarBackground.frame.minY
|
let offset = self.bounds.height - self.navigationBarBackground.frame.minY
|
||||||
Transition.immediate.setBoundsOrigin(view: self, origin: CGPoint(x: 0.0, y: -offset))
|
Transition.immediate.setBoundsOrigin(view: self, origin: CGPoint(x: 0.0, y: -offset))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user