- Send-restriction UI now has a single owner: ComposeControls' write
restriction bar, matching Replies/Sublist modes. BottomControls'
duplicate (overlapping, wrongly sized) bar is removed and the
monoforum-admin "choose a message to reply" state is ported into the
section's write restriction producer.
- History load failures with CHANNEL_PRIVATE / CHANNEL_PUBLIC_GROUP_NA /
USER_BANNED_IN_CHANNEL close the chat with the not-accessible toast
(and handle expired invite peeks), like the legacy view, via a new
Data::Session::historyAccessLost signal fired from
ApiWrap::requestHistory.
- SparseIdsList::Slice::merge inserts single ids instead of re-sorting
the whole accumulated set, so the every-message full-history index
updates in O(log n) instead of O(n log n).
- Unread counting queries the index in place through the new
SparseIdsList::countAfter instead of copying up to 10000 ids on every
read-marking tick.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Fold the three AllowsMediaDownloadControls copies into
HistoryItem::allowsMediaDownloadControls, share one retry-or-fail
handler in SendMusicSelectionBatch, reuse MakeMusicSelectionItems
instead of the NormalizeSelections near-copy and extract the
duplicated bot resolution block into applyResolvedBot.
Remove the dead accumulate-from-top machinery from both music
providers and the list widget, the subscriber-less slice snapshot
stream, the never-started search section request timer and the
unused Result::isAudioResult.
Consolidate the sixteen MusicAttachBox make_state allocations into
one State struct, fix the include order, use base::take for the
request waiters, replace the removeFromAlbum if-with-initializer
with a plain null-checked session and type kSearchRequestDelay as
crl::time.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Introduced SharedMediaType::Poll and registered poll messages
as shared media in data_media_types.
- Added Data::PollMessagesViewer — a producer that loaded poll
message slices for a given history/topic/monoforum peer.
(data_poll_messages.cpp/h)
- Implemented Info::Polls::ListWidget and ListMemento — a new content
widget that rendered poll messages using HistoryView::ListWidget
with a custom chat theme, similar to existing shared media sections.
- Connected the new section into info_memento, info_controller,
info_media_buttons, and info_media_widget so it appeared as a button
in the Shared Media panel.