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 {
|
||||
var peerId: EnginePeer.Id
|
||||
var storyId: Int32?
|
||||
var messageId: EngineMessage.Id?
|
||||
public var peerId: EnginePeer.Id
|
||||
public var storyId: Int32?
|
||||
public var messageId: EngineMessage.Id?
|
||||
}
|
||||
|
||||
public var uniqueId: ItemHash {
|
||||
|
@ -2669,6 +2669,9 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
|
||||
return false
|
||||
}
|
||||
}
|
||||
if self.stickerScreen != nil {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
} else {
|
||||
return true
|
||||
|
@ -253,7 +253,7 @@ public final class PeerListItemComponent: Component {
|
||||
private var fileDisposable: Disposable?
|
||||
|
||||
private var imageButtonView: HighlightTrackingButton?
|
||||
private var imageNode: TransformImageNode?
|
||||
public private(set) var imageNode: TransformImageNode?
|
||||
|
||||
private var component: PeerListItemComponent?
|
||||
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 {
|
||||
let previousComponent = self.component
|
||||
|
||||
@ -910,6 +914,7 @@ public final class PeerListItemComponent: Component {
|
||||
|
||||
imageButtonView = HighlightTrackingButton()
|
||||
imageButtonView.addTarget(self, action: #selector(self.imageButtonPressed), for: .touchUpInside)
|
||||
imageButtonView.isEnabled = component.message == nil
|
||||
self.imageButtonView = imageButtonView
|
||||
|
||||
self.containerButton.addSubview(imageNode.view)
|
||||
|
@ -2454,6 +2454,7 @@ public final class RepostStoriesContentContextImpl: StoryContentContext {
|
||||
readGlobally: Bool
|
||||
) {
|
||||
self.context = context
|
||||
self.focusedItem = (focusedStoryId.peerId, focusedStoryId.id)
|
||||
self.viewListContext = viewListContext
|
||||
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.state
|
||||
|> 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 {
|
||||
return
|
||||
}
|
||||
@ -5214,9 +5214,14 @@ public final class StoryItemSetContainerComponent: Component {
|
||||
context: context,
|
||||
content: storyContent,
|
||||
transitionIn: transitionIn,
|
||||
transitionOut: { [weak sourceView] peerId, storyIdValue in
|
||||
if let sourceView {
|
||||
let destinationView = sourceView
|
||||
transitionOut: { [weak sourceView, weak viewListView] peerId, storyIdValue in
|
||||
var destinationView: UIView?
|
||||
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(
|
||||
destinationView: destinationView,
|
||||
transitionView: StoryContainerScreen.TransitionView(
|
||||
@ -5252,6 +5257,7 @@ public final class StoryItemSetContainerComponent: Component {
|
||||
}
|
||||
}
|
||||
)
|
||||
viewListView?.setPreviewedItem(signal: storyContainerScreen.focusedItem)
|
||||
controller.push(storyContainerScreen)
|
||||
})
|
||||
}
|
||||
|
@ -293,6 +293,9 @@ final class StoryItemSetViewListComponent: Component {
|
||||
var viewListState: EngineStoryViewListContext.State?
|
||||
var requestedLoadMoreToken: EngineStoryViewListContext.LoadMoreToken?
|
||||
|
||||
private var previewedItemDisposable: Disposable?
|
||||
private var previewedItemId: StoryId?
|
||||
|
||||
var eventCycleState: EventCycleState?
|
||||
|
||||
var totalCount: Int? {
|
||||
@ -339,6 +342,42 @@ final class StoryItemSetViewListComponent: Component {
|
||||
|
||||
deinit {
|
||||
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) {
|
||||
@ -577,7 +616,7 @@ final class StoryItemSetViewListComponent: Component {
|
||||
environment: {},
|
||||
containerSize: itemFrame.size
|
||||
)
|
||||
if let itemView = visibleItem.view {
|
||||
if let itemView = visibleItem.view as? PeerListItemComponent.View {
|
||||
var animateIn = false
|
||||
if itemView.superview == nil {
|
||||
animateIn = true
|
||||
@ -585,6 +624,8 @@ final class StoryItemSetViewListComponent: Component {
|
||||
}
|
||||
itemTransition.setFrame(view: itemView, frame: itemFrame)
|
||||
|
||||
itemView.updateIsPreviewing(isPreviewing: self.previewedItemId?.peerId == item.peer.id && self.previewedItemId?.id == item.story?.id)
|
||||
|
||||
if animateIn, synchronousLoad {
|
||||
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)
|
||||
}
|
||||
|
||||
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) {
|
||||
let offset = self.bounds.height - self.navigationBarBackground.frame.minY
|
||||
Transition.immediate.setBoundsOrigin(view: self, origin: CGPoint(x: 0.0, y: -offset))
|
||||
|
Loading…
x
Reference in New Issue
Block a user