Fix story link handling

This commit is contained in:
Ali 2023-07-05 16:32:49 +02:00
parent 42ff2acdbc
commit 98263431a4
3 changed files with 36 additions and 17 deletions

View File

@ -805,23 +805,39 @@ func openResolvedUrlImpl(_ resolvedUrl: ResolvedUrl, context: AccountContext, ur
dismissInput() dismissInput()
} }
case let .story(peerId, id): case let .story(peerId, id):
let storyContent = SingleStoryContentContextImpl(context: context, storyId: StoryId(peerId: peerId, id: id)) let _ = (context.account.postbox.transaction { transaction -> Bool in
let _ = (storyContent.state if let value = transaction.getStory(id: StoryId(peerId: peerId, id: id)), !value.data.isEmpty {
|> take(1) return true
|> deliverOnMainQueue).start(next: { [weak navigationController] _ in } else {
let transitionIn: StoryContainerScreen.TransitionIn? = nil 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
let storyContainerScreen = StoryContainerScreen( let storyContainerScreen = StoryContainerScreen(
context: context, context: context,
content: storyContent, content: storyContent,
transitionIn: transitionIn, transitionIn: transitionIn,
transitionOut: { _, _ in transitionOut: { _, _ in
let transitionOut: StoryContainerScreen.TransitionOut? = nil let transitionOut: StoryContainerScreen.TransitionOut? = nil
return transitionOut return transitionOut
} }
) )
navigationController?.pushViewController(storyContainerScreen) 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)
}
}) })
} }
} }

View File

@ -709,7 +709,10 @@ private func resolveInternalUrl(context: AccountContext, url: ParsedInternalUrl)
case let .voiceChat(invite): case let .voiceChat(invite):
return .single(.joinVoiceChat(peer.id, invite)) return .single(.joinVoiceChat(peer.id, invite))
case let .story(id): 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 { } else {
return .single(.peer(peer, .chat(textInputState: nil, subject: nil, peekData: nil))) return .single(.peer(peer, .chat(textInputState: nil, subject: nil, peekData: nil)))