From 98263431a4a810af075e5ad71324e55b7d67ea99 Mon Sep 17 00:00:00 2001 From: Ali <> Date: Wed, 5 Jul 2023 16:32:49 +0200 Subject: [PATCH] Fix story link handling --- .../Resources/Animations/story_expired.tgs | Bin 0 -> 2847 bytes .../TelegramUI/Sources/OpenResolvedUrl.swift | 48 ++++++++++++------ .../UrlHandling/Sources/UrlHandling.swift | 5 +- 3 files changed, 36 insertions(+), 17 deletions(-) create mode 100644 submodules/TelegramUI/Resources/Animations/story_expired.tgs diff --git a/submodules/TelegramUI/Resources/Animations/story_expired.tgs b/submodules/TelegramUI/Resources/Animations/story_expired.tgs new file mode 100644 index 0000000000000000000000000000000000000000..7645521dfcf617a145951b93f783941d30b5475f GIT binary patch literal 2847 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 take(1) - |> deliverOnMainQueue).start(next: { [weak navigationController] _ in - let transitionIn: StoryContainerScreen.TransitionIn? = nil - - let storyContainerScreen = StoryContainerScreen( - context: context, - content: storyContent, - transitionIn: transitionIn, - transitionOut: { _, _ in - let transitionOut: StoryContainerScreen.TransitionOut? = nil + let _ = (context.account.postbox.transaction { transaction -> Bool in + if let value = transaction.getStory(id: StoryId(peerId: peerId, id: id)), !value.data.isEmpty { + return true + } else { + return false + } + } + |> deliverOnMainQueue).start(next: { exists in + if exists { + let storyContent = SingleStoryContentContextImpl(context: context, storyId: StoryId(peerId: peerId, id: id)) + let _ = (storyContent.state + |> take(1) + |> deliverOnMainQueue).start(next: { [weak navigationController] _ in + let transitionIn: StoryContainerScreen.TransitionIn? = nil - return transitionOut - } - ) - navigationController?.pushViewController(storyContainerScreen) + let storyContainerScreen = StoryContainerScreen( + context: context, + content: storyContent, + transitionIn: transitionIn, + transitionOut: { _, _ in + let transitionOut: StoryContainerScreen.TransitionOut? = nil + + return transitionOut + } + ) + navigationController?.pushViewController(storyContainerScreen) + }) + } else { + //TODO:localize + present(UndoOverlayController(presentationData: presentationData, content: .universal(animation: "story_expired", scale: 0.066, colors: [:], title: nil, text: "This story does not exist", customUndoText: nil, timeout: nil), elevatedLayout: true, animateInAsReplacement: false, action: { _ in + return true + }), nil) + } }) } } diff --git a/submodules/UrlHandling/Sources/UrlHandling.swift b/submodules/UrlHandling/Sources/UrlHandling.swift index 5423270d01..26f61bc68e 100644 --- a/submodules/UrlHandling/Sources/UrlHandling.swift +++ b/submodules/UrlHandling/Sources/UrlHandling.swift @@ -709,7 +709,10 @@ private func resolveInternalUrl(context: AccountContext, url: ParsedInternalUrl) case let .voiceChat(invite): return .single(.joinVoiceChat(peer.id, invite)) case let .story(id): - return .single(.story(peerId: peer.id, id: id)) + return context.engine.messages.refreshStories(peerId: peer.id, ids: [id]) + |> map { _ -> ResolvedUrl? in + } + |> then(.single(.story(peerId: peer.id, id: id))) } } else { return .single(.peer(peer, .chat(textInputState: nil, subject: nil, peekData: nil)))