diff --git a/submodules/TelegramCore/Sources/TelegramEngine/Messages/Stories.swift b/submodules/TelegramCore/Sources/TelegramEngine/Messages/Stories.swift index f4ed86f64b..607ce89f69 100644 --- a/submodules/TelegramCore/Sources/TelegramEngine/Messages/Stories.swift +++ b/submodules/TelegramCore/Sources/TelegramEngine/Messages/Stories.swift @@ -1182,7 +1182,7 @@ extension Stories.StoredItem { if let parsedMedia = parsedMedia { var parsedPrivacy: Stories.Item.Privacy? if let privacy = privacy { - var base: Stories.Item.Privacy.Base = .everyone + var base: Stories.Item.Privacy.Base = .nobody var additionalPeerIds: [PeerId] = [] for rule in privacy { switch rule { diff --git a/submodules/TelegramUI/Components/MediaEditorScreen/Sources/MediaEditorScreen.swift b/submodules/TelegramUI/Components/MediaEditorScreen/Sources/MediaEditorScreen.swift index f5d0683832..3c2ca37c70 100644 --- a/submodules/TelegramUI/Components/MediaEditorScreen/Sources/MediaEditorScreen.swift +++ b/submodules/TelegramUI/Components/MediaEditorScreen/Sources/MediaEditorScreen.swift @@ -57,7 +57,7 @@ final class MediaEditorScreenComponent: Component { let hasAppeared: Bool let isDismissing: Bool let bottomSafeInset: CGFloat - let mediaEditor: MediaEditor? + let mediaEditor: Signal let privacy: MediaEditorResultPrivacy let selectedEntity: DrawingEntity? let entityViewForEntity: (DrawingEntity) -> DrawingEntityView? @@ -73,7 +73,7 @@ final class MediaEditorScreenComponent: Component { hasAppeared: Bool, isDismissing: Bool, bottomSafeInset: CGFloat, - mediaEditor: MediaEditor?, + mediaEditor: Signal, privacy: MediaEditorResultPrivacy, selectedEntity: DrawingEntity?, entityViewForEntity: @escaping (DrawingEntity) -> DrawingEntityView?, @@ -183,20 +183,25 @@ final class MediaEditorScreenComponent: Component { var playerStateDisposable: Disposable? var playerState: MediaEditorPlayerState? - init(context: AccountContext, mediaEditor: MediaEditor?) { + init(context: AccountContext, mediaEditor: Signal) { self.context = context super.init() - if let mediaEditor { - self.playerStateDisposable = (mediaEditor.playerState(framesCount: 16) - |> deliverOnMainQueue).start(next: { [weak self] playerState in - if let self { - self.playerState = playerState - self.updated() - } - }) + self.playerStateDisposable = (mediaEditor + |> mapToSignal { mediaEditor in + if let mediaEditor { + return mediaEditor.playerState(framesCount: 16) + } else { + return .complete() + } } + |> deliverOnMainQueue).start(next: { [weak self] playerState in + if let self { + self.playerState = playerState + self.updated() + } + }) } deinit { @@ -824,7 +829,10 @@ final class MediaEditorScreenComponent: Component { transition.setAlpha(view: toolsButtonView, alpha: component.isDisplayingTool || component.isDismissing || component.isInteractingWithEntities ? 0.0 : 1.0) } - let mediaEditor = component.mediaEditor + var mediaEditor: MediaEditor? + if let controller = environment.controller() as? MediaEditorScreen { + mediaEditor = controller.node.mediaEditor + } var scrubberBottomInset: CGFloat = 0.0 if let playerState = state.playerState { @@ -1193,7 +1201,7 @@ final class MediaEditorScreenComponent: Component { } if let playerState = state.playerState, playerState.hasAudio { - let isVideoMuted = component.mediaEditor?.values.videoIsMuted ?? false + let isVideoMuted = mediaEditor?.values.videoIsMuted ?? false let muteContentComponent: AnyComponentWithIdentity if component.hasAppeared { @@ -1227,8 +1235,8 @@ final class MediaEditorScreenComponent: Component { transition: transition, component: AnyComponent(CameraButton( content: muteContentComponent, - action: { [weak self, weak state] in - if let self, let mediaEditor = self.component?.mediaEditor { + action: { [weak state, weak mediaEditor] in + if let mediaEditor { state?.muteDidChange = true let isMuted = !mediaEditor.values.videoIsMuted mediaEditor.setVideoIsMuted(isMuted) @@ -1556,6 +1564,7 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate fileprivate let drawingView: DrawingView fileprivate let previewView: MediaEditorPreviewView fileprivate var mediaEditor: MediaEditor? + fileprivate var mediaEditorPromise = Promise() private let stickerPickerInputData = Promise() @@ -1833,6 +1842,7 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate } }) self.mediaEditor = mediaEditor + self.mediaEditorPromise.set(.single(mediaEditor)) mediaEditor.onPlaybackAction = { [weak self] action in if let self { @@ -2578,7 +2588,7 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate hasAppeared: self.hasAppeared, isDismissing: self.isDismissing && !self.isDismissBySwipeSuppressed, bottomSafeInset: layout.intrinsicInsets.bottom, - mediaEditor: self.mediaEditor, + mediaEditor: self.mediaEditorPromise.get(), privacy: controller.state.privacy, selectedEntity: self.isDisplayingTool ? nil : self.entitiesView.selectedEntityView?.entity, entityViewForEntity: { [weak self] entity in diff --git a/submodules/TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryItemSetContainerComponent.swift b/submodules/TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryItemSetContainerComponent.swift index 7cb61eb5b6..de4029bc51 100644 --- a/submodules/TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryItemSetContainerComponent.swift +++ b/submodules/TelegramUI/Components/Stories/StoryContainerScreen/Sources/StoryItemSetContainerComponent.swift @@ -2404,7 +2404,11 @@ public final class StoryItemSetContainerComponent: Component { |> delay(0.1, queue: Queue.mainQueue()) ) } else { - return .single(.video(data.path, nil, nil, nil, PixelDimensions(width: 720, height: 1280), .bottomRight)) + let symlinkPath = data.path + ".mp4" + if fileSize(symlinkPath) == nil { + let _ = try? FileManager.default.linkItem(atPath: data.path, toPath: symlinkPath) + } + return .single(.video(symlinkPath, nil, nil, nil, PixelDimensions(width: 720, height: 1280), .bottomRight)) } }