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
zcmV+)3*hu0iwFP!000021MOQ|ZyUK4{wu*ea|qrqe%u1>OMw>H1^Qt4!HJ!X8{Z&l
zvke0O_kQP)RA!`+ZN;P5Ed)c-nB<&8@_gsU%eQXz`?5RHqWjXFbY6OCI?;VxbSFWH
z?&`if!OtCjJevGTKSp$)>hJ9h-udP3=KVX1mo6?Yxb^vRdAS13(=*XspMSkv(DS!-
z_0{bK^ILuGPF$t&*Q>=PDBPbfE^k-e2}my&+~_mj{njn$>%0^&tt%?{4<40F)`HL1
z_45O|`@L3&xUQvV)ULP})TiDh=@ZIcOwd$w@m0J*}lnm8P~)hFOS4nSE|ljlq9$
z4!XulyQb@{%t
hNyGV%BUddoPoDNH^9v(bPxQLO;ZS%1}TJQG1cg;M;*P$s6DT!
zRRy)qVi?8g;_#P_YsC=XlS}VaHr6yGT;JvV=7g34$
zYJCWAVkYt%mwJ887X
zV_%-g_aWew!3KdJ?*lhedw-vCzraxk88c6!=Bj?pGQu62A0WNK<_ocL*0GO`Nd|{H
zr;wqzAUpy-O=BP@oKp}6gNl&~P(`D(2+nwv4)4N|BMd||K=3(rMoXWaz>i`gHY0Ek
zmYZm8xgDDnS6YG^$=ALfRGA=U^ykycm&0s4><
zgF=T;L7@dYs7;s&85TmcA|cdtELDa0Sh$GMtZ_kOcgipa3?!fmDNOGJX!$7=sFG$PBQY%14HS4Uv!dK9ORvoo
z3Xp+lSd$D}fnLo7g8ZmufVo1-3OU(o84iR5V`Oxe_*xQ?fesqL!OG12m>UiTCN}{U
zAy5np9T^2>t4$yi0(>N&{@-0iO9PH(;c2swybPrD&dB7Zagb>KfMt`>
zH2e>Fhn9!EA`TFcKqbIAcymxBU{qcUXq=6%S_GvWL!pS3T9B%xs+|r(QveI>miAl#
zIp+u{SOPC20S`zcH7%(Xe~=N>z#;(NDsh|u6QoQDJ|Y#Eh<9LkKvik`EEj=^Mo9wx
zQaqTCXxZ>Fi+I{31dl4mzRQ*fbK4|9(?O(1)5H#Os*^
zXoe3M7w~^z9B2v=VBSl}uMo5aBcS!L$JHPh3JH+MD3&tP0|OfZ{R_F}4F*vK?H;wf
z0ni|IM>G*jM1awNO>bctLIDCsreMlp^HZ_@kTC+!f;$Ee3ak;q5X`6m8I>if2vKW(
zgTSFAJTaTY`G>YFbc_?8kv=5ef9X9aBo3m8r3TV;$h@w(34_5R=TWnt;qD=GC{+&!9Cj=W
z01i3x`jIl`2fRJGfRxyLn`v(k%?4j6KM-lg5~X!(K0EQx^VO$!x)a@}i|*v(`StRW
zrA;f&AFn%pWw>bxYV@~WEMM1XrBGImUA({H(t0-I`g#Zb6)kn&kLj0<)y=I^HQpU<
zeNk?s+J6eBVcOR?fQU
za@NI?2P|vs+>!=7I=*7Y$5;M!_2Kj2_=?|ge5LfT_YYf>)>Fvm0P)_RRVBq>V)P~x>!
zYL^1+op-b`PwGwU!chS75m;XOAphYl8f05^R)ZLX8eDnka&~oQl4+?=5!*9#
zV0F_yxhwzJk(XAtvA=HCrw8gf8(b9Y3NsYew%-&wpJl?mk~0HGQnxm)9S9|r_D9JdT=M2sBo9@$2xoN68;t^7d6Ek7QTV
zMjYZV<84!V<9PpEIdc^J!3FPLMeuZ1*~7~xIzP+-w^X!s5j9fJbQJr+#qJ*y`;*B^
zOI7rOHIAWWJg#OuA&)bj8T;#A-rwLi`|EV+?~i3;HE*!K
zBn~>pk~#EtSL)!#sl#u0?dh~(>R2ETP(OJR%(N>QbWjDhJ-~&RHN1&y2~&3<`~)LY
z*i;tnPD+SUlNE_dW@Yza(N>^$jHZgPU8nI*YDXuuvefPP{v&K?TGg&em^#2e(Q4-P
z6iv&DjxQhtW7mt7x~%5*v`TFBx|o}3TIH=r3bu_oz2fLhpGCG7w%+VVuZq*cSJZxd
zcLO%c9BH9PL4uB#d}+s<)_LI>6s<<~Nz<-5I_bcQV}wj`V&tenSu-q&nYOE`1UW2S
zhAEWIXs7zPV!5xg_{-hR`>Wf_i~d&vhYKl@qkNVc7~
zZDRWcNDcm5w^scQI%Xq0YA*bdYp>6UvD^skgBVLadA-v;FPc&9&V`dXd*R?sRM7hb
zGjS@K(RmnX_%RcMux39dyEoL08-+Alk6GEh$FtwLF1N`JzFZ%UUEG++OvfU^q1YL<
zIXZjD(HXlrI)6ynnXoy!cu;ovr;e^=Dc?uup2coeQm<(pn!KEwis5MFpSYV#mty$S
zjNmBbeD001-q4QzIP5{Ut)IHqMi-Ua*CSlXW(~d@*E%!AsA`{9#AcFJa(qXweLup@
zD&n*Lp5Uf!+wc_GO)?Yp^P;Jw^D^da44R!Ry{MnZ=26to#F&~_)bRTJdF~~|J;pX*
z*Am 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)))