[UnigramDev/Unigram/develop](https://github.com/UnigramDev/Unigram/tree/develop) • [18da5f6](https://github.com/UnigramDev/Unigram/commit/18da5f67b453fdbcedf411466108430da5f58cb0) • _3 files, +51/-27_
Stop materializing the draft on every caret move

OnSelectionChanged allocated the whole message as a string on every keystroke
and every caret move, and then mostly didn't use it.

TryGetAutocomplete never read the text or query it was handed at all - only its
sticker branch reads the text, and only when the whole message is a single
emoji, so it reads it there. The inline bot search is dead without a bot to
address, so it doesn't run without one. And SearchByInlineBot only matches a
username that starts the message, which CharacterAt answers without reading the
rest.

That leaves the common path - typing ordinary text - reading no text at all.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

[UnigramDev/Unigram/develop](https://github.com/UnigramDev/Unigram/tree/develop) • [469d6de](https://github.com/UnigramDev/Unigram/commit/469d6de8f4aebc7eae8d5b6606c74b93a99e7ae9) • _2 files, +45/-4_
Say why the frame grab does not ask for NOBUFFER

ImageHelper loads video with preview false while passing preview true to
RenderSync, which reads like an oversight and is not one. The flag sets
AVFMT_FLAG_NOBUFFER, which is what the header-only probe in
StorageVideo.CreateAsync wants, but unbuffered often fails to grab the first
frame -- the whole point of these three call sites. Right for a probe, wrong
for a frame grab. Now stated at each of them, since it is exactly the sort of
inconsistency someone tidies up later.

Also adds task 8 to the review doc: enqueue a share as it is typed rather than
after. SendMessagesView exists only to send what was shared, and still types
the whole set before building and sending message after message, so nothing
reaches the network until the slowest file has been probed. For a share of
large videos that is the probe delaying the upload rather than the UI, and the
first file could be going out while the last is still being read.

The shape is there for it: ChooseChatsViewModel.SendWithChat resolves options
and topic synchronously and never looks at the content, so it can be called
once per chat up front and each message sent to the captured chats as it is
built. Four things need deciding rather than wiring, and are written down --
grouping needs lookahead to close an album, the caption currently rides
positionally on the last item, the progress bar divides by a total that would
grow underneath it, and cancel gains a window where it must stop the probe as
well as delete what was already sent.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

[UnigramDev/Unigram/develop](https://github.com/UnigramDev/Unigram/tree/develop) • [c22b198](https://github.com/UnigramDev/Unigram/commit/c22b19828820c41162701e7d32d37ea226983852) • _5 files, +569/-546_
Add article option to attach

[UnigramDev/Unigram/develop](https://github.com/UnigramDev/Unigram/tree/develop) • [0373674](https://github.com/UnigramDev/Unigram/commit/0373674b97e62adf5d24b7841f3cbe8981a666a0) • _1 files, +1/-1_
Fix font family

[UnigramDev/Unigram/develop](https://github.com/UnigramDev/Unigram/tree/develop) • [9aea06e](https://github.com/UnigramDev/Unigram/commit/9aea06e8b7e09859b61afe958abbfaa490d06008) • _3 files, +14/-1_
Better chat view inst

[UnigramDev/Unigram/develop](https://github.com/UnigramDev/Unigram/tree/develop) • [f42aeeb](https://github.com/UnigramDev/Unigram/commit/f42aeeb39fb1971bb3589bb76f5c9dfbb7b1a659) • _1 files, +7/-1_
Add transcode logging

[UnigramDev/Unigram/develop](https://github.com/UnigramDev/Unigram/tree/develop) • [d3ec4f1](https://github.com/UnigramDev/Unigram/commit/d3ec4f1506706e104d49484ce398a22c6aa07fbc) • _1 files, +66/-13_
Optimize slide panel

[#unigram](?q=%23unigram)