Various fixes

This commit is contained in:
Ilya Laktyushin 2023-11-27 23:08:57 +04:00
parent 556c7cbdff
commit c07e3ea430
6 changed files with 94 additions and 50 deletions

View File

@ -952,7 +952,7 @@ private final class DemoSheetContent: CombinedComponent {
content: AnyComponent(PhoneDemoComponent(
context: component.context,
position: .top,
videoFile: configuration.videos["colors"],
videoFile: configuration.videos["peer_colors"],
decoration: .badgeStars
)),
title: strings.Premium_Colors,

View File

@ -458,7 +458,7 @@ public enum PremiumPerk: CaseIterable {
case .stories:
return "stories"
case .colors:
return "colors"
return "peer_colors"
case .wallpapers:
return "wallpapers"
}

View File

@ -713,7 +713,7 @@ public class PremiumLimitsListScreen: ViewController {
content: AnyComponent(PhoneDemoComponent(
context: context,
position: .top,
videoFile: configuration.videos["colors"],
videoFile: configuration.videos["peer_colors"],
decoration: .badgeStars
)),
title: strings.Premium_Colors,

View File

@ -420,57 +420,56 @@ final class VideoFinishPass: RenderPass {
}
var isVisible = true
if let additionalVideoRemovalStartTimestamp {
var trimRangeLowerBound: Double?
var trimRangeUpperBound: Double?
if let additionalVideoRange = self.additionalVideoRange {
if let additionalVideoOffset = self.additionalVideoOffset {
trimRangeLowerBound = additionalVideoRange.lowerBound - additionalVideoOffset
trimRangeUpperBound = additionalVideoRange.upperBound - additionalVideoOffset
} else {
trimRangeLowerBound = additionalVideoRange.lowerBound
trimRangeUpperBound = additionalVideoRange.upperBound
}
} else if let additionalVideoOffset = self.additionalVideoOffset {
trimRangeLowerBound = -additionalVideoOffset
if let additionalVideoDuration = self.additionalVideoDuration {
trimRangeUpperBound = -additionalVideoOffset + additionalVideoDuration
}
}
if (trimRangeLowerBound != nil || trimRangeUpperBound != nil), let _ = self.videoDuration {
let disappearingPosition = VideoPosition(position: foregroundPosition.position, size: foregroundPosition.size, scale: 0.01, rotation: foregroundPosition.rotation, baseScale: foregroundPosition.baseScale)
let visibilityFraction = max(0.0, min(1.0, 1.0 - (CACurrentMediaTime() - additionalVideoRemovalStartTimestamp) / videoRemovalDuration))
if visibilityFraction.isZero {
isVisible = false
}
foregroundAlpha = Float(visibilityFraction)
foregroundPosition = disappearingPosition.mixed(with: foregroundPosition, fraction: visibilityFraction)
} else {
var trimRangeLowerBound: Double?
var trimRangeUpperBound: Double?
if let additionalVideoRange = self.additionalVideoRange {
if let additionalVideoOffset = self.additionalVideoOffset {
trimRangeLowerBound = additionalVideoRange.lowerBound - additionalVideoOffset
trimRangeUpperBound = additionalVideoRange.upperBound - additionalVideoOffset
} else {
trimRangeLowerBound = additionalVideoRange.lowerBound
trimRangeUpperBound = additionalVideoRange.upperBound
}
} else if let additionalVideoOffset = self.additionalVideoOffset {
trimRangeLowerBound = -additionalVideoOffset
if let additionalVideoDuration = self.additionalVideoDuration {
trimRangeUpperBound = -additionalVideoOffset + additionalVideoDuration
}
}
let mainLowerBound = self.videoRange?.lowerBound ?? 0.0
if (trimRangeLowerBound != nil || trimRangeUpperBound != nil), let _ = self.videoDuration {
let disappearingPosition = VideoPosition(position: foregroundPosition.position, size: foregroundPosition.size, scale: 0.01, rotation: foregroundPosition.rotation, baseScale: foregroundPosition.baseScale)
let mainLowerBound = self.videoRange?.lowerBound ?? 0.0
if let trimRangeLowerBound, trimRangeLowerBound > mainLowerBound + 0.1, timestamp < trimRangeLowerBound + apperanceDuration {
let visibilityFraction = max(0.0, min(1.0, (timestamp - trimRangeLowerBound) / apperanceDuration))
if visibilityFraction.isZero {
isVisible = false
}
foregroundAlpha = Float(visibilityFraction)
foregroundPosition = disappearingPosition.mixed(with: foregroundPosition, fraction: visibilityFraction)
} else if let trimRangeUpperBound, timestamp > trimRangeUpperBound - apperanceDuration {
let visibilityFraction = 1.0 - max(0.0, min(1.0, (timestamp - trimRangeUpperBound) / apperanceDuration))
if visibilityFraction.isZero {
isVisible = false
}
foregroundAlpha = Float(visibilityFraction)
foregroundPosition = disappearingPosition.mixed(with: foregroundPosition, fraction: visibilityFraction)
if let trimRangeLowerBound, trimRangeLowerBound > mainLowerBound + 0.1, timestamp < trimRangeLowerBound + apperanceDuration {
let visibilityFraction = max(0.0, min(1.0, (timestamp - trimRangeLowerBound) / apperanceDuration))
if visibilityFraction.isZero {
isVisible = false
}
foregroundAlpha = Float(visibilityFraction)
foregroundPosition = disappearingPosition.mixed(with: foregroundPosition, fraction: visibilityFraction)
} else if let trimRangeUpperBound, timestamp > trimRangeUpperBound - apperanceDuration {
let visibilityFraction = 1.0 - max(0.0, min(1.0, (timestamp - trimRangeUpperBound) / apperanceDuration))
if visibilityFraction.isZero {
isVisible = false
}
foregroundAlpha = Float(visibilityFraction)
foregroundPosition = disappearingPosition.mixed(with: foregroundPosition, fraction: visibilityFraction)
}
}
if isVisible {
if let additionalVideoRemovalStartTimestamp {
let disappearingPosition = VideoPosition(position: foregroundPosition.position, size: foregroundPosition.size, scale: 0.01, rotation: foregroundPosition.rotation, baseScale: foregroundPosition.baseScale)
let visibilityFraction = max(0.0, min(1.0, 1.0 - (CACurrentMediaTime() - additionalVideoRemovalStartTimestamp) / videoRemovalDuration))
if visibilityFraction.isZero {
isVisible = false
}
foregroundAlpha = Float(visibilityFraction)
foregroundPosition = disappearingPosition.mixed(with: foregroundPosition, fraction: visibilityFraction)
}
foregroundVideoState = VideoState(texture: foregroundTexture, textureRotation: foregroundTextureRotation, position: foregroundPosition, roundness: 1.0, alpha: foregroundAlpha)
}
}

View File

@ -1124,15 +1124,16 @@ private final class StoryContainerScreenComponent: Component {
}
}
private var previousBackNavigationTime: Double?
private func navigate(direction: StoryItemSetContainerComponent.NavigationDirection) {
guard let component = self.component, let environment = self.environment else {
guard let component = self.component, let environment = self.environment, let controller = environment.controller() as? StoryContainerScreen else {
return
}
if let stateValue = self.stateValue, let slice = stateValue.slice {
if case .next = direction, slice.nextItemId == nil, (slice.item.position == nil || slice.item.position == slice.totalCount - 1) {
if stateValue.nextSlice == nil {
environment.controller()?.dismiss()
controller.dismiss()
} else {
self.beginHorizontalPan(translation: CGPoint())
self.updateHorizontalPan(translation: CGPoint())
@ -1142,7 +1143,17 @@ private final class StoryContainerScreenComponent: Component {
if stateValue.previousSlice == nil {
if let itemSetView = self.visibleItemSetViews[slice.peer.id] {
if let componentView = itemSetView.view.view as? StoryItemSetContainerComponent.View {
componentView.rewindCurrentItem()
if let customBackAction = controller.customBackAction {
let currentTime = CACurrentMediaTime()
if let previousBackNavigationTime = self.previousBackNavigationTime, currentTime - previousBackNavigationTime < 1.0 {
customBackAction()
} else {
self.previousBackNavigationTime = CACurrentMediaTime()
componentView.rewindCurrentItem()
}
} else {
componentView.rewindCurrentItem()
}
}
}
} else {
@ -1943,6 +1954,8 @@ public class StoryContainerScreen: ViewControllerComponentContainer {
return self.focusedItemPromise.get()
}
public var customBackAction: (() -> Void)?
public init(
context: AccountContext,
content: StoryContentContext,

View File

@ -4218,13 +4218,45 @@ public final class StoryItemSetContainerComponent: Component {
return component.controller()
},
openStory: { [weak self] peer, story in
guard let self else {
guard let self, let component = self.component else {
return
}
let context = component.context
let peerId = component.slice.peer.id
let currentResult: ResolvedUrl = .story(peerId: peerId, id: component.slice.item.storyItem.id)
self.sendMessageContext.openResolved(view: self, result: .story(peerId: peer.id, id: story.id), completion: { [weak self] in
guard let self, let controller = self.component?.controller() as? StoryContainerScreen else {
return
}
if let nextController = controller.navigationController?.viewControllers.last as? StoryContainerScreen {
nextController.customBackAction = { [weak nextController] in
context.sharedContext.openResolvedUrl(
currentResult,
context: context,
urlContext: .generic,
navigationController: nextController?.navigationController as? NavigationController,
forceExternal: false,
openPeer: { _, _ in
},
sendFile: nil,
sendSticker: nil,
requestMessageActionUrlAuth: nil,
joinVoiceChat: nil,
present: { _, _ in
},
dismissInput: {
},
contentContext: nil,
progress: nil,
completion: { [weak nextController] in
Queue.mainQueue().after(0.5) {
nextController?.dismissWithoutTransitionOut()
}
}
)
}
}
Queue.mainQueue().after(0.5) {
controller.dismissWithoutTransitionOut()
}