Skip to content

Commit 1fb93ab

Browse files
author
Isaac
committed
Various improvements
1 parent 92a6a73 commit 1fb93ab

File tree

29 files changed

+695
-227
lines changed

29 files changed

+695
-227
lines changed

.cursorignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# Add directories or file patterns to ignore during indexing (e.g. foo/ or *.csv)

submodules/BrowserUI/Sources/BrowserInstantPageContent.swift

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ final class BrowserInstantPageContent: UIView, BrowserContent, UIScrollViewDeleg
3232
private var originalContent: BrowserContent?
3333
private let url: String
3434

35-
private var webPage: TelegramMediaWebpage?
35+
private var webPage: (webPage: TelegramMediaWebpage, instantPage: InstantPage?)?
3636

3737
let uuid: UUID
3838

@@ -97,7 +97,11 @@ final class BrowserInstantPageContent: UIView, BrowserContent, UIScrollViewDeleg
9797

9898
init(context: AccountContext, presentationData: PresentationData, webPage: TelegramMediaWebpage, anchor: String?, url: String, sourceLocation: InstantPageSourceLocation, preloadedResouces: [Any]?, originalContent: BrowserContent? = nil) {
9999
self.context = context
100-
self.webPage = webPage
100+
var instantPage: InstantPage?
101+
if case let .Loaded(content) = webPage.content {
102+
instantPage = content.instantPage?._parse()
103+
}
104+
self.webPage = (webPage, instantPage)
101105
self.presentationData = presentationData
102106
self.theme = instantPageThemeForType(presentationData.theme.overallDarkAppearance ? .dark : .light, settings: .defaultSettings)
103107
self.sourceLocation = sourceLocation
@@ -267,7 +271,7 @@ final class BrowserInstantPageContent: UIView, BrowserContent, UIScrollViewDeleg
267271
}
268272

269273
private func updateWebPage(_ webPage: TelegramMediaWebpage?, anchor: String?, state: InstantPageStoredState? = nil) {
270-
if self.webPage != webPage {
274+
if self.webPage?.webPage != webPage {
271275
if self.webPage != nil && self.currentLayout != nil {
272276
if let snapshotView = self.scrollNode.view.snapshotView(afterScreenUpdates: false) {
273277
snapshotView.frame = self.scrollNode.frame
@@ -279,7 +283,15 @@ final class BrowserInstantPageContent: UIView, BrowserContent, UIScrollViewDeleg
279283
}
280284

281285
self.setupScrollOffsetOnLayout = self.webPage == nil
282-
self.webPage = webPage
286+
if let webPage {
287+
var instantPage: InstantPage?
288+
if case let .Loaded(content) = webPage.content {
289+
instantPage = content.instantPage?._parse()
290+
}
291+
self.webPage = (webPage, instantPage)
292+
} else {
293+
self.webPage = nil
294+
}
283295
if let anchor = anchor {
284296
self.initialAnchor = anchor.removingPercentEncoding
285297
} else if let state = state {
@@ -455,11 +467,11 @@ final class BrowserInstantPageContent: UIView, BrowserContent, UIScrollViewDeleg
455467
}
456468

457469
private func updatePageLayout() {
458-
guard let (size, insets, _) = self.containerLayout, let webPage = self.webPage else {
470+
guard let (size, insets, _) = self.containerLayout, let (webPage, instantPage) = self.webPage else {
459471
return
460472
}
461473

462-
let currentLayout = instantPageLayoutForWebPage(webPage, userLocation: self.sourceLocation.userLocation, boundingWidth: size.width, safeInset: insets.left, strings: self.presentationData.strings, theme: self.theme, dateTimeFormat: self.presentationData.dateTimeFormat, webEmbedHeights: self.currentWebEmbedHeights)
474+
let currentLayout = instantPageLayoutForWebPage(webPage, instantPage: instantPage, userLocation: self.sourceLocation.userLocation, boundingWidth: size.width, safeInset: insets.left, strings: self.presentationData.strings, theme: self.theme, dateTimeFormat: self.presentationData.dateTimeFormat, webEmbedHeights: self.currentWebEmbedHeights)
463475

464476
for (_, tileNode) in self.visibleTiles {
465477
tileNode.removeFromSupernode()
@@ -920,7 +932,7 @@ final class BrowserInstantPageContent: UIView, BrowserContent, UIScrollViewDeleg
920932
}
921933
}
922934

923-
if let webPage = self.webPage, case let .Loaded(content) = webPage.content, let page = content.instantPage, page.url == baseUrl || baseUrl.isEmpty, let anchor = anchor {
935+
if let page = self.webPage?.instantPage, page.url == baseUrl || baseUrl.isEmpty, let anchor = anchor {
924936
self.scrollToAnchor(anchor)
925937
return
926938
}
@@ -1029,7 +1041,7 @@ final class BrowserInstantPageContent: UIView, BrowserContent, UIScrollViewDeleg
10291041
}
10301042

10311043
private func openMedia(_ media: InstantPageMedia) {
1032-
guard let items = self.currentLayout?.items, let webPage = self.webPage else {
1044+
guard let items = self.currentLayout?.items, let (webPage, _) = self.webPage else {
10331045
return
10341046
}
10351047

@@ -1157,7 +1169,7 @@ final class BrowserInstantPageContent: UIView, BrowserContent, UIScrollViewDeleg
11571169
let _ = saveToCameraRoll(context: self.context, postbox: self.context.account.postbox, userLocation: self.sourceLocation.userLocation, mediaReference: .standalone(media: media)).start()
11581170
}
11591171
}), ContextMenuAction(content: .text(title: self.presentationData.strings.Conversation_ContextMenuShare, accessibilityLabel: self.presentationData.strings.Conversation_ContextMenuShare), action: { [weak self] in
1160-
if let self, let webPage = self.webPage, let image = media.media._asMedia() as? TelegramMediaImage {
1172+
if let self, let (webPage, _) = self.webPage, let image = media.media._asMedia() as? TelegramMediaImage {
11611173
self.present(ShareController(context: self.context, subject: .image(image.representations.map({ ImageRepresentationWithReference(representation: $0, reference: MediaResourceReference.media(media: .webPage(webPage: WebpageReference(webPage), media: image), resource: $0.resource)) }))), nil)
11621174
}
11631175
})], catchTapsOutside: true)
@@ -1300,7 +1312,7 @@ final class BrowserInstantPageContent: UIView, BrowserContent, UIScrollViewDeleg
13001312
strongSelf.present(UndoOverlayController(presentationData: presentationData, content: .copy(text: strings.Conversation_TextCopied), elevatedLayout: false, animateInAsReplacement: false, action: { _ in return false }), nil)
13011313
}
13021314
}), ContextMenuAction(content: .text(title: strings.Conversation_ContextMenuShare, accessibilityLabel: strings.Conversation_ContextMenuShare), action: { [weak self] in
1303-
if let strongSelf = self, let webPage = strongSelf.webPage, case let .Loaded(content) = webPage.content {
1315+
if let strongSelf = self, let (webPage, _) = strongSelf.webPage, case let .Loaded(content) = webPage.content {
13041316
strongSelf.present(ShareController(context: strongSelf.context, subject: .quote(text: text, url: content.url)), nil)
13051317
}
13061318
})]
@@ -1368,7 +1380,7 @@ final class BrowserInstantPageContent: UIView, BrowserContent, UIScrollViewDeleg
13681380
}
13691381

13701382
private func presentReferenceView(item: InstantPageTextItem, referenceAnchor: String) {
1371-
guard let webPage = self.webPage else {
1383+
guard let (webPage, instantPage) = self.webPage else {
13721384
return
13731385
}
13741386

@@ -1389,7 +1401,7 @@ final class BrowserInstantPageContent: UIView, BrowserContent, UIScrollViewDeleg
13891401
return
13901402
}
13911403

1392-
let controller = InstantPageReferenceController(context: self.context, sourceLocation: self.sourceLocation, theme: theme, webPage: webPage, anchorText: anchorText, openUrl: { [weak self] url in
1404+
let controller = InstantPageReferenceController(context: self.context, sourceLocation: self.sourceLocation, theme: theme, webPage: webPage, instantPage: instantPage, anchorText: anchorText, openUrl: { [weak self] url in
13931405
self?.openUrl(url)
13941406
}, openUrlIn: { [weak self] url in
13951407
self?.openUrlIn(url)
@@ -1444,7 +1456,7 @@ final class BrowserInstantPageContent: UIView, BrowserContent, UIScrollViewDeleg
14441456
}
14451457
self.scrollNode.view.setContentOffset(CGPoint(x: 0.0, y: targetY), animated: true)
14461458
}
1447-
} else if case let .Loaded(content) = self.webPage?.content, let instantPage = content.instantPage, !instantPage.isComplete {
1459+
} else if let instantPage = self.webPage?.instantPage, !instantPage.isComplete {
14481460
// self.loadProgress.set(0.5)
14491461
self.pendingAnchor = anchor
14501462
}
@@ -1480,7 +1492,7 @@ final class BrowserInstantPageContent: UIView, BrowserContent, UIScrollViewDeleg
14801492
}
14811493

14821494
func addToRecentlyVisited() {
1483-
if let webPage = self.webPage {
1495+
if let (webPage, _) = self.webPage {
14841496
let _ = addRecentlyVisitedLink(engine: self.context.engine, webPage: webPage).startStandalone()
14851497
}
14861498
}

submodules/ChatPresentationInterfaceState/Sources/ChatPresentationInterfaceState.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1019,6 +1019,11 @@ public final class ChatPresentationInterfaceState: Equatable {
10191019
public func updatedInputQueryResult(queryKind: ChatPresentationInputQueryKind, _ f: (ChatPresentationInputQueryResult?) -> ChatPresentationInputQueryResult?) -> ChatPresentationInterfaceState {
10201020
var inputQueryResults = self.inputQueryResults
10211021
let updated = f(inputQueryResults[queryKind])
1022+
if case .contextRequest = queryKind {
1023+
#if DEBUG
1024+
print("updatedInputQueryResult: \(String(describing: updated))")
1025+
#endif
1026+
}
10221027
if let updated = updated {
10231028
inputQueryResults[queryKind] = updated
10241029
} else {

submodules/ComposePollUI/Sources/ComposePollScreen.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1284,7 +1284,7 @@ final class ComposePollScreenComponent: Component {
12841284
component: AnyComponent(EmojiSuggestionsComponent(
12851285
context: component.context,
12861286
userLocation: .other,
1287-
theme: EmojiSuggestionsComponent.Theme(theme: environment.theme),
1287+
theme: EmojiSuggestionsComponent.Theme(theme: environment.theme, backgroundColor: environment.theme.list.itemBlocksBackgroundColor),
12881288
animationCache: component.context.animationCache,
12891289
animationRenderer: component.context.animationRenderer,
12901290
files: value,

submodules/GalleryData/Sources/GalleryData.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,12 @@ private func instantPageBlockMedia(pageId: MediaId, block: InstantPageBlock, med
6464
return []
6565
}
6666

67-
public func instantPageGalleryMedia(webpageId: MediaId, page: InstantPage, galleryMedia: Media) -> [InstantPageGalleryEntry] {
67+
public func instantPageGalleryMedia(webpageId: MediaId, page: InstantPage.Accessor, galleryMedia: Media) -> [InstantPageGalleryEntry] {
6868
var result: [InstantPageGalleryEntry] = []
6969
var counter: Int = 0
7070

71+
let page = page._parse()
72+
7173
for block in page.blocks {
7274
result.append(contentsOf: instantPageBlockMedia(pageId: webpageId, block: block, media: page.media, counter: &counter))
7375
}

submodules/InstantPageUI/Sources/InstantPageControllerNode.swift

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)