Fix audio handling

This commit is contained in:
Ali 2023-07-04 13:13:29 +02:00
parent 624d0d49d5
commit 3ade624e87
3 changed files with 18 additions and 14 deletions

View File

@ -1005,7 +1005,7 @@ private final class StoryContainerScreenComponent: Component {
itemSetContainerInsets.bottom = floorToScreenPixels((availableSize.height - itemSetContainerSize.height) / 2.0)
itemSetContainerSafeInsets.bottom = 0.0
}
let _ = itemSetView.view.update(
transition: itemSetTransition,
component: AnyComponent(StoryItemSetContainerComponent(
@ -1023,7 +1023,7 @@ private final class StoryContainerScreenComponent: Component {
deviceMetrics: environment.deviceMetrics,
isProgressPaused: isProgressPaused || i != focusedIndex,
isAudioMuted: self.audioMode == .off || (self.audioMode == .ambient && !self.isMuteSwitchOn),
useAmbientMode: self.audioMode == .ambient,
audioMode: self.audioMode,
hideUI: (i == focusedIndex && (self.itemSetPanState?.didBegin == false || self.itemSetPinchState != nil)),
visibilityFraction: 1.0 - abs(panFraction + cubeAdditionalRotationFraction),
isPanning: self.itemSetPanState?.didBegin == true,

View File

@ -29,13 +29,13 @@ final class StoryItemContentComponent: Component {
let context: AccountContext
let peer: EnginePeer
let item: EngineStoryItem
let useAmbientMode: Bool
let audioMode: StoryContentItem.AudioMode
init(context: AccountContext, peer: EnginePeer, item: EngineStoryItem, useAmbientMode: Bool) {
init(context: AccountContext, peer: EnginePeer, item: EngineStoryItem, audioMode: StoryContentItem.AudioMode) {
self.context = context
self.peer = peer
self.item = item
self.useAmbientMode = useAmbientMode
self.audioMode = audioMode
}
static func ==(lhs: StoryItemContentComponent, rhs: StoryItemContentComponent) -> Bool {
@ -138,8 +138,8 @@ final class StoryItemContentComponent: Component {
imageReference: nil,
streamVideo: .story,
loopVideo: true,
enableSound: true,
beginWithAmbientSound: component.useAmbientMode,
enableSound: component.audioMode != .off,
beginWithAmbientSound: component.audioMode == .ambient,
mixWithOthers: true,
useLargeThumbnail: false,
autoFetchFullSizeThumbnail: false,
@ -169,12 +169,16 @@ final class StoryItemContentComponent: Component {
self.environment?.presentationProgressUpdated(1.0, true)
}
videoNode.ownsContentNodeUpdated = { [weak self] value in
guard let self else {
guard let self, let component = self.component else {
return
}
if value {
self.videoNode?.seek(0.0)
self.videoNode?.playOnceWithSound(playAndRecord: false, actionAtEnd: .stop)
if component.audioMode != .off {
self.videoNode?.playOnceWithSound(playAndRecord: false, actionAtEnd: .stop)
} else {
self.videoNode?.play()
}
}
}
videoNode.canAttachContent = true

View File

@ -86,7 +86,7 @@ public final class StoryItemSetContainerComponent: Component {
public let deviceMetrics: DeviceMetrics
public let isProgressPaused: Bool
public let isAudioMuted: Bool
public let useAmbientMode: Bool
public let audioMode: StoryContentItem.AudioMode
public let hideUI: Bool
public let visibilityFraction: CGFloat
public let isPanning: Bool
@ -118,7 +118,7 @@ public final class StoryItemSetContainerComponent: Component {
deviceMetrics: DeviceMetrics,
isProgressPaused: Bool,
isAudioMuted: Bool,
useAmbientMode: Bool,
audioMode: StoryContentItem.AudioMode,
hideUI: Bool,
visibilityFraction: CGFloat,
isPanning: Bool,
@ -149,7 +149,7 @@ public final class StoryItemSetContainerComponent: Component {
self.deviceMetrics = deviceMetrics
self.isProgressPaused = isProgressPaused
self.isAudioMuted = isAudioMuted
self.useAmbientMode = useAmbientMode
self.audioMode = audioMode
self.hideUI = hideUI
self.visibilityFraction = visibilityFraction
self.isPanning = isPanning
@ -201,7 +201,7 @@ public final class StoryItemSetContainerComponent: Component {
if lhs.isAudioMuted != rhs.isAudioMuted {
return false
}
if lhs.useAmbientMode != rhs.useAmbientMode {
if lhs.audioMode != rhs.audioMode {
return false
}
if lhs.hideUI != rhs.hideUI {
@ -1047,7 +1047,7 @@ public final class StoryItemSetContainerComponent: Component {
context: component.context,
peer: component.slice.peer,
item: item.storyItem,
useAmbientMode: component.useAmbientMode
audioMode: component.audioMode
)),
environment: {
itemEnvironment