@@ -36,7 +36,7 @@ final class InstantPageControllerNode: ASDisplayNode, ASScrollViewDelegate {
3636 private let pushController : ( ViewController ) -> Void
3737 private let openPeer : ( EnginePeer ) -> Void
3838
39- private var webPage : TelegramMediaWebpage ?
39+ private var webPage : ( webPage : TelegramMediaWebpage , instantPage : InstantPage ? ) ?
4040 private var initialAnchor : String ?
4141 private var pendingAnchor : String ?
4242 private var initialState : InstantPageStoredState ?
@@ -141,7 +141,7 @@ final class InstantPageControllerNode: ASDisplayNode, ASScrollViewDelegate {
141141
142142 self . navigationBar. back = navigateBack
143143 self . navigationBar. share = { [ weak self] in
144- if let strongSelf = self , let webPage = strongSelf. webPage, case let . Loaded( content) = webPage. content {
144+ if let strongSelf = self , let ( webPage, _ ) = strongSelf. webPage, case let . Loaded( content) = webPage. content {
145145 let shareController = ShareController ( context: context, subject: . url( content. url) )
146146 shareController. actionCompleted = { [ weak self] in
147147 if let strongSelf = self {
@@ -345,7 +345,7 @@ final class InstantPageControllerNode: ASDisplayNode, ASScrollViewDelegate {
345345 }
346346
347347 func updateWebPage( _ webPage: TelegramMediaWebpage ? , anchor: String ? , state: InstantPageStoredState ? = nil ) {
348- if self . webPage != webPage {
348+ if self . webPage? . webPage != webPage {
349349 if self . webPage != nil && self . currentLayout != nil {
350350 if let snaphotView = self . scrollNode. view. snapshotView ( afterScreenUpdates: false ) {
351351 self . scrollNode. view. superview? . insertSubview ( snaphotView, aboveSubview: self . scrollNode. view)
@@ -356,7 +356,15 @@ final class InstantPageControllerNode: ASDisplayNode, ASScrollViewDelegate {
356356 }
357357
358358 self . setupScrollOffsetOnLayout = self . webPage == nil
359- self . webPage = webPage
359+ if let webPage {
360+ var instantPage : InstantPage ?
361+ if case let . Loaded( content) = webPage. content {
362+ instantPage = content. instantPage? . _parse ( )
363+ }
364+ self . webPage = ( webPage, instantPage)
365+ } else {
366+ self . webPage = nil
367+ }
360368 if let anchor = anchor {
361369 self . initialAnchor = anchor. removingPercentEncoding
362370 } else if let state = state {
@@ -460,11 +468,11 @@ final class InstantPageControllerNode: ASDisplayNode, ASScrollViewDelegate {
460468 }
461469
462470 private func updateLayout( ) {
463- guard let containerLayout = self . containerLayout, let webPage = self . webPage, let theme = self . theme else {
471+ guard let containerLayout = self . containerLayout, let ( webPage, instantPage ) = self . webPage, let theme = self . theme else {
464472 return
465473 }
466474
467- let currentLayout = instantPageLayoutForWebPage ( webPage, userLocation: self . sourceLocation. userLocation, boundingWidth: containerLayout. size. width, safeInset: containerLayout. safeInsets. left, strings: self . strings, theme: theme, dateTimeFormat: self . dateTimeFormat, webEmbedHeights: self . currentWebEmbedHeights)
475+ let currentLayout = instantPageLayoutForWebPage ( webPage, instantPage : instantPage , userLocation: self . sourceLocation. userLocation, boundingWidth: containerLayout. size. width, safeInset: containerLayout. safeInsets. left, strings: self . strings, theme: theme, dateTimeFormat: self . dateTimeFormat, webEmbedHeights: self . currentWebEmbedHeights)
468476
469477 for (_, tileNode) in self . visibleTiles {
470478 tileNode. removeFromSupernode ( )
@@ -863,7 +871,7 @@ final class InstantPageControllerNode: ASDisplayNode, ASScrollViewDelegate {
863871 }
864872
865873 var title : String ?
866- if let webPage = self . webPage, case let . Loaded( content) = webPage. content {
874+ if let ( webPage, _ ) = self . webPage, case let . Loaded( content) = webPage. content {
867875 title = content. websiteName
868876 }
869877
@@ -1027,7 +1035,7 @@ final class InstantPageControllerNode: ASDisplayNode, ASScrollViewDelegate {
10271035 let _ = saveToCameraRoll ( context: strongSelf. context, postbox: strongSelf. context. account. postbox, userLocation: strongSelf. sourceLocation. userLocation, mediaReference: . standalone( media: media) ) . start ( )
10281036 }
10291037 } ) , ContextMenuAction ( content: . text( title: self . strings. Conversation_ContextMenuShare, accessibilityLabel: self . strings. Conversation_ContextMenuShare) , action: { [ weak self] in
1030- if let strongSelf = self , let webPage = strongSelf. webPage, case let . image( image) = media. media {
1038+ if let strongSelf = self , let ( webPage, _ ) = strongSelf. webPage, case let . image( image) = media. media {
10311039 strongSelf. present ( ShareController ( context: strongSelf. context, subject: . image( image. representations. map ( { ImageRepresentationWithReference ( representation: $0, reference: MediaResourceReference . media ( media: . webPage( webPage: WebpageReference ( webPage) , media: image) , resource: $0. resource) ) } ) ) ) , nil )
10321040 }
10331041 } ) ] , catchTapsOutside: true )
@@ -1141,7 +1149,7 @@ final class InstantPageControllerNode: ASDisplayNode, ASScrollViewDelegate {
11411149 strongSelf. present ( UndoOverlayController ( presentationData: presentationData, content: . copy( text: strings. Conversation_TextCopied) , elevatedLayout: false , animateInAsReplacement: false , action: { _ in return false } ) , nil )
11421150 }
11431151 } ) , ContextMenuAction ( content: . text( title: strings. Conversation_ContextMenuShare, accessibilityLabel: strings. Conversation_ContextMenuShare) , action: { [ weak self] in
1144- if let strongSelf = self , let webPage = strongSelf. webPage, case let . Loaded( content) = webPage. content {
1152+ if let strongSelf = self , let ( webPage, _ ) = strongSelf. webPage, case let . Loaded( content) = webPage. content {
11451153 strongSelf. present ( ShareController ( context: strongSelf. context, subject: . quote( text: text, url: content. url) ) , nil )
11461154 }
11471155 } ) ]
@@ -1209,7 +1217,7 @@ final class InstantPageControllerNode: ASDisplayNode, ASScrollViewDelegate {
12091217 }
12101218
12111219 private func presentReferenceView( item: InstantPageTextItem , referenceAnchor: String ) {
1212- guard let theme = self . theme, let webPage = self . webPage else {
1220+ guard let theme = self . theme, let ( webPage, instantPage ) = self . webPage else {
12131221 return
12141222 }
12151223
@@ -1230,7 +1238,7 @@ final class InstantPageControllerNode: ASDisplayNode, ASScrollViewDelegate {
12301238 return
12311239 }
12321240
1233- let controller = InstantPageReferenceController ( context: self . context, sourceLocation: self . sourceLocation, theme: theme, webPage: webPage, anchorText: anchorText, openUrl: { [ weak self] url in
1241+ let controller = InstantPageReferenceController ( context: self . context, sourceLocation: self . sourceLocation, theme: theme, webPage: webPage, instantPage : instantPage , anchorText: anchorText, openUrl: { [ weak self] url in
12341242 self ? . openUrl ( url)
12351243 } , openUrlIn: { [ weak self] url in
12361244 self ? . openUrlIn ( url)
@@ -1285,7 +1293,7 @@ final class InstantPageControllerNode: ASDisplayNode, ASScrollViewDelegate {
12851293 }
12861294 self . scrollNode. view. setContentOffset ( CGPoint ( x: 0.0 , y: targetY) , animated: true )
12871295 }
1288- } else if let webPage = self . webPage , case let . Loaded ( content ) = webPage . content , let instantPage = content . instantPage, !instantPage. isComplete {
1296+ } else if let ( _ , instantPage ) = self . webPage , let instantPage, !instantPage. isComplete {
12891297 self . loadProgress. set ( 0.5 )
12901298 self . pendingAnchor = anchor
12911299 }
@@ -1302,7 +1310,7 @@ final class InstantPageControllerNode: ASDisplayNode, ASScrollViewDelegate {
13021310 baseUrl = String ( baseUrl [ ..< anchorRange. lowerBound] )
13031311 }
13041312
1305- if let webPage = self . webPage , case let . Loaded ( content ) = webPage . content , let page = content . instantPage , page. url == baseUrl, let anchor = anchor {
1313+ if let ( _ , page ) = self . webPage , let page, page. url == baseUrl, let anchor = anchor {
13061314 self . scrollToAnchor ( anchor)
13071315 return
13081316 }
@@ -1418,7 +1426,7 @@ final class InstantPageControllerNode: ASDisplayNode, ASScrollViewDelegate {
14181426 }
14191427
14201428 private func openMedia( _ media: InstantPageMedia ) {
1421- guard let items = self . currentLayout? . items, let webPage = self . webPage else {
1429+ guard let items = self . currentLayout? . items, let ( webPage, _ ) = self . webPage else {
14221430 return
14231431 }
14241432
@@ -1555,7 +1563,7 @@ final class InstantPageControllerNode: ASDisplayNode, ASScrollViewDelegate {
15551563 } ) . start ( )
15561564 }
15571565 } , openInSafari: { [ weak self] in
1558- if let strongSelf = self , let webPage = strongSelf. webPage, case let . Loaded( content) = webPage. content {
1566+ if let strongSelf = self , let ( webPage, _ ) = strongSelf. webPage, case let . Loaded( content) = webPage. content {
15591567 strongSelf. context. sharedContext. applicationBindings. openUrl ( content. url)
15601568 }
15611569 } )
0 commit comments