a9f8b0d067
Make rich messages editable via InstantPage↔markdown round-trip
...
Reconstruct markdown source from a stored InstantPage to populate the edit
field, then re-classify on save (the inverse of the send path). Adds the
InstantPageToMarkdown converter, edit-field population and save-time
re-classification in ChatControllerLoadDisplayNode, and a shared InstantPage
previewText surfaced through MessageContentKind for reply/pinned/forward
previews. Documented in CLAUDE.md.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-26 23:10:48 +02:00
8b9f498d53
RichText.textSpoiler: dust overlay + tap-to-reveal in rich-data bubbles
...
Add the RichText.textSpoiler case end-to-end: model + Postbox coding,
FlatBuffers schema/codec, and Api.RichText parsing/serialization (lossless).
Display attaches the spoiler attribute, collects per-line spoiler rects in
the V2 layout, clips obscured glyphs and draws an energy-gated dust overlay
in the V2 text view, propagates the reveal flag across the nested V2 tree
(building dust for freshly-created text views), and wires tap-to-reveal
routing in the rich-data bubble.
Also seeds the streaming reveal cursor across chunk rebuilds and refines
status date positioning.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-23 22:12:47 +04:00
99e4c41b24
RichText: entity cases (mention / hashtag / cashtag / bot command / bank card / auto link)
...
Implement the nine message-entity RichText cases (textMention,
textMentionName, textHashtag, textCashtag, textBotCommand, textBankCard,
textAutoUrl, textAutoEmail, textAutoPhone): model + Postbox coding,
FlatBuffers schema/codec, Api.RichText parsing/serialization (lossless),
InstantPage display attaching the matching TelegramTextAttributes keys, and
tap routing in the rich-data bubble mirroring ChatMessageTextBubbleContentNode.
mentionName display resolves via EnginePeer.Id (PeerId not in scope).
Also lets rich-data text selection reach a line's trailing edge and fixes
the date/status node positioning to match TextBubble.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-23 22:12:47 +04:00
b48b96ecd9
RichText.textCustomEmoji: inline animated custom emoji in rich-data bubbles
...
Add the RichText.textCustomEmoji(fileId:alt:) case end-to-end: model +
Postbox coding, FlatBuffers schema/codec, and Api.RichText
parsing/serialization (lossless), plus display in the InstantPage V2
renderer. The emoji renders as an InlineStickerItemLayer that participates
in the streaming reveal (pops in as the reveal cursor crosses it) and is
gated by the bubble's visibility rect, propagated recursively through the
nested V2 view tree. Also frees the CTRunDelegate extent buffers for the
image/formula/custom-emoji attachment arms and documents the feature in
CLAUDE.md.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-23 22:12:47 +04:00
isaacand isaac
3f09a1f325
WIP
2026-05-20 00:34:25 +08:00
isaacand isaac
13a153aff2
WIP
2026-05-20 00:33:08 +08:00
e918b353ec
Postbox refactor waves 278-356: squash
...
Squashes 79 sequential refactor waves into a single commit.
Highlights:
- Drop `import Postbox` (and matching `//submodules/Postbox` BUILD deps) from a wide swath of consumer files: ChatList, ChatMessage*BubbleContentNode subclasses, ListMessageNode/ListMessageItem, GalleryData, ChatHistorySearchContainerNode, ChatPanelInterfaceInteraction, ChatControllerInteraction, ChatMessageStickerItemNode, ChatMessageReplyInfoNode, ChatMessageInstantVideoItemNode, ChatPresentationInterfaceState, BrowserMarkdown/Readability, MediaResources, LocalMediaResources, ICloudResources, FetchManager, ShareController, OpenChatMessage, GalleryController, GroupStickerSearchContainerNode, GroupStickerPackCurrentItem, ChatPinnedMessageTitlePanelNode, OverlayAudioPlayerController, PresentationThemeSettings, StatisticsUI/StoryIconNode, TextFormat/StringWithAppliedEntities, GalleryUI/VideoAdComponent, StickerPackPreviewUI, WallpaperPreviewMedia, WallpaperResources, YoutubeEmbedImplementation, InstantPageExternalMediaResource, PlatformRestrictionMatching, TelegramUIDeclareEncodables, ChatListNode/ChatListSearchContainerNode.
- Add `TelegramEngine` facades: `Themes.wallpapers`, `Themes.themes`, `AccountData.addAppLogEvent`.
- Add `EngineMessageHistoryEntryLocation` wrapper.
- Add `EngineRaw*` escape-hatch typealiases (`EngineRawMessage`, `EngineRawPeer`, `EngineRawMedia`, `EngineRawMediaResource`, `EngineRawMediaResourceData`, `EngineRawItemCollectionItem`, `EngineRawItemCollectionInfo`) and `engineDeclareEncodable` forwarder.
- Drop unused `account:`/`postbox:`/`network:` parameters from several public functions and delete the dead overloads/types/functions left over: `automaticThemeShouldSwitchNow`, `cancelFreeMediaFileInteractiveFetch`, `legacyEnqueueVideoMessage`, `TelegramMediaFileReference`, plus assorted dead public TelegramCore/AccountContext SecureId entry points.
- Delete entire dead modules: `LegacyDataImport`, `TonBinding`, `SpotlightSupport`, `SvgRendering`, third-party `AppCenter`/`VectorPlus`/`SwiftColor`/`SwiftSVG`.
- Drop orphan `//submodules/Postbox` BUILD deps across 3 cleanup rounds.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-05 14:11:06 +02:00
69bfc65da7
Postbox refactor waves 138–276: 168-commit squash
...
Consolidates 137 wave commits + 31 supporting commits (CLAUDE.md bump,
typealias additions, AnyObject→EngineMedia restoration) into one squashed
commit. Migrates dozens of consumer-side public APIs, struct fields,
protocol methods, and enum payloads from Postbox protocols/structs to
TelegramEngine engine wrappers and typealiases. Drops `import Postbox`
from many files. Adds new TelegramCore typealiases and one
TelegramEngineUnauthorized facade.
Notable changes by category:
**TelegramCore typealias additions** (rule 2 — narrow utility typealiases):
- EngineChatListIndex, EngineTempBoxFile, EngineItemCollectionItemIndex,
EngineItemCollectionViewEntryIndex, EngineValueBoxEncryptionParameters,
EngineMessageAndThreadId, EnginePeerStoryStats, EngineMessageHistoryAnchorIndex,
EngineChatListTotalUnreadStateCategory, EngineChatListTotalUnreadStateStats,
EnginePeerSummaryCounterTags, EngineChatListTotalUnreadState,
EngineItemCacheEntryId, EngineHashFunctions,
EngineCachedMediaResourceRepresentationResult,
EngineMediaResourceDataFetchResult, EngineMediaResourceDataFetchError,
EngineMediaResourceStatus, EngineCachedPeerData
**TelegramCore engine extensions/forwarders**:
- EngineMessage.engineMedia, EngineMessage.enginePeers,
EngineMessage.adAttribute, EngineMessage.effectivelyIncoming
- engineFileSize forwarder
- TelegramEngine.Resources.clearCachedMediaResources(mediaResourceIds: Set<EngineMediaResource.Id>)
- TelegramEngine.Resources.fetchStatus(id:resourceSize:)
- TelegramEngineUnauthorized.UnauthorizedResources facade with storeResourceData
**Public API/struct migrations to engine types**:
- ChatAvailableMessageActions.banAuthor/banAuthors → EnginePeer?/[EnginePeer]
- WebSessionsContextState.peers → [EnginePeer.Id: EnginePeer]
- CacheUsageStats.peers → [EnginePeer.Id: EnginePeer]
- PeerCommand.peer → EnginePeer
- PeerInfoControllerMode.calls(messages:) → [EngineMessage]
- CallControllerNodeProtocol.updatePeer → EnginePeer params
- ChatHistoryListNode.messageInCurrentHistoryView (and 4 variants) → EngineMessage?
- ChatHistorySearchContainerNode.messageForGallery → EngineMessage?
- PeerInfoPaneNode.findLoadedMessage / ensureMessageIsVisible /
transitionNodeForGallery → engine-typed
- GalleryHiddenMediaTarget.getTransitionInfo /
GalleryHiddenMediaManager.findTarget → engine-typed
- ChatPanelInterfaceInteraction.presentReactionDeletionOptions /
presentBan*MessageOptions → EnginePeer
- DrawingMessageRenderer.messages → [EngineMessage]
- ChatVideoGalleryItemScrubberView.setFetchStatusSignal →
EngineMediaResource.FetchStatus
- ChannelDiscussionGroupActionSheetItem.peer, VoiceChatPeerEntry.peer,
VoiceChatFullscreenParticipantItem.peer, MediaStreamComponent.chatPeer,
MediaStreamVideoComponent.callPeer, ChatMessageContactBubbleContentNode.contactPeer,
ChatMessageForwardInfoNode.peer, ChatMessageCommentFooterContentNode.replyPeers,
ChatReportPeerTitlePanelNode.peer, ChatMessageActionUrlAuthController.bot,
PeerMediaCollectionInterfaceState.peer, ChatMessageCallBubbleContentNode.peopleAvatars,
ChatLoadingNode.renderedPeer (→ EngineRenderedPeer) — all to engine types
**Wave-71-shadow stored-field migrations** (Postbox Peer/Message → Engine wrapper):
- LegacyCallControllerNode.peer
- CallStatusBarNode.currentPeer
**Dead-code / dead-field removals**:
- CallController.peer, CallControllerNodeV2.account,
ContactMultiselectionController PeerNameIndex fields,
preparedChatListNodeViewTransition account: Account param,
FetchResource.swift entirely (unused function)
**Module-level Postbox import drops**: 30+ files including TelegramRootController,
EditStories, GiftViewScreen, AnimatedStickerUtils, FetchPhotoLibraryImageResource,
PeerInfoGiftsPaneNode, PeerInfoPaneContainerNode, PresentAddMembers,
PeerInfoProfileItems, ChatControllerAdminBanUsers, PresentationData typealiases,
DefaultDayPresentationTheme, ChatListViewTransition, GalleryHiddenMediaManager,
RecentSessionsController, GifContext, AuthorizationSequenceController,
PeerInfoHeaderEditingContentNode, PeerInfoHeaderNode,
PeerAllowedReactionListController, CallControllerNodeV2, and 6 PeerInfo pane files.
**AnyObject restoration**: rule 8 added (never substitute Postbox protocols
with Any/AnyObject) — undid previous AnyObject substitutions in waves 141/143
back to EngineMedia.
Doc maintenance: CLAUDE.md updated to reflect new typealiases and forwarders.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-05 00:44:27 +02:00
Ilya Laktyushin
c74220300f
Various fixes
2026-04-29 23:29:42 +02:00
Ilya Laktyushin
73d25e7be3
Various improvements
2026-04-28 14:31:17 +02:00
Ilya Laktyushin
3c6ea30767
Various fixes
2026-04-26 01:07:12 +02:00
493f3103b3
Postbox -> TelegramEngine waves 37-43 + wave 44 design/plan (squashed)
...
Squashes 20 commits — the implementation and outcome commits of
waves 37 through 43 plus wave 44's spec and implementation-plan
docs — into a single commit. Per-wave lessons remain recorded in
docs/superpowers/postbox-refactor-log.md. The unrelated "Add swift
svg" commit is preserved separately outside this squash.
Wave 37 — peerTokenTitle: peer Peer → EnginePeer (1 file)
Wave 38 — canSendMessagesToPeer: peer Peer → EnginePeer (12 files)
Wave 39 — AccountContext.makePeerInfoController: peer Peer → EnginePeer (52 files)
Wave 40 — makeChatQrCodeScreen + makeChatRecentActionsController bundle (8 files)
Wave 41 — RenderedChannelParticipant.peer: Peer → EnginePeer (28 files)
Wave 42 — PeerInfoScreenData.peer: Peer? → EnginePeer? (17 files)
Wave 43 — PeerInfoScreen 6 helpers: peer Peer? → EnginePeer? (12 files)
Wave 44 — RenderedChannelParticipant.peers design doc + implementation plan
(impl and outcome land in subsequent commits, not part of squash)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-24 23:19:43 +04:00
isaacand isaac
f5cb1391aa
Merge commit '96b1432434205e2d09d7615bde1402d762ac2b8c'
2026-04-24 11:24:47 +04:00
8408e0ae19
Postbox -> TelegramEngine waves 27-36
...
Consumer-sweep, facade-addition, and Peer→EnginePeer migrations:
- Wave 27: preferencesView consumer sweep
- Wave 28: resourceData consumer sweep
- Wave 29: resourceStatus consumer sweep
- Wave 30: _asStatus() bridge cleanup
- Wave 31: unused-import sweep re-run
- Wave 32: resourceStatus residue sweep
- Wave 33: loadedPeerWithId consumer sweep
- Wave 34: FoundPeer.peer Peer -> EnginePeer
- Wave 35: SendAsPeer.peer Peer -> EnginePeer
- Wave 36: ContactListPeer.peer Peer -> EnginePeer
Also includes per-wave specs, implementation plans, outcome logs, and
a CLAUDE.md wave-counter update.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-24 11:24:13 +04:00
Ilya Laktyushin
e3bf0cd30c
Various fixes
2026-04-23 01:26:13 +02:00
Ilya Laktyushin
dbd40fe7d3
Various improvements
2026-04-22 23:03:51 +02:00
Ilya Laktyushin
8f1e024aef
Various fixes
2026-04-15 23:12:53 +02:00
Isaacand Isaac
f3e1795b68
Temp
2026-04-07 08:11:27 +02:00
Isaacand Isaac
648430e37d
Various improvements
2026-04-03 22:15:42 +08:00
Isaacand Isaac
796826b0ad
Various improvements
2026-03-31 22:42:02 +08:00
Isaacand Isaac
d11a967936
Merge commit 'fd68aed7665cdd25242a79a061ac61c42547b834'
2026-03-27 19:24:49 +08:00
Isaacand Isaac
2907ddbe46
Unseen polls
2026-03-27 18:30:01 +08:00
Ilya Laktyushin
ed55943a44
Various improvements
2026-03-27 01:13:38 +01:00
Ilya Laktyushin
e11c9899e6
Various fixes
2026-03-23 15:03:50 +01:00
Ilya Laktyushin
8098f24f4e
Various improvements
2026-03-22 16:41:22 +01:00
Ilya Laktyushin
66d08c0e1b
Various improvements
2026-03-22 13:44:04 +01:00
Ilya Laktyushin
6519b5c84d
[WIP] Polls
2026-03-17 11:12:58 +01:00
Ilya Laktyushin
b1a190f87a
[WIP] Polls
2026-03-16 18:07:12 +01:00
Ilya Laktyushin
cbc5a49507
[WIP] Polls
2026-03-13 11:04:33 +01:00
Ilya Laktyushin
94923cc353
Reapply "Update API"
...
This reverts commit 0411cfc18c .
2026-03-11 18:51:44 +01:00
Ilya Laktyushin
0411cfc18c
Revert "Update API"
...
This reverts commit 6c1376169c .
2026-03-11 18:04:50 +01:00
Ilya Laktyushin
6c1376169c
Update API
2026-03-11 14:37:23 +01:00
Isaacand Isaac
e4e5142a96
Various improvements
2026-03-10 17:50:37 +01:00
Isaacand Isaac
9a4327116d
Refactor
2026-03-10 00:38:36 +01:00
Ilya Laktyushin
713f557e64
Update API
2026-03-09 14:32:10 +01:00
Ilya Laktyushin
2c4c9a9d9b
[WIP] Live photos
2026-02-20 13:28:58 +04:00
Isaacand Isaac
26cc304ca0
Fix bg
2026-02-17 10:19:02 +04:00
Ilya Laktyushin
9616ea2ad9
Update API
2026-02-13 14:09:36 +04:00
Isaacand Isaac
102afdeaf6
Fix pinned background
2026-02-09 23:39:59 +04:00
Isaacand Isaac
1bb139ff32
Various improvements
2026-02-03 20:17:44 +08:00
Ilya Laktyushin
bbad57434f
Various fixes
2026-02-02 15:54:43 +04:00
Isaacand Isaac
4f04dc0bb7
Glass
2026-01-20 21:35:04 +08:00
Ilya Laktyushin
21995065d6
Various fixes
2026-01-08 00:20:56 +04:00
Isaacand Isaac
05b667797d
Glass
2025-12-28 22:39:34 +08:00
Isaacand Isaac
4a13c3830a
Glass
2025-12-26 20:29:30 +08:00
Isaacand Isaac
a63c90aa00
Glass
2025-12-12 23:58:00 +08:00
Isaacand Isaac
0c3530d8a8
Glass
2025-12-10 00:16:36 +08:00
Isaacand Isaac
1ee7268488
Glass
2025-12-06 01:28:06 +08:00
Isaacand Isaac
cd436e8210
Glass
2025-12-01 22:13:33 +08:00
Isaacand Isaac
5e26b246bd
[WIP] Tab bar and search
2025-11-22 03:17:19 +08:00