This commit is contained in:
Ali 2023-07-21 21:14:10 +04:00
parent a11401b352
commit 0564463540
4 changed files with 87 additions and 5 deletions

View File

@ -790,6 +790,44 @@ public final class PeerStoryListContext {
finalUpdatedState = updatedState
}
}
} else {
if case let .item(item) = item {
if let media = item.media {
var updatedState = finalUpdatedState ?? self.stateValue
updatedState.items[index] = EngineStoryItem(
id: item.id,
timestamp: item.timestamp,
expirationTimestamp: item.expirationTimestamp,
media: EngineMedia(media),
text: item.text,
entities: item.entities,
views: item.views.flatMap { views in
return EngineStoryItem.Views(
seenCount: views.seenCount,
seenPeers: views.seenPeerIds.compactMap { id -> EnginePeer? in
return peers[id].flatMap(EnginePeer.init)
}
)
},
privacy: item.privacy.flatMap(EngineStoryPrivacy.init),
isPinned: item.isPinned,
isExpired: item.isExpired,
isPublic: item.isPublic,
isPending: false,
isCloseFriends: item.isCloseFriends,
isContacts: item.isContacts,
isSelectedContacts: item.isSelectedContacts,
isForwardingDisabled: item.isForwardingDisabled,
isEdited: item.isEdited
)
finalUpdatedState = updatedState
} else {
var updatedState = finalUpdatedState ?? self.stateValue
updatedState.items.remove(at: index)
updatedState.totalCount = max(0, updatedState.totalCount - 1)
finalUpdatedState = updatedState
}
}
}
} else {
if !self.isArchived {
@ -830,6 +868,42 @@ public final class PeerStoryListContext {
}
}
}
} else {
if case let .item(item) = item {
if let media = item.media {
var updatedState = finalUpdatedState ?? self.stateValue
updatedState.items.append(EngineStoryItem(
id: item.id,
timestamp: item.timestamp,
expirationTimestamp: item.expirationTimestamp,
media: EngineMedia(media),
text: item.text,
entities: item.entities,
views: item.views.flatMap { views in
return EngineStoryItem.Views(
seenCount: views.seenCount,
seenPeers: views.seenPeerIds.compactMap { id -> EnginePeer? in
return peers[id].flatMap(EnginePeer.init)
}
)
},
privacy: item.privacy.flatMap(EngineStoryPrivacy.init),
isPinned: item.isPinned,
isExpired: item.isExpired,
isPublic: item.isPublic,
isPending: false,
isCloseFriends: item.isCloseFriends,
isContacts: item.isContacts,
isSelectedContacts: item.isSelectedContacts,
isForwardingDisabled: item.isForwardingDisabled,
isEdited: item.isEdited
))
updatedState.items.sort(by: { lhs, rhs in
return lhs.timestamp > rhs.timestamp
})
finalUpdatedState = updatedState
}
}
}
}
}

View File

@ -1850,7 +1850,12 @@ public final class PeerInfoStoryPaneNode: ASDisplayNode, PeerInfoPaneNode, UIScr
let isSelecting = self._itemInteraction?.selectedIds != nil
self.itemGrid.pinchEnabled = !isSelecting
self.view.disablesInteractiveTransitionGestureRecognizer = isSelecting
var enableDismissGesture = true
if let items = self.items, items.items.isEmpty {
} else if isSelecting {
enableDismissGesture = false
}
self.view.disablesInteractiveTransitionGestureRecognizer = enableDismissGesture
if isSelecting {
if self.gridSelectionGesture == nil {

View File

@ -677,12 +677,13 @@ public final class StoryPeerListComponent: Component {
let calculateOverscrollEffectFraction: (CGFloat, CGFloat) -> CGFloat = { maxFraction, bounceFraction in
var expandEffectFraction: CGFloat = max(0.0, min(1.0, maxFraction))
expandEffectFraction = 1.0 - pow(1.0 - expandEffectFraction, 2.0)
expandEffectFraction = pow(expandEffectFraction, 1.0)
let overscrollEffectFraction = max(0.0, maxFraction - 1.0)
expandEffectFraction += overscrollEffectFraction * 0.1
expandEffectFraction += overscrollEffectFraction * 0.12
expandEffectFraction += pow(bounceFraction, 1.4) * 0.2 * maxFraction
let reverseBounceFraction = 1.0 - pow(1.0 - bounceFraction, 2.4)
expandEffectFraction += reverseBounceFraction * 0.09 * maxFraction
return expandEffectFraction
}
@ -1269,6 +1270,8 @@ public final class StoryPeerListComponent: Component {
titleContentOffset = titleMinContentOffset.interpolate(to: ((itemLayout.containerSize.width - collapsedState.titleWidth) * 0.5) as CGFloat, amount: min(1.0, collapsedState.maxFraction) * (1.0 - collapsedState.activityFraction))
}
titleContentOffset += -expandBoundsFraction * 4.0
var titleIndicatorSize: CGSize?
if collapsedState.activityFraction != 0.0 {
let collapsedItemMinX = collapsedContentOrigin - collapsedItemWidth * 0.5

View File

@ -113,7 +113,7 @@ private func calculateMergingCircleShape(center: CGPoint, leftCenter: CGPoint?,
}
var startAngle = segmentSpacingAngle * 0.5 - CGFloat.pi * 0.5 + CGFloat(i) * (segmentSpacingAngle + segmentAngle)
startAngle += -1.0 * (1.0 - rotationFraction) * CGFloat.pi * 2.0 * 0.5
startAngle += -1.0 * (1.0 - rotationFraction) * CGFloat.pi * 2.0 * 0.25
let endAngle = startAngle + segmentAngle
path.move(to: CGPoint(x: center.x + cos(startAngle) * radius, y: center.y + sin(startAngle) * radius))