Compare commits

..

3414 Commits

Author SHA1 Message Date
Ivan Romanov ba8c1a6b0f fix: saving hide premium statuses to config file 2026-07-02 18:03:27 +03:00
AlexeyZavar 0b02f28818 fix: possible translator crash 2026-07-02 16:53:53 +03:00
AlexeyZavar 9d5fa2358b fix: possible AyuForward crash 2026-07-02 16:53:53 +03:00
AlexeyZavar 6faf41994e fix: apply message rounding in more places 2026-07-02 16:53:53 +03:00
AlexeyZavar 34bfeb7058 fix: avoid opening scheduled section 2026-07-02 16:50:55 +03:00
AlexeyZavar d83cb2cd72 fix: confirmation box overlap 2026-07-02 16:50:55 +03:00
AlexeyZavar dc437d43f2 feat: avoid closing context menu/reaction selector with CTRL/SHIFT 2026-07-02 16:50:55 +03:00
Ireina 21775bd509 feat: add disable Greeting Sticker 2026-06-17 09:45:46 +03:00
Ireina f3f6b349ea feat: filter inline bot messages from blocked bots 2026-06-17 09:45:46 +03:00
Ireina 4de4665fc3 chore: disable phone sharing by default when adding contacts 2026-06-17 09:45:46 +03:00
Ireina 3c50e06dcc fix: copy summary text instead of original when summary is shown 2026-06-17 09:45:46 +03:00
Ireina 4a277eee39 fix: subtract one hour from message date in bubble preview 2026-06-17 09:04:19 +03:00
AlexeyZavar b25513a06f chore: change tray icon 2026-04-27 18:22:24 +03:00
AlexeyZavar 370140143d fix: taskbar app icon change after unpinning 2026-04-27 18:22:24 +03:00
AlexeyZavar 10092ba792 chore: rework filters & fix crashes 2026-04-27 18:22:24 +03:00
AlexeyZavar d376e202c8 chore: tweak defaults 2026-04-27 18:22:24 +03:00
AlexeyZavar d7646274c0 chore: prompt restart on disable stories 2026-04-27 18:22:24 +03:00
AlexeyZavar f3d767d794 fix: message bottom ripple with disabled tails 2026-04-27 18:22:24 +03:00
AlexeyZavar 8cb0f916aa chore: paint outline for selected account in ghost picker 2026-04-27 18:22:24 +03:00
Ireina ba1c274ffb fix: show colored chat list badges for muted chats 2026-04-26 20:12:08 +03:00
AlexeyZavar 3708680aed chore: add hint 2026-04-26 20:12:08 +03:00
AlexeyZavar e96acf011b chore: update sqlite3 2026-04-26 20:12:08 +03:00
AlexeyZavar 9034c9a2c2 feat: show / hide filtered messages & move actions into separate subsection 2026-04-26 20:12:08 +03:00
AlexeyZavar 504346d9a0 chore: add buttons to toasts & fix badges & enable new filter by default 2026-04-26 20:12:08 +03:00
AlexeyZavar ae5b140da0 fix: message shot text to upper 2026-04-26 20:12:08 +03:00
Ireina a33c3d8602 feat: add message shot toggle for top-right badges 2026-04-26 20:12:08 +03:00
Ireina fc5bfeaee1 feat: add clear deleted messages action for chats 2026-04-26 20:12:08 +03:00
Ireina c4b761cce0 fix: keep source avatar when forwarded source is inaccessible 2026-04-26 20:12:08 +03:00
AlexeyZavar 2b98a1e0a1 fix: message preview update 2026-04-26 20:12:07 +03:00
AlexeyZavar 27d3449960 fix: ghost scheduling when using proxy & instagram link preview 2026-04-26 20:12:07 +03:00
AlexeyZavar 44ffd2aea1 feat: support send without sound in ghost mode 2026-04-26 20:12:07 +03:00
AlexeyZavar cc56552cb0 fix: userpic suggestion when using wide messages 2026-04-26 20:12:07 +03:00
AlexeyZavar ca85c9e803 fix: hide date button for topic ID 2026-04-26 20:12:07 +03:00
AlexeyZavar a70d98338b fix: show date & counter in dialogs when last message is filtered 2026-04-26 20:12:07 +03:00
AlexeyZavar ecef927e95 feat: suggest ghost mode before opening story 2026-04-25 23:11:00 +03:00
AlexeyZavar fb9816791e feat: add ghost mode options to macOS bar 2026-04-25 23:11:00 +03:00
AlexeyZavar 44ed070a28 fix: pass ignore wheel to sliders 2026-04-25 23:11:00 +03:00
AlexeyZavar 8a2a84fa35 fix: make it build 2026-04-25 23:11:00 +03:00
AlexeyZavar 0825ea0160 Merge tag 'v6.7.8' into dev
# Conflicts:
#	.github/workflows/mac_packaged.yml
#	Telegram/Resources/winrc/Telegram.rc
#	Telegram/Resources/winrc/Updater.rc
#	Telegram/SourceFiles/api/api_chat_invite.h
#	Telegram/SourceFiles/boxes/language_box.cpp
#	Telegram/SourceFiles/boxes/send_files_box.h
#	Telegram/SourceFiles/boxes/sticker_set_box.cpp
#	Telegram/SourceFiles/core/version.h
#	Telegram/SourceFiles/data/data_types.h
#	Telegram/SourceFiles/history/history_item.cpp
#	Telegram/SourceFiles/history/history_widget.cpp
#	Telegram/SourceFiles/history/view/history_view_chat_section.cpp
#	Telegram/SourceFiles/history/view/history_view_message.cpp
#	Telegram/SourceFiles/history/view/history_view_translate_bar.cpp
#	Telegram/SourceFiles/history/view/history_view_translate_tracker.cpp
#	Telegram/SourceFiles/platform/mac/main_window_mac.mm
#	Telegram/SourceFiles/settings/sections/settings_main.cpp
#	Telegram/lib_ui
#	snap/snapcraft.yaml
2026-04-24 20:47:17 +03:00
AlexeyZavar bc3b798d04 chore: disable username resolving
tgdb requires subscription
usinfobot requires `/start`
2026-04-24 20:35:04 +03:00
Foxing 598e696338 chore: update gentoo & void links 2026-04-24 19:30:17 +03:00
John Preston 6e90f6876e Version 6.7.8.
- Proxy auto-rotation option.
- Allow seeking in video messages.
- Styled text items with emoji support in image editor.
- Wheel zoom and middle-button panning in image editor.
- Manage owned custom emoji packs and delete owned sticker sets.
- Add-to-Sticker-Set and Add-to-Emoji-Set submenus for foreign packs.
- Reply header with preview in send files box.
- Bring back original video quality option.
- Screen reader support for language list and country select box.
- Fix crash in proxy sharing before auth.
- Fix stories in albums with reorder enabled.
- Fix layout for RTL messages.
2026-04-24 17:52:19 +07:00
John Preston d3aec6b6d0 [ai] Some tweaks for release custom command. 2026-04-24 17:48:18 +07:00
John Preston 9af2f378e8 Use custom check for screen reader on X11. 2026-04-24 17:11:18 +07:00
23rd e0461b89fb Slightly improved empty gap before block button in info profile. 2026-04-24 12:07:32 +03:00
23rd 7e6abebf9e [img-editor] Added 3:4 aspect ratio to crop options. 2026-04-24 11:23:55 +03:00
23rd ec5514a4a0 Fixed reset of enabled dictionaries on manage box close without save. 2026-04-24 11:20:25 +03:00
23rd e88cd97b30 Fixed display of status label in dictionary rows added after box show. 2026-04-24 11:20:25 +03:00
23rd d6e35d35c3 Fixed Serbian dictionary detection by renaming files to Qt locale name. 2026-04-24 11:20:25 +03:00
John Preston f2b212dc2e Fix crash in proxy sharing before auth. 2026-04-24 14:28:06 +07:00
John Preston 9681e7eb19 Update dictionaries. 2026-04-24 14:10:55 +07:00
John Preston 0e1b53dfa7 Use single global menu on macOS. 2026-04-24 13:06:15 +07:00
John Preston d9649bc8d9 Fix nice rounding quality in two cases. 2026-04-24 11:56:49 +07:00
23rd 3cd2246a51 Replaced unread voice dot indicator with svg.
Related commit: f4cbbb251f.
2026-04-23 22:51:01 +03:00
23rd fdf75eebf3 [img-editor] Restyled popups and sticker panel as mediaview dark theme. 2026-04-23 21:10:16 +03:00
23rd 697f5b77b5 Added confirmation box on close of unsaved group history visibility box. 2026-04-23 21:09:43 +03:00
23rd 9e63567532 Replaced plain username with link in peer short info box. 2026-04-23 21:09:43 +03:00
23rd bf7c6acba9 Fixed display of popup selector for top peers in replies history. 2026-04-23 21:09:43 +03:00
23rd 5700265c39 Fixed display of total count in settings section for blocked peers. 2026-04-23 21:09:43 +03:00
23rd 6267eed8b3 Clarified block dialog phrases in Replies chat to avoid admin wording. 2026-04-23 21:09:43 +03:00
23rd 52cc4762ba Added unused-styles job for removing unused style entries. 2026-04-23 21:09:43 +03:00
23rd 1beea1586e Replaced hardcoded color index literals with named colorIndex styles. 2026-04-23 21:09:43 +03:00
23rd cbef2a0cfc Added Add-to-Emoji-Set option to menu for small packless stickers. 2026-04-23 21:09:43 +03:00
23rd f778829e81 Slightly improved position of menu from top button in sticker set box. 2026-04-23 21:09:43 +03:00
23rd bba4eba3d5 Added ability to manage owned custom emoji packs from sticker set box. 2026-04-23 21:09:43 +03:00
23rd 4c6f774553 Added creator badge to headers of owned custom emoji sets. 2026-04-23 21:09:43 +03:00
23rd 1fc7a6de95 Switched suggestion buttons in main settings to full radius. 2026-04-23 21:09:43 +03:00
23rd 47489fd513 [img-editor] Added corner rounding level picker for sticker creation. 2026-04-23 21:09:43 +03:00
23rd caf68ba5e6 [poll-view] Added exact close time tooltip for poll countdown. 2026-04-23 21:09:43 +03:00
23rd 5532acf426 Fixed display of over and selection circles in emoji picker overlay. 2026-04-23 21:09:43 +03:00
23rd bfe2b8bc10 Preserved caption text on cancel of send files box. 2026-04-23 21:09:43 +03:00
23rd 876117bbf4 [img-editor] Fixed possible crash on exit with text item selected. 2026-04-23 21:09:43 +03:00
23rd 092f81dad6 [img-editor] Added icons for text style options in context menu. 2026-04-23 21:09:43 +03:00
23rd 5d768d81b0 Moved dictionaries manifest into an MTP-fetched pinned post. 2026-04-22 12:19:04 +03:00
John Preston 56851519da Fix possible layout bug with media. 2026-04-21 23:24:12 +07:00
John Preston 810ebff849 Fix clickable geometry of "via @bot". 2026-04-21 23:01:19 +07:00
Ilya Fedin 7e77f629f6 Keep QProcess::startDetached in OpenSystemSettings when sandboxed 2026-04-21 22:37:41 +07:00
John Preston 1abea47914 No isolate/only-custom emoji for text appearing. 2026-04-21 22:29:26 +07:00
John Preston ae7ab838f4 Don't show 406 error messages in AI. 2026-04-21 17:50:58 +07:00
John Preston c79f62d874 Fix joining unmuted on macOS. 2026-04-21 17:10:22 +07:00
John Preston f34e62f24a Fix text appearing height animation. 2026-04-21 16:26:32 +07:00
John Preston 4f89780cfe Fix topic icon in new topic about view. 2026-04-21 15:10:06 +07:00
John Preston f1b3588465 Beta version 6.7.7.
- Proxy auto-rotation option.
- Allow seeking in video messages.
- Styled text items with emoji support in image editor.
- Wheel zoom and middle-button panning in image editor.
- Reply header with preview in send files box.
- Bring back original video quality option.
- Delete owned sticker set from sticker set box.
- Add-to-Sticker-Set and Add-to-Emoji-Set submenus for foreign packs.
- Screen reader support for language list and country select box.
- Fix stories in albums with reorder enabled.
- Fix layout for RTL messages.
2026-04-20 22:08:24 +07:00
John Preston fdc0f1e648 Improve accessibility code for countries list. 2026-04-20 22:08:24 +07:00
John Preston c0bcdc3829 Fix build with MSVC. 2026-04-20 22:08:24 +07:00
23rd d34f875d35 Added Add-to-Emoji-Set submenu for custom emoji from foreign packs. 2026-04-20 16:39:26 +03:00
23rd 7b22a2aea7 Added Add-to-Sticker-Set submenu for stickers from foreign packs. 2026-04-20 16:32:45 +03:00
23rd 4b26971b48 Added menu action with dynamic image thumbnail. 2026-04-20 16:32:45 +03:00
23rd 640d1f459b [img-editor] Fixed wheel delta with pressed Shift while zoom canvas. 2026-04-20 16:32:45 +03:00
23rd 8386608953 Added ability to delete owned sticker set from sticker set box. 2026-04-20 13:55:23 +03:00
23rd d7cfa68a3f [img-editor] Added wheel zoom and middle-button panning for scene items. 2026-04-20 13:55:23 +03:00
23rd 2a816019b6 Fixed sticker creator image fitting exactly inside canvas square. 2026-04-20 13:55:23 +03:00
23rd e9944ba83d Slightly improved style of scrollbar in emoji picker overlay. 2026-04-20 13:55:23 +03:00
23rd 9c21d99e01 Improved style of emoji picker overlay with shadow and tail. 2026-04-20 13:55:23 +03:00
23rd 7b720b2a3f Added expand/collapse animation to emoji picker overlay. 2026-04-20 13:55:23 +03:00
23rd 3bddcb5461 Replaced sticker creator emoji row with new picker overlay. 2026-04-20 13:55:23 +03:00
23rd 4187b3a3c9 Added emoji picker overlay widget with strip and expanded grid. 2026-04-20 13:55:23 +03:00
23rd 4e526476e3 Replaced sticker creator box with generic box. 2026-04-20 13:55:23 +03:00
23rd 3697e1b674 Replaced existing-sticker picker with centered tabbed panel dropdown. 2026-04-20 13:55:23 +03:00
23rd 58c7467720 [img-editor] Locked crop frame as stencil and clipped output by shape. 2026-04-20 13:55:23 +03:00
23rd 1d035109ea Replaced sticker emoji picker row with dropdown panel. 2026-04-20 13:55:23 +03:00
23rd fc85b09e88 Switched existing sticker pick to inline dropdown that excludes self. 2026-04-20 13:55:23 +03:00
23rd b51c0f1ee5 Replaced emoji input field with emoji row and radial upload button. 2026-04-20 13:55:23 +03:00
23rd 4d692e635b Added flow to open sticker editor with transparent canvas. 2026-04-20 13:55:23 +03:00
23rd 07a952a2a6 Polished sticker picker scroll wiring and creator upload teardown. 2026-04-20 13:55:23 +03:00
23rd 2589a244dd Added flow for creating new static webp sticker. 2026-04-20 13:55:23 +03:00
23rd 99ed365695 Added flow for adding existing sticker to owned set. 2026-04-20 13:55:23 +03:00
23rd 7f93d7ec6f Added owned-set add-cell with popup menu to sticker set box. 2026-04-20 13:55:23 +03:00
23rd 17b72ef1bd Added assets and lang keys for sticker creation menu. 2026-04-20 12:57:12 +03:00
23rd e99442cb1c [img-editor] Fixed contrast text color in edit proxy for framed type. 2026-04-20 12:54:18 +03:00
23rd 085f139abd [img-editor] Clamped text width to prevent negative layout constraints. 2026-04-20 12:54:18 +03:00
23rd f616d19a4e [img-editor] Fixed emoji drawing in text wrapped across line boundaries. 2026-04-20 12:54:18 +03:00
23rd 61cf3a960c [img-editor] Ignored stale deferred text edit callbacks from prior edit. 2026-04-20 12:54:18 +03:00
23rd f94ec5a8a9 [img-editor] Added text editing state flow to keep palette consistent. 2026-04-20 12:54:18 +03:00
23rd a2f228e74d [img-editor] Fixed text selection color sync and isolated from brush. 2026-04-20 12:54:18 +03:00
23rd 3ec1ff8c7e [img-editor] Synced palette color and tool selection with text focus. 2026-04-20 12:54:18 +03:00
23rd 631fe4f362 [img-editor] Improved color handling in text items. 2026-04-20 12:54:18 +03:00
23rd 6153480e43 [img-editor] Fixed text wrapping, spacing, and geometry in editor items. 2026-04-20 12:54:17 +03:00
23rd e1789d40d4 [img-editor] Added auto-fitting width for text editing overlay. 2026-04-20 12:54:17 +03:00
23rd 0fff162c65 [img-editor] Added emoji support in photo editor text items. 2026-04-20 12:54:17 +03:00
23rd 0b70be9a9b [img-editor] Added styled text items. 2026-04-20 12:54:17 +03:00
23rd 04aec11daa Added reply header with preview to send files box. 2026-04-20 12:53:48 +03:00
23rd 91145dc868 Removed matching of installed emoji pack titles from emoji search. 2026-04-20 09:30:08 +03:00
23rd 252bf3e363 Improved search of emoji from emoji list widget. 2026-04-20 08:37:56 +03:00
23rd 22449a0913 Fixed opening of stories in albums with reorder enabled.
Regression was introduced: c5ea86b474.
2026-04-20 07:37:21 +03:00
John Preston 5ef60debc2 Fix build with MSVC. 2026-04-20 10:54:47 +07:00
John Preston eac7141ce7 Use photo as video thumbnail in webpage. 2026-04-20 10:54:47 +07:00
John Preston 6468b8ab19 Proxy share t.me, QR with tg://, accept both. 2026-04-20 10:54:47 +07:00
Reza Bakhshi Laktasaraei 11e84ffbef feat(accessibility): add screen reader support for language list 2026-04-20 10:47:13 +07:00
Ilya Fedin 6a1212de82 Remove QPalette::Accent support
Looks like even Qt's internal plugins don't always set it and when it's set, it's similar to highlight anyway
2026-04-19 23:08:24 +07:00
Ilya Fedin 92192715bb Use shorter QPalette API 2026-04-19 23:08:24 +07:00
Ilya Fedin 786e8999e1 Synchronize system accent color avilability between toggle and setting 2026-04-19 23:08:24 +07:00
John Preston 02f0d7bb8a Don't set empty good thumbnail.
Image(QImage&&) for isNull() sets a fully transparent QImage.
This leads to uninitialized memory QImages in prepared thumbnails,
because we allocate QImage and start painting thumbnail parts in it.
2026-04-19 23:06:43 +07:00
John Preston f543c2569e Don't offer sending text as file if hasImage. 2026-04-19 23:06:28 +07:00
John Preston 9878ee6fa7 Improve work on original video quality. 2026-04-19 22:19:47 +07:00
cumdev1337 827ec824d1 Bring back original video quality option 2026-04-19 17:03:38 +07:00
John Preston c9ca79ab47 Don't remember incorrect value in textRealWidth. 2026-04-19 16:34:36 +07:00
dependabot[bot] ed1e3cabc3 Bump actions/deploy-pages from 4 to 5
Bumps [actions/deploy-pages](https://github.com/actions/deploy-pages) from 4 to 5.
- [Release notes](https://github.com/actions/deploy-pages/releases)
- [Commits](https://github.com/actions/deploy-pages/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/deploy-pages
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-18 06:50:24 +07:00
GitHub Action 6419bb15fb Update User-Agent for DNS to Chrome 146.0.0.0. 2026-04-17 22:06:45 +07:00
Sergey A. Osokin d53ee9c241 Fix warnings. 2026-04-17 22:04:20 +07:00
Ilya Fedin 5bb03928a1 Fix sticker size option with scaling 2026-04-17 15:08:11 +07:00
John Preston c354ed7814 Simplify, reuse stuff in country_select_box. 2026-04-17 15:07:53 +07:00
Reza Bakhshi Laktasaraei 3fbe30231e feat(accessibility): add screen reader support for country select box 2026-04-17 14:56:27 +07:00
Ilya Fedin b5f3ea60b7 Try to use KSandbox::startHostProcess 2026-04-17 14:55:16 +07:00
Ilya Fedin bc2eb3df82 Remove explicit disconnections where object lifetime is the same 2026-04-17 14:54:28 +07:00
Ilya Fedin 92488b29d5 Move GNotification action creation to the rest of notification code 2026-04-17 14:54:28 +07:00
Ilya Fedin ef848e0a1b Port Linux notifications to std::get_if
There's no sense to use abstrations calling std::holds_alternative
2026-04-17 14:54:28 +07:00
John Preston 4319245dd3 Allow seeking in video messages. 2026-04-17 12:31:58 +07:00
John Preston 5eed8136dd Fix layout for RTL messages. 2026-04-17 12:31:58 +07:00
John Preston 66b38ccb5f Pause animations only if video message isn't paused. 2026-04-17 12:31:58 +07:00
John Preston aae5631f19 Fix bio cut-off in calls peer info. 2026-04-17 00:23:31 +07:00
Ilya Fedin 6cc58e3701 Use git -C with xargs 2026-04-16 23:45:27 +07:00
John Preston 2cd90eb3ce Add proxy auto-rotation option. 2026-04-16 21:24:39 +07:00
John Preston 1b96772126 Allow continue macOS build after partial. 2026-04-16 21:24:39 +07:00
John Preston f31421a311 Fix unread media indicator display. 2026-04-16 21:24:39 +07:00
John Preston e3a34eae29 Cache date string in dialog rows. 2026-04-16 21:24:39 +07:00
John Preston ce10b71122 Fix geometry counting around collapsed blockquote. 2026-04-16 21:24:39 +07:00
John Preston d39af8edf3 [ai] Fix custom command for icon creation. 2026-04-16 21:24:39 +07:00
John Preston b87df709df Fix microphone testing in Settings. 2026-04-16 21:24:39 +07:00
John Preston 0e7a483c7b Fix muted icon outline clipping. 2026-04-16 21:24:39 +07:00
John Preston 668a91bd15 Version 6.7.6.
- Gradient-reveal animation for text appearing in messages.
- Support draw-to-reply from shared media.
- Frame-by-frame stepping and hold-to-speedup hotkeys in media view.
- Fix loading stickers and emoji search results.
- Custom emoji picker for premium quick reaction.
- Search in section of pinned messages.
- Recent search entries in settings search.
- Hide phone number in main settings section.
- Suggest sending large texts as files.
- Allow creating polls with single answer option.
- Bring menus and fullscreen media viewer to active space on macOS.
- Fix several poll display and voting menu issues.
- Fix possible crashes in chats list, url auth and others.
2026-04-14 22:32:34 +07:00
John Preston 59e9a91a1e First text appearing animation duration floor. 2026-04-14 22:32:34 +07:00
John Preston 33dda9dffd Return possibility for maps handler customization on Windows. 2026-04-14 21:55:38 +07:00
John Preston f9d86283a3 Fix build with GCC. 2026-04-14 21:53:03 +07:00
Ilya Fedin c5317e6de9 Revert "Replace mozjpeg with jpegli on Linux"
This reverts commit cb5fdac0da.
2026-04-14 21:50:44 +07:00
John Preston d36f7d598c Make sure we check for non-null in background first. 2026-04-14 13:41:52 +07:00
John Preston 59e64f56fa Fix possible crash in chats list. 2026-04-14 13:41:51 +07:00
John Preston 05d2881c16 Disable attempts to launch bingmaps.
Fixes #30551.
2026-04-14 13:23:25 +07:00
John Preston ab61ddaf16 Disable shrink-to-text with media shown. 2026-04-14 13:22:52 +07:00
John Preston cfa8ecbb2e Fix possible crash in ResolveWindowDefault. 2026-04-14 13:22:39 +07:00
23rd d6cb8d62af Added drag support for url inline keyboard buttons in messages. 2026-04-14 09:16:15 +03:00
23rd faa7c1ca55 Fixed spoiler menu entry display for non-media files in send files box. 2026-04-14 09:16:15 +03:00
23rd 52615a3ccb Added support of draw-to-reply from shared media. 2026-04-14 09:16:15 +03:00
23rd de737b3cbe Added support of pagination to stickers and emoji search. 2026-04-14 09:16:15 +03:00
23rd 9245c2e49b Fixed missing reply action for timecode reply in voice messages menu.
Related commit: 73d0b4cb84.
Fixed #30557.
2026-04-14 09:16:15 +03:00
23rd 365cd728b8 Fixed display of button for new poll in shared polls. 2026-04-14 09:16:15 +03:00
23rd d6d7046edb Fixed ability to open profile of poll option creator from menu. 2026-04-14 09:16:15 +03:00
23rd 418233fa2e Added frame-by-frame stepping hotkeys to media view on paused video. 2026-04-14 09:16:15 +03:00
23rd 37d870fdd9 [poll-view] Fixed option bar width to match percentage. 2026-04-12 19:33:25 +03:00
John Preston 9af4fb4a26 Improve text-tight bubble width, appear animation. 2026-04-12 17:43:00 +07:00
John Preston 24edbf43ed Implement gradient-reveal for text appearing. 2026-04-12 16:18:42 +07:00
23rd 8ed9085474 Added recent search entries to settings. 2026-04-11 17:37:12 +03:00
23rd a1389ac778 Added inline buttons to macOS notifications from notification user. 2026-04-11 16:00:27 +03:00
23rd 4f8b3efa5c Fixed possible crash from url auth box. 2026-04-11 15:13:21 +03:00
23rd 2200dbb406 Added emoji selector with custom emoji for premium quick reaction. 2026-04-11 14:57:24 +03:00
23rd f6d1208992 Fixed poll options refresh after append/delete answer updates. 2026-04-11 13:26:28 +03:00
23rd 5ff29c41c1 Fixed retract vote menu item display for unvoted polls in media view. 2026-04-11 12:38:39 +03:00
23rd 1d04cae3c2 Replaced chart emoji with themed poll icon in reply view. 2026-04-11 12:31:50 +03:00
23rd 57c5ddc774 Added emoji pack info to poll option context menu. 2026-04-11 11:53:37 +03:00
23rd 6f4c9f6f5a [poll-view] Fixed sending custom emoji from add-option overlay. 2026-04-11 11:35:43 +03:00
23rd 0dd4722865 Added ability to hide phone number in main settings section. 2026-04-11 11:26:28 +03:00
John Preston 045cb6822f Fix timestamp text appearing glitch. 2026-04-11 14:06:58 +07:00
23rd f4cbbb251f Moved unread voice dot indicator next to media label in dialog list.
Related commit: 9febcd88d4.
2026-04-11 09:11:16 +03:00
23rd 978116b107 Fixed inline bot photo results with unknown dimensions being dropped. 2026-04-11 08:53:17 +03:00
23rd 2ff6ac44dc Added userpic pin to map in live location messages. 2026-04-10 19:52:33 +03:00
23rd 0a43ca759b Fixed live location time overlap and cleared status text after expiry.
Regression was introduced in f5486e3090.
2026-04-10 19:52:33 +03:00
23rd fcb695d691 [poll-create] Allowed creating polls with single answer option. 2026-04-10 17:59:22 +03:00
23rd 51021d1508 Added YouTube-like hold-to-speedup gesture and hotkeys to media view. 2026-04-10 17:23:03 +03:00
John Preston ac3c731b64 Use text real width for bubbles. 2026-04-10 21:16:33 +07:00
John Preston 2994268b83 Don't re-download the sent text file. 2026-04-10 20:59:49 +07:00
John Preston 05cf8aaa0f Suggest sending large texts as files. 2026-04-10 19:26:30 +07:00
23rd 9a9307ead3 Fixed compose search calendar jumps for pinned and sublist threads. 2026-04-10 15:06:20 +03:00
23rd 33f86dc7b0 Added support of search in section of pinned messages. 2026-04-10 15:06:20 +03:00
23rd a4e7923b15 [poll-view] Prevented bogus poll percentages without total voter count. 2026-04-10 15:06:20 +03:00
23rd 4a0b47d286 Added inline update button to unsupported message fallback. 2026-04-10 15:06:20 +03:00
John Preston b4b3446135 Add loading draft streaming animation. 2026-04-10 15:33:01 +07:00
John Preston 82650f5420 Fix build with MSVC. 2026-04-10 15:32:33 +07:00
John Preston 4646cc7f21 Correct text appear continuation. 2026-04-10 14:21:50 +07:00
John Preston 2810b186bb Fix possible crash in forum new window open. 2026-04-10 14:21:50 +07:00
John Preston 8f2fbff93e Fix streamed drafts updates. 2026-04-10 14:21:50 +07:00
John Preston cdf1f16944 Fix messages appearance in botforums. 2026-04-10 14:21:50 +07:00
John Preston 8dfb14cf7a Fix possible crash in empty menu show. 2026-04-10 14:21:47 +07:00
John Preston 432072a3d4 Stream several messages together. 2026-04-10 14:21:30 +07:00
23rd c773f16a4a Added proxy check IP exposure warning before status check. 2026-04-10 09:13:31 +03:00
23rd bdcdafab2d Fixed album forwarding with top peers selector. 2026-04-10 09:13:31 +03:00
23rd a8b59804fa Disabled debug logging by default for macOS debug builds. 2026-04-10 09:13:31 +03:00
John Preston 07250a1bcf Revert translation by "Don't translate {lang}". 2026-04-10 12:55:02 +07:00
John Preston d0e24b555c Bring fullscreen media viewer to active space on macOS. 2026-04-09 17:06:44 +07:00
23rd 61f89d7b33 Fixed build with Xcode 26.4. 2026-04-09 12:36:51 +03:00
23rd 88404cfddb Removed unused private fields. 2026-04-09 12:36:51 +03:00
John Preston 111b15a855 Allow many lines in ConfirmInviteBox about. 2026-04-09 16:09:16 +07:00
John Preston 263ddc3bcf Fix possible crash in widget destruction. 2026-04-09 11:32:51 +07:00
John Preston 4009a47377 Fix word-wrapping of streamed text. 2026-04-08 23:14:07 +07:00
John Preston 7cd4bd3cd4 Rewrite text appear animation. 2026-04-08 17:35:36 +07:00
John Preston 1c94acdeca Don't force drop-to-left in media context menu. 2026-04-08 17:35:05 +07:00
ArtemOver e37bbb2bb7 chore: add Void Linux installation instructions 2026-04-08 06:08:49 +03:00
AlexeyZavar d1cac7804a fix: hide actions for non-history items 2026-04-08 05:32:26 +03:00
People-11 b3e5356b07 feat: refine repeat logic 2026-04-08 05:14:41 +03:00
AlexeyZavar 84e7520707 fix: typo 2026-04-08 03:54:46 +03:00
AlexeyZavar e3e72ffd01 fix: logic in local premium emojis 2026-04-08 01:32:29 +03:00
AlexeyZavar 3f84f27354 chore: refactor markReadAfterAction
https://github.com/AyuGram/AyuGramDesktop/issues/328
2026-04-07 23:36:38 +03:00
AlexeyZavar 4b470a9205 fix: make it build 2026-04-07 22:54:43 +03:00
AlexeyZavar 2079c8d4cf Merge tag 'v6.7.5' into dev 2026-04-07 22:26:59 +03:00
AlexeyZavar 7871bc7097 feat: allow hiding gift from input field 2026-04-07 22:14:00 +03:00
AlexeyZavar ae8de84828 chore: redirect from experimental to settings 2026-04-07 21:44:18 +03:00
AlexeyZavar 9fc2ed338d fix: make it build 2026-04-07 20:08:46 +03:00
AlexeyZavar d9c6e3a322 Merge tag 'v6.7.4' into dev 2026-04-07 19:39:36 +03:00
John Preston ca3eb7dca4 Version 6.7.5.
- Support for gradual appearing of bot reply messages.
2026-04-07 23:19:25 +07:00
John Preston f6abf7a2d2 Remove some debug logs. 2026-04-07 22:52:02 +07:00
John Preston a8f9cf430d Fix draft streaming continuation. 2026-04-07 22:33:12 +07:00
John Preston 98f342227f Remove reveal animation on draft replacement. 2026-04-07 22:26:41 +07:00
John Preston 55e284729e Initial implementation of gradual draft streaming. 2026-04-07 22:26:41 +07:00
John Preston fef4e14fb0 Version 6.7.4.
- Add experimental option for "AI Tools" button.
- Jump between markers with Alt+Arrows in media view.
- Info button in AI Tools box.
- Show warning for unofficial app builds.
- Allow text emojify without selecting a style.
- Accept also base64 (non-url) proxy secrets.
- Use tg:// deeplinks for proxy share links.
- Fix newbot deeplink parsing with trailing slash and unicode names.
- Fix file reference refresh for user, group and channel photos.
- Fix stale macOS tray icon colors after appearance switches.
- Fix tooltip crash in top peers selector with small width.
- Fix preserving markers after video quality switch in media view.
2026-04-07 12:53:33 +07:00
John Preston eeafe97614 More strict checks in ffmpeg decodiing. 2026-04-07 12:53:33 +07:00
23rd f869ad620e Fixed detailed button crash when accessibility queried toggle early. 2026-04-07 08:02:11 +03:00
John Preston a5307489ff Accept also base64 (non-url) secrets. 2026-04-07 11:57:42 +07:00
John Preston b1d21600cf Elide too long call button text. 2026-04-07 11:57:42 +07:00
John Preston 3bbef51448 Add an experimental option for "AI Tools" button. 2026-04-07 11:57:41 +07:00
rdmcd a17199c7a9 Fix startchannel deeplink: add missing stories rights and bot defaults fallback.
ParseRequestedAdminRights was missing post_stories, edit_stories and
delete_stories identifiers, causing all admin rights to be discarded
when any of these appeared in the admin parameter. Also, startchannel
always used explicit URL rights even when empty, never falling back to
bot's default admin rights configured via BotFather (unlike iOS client).

Unknown admin right identifiers are now skipped instead of discarding
all already-parsed rights, improving forward-compatibility of deeplinks.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 11:26:02 +07:00
John Preston 13ddffd66a Fix editor open from SendFilesBox. 2026-04-07 11:02:14 +07:00
John Preston cebd3edb9a Fix build. 2026-04-07 08:39:02 +07:00
AlexeyZavar b7b6329e7a fix: restore channel badge 2026-04-06 20:35:57 +03:00
AlexeyZavar 6e21752528 feat: use custom icon for plugin files 2026-04-06 19:39:13 +03:00
AlexeyZavar c9fcb8fdb4 feat: service message time badge 2026-04-06 19:39:12 +03:00
AlexeyZavar 172d842635 chore: send photos in HD by default for new users 2026-04-06 19:39:12 +03:00
AlexeyZavar 7a45cfa8e9 feat: allow hiding AI editor 2026-04-06 19:39:12 +03:00
AlexeyZavar a50dbd5886 fix: poll avatar rounding 2026-04-06 19:39:12 +03:00
AlexeyZavar a17f20463f fix: integrate translator 2026-04-06 19:39:12 +03:00
23rd b80f25fbc5 Made Swift 6 local translation support optional. 2026-04-06 17:52:53 +03:00
23rd 9cb41f4517 Replaced RoundButton text transform constructor arg with setter. 2026-04-06 16:58:16 +03:00
23rd 494833236f Defaulted RoundButton text transform to no-transform. 2026-04-06 16:58:16 +03:00
23rd 7c26a251cf Added text transform to RoundButton as mandatory argument. 2026-04-06 16:58:15 +03:00
23rd d164a49675 Removed premium section on first rate-limited summary click.
Fixed #30201.
2026-04-06 13:15:34 +03:00
KevinHuge 59b089a0cc Fix stale macOS tray icon colors after appearance switches
Summary:
Fix the macOS tray icon refresh path so the menu bar icon updates immediately after system light/dark appearance changes, even while Telegram stays unfocused in the background.

Changes:
The tray icon code was observing status button appearance changes but rendering against NSApp effectiveAppearance on macOS 10.14 and newer. Those two appearance sources do not update in lockstep while Telegram is unfocused, which caused the tray icon to redraw with a stale color until the app was focused. This change makes the renderer use status.button.effectiveAppearance directly so the icon color is derived from the same Cocoa object that emits the refresh signal.
2026-04-06 16:57:03 +07:00
23rd c031f09886 Fixed display of button in connection box on non-default scales. 2026-04-06 12:46:19 +03:00
23rd 3af2bf61fe Fixed tooltip crash when top peers selector widget has small width. 2026-04-06 12:24:28 +03:00
23rd 6f4ed6883b Fixed userpic photo origin to use full user for refresh. 2026-04-06 11:49:28 +03:00
23rd ec94dc26ac Fixed file reference refresh for group and channel photos. 2026-04-06 11:49:27 +03:00
23rd 8decb55e51 Fixed file reference refresh for user personal and fallback photos. 2026-04-06 11:49:27 +03:00
23rd 8346a90d65 Fixed summarize button small clipping during loading animation. 2026-04-06 11:49:27 +03:00
23rd 4191ecc2e6 Added simple animation while jumping between markers in media view. 2026-04-06 11:49:27 +03:00
23rd 783ed506bd Added ability to jump between markers with Alt+Arrows in media view. 2026-04-06 11:49:27 +03:00
John Preston 00bd28278d Show unofficial app warning. 2026-04-06 15:43:44 +07:00
John Preston b51c0ca5e7 Allow trailing slash in newbot link. 2026-04-06 15:41:42 +07:00
John Preston c6c2479268 Fix newbot links parsing. 2026-04-06 15:41:42 +07:00
John Preston 300e0f2fb7 Fix unicode name value in bot create deeplink. 2026-04-06 15:41:42 +07:00
John Preston 00154dcbe9 Fix glitch in empty managed bot username. 2026-04-06 15:41:42 +07:00
23rd 3884348e07 Fixed top bar buttons appearing without animation on select messages. 2026-04-06 15:41:42 +07:00
23rd a7745a2086 Slightly improved detect of non-discrete wheel event in flexible scroll. 2026-04-06 15:41:42 +07:00
23rd 9caeea7edd Changed fallback color for mention icon in dialogs. 2026-04-06 15:41:42 +07:00
23rd ae4e5ad54a Fixed preserving markers after video quality switch in media view. 2026-04-06 15:41:42 +07:00
23rd 18ea990e7a Replaced panel animation with FadeWrap for media preview menus. 2026-04-06 15:41:42 +07:00
23rd 5d557b44e4 Replaced heavy Qt opacity effect with FadeWrap in info profile top bar. 2026-04-06 15:41:42 +07:00
23rd ec312a1f15 Forbidden multi-selection menu for monoforums in share box. 2026-04-06 15:41:42 +07:00
23rd 87877fb506 [poll-view] Added paused state support for emoji and media. 2026-04-06 15:41:42 +07:00
John Preston 9dce30e904 Allow emojify without selecting a style. 2026-04-06 14:58:33 +07:00
John Preston 6fc6bb48ff Add info button to AI Tools box. 2026-04-06 14:23:19 +07:00
John Preston 8fecab58a9 [ai] Suggest non-style constants for durations. 2026-04-06 12:51:09 +07:00
Roman Shishkin df71142949 Change proxy share link from t.me to tg:// deeplink 2026-04-06 12:49:18 +07:00
AlexeyZavar 4b65fd1126 fix: badge toast 2026-04-04 18:15:39 +03:00
AlexeyZavar 814739b52b fix: make it build 2026-04-04 17:56:43 +03:00
AlexeyZavar 2f5970d57c Merge tag 'v6.7.2' into dev 2026-04-04 05:32:26 +03:00
John Preston 79263209b3 Version 6.7.3.
- Fix launch on older macOS versions.
2026-04-04 09:13:10 +07:00
John Preston d56c2c5fc3 Handle flood errors in managed bot creation. 2026-04-04 09:12:56 +07:00
Boris Nagaev 9e922e0610 feat: show official app flag in session details 2026-04-04 04:55:16 +03:00
AlexeyZavar c9792e7bbc chore: improve mutual contacts icon & show toast 2026-04-04 04:42:35 +03:00
AlexeyZavar 8c85ece0cb chore: reuse restart prompt 2026-04-04 03:37:08 +03:00
Ireina 10bb323eb5 feat: add mutual contact indicator to contacts list 2026-04-04 03:15:14 +03:00
Ireina 2c16e4b897 fix: mirrored forward icon in Ayu message preview 2026-04-04 03:14:26 +03:00
Ireina 969cc0778b feat: add message bubble radius slider 2026-04-04 03:14:17 +03:00
Ireina b83533637d fix: shadow-ban removal for unknown users 2026-04-04 03:12:47 +03:00
23rd c8d1044596 Decreased max rounding radius for history view top bar action buttons. 2026-04-04 00:15:53 +03:00
23rd 7011e205d5 Guarded controls visibility update during panel opacity animation. 2026-04-03 23:43:03 +03:00
23rd 6d2cf80f10 Clamped spellcheck cursor position to avoid Qt out-of-range warning. 2026-04-03 23:42:18 +03:00
23rd 172bbb1b29 Fixed crash on macOS 10.13.
Regression was introduced in 8de878693d.
2026-04-03 23:41:55 +03:00
23rd cf45065e15 Guarded check-status callbacks in connection box. 2026-04-03 23:41:55 +03:00
23rd d3460cafd0 Removed duplicated code for ping checker from connection box. 2026-04-03 23:41:55 +03:00
23rd 3386e427a0 Added ability to check status from connection box. 2026-04-03 23:41:55 +03:00
23rd a1a078f998 Improved style of connection box with table-style. 2026-04-03 23:41:55 +03:00
Ireina a4da0f67f7 feat: filter blocked users from message seen list 2026-04-03 21:50:53 +03:00
Ireina fe04679307 feat: filter blocked user avatars in channel comments 2026-04-03 21:50:24 +03:00
Ireina 8628e79245 fix: hide single filtered reactions 2026-04-03 21:49:38 +03:00
Ireina edb549bef6 fix: localized title in message shot dialog 2026-04-03 21:47:35 +03:00
John Preston 085c4ba65d Version 6.7.2.
- System audio capture for desktop sharing on macOS.
- Split voice and audio playback speeds.
- Unread media dot for voice messages in dialog list.
- Add 'x' button to AI Tools promo toast.
- Fix long forward messages preview in box.
- Fix custom emoji reaction search by category.
- Fix double context menu in photo sending confirmation.
- Fix possible crash in middle-elision.
- Fix possible crash in GIFs search.
2026-04-03 17:34:53 +07:00
John Preston 805225de3f Fix possible clamp() contract violation. 2026-04-03 17:34:53 +07:00
23rd 8de878693d Fixed initial tray icon color on macOS dark theme. 2026-04-03 13:34:05 +03:00
23rd 90ec66c34c [img-editor] Added simple implementations of blur brush. 2026-04-03 12:59:54 +03:00
23rd eba39d12aa [poll-view] Applied lang decimal formatting to vote counts. 2026-04-03 12:59:54 +03:00
John Preston 5328e8a750 Fix long forward messages preview in box. 2026-04-03 16:28:06 +07:00
John Preston df27d58597 Fix complex RoundButton ripple. 2026-04-03 16:27:57 +07:00
23rd 8a519995da Added missed summary icons. 2026-04-03 12:07:18 +03:00
John Preston 407bf19641 Fix parts of client hello generation.
Inspired by wide internet discussions and #30513.
2026-04-03 15:48:00 +07:00
John Preston 7091a3d156 Fix possible crash in middle-elision. 2026-04-03 15:47:57 +07:00
23rd 990dc0f95c Improved style of toggle summary button and removed star particles. 2026-04-03 11:46:37 +03:00
23rd 77f89d1967 Applied dynamic corner rounding to history view top bar action buttons. 2026-04-03 11:00:46 +03:00
23rd 3d2b8439ee Added dynamic corner rounding to bot reply keyboard buttons. 2026-04-03 10:32:36 +03:00
23rd f3315e2c45 Added middle elision for peer names to narrow export top bar. 2026-04-03 10:14:15 +03:00
23rd 4fcaa1d1bb Fixed stale profile color glitch under media player in one column mode. 2026-04-03 09:49:57 +03:00
23rd 883a61e5a0 Split voice and audio playback speeds. 2026-04-03 09:23:42 +03:00
23rd 2f2fae3892 Synced playback speed button state across multiple windows. 2026-04-03 08:50:29 +03:00
23rd 1fa0a8e7ee [img-editor] Removed built-in palette color when width is too small. 2026-04-03 08:25:29 +03:00
John Preston cd1e0d710d Remove legacy context menu in send files box. 2026-04-03 10:35:21 +07:00
John Preston beeb4663c4 Add 'x' button to AI Tools info toast. 2026-04-03 00:47:46 +07:00
John Preston a6d5300057 Make price filter in left button. 2026-04-03 00:47:46 +07:00
23rd a228e9c0ad Reverted "Returned missed item back to to-do list for editing."
This reverts commit 5b29d3bb72.
2026-04-02 20:22:08 +03:00
23rd 829b0b5d27 Reverted "Fixed inline results disappearing when media dimensions..."
This reverts commit 6df0333ca2.
2026-04-02 20:22:08 +03:00
23rd 7e07336e3b [poll-view] Added hiding of add-option overlay on message field focus. 2026-04-02 19:58:58 +03:00
23rd 4663ea659a [poll-view] Slightly improved voting animation for multi choise. 2026-04-02 19:58:58 +03:00
23rd 86a07d3ab0 [poll-view] Improved style to avoid overlapping of result bar and text. 2026-04-02 19:58:57 +03:00
23rd 2119dae0b5 Added simple radial upload progress overlay to userpic widgets. 2026-04-02 19:58:57 +03:00
23rd 6769944e16 Fixed regression with missing play button in list mode for inline bots. 2026-04-02 19:58:57 +03:00
23rd 6b45727129 Fixed emoji category filter losing results after cloud search response. 2026-04-02 19:58:57 +03:00
23rd d98b5b2fe6 Added timecode markers and chapter labels to media view with video. 2026-04-02 19:58:57 +03:00
23rd 959863c70a Added simple CrossFadeLabel class with crossfade and slide animation. 2026-04-02 19:58:57 +03:00
23rd 689fc57932 Added gap-style divider mode to MediaSlider. 2026-04-02 19:58:57 +03:00
23rd 5732b4f48c Added support of system audio capture for desktop sharing on macOS. 2026-04-02 19:58:57 +03:00
23rd 9febcd88d4 Added unread media dot indicator for voice messages to dialog list. 2026-04-02 19:58:57 +03:00
John Preston af550199d4 Use correct icon for AI Tools in premium. 2026-04-02 15:43:13 +07:00
AlexeyZavar 87eedb822c chore: disable replaced feature 2026-04-01 21:58:54 +03:00
AlexeyZavar cbe908da79 fix: crash related to semi-transparent deleted messages 2026-04-01 21:39:24 +03:00
John Preston 666e40f002 Version 6.7.1.
- Fix crash in emoji panel animation.
2026-04-02 00:42:10 +07:00
23rd 2c003bc22e Fixed possible crash on huge timer tick for polls with close date. 2026-04-02 00:42:10 +07:00
23rd bcaa449510 [poll-view] Disabled options shuffle for creator. 2026-04-02 00:42:10 +07:00
23rd 08f9fb2492 [poll-view] Removed add-option for forwarded messages. 2026-04-02 00:42:09 +07:00
John Preston 6bcf4cb42d Fix crash in PanelAnimation with large scale. 2026-04-02 00:30:12 +07:00
John Preston a36d90481c Fix phantom fron-name link ripple. 2026-04-02 00:30:06 +07:00
John Preston 0f85080c15 Version 6.7.
- AI Text Editor for messages.
- Enhanced Polls with media, locations and suggested options.
- Bots can create and managed other Bots on your behalf.
- Drawing tools in image editor (brush, marker, eraser, arrow).
- Trim recorded voice messages.
- Per-file captions when sending multiple files.
- Audio sharing in calls on Linux.
2026-04-01 13:24:42 +07:00
John Preston afddcbdd40 Fix build with GCC. 2026-04-01 13:24:42 +07:00
23rd ca63b12670 Restored circle-backed unread icon badges in narrow type of dialogs. 2026-04-01 04:38:00 +03:00
23rd 74e1c8c7d8 Added tracking of mouse over to waveform in voice messages. 2026-04-01 04:38:00 +03:00
23rd a504dc2287 Added author name to topic close/reopen service messages. 2026-04-01 03:57:17 +03:00
23rd 82884b8311 Fixed via bot name overflow in view message when peer has emoji status. 2026-04-01 03:48:37 +03:00
23rd 30fa759cde Added ability to add stickers not in set to favorites. 2026-04-01 03:47:18 +03:00
23rd 0fad7fc234 Fixed build. 2026-03-31 23:07:46 +03:00
23rd 92fc06fd51 [poll-view] Fixed custom emoji in add-option. 2026-03-31 23:07:45 +03:00
23rd f04a4d5c7f [poll-view] Fixed possible date-info overlapping with footer line. 2026-03-31 23:07:45 +03:00
23rd d958f66e77 [poll-view] Added workaround for highlighting of non-media voted option. 2026-03-31 23:06:43 +03:00
23rd aa74efdee7 [poll-create] Fixed wrong grabbed toggles state before show animation. 2026-03-31 23:06:43 +03:00
John Preston 76c5a7f8d0 Fix build with MSVC. 2026-04-01 00:34:40 +07:00
John Preston 3ec37968e9 Pass bot/channel to invoice request. 2026-04-01 00:16:24 +07:00
John Preston bb6fc19768 Check all peers load status in short updates. 2026-04-01 00:16:24 +07:00
John Preston b6ae741000 Implement managed bot creation limits toasts. 2026-04-01 00:16:22 +07:00
John Preston 0c3cec0da4 Fix streaming messages in topics. 2026-04-01 00:13:52 +07:00
John Preston fe199447d5 [ai] Don't add BOM to UTF-8 files. 2026-03-31 23:16:20 +07:00
John Preston 96f23bf006 Handle repeated click in subsection tabs. 2026-03-31 23:16:20 +07:00
John Preston 4aee7bfbc1 Fix edition of unsupported messages. 2026-03-31 23:02:42 +07:00
23rd 892de6154d Added initial support gallery flag for inline bot results layout mode. 2026-03-31 15:42:26 +03:00
23rd 6df0333ca2 Fixed inline results disappearing when media dimensions are unavailable. 2026-03-31 15:41:16 +03:00
23rd f5486e3090 Moved location venue text below map thumbnail to match mobile. 2026-03-31 14:49:14 +03:00
23rd 989cbf0837 Fixed draw-to-reply button in media viewer opened from chat sections. 2026-03-31 13:50:27 +03:00
John Preston 4d8244edd5 [ai] Add memory-layout review guideline. 2026-03-31 17:40:16 +07:00
John Preston 4c6404ed64 Don't show name ripple when clicking userpic. 2026-03-31 17:40:16 +07:00
23rd 82f9aa1a2a Fixed path traversal in bulk file download via filename sanitization. 2026-03-31 13:37:10 +03:00
23rd 73d0b4cb84 Added ability to reply with timecode of currently playing voice message. 2026-03-31 13:37:10 +03:00
23rd 94b8685f23 Added initial implementation of smart emoji search. 2026-03-31 13:37:10 +03:00
John Preston 8f56ef4502 Disallow "Disable Sharing" for service users. 2026-03-31 15:57:42 +07:00
John Preston 27b041c4c5 Support touch-select/menu in FlatLabel. 2026-03-31 15:55:02 +07:00
John Preston d4ad55f006 Fix possible crash in original text crop. 2026-03-31 15:37:15 +07:00
John Preston 50cd572754 Support blockquote / pre in caption / ai tools. 2026-03-31 14:26:57 +07:00
John Preston f8efc992ef [ai] Improve Codex subagent progress tracking. 2026-03-31 12:59:34 +07:00
John Preston 95a53d51a3 "Set Bot Photo" button in managed bots. 2026-03-31 12:59:34 +07:00
23rd f62ae325df [img-editor] Added aspect ratio presets menu to crop tool. 2026-03-31 07:40:24 +03:00
23rd 8a1001333e [poll-create] Fixed formatting support in input fields. 2026-03-31 07:30:54 +03:00
23rd 8158c7f798 [poll-view] Fixed support of spoiler formatting. 2026-03-31 07:30:54 +03:00
23rd 3c8d8d9243 [poll-create] Removed forced lock on revoting when quiz mode is set. 2026-03-31 07:30:54 +03:00
23rd 319a914b66 Fixed closing forum by Escape instead of navigating back from stack. 2026-03-31 07:30:54 +03:00
John Preston d24e73d6c7 Re-update lib_ui. 2026-03-30 22:37:29 +07:00
John Preston 175cb10ef6 [ai] Add trailing return type rule to review. 2026-03-30 22:35:10 +07:00
John Preston 1b153ded83 Support AI Tools in media box. 2026-03-30 22:23:29 +07:00
John Preston 8349e7504a [ai] Add a review guideline about make_state. 2026-03-30 18:53:39 +07:00
John Preston 828eed0c34 Show select style tooltip. 2026-03-30 18:53:39 +07:00
23rd c4e53b55ce Showed slash button in field only when bots have registered commands. 2026-03-30 13:42:23 +03:00
23rd 3e6da6210e Added to dialogs mute icon near name behind new experimental option. 2026-03-30 13:42:23 +03:00
23rd aa5e0440d4 Replaced int botStatus with a type-safe Data::BotStatus enum class. 2026-03-30 13:42:23 +03:00
23rd 8f4b6f80ad Passed PageUp/PageDown from compose search input to results list scroll. 2026-03-30 13:42:23 +03:00
23rd b5b563fdec Skipped local messages in Ctrl+Up/Down reply navigation.
Related commit: faa48cad44.
Ancient good fix for other sections: 924780d8d8.
Fixed #30160.
2026-03-30 11:39:21 +03:00
23rd faa48cad44 Reverted all fixes that broke replying with Ctrl+Up/Down hotkey.
Reverted 2a28b53400, e672041a79 and a05d85673a.
Unfixed #30160.
2026-03-30 11:08:03 +03:00
23rd 71afa9a481 Allowed timecode parsing inside square brackets withing message. 2026-03-30 11:01:56 +03:00
23rd bd6c50c4c2 [img-editor] Dropped saved brush sizes. 2026-03-30 11:01:56 +03:00
23rd cec81616a4 Moved out highlight scroll logic from sections to single place. 2026-03-30 11:01:56 +03:00
23rd 59bf5515c3 Adjusted scroll position for highlighted items in media groups.
Related commit: 2b53df98cd.
2026-03-30 11:01:56 +03:00
23rd d5f4c5366c [poll-create] Changed default enabled settings. 2026-03-30 10:19:14 +03:00
23rd ee073f2e9b [poll-create] Slightly improved style document generic small preview. 2026-03-30 10:19:14 +03:00
23rd b86ed7775a Added ability to change notify settings for reactions and poll votes. 2026-03-30 10:19:14 +03:00
23rd 90191819bd Added api support of notify settings for reactions and poll votes. 2026-03-30 10:19:14 +03:00
23rd 094c43293d Added support of notifications for poll votes. 2026-03-30 10:19:14 +03:00
23rd d099e29fb9 [poll-view] Fixed add-option overlap with last poll option filling bar. 2026-03-30 10:19:14 +03:00
23rd 90297d838d Fixed marking unread poll votes as read on content view. 2026-03-30 10:19:14 +03:00
23rd 2c9137571e [poll-view] Fixed highlight for poll option after refactor. 2026-03-30 10:19:14 +03:00
23rd a479459d76 Added support of link to specific option in poll. 2026-03-30 10:19:14 +03:00
23rd 0685687161 [poll-view] Removed weak_ptr from Poll::Part. 2026-03-30 10:19:14 +03:00
23rd 9f4923fc79 [poll-view] Fixed ripple for save button. 2026-03-30 10:19:14 +03:00
23rd f2c80f5b44 [poll-view] Fixed viewing public votes in hidden-results after voting. 2026-03-30 10:19:14 +03:00
23rd bcb447520e Added printable representation to PollData. 2026-03-30 10:19:14 +03:00
23rd e66a5a3442 [poll-view] Moved poll member variables into their owning Parts. 2026-03-30 10:19:14 +03:00
23rd 4b3945dec8 [poll-view] Moved poll paint and update methods into Parts. 2026-03-30 10:19:14 +03:00
23rd daa46ab296 [poll-view] Moved remaining methods into their owning Parts. 2026-03-30 10:19:14 +03:00
23rd 055bea4562 [poll-view] Extracted poll header and options into composable Parts. 2026-03-30 10:19:14 +03:00
23rd 73dd472e28 [poll-view] Extracted poll add-option row into composable Part. 2026-03-30 10:19:14 +03:00
23rd 763e9dad87 [poll-view] Extracted poll footer into composable Part. 2026-03-30 10:19:14 +03:00
23rd 6eb486d885 Added hidden-results poll info label to context menu. 2026-03-30 10:19:14 +03:00
23rd 48027ae66b [poll-create] Added lottie icon to toast. 2026-03-30 10:19:14 +03:00
23rd c0ae279031 Added menu item for vote retraction to poll option menu. 2026-03-30 10:19:14 +03:00
23rd 74f2c49284 Slightly optimized include of polls.style. 2026-03-30 10:19:14 +03:00
23rd 42e5bdeca5 [poll-view] Improved support of hidden-results state with toast. 2026-03-30 10:19:14 +03:00
23rd 7cd8b21af9 [poll-view] Improved support of hidden-results state with toast. 2026-03-30 10:19:14 +03:00
23rd fbc217d60c Slightly improved style of geo location in media preview. 2026-03-30 10:19:14 +03:00
23rd ec3d981998 Fixed file reference refresh for media within poll. 2026-03-30 10:19:14 +03:00
23rd 75632f7c86 Added stale media reupload guard before sending poll with expired files. 2026-03-30 10:19:14 +03:00
John Preston c7ec23b872 Update API scheme on layer 224. 2026-03-30 12:53:19 +07:00
John Preston 5472f97797 Fix many touchscreen-related problems. 2026-03-28 22:45:39 +07:00
Ilya Fedin 79d97463ec Ignore system-synthesized mouse events in widgets accepting touch 2026-03-28 22:45:22 +07:00
John Preston 4015192c4a Reorder lang keys a bit. 2026-03-28 21:21:44 +07:00
23rd c467238344 Replaced raw strings with phrases in pill tabs from poll context menu. 2026-03-28 15:18:53 +03:00
23rd 3a75568c2f [poll-view] Added menu for attach button for media with different types. 2026-03-28 15:15:42 +03:00
23rd b6b9edcbea Extracted poll media preview and sticker panel into single place. 2026-03-28 15:14:41 +03:00
23rd 0f337ebbea [poll-view] Fixed click handler for geo location as attached media. 2026-03-28 14:33:20 +03:00
23rd 65094326e8 Improved style of pill tabs. 2026-03-28 12:31:03 +03:00
23rd a29acd4882 Brought non-sprite shadows revolution. 2026-03-28 11:50:50 +03:00
John Preston fa8eaaff4f Fix build with MSVC. 2026-03-28 15:49:20 +07:00
John Preston de42fb83c5 Support new styles list from appConfig. 2026-03-28 14:48:58 +07:00
John Preston e974d02b44 Toast icon revolution. 2026-03-28 14:48:58 +07:00
23rd e3f2e68947 Added support for app authorization in url auth box. 2026-03-28 10:37:42 +03:00
23rd 5907145fcc Added missed phrases for polls. 2026-03-28 10:29:13 +03:00
23rd 2e7c5c8d7b Added initial support of dual-menu for polls. 2026-03-28 10:29:13 +03:00
23rd 6a187bff11 Extracted pill tabs to separated module. 2026-03-28 10:29:13 +03:00
23rd 8579f1db95 Added simple view to media preview for audio. 2026-03-28 10:29:13 +03:00
23rd aeed2a0bcd [poll-create] Slightly improved ux. 2026-03-28 10:29:13 +03:00
23rd 3747d2d91d [poll-create] Added icon to input field for new options. 2026-03-28 10:29:13 +03:00
23rd 97f120a6e2 Allowed location picker for debug configuration. 2026-03-28 10:29:13 +03:00
23rd 1f3ac5170f [poll-view] Delegated media click handling to existing Media objects. 2026-03-28 10:29:13 +03:00
23rd 60ff46b012 Added support of service messages for polls. 2026-03-28 10:29:13 +03:00
23rd dc113c0620 Restricted removing of poll answer by time from app config. 2026-03-28 10:29:13 +03:00
23rd 5b10802cc8 Respected has_unread_votes flag in poll results update. 2026-03-28 10:29:13 +03:00
23rd 6b5b32a62a Added unread_poll_votes_count parsing in ForumTopic.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 10:29:13 +03:00
23rd 3ceb28cd5e [poll-create] Forced public votes on when open answers enabled. 2026-03-28 10:29:13 +03:00
23rd 7e6fcc09f0 [poll-view] Added audio support. 2026-03-28 10:29:13 +03:00
23rd c22e6b7cbf [poll-create] Added audio support. 2026-03-28 10:29:13 +03:00
23rd bb84330289 Added ability to forward poll without description. 2026-03-28 10:29:13 +03:00
23rd ee84743fb0 Switched poll option overlay host to lazy initialization. 2026-03-28 10:29:13 +03:00
23rd da6956df3d [poll-view] Fixed vertical area for voted poll options without media. 2026-03-28 10:29:13 +03:00
23rd 0d003967e8 Added preview for media from poll option to input field reply header. 2026-03-28 10:29:13 +03:00
23rd 589e486cb8 [poll-view] Added preview for media from poll option. 2026-03-28 10:29:13 +03:00
23rd fd634164ed Hid inline add-option for polls on message selection and swipe gestures. 2026-03-28 10:29:13 +03:00
23rd 82ffe0f91f [poll-shared] Added floating button for new poll. 2026-03-28 10:29:13 +03:00
23rd f992678e3a [poll-shared] Added ability to select polls. 2026-03-28 10:29:13 +03:00
23rd 23c6d595ff [poll-view] Fixed bottom button phrase when no votes. 2026-03-28 10:29:13 +03:00
23rd 4221ea66da [poll-view] Added geo location thumbnail to sent poll answers. 2026-03-28 10:29:13 +03:00
23rd c34f25f2bd Added geo location preview support to poll answer media menu. 2026-03-28 10:29:13 +03:00
23rd 5080556836 [poll-create] Added location picker support to poll answer media. 2026-03-28 10:29:13 +03:00
23rd 62674467ed Added geo thumbnail with pin overlay support to dynamic thumbnails. 2026-03-28 10:29:13 +03:00
23rd 42eaddfaba Added geolocation support to poll answer media data layer. 2026-03-28 10:29:13 +03:00
23rd 5f60eb53ff Updated tg_owt to fix PipeWire 1.5.81+ compatibility.
Required for Flathub builds on newer 50 runtimes.
2026-03-28 10:29:13 +03:00
23rd b01e0b77fe Added support of unread poll votes to corner button from history widget. 2026-03-28 10:29:12 +03:00
23rd d1406f3f17 Added support of empty state to poll list widget. 2026-03-28 10:29:12 +03:00
23rd 7942a24c0c [poll-shared] Added initial search support. 2026-03-28 10:29:12 +03:00
23rd 5a2c0b1a19 [view-poll] Improved color of attach button in add-option. 2026-03-28 10:29:12 +03:00
23rd 36373574cf [view-poll] Improved color of emoji button in add-option. 2026-03-28 10:29:12 +03:00
23rd 8585e8cb0c Moved out AddPollOptionWidget from header. 2026-03-28 10:29:12 +03:00
23rd 9fe4419269 [view-poll] Improved color of placeholder for input field in add-option. 2026-03-28 10:29:12 +03:00
23rd 8b37591882 Added ability to delete added poll answer. 2026-03-28 10:29:12 +03:00
23rd 7a5eefcc70 Deduplicated poll overlay setup into ShowAddPollOptionOverlay. 2026-03-28 10:29:12 +03:00
23rd bb6a008309 Extracted ElementOverlayHost to deduplicate overlay management. 2026-03-28 10:29:12 +03:00
23rd 77529fb698 [view-poll] Connected emoji panel with tabbed selector to add-option. 2026-03-28 10:29:12 +03:00
23rd edbdbef2eb Replaced old upload pipeline in create_poll_box with extracted pipeline. 2026-03-28 10:29:12 +03:00
23rd 0d93cb580d Extracted poll media upload pipeline into separated files. 2026-03-28 10:29:12 +03:00
23rd 4f446e0102 [view-poll] Added emoji and attach button placeholders to add-option. 2026-03-28 10:29:12 +03:00
23rd 969108381a [view-poll] Added emoji and attach button placeholders to add-option. 2026-03-28 10:29:12 +03:00
23rd 53dc6d45b9 [poll-view] Added initial inline add-option overlay with input field. 2026-03-28 10:29:12 +03:00
23rd db8878932f Replaced badge-based dialogs icons with standalone colored icons. 2026-03-28 10:29:12 +03:00
23rd cbf8f791bb [poll-view] Added poll option author info to context menu. 2026-03-28 10:29:09 +03:00
23rd 27e04f3e0c Added creator flag to PollData. 2026-03-28 10:29:09 +03:00
23rd 58a2c0f834 [poll-create] Fixed display of emoji button. 2026-03-28 10:29:09 +03:00
23rd bb4d4e239f [poll-create] Added reorder answers support. 2026-03-28 10:29:09 +03:00
23rd ab1af9371e Added poll vote badge to dialogs. 2026-03-28 10:29:09 +03:00
23rd 73baa8e679 [poll-create] Added support of quiz mode with multiple correct answers. 2026-03-28 10:29:09 +03:00
23rd 6e89ec538c [poll-view] Added distinct green checkbox icon for poll option replies. 2026-03-28 10:29:09 +03:00
23rd c992e883b5 [poll-view] Added toast when voting in hidden-results poll. 2026-03-28 10:29:09 +03:00
23rd 39ce6a1a0a [poll-view] Added author ability to view results without voting. 2026-03-28 10:29:09 +03:00
23rd a91c2cd0a2 [poll-view] Added countdown timer text to poll footer. 2026-03-28 10:29:09 +03:00
23rd b28b46bdc9 [poll-create] Added poll option toggle to set deadline. 2026-03-28 10:29:09 +03:00
23rd f055478b6e Moved out ttl icon from dialogs row to separated file. 2026-03-28 10:29:09 +03:00
23rd 7a586e680c [poll-view] Fixed cropped attached photos in views from shared polls.
Poll::countTopMediaHeight() used width() which returns 0 during
first countOptimalSize()/countCurrentSize() call (Object sets _width
only after these return).
This made photo height = max(1, negative) = 1px.
2026-03-28 10:29:09 +03:00
23rd 54da1bf21b Added ability to copy text from poll answers. 2026-03-28 10:29:09 +03:00
23rd 2b89fb9d40 [poll-shared] Added Polls section.
- 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.
2026-03-28 10:29:08 +03:00
23rd 07ca74ca0b Added workaround to always close media preview on window resize. 2026-03-28 10:29:08 +03:00
23rd 554ba411f6 [poll-view] Added initial support of reply to poll answers. 2026-03-28 10:29:08 +03:00
23rd 9f887dda4b Slightly improved phrase for entry point to photo editor from menu item. 2026-03-28 10:29:08 +03:00
23rd 7bb2f590c7 [poll-view] Added small video play icon overlay to poll answers. 2026-03-28 10:29:08 +03:00
23rd ee58a97156 Fixed possible crash on quit application when media preview is opened. 2026-03-28 10:29:08 +03:00
23rd 41aabe486b [poll-view] Fixed attached video rounding and aspect ratio. 2026-03-28 10:29:08 +03:00
23rd 5515a662b8 [poll-create] Added ability to upload video. 2026-03-28 10:29:08 +03:00
23rd 66c450fc0d [poll-create] Added document file preview overlay. 2026-03-28 10:29:08 +03:00
23rd 7e7af4118d Limited media preview overlay to body widget below title bar. 2026-03-28 10:29:08 +03:00
23rd 5fec51d0c6 [poll-view] Fixed attached photo rounding and aspect ratio. 2026-03-28 10:29:08 +03:00
23rd 47e1d56033 [poll-create] Added support of preview to attached photo. 2026-03-28 10:29:08 +03:00
23rd 89bee2dd51 [poll-create] Added nice overlay on hover for attach buttons. 2026-03-28 10:29:08 +03:00
23rd 26b437fcd6 [poll-create] Added support of drag'n'drop for document files. 2026-03-28 10:29:08 +03:00
23rd ad38e06555 [poll-view] Added support of document files as attached media. 2026-03-28 10:29:08 +03:00
23rd 64c172f590 [poll-create] Added support of preview for attached sticker. 2026-03-28 10:29:08 +03:00
23rd 471eaf7498 [poll-view] Fixed click handler for documents in solution. 2026-03-28 10:29:08 +03:00
23rd b8888025ec [poll-create] Added cancel support to attach button while uploading. 2026-03-28 10:29:08 +03:00
23rd b0227e1bf6 [poll-view] Added ability to select text of solution. 2026-03-28 10:29:08 +03:00
23rd ecff8e3670 [poll-create] Added ability to upload document files. 2026-03-28 10:29:08 +03:00
23rd d5ce6fff77 Added dynamic thumbnail util for document files. 2026-03-28 10:29:08 +03:00
23rd b311c33473 Added filename-only overload for DocumentGenericPreview::Create. 2026-03-28 10:29:08 +03:00
23rd d58ec07343 [poll-view] Slightly improved style.
Fixed #27026.
2026-03-28 10:29:08 +03:00
23rd 8e746dcfbd Replaced MTPInputMedia with domain-level PollMedia in poll data structs. 2026-03-28 10:29:08 +03:00
23rd 2411009071 [poll-view] Added preview to stickers in answers. 2026-03-28 10:29:08 +03:00
23rd 646f8c32f9 Added util to fill menu for document preview from poll answer. 2026-03-28 10:29:08 +03:00
23rd 83de6c640c Added menu item for vote retracting to media view. 2026-03-28 10:29:08 +03:00
23rd bbdc6abea8 Added recent voters to media view. 2026-03-28 10:29:08 +03:00
23rd 49e75e1ab0 Slightly refactored userpics stripe to deduplicate userpic preparation. 2026-03-28 10:29:08 +03:00
23rd c24a58672b Slightly refactored userpics stripe to deduplicate userpic dirty checks. 2026-03-28 10:29:08 +03:00
23rd a98b2f4a39 Added button for poll voting to media view. 2026-03-28 10:29:08 +03:00
23rd 0328de897c [poll-view] Added explanation block. 2026-03-28 10:29:08 +03:00
23rd 48de6c495e Moved out all poll-related style entries to td_ui. 2026-03-28 10:29:08 +03:00
23rd 39b3f0a386 [poll-view] Added initial support of attached photo and description. 2026-03-28 10:29:08 +03:00
23rd a0304b5147 [poll-create] Added support of drag'n'drop. 2026-03-28 10:29:08 +03:00
23rd b06573b5c9 Moved out poll-related styles from boxes.style to polls.style. 2026-03-28 10:29:08 +03:00
23rd 8c131cc616 Added support of display media from poll answers as grouped media. 2026-03-28 10:29:08 +03:00
23rd dc3d27993b [poll-view] Added initial ability to open photo from answers. 2026-03-28 10:29:07 +03:00
23rd 9ed0520607 [poll-create] Locked poll some option toggles when quiz is enabled. 2026-03-28 10:29:07 +03:00
23rd c32fbf918f [poll-view] Added initial display of photo and stickers. 2026-03-28 10:29:07 +03:00
23rd dafcaa66a4 Added ability to create dynamic image with photo with centered crop. 2026-03-28 10:29:07 +03:00
23rd d7f440513a [poll-create] Added sticker picker for poll media. 2026-03-28 10:29:07 +03:00
23rd 8145b0b96e [poll-create] Added files support for poll media. 2026-03-28 10:29:07 +03:00
23rd 9e482556ea [poll-create] Added poll description. 2026-03-28 10:29:07 +03:00
23rd 546c786ed3 [poll-create] Added poll option toggle to extend poll with new answers. 2026-03-28 10:29:07 +03:00
23rd e613a89d02 [poll-create] Added poll option toggle to disable revoting. 2026-03-28 10:29:07 +03:00
23rd 3c3683a41e [poll-view] Added support of shuffled answers. 2026-03-28 10:29:07 +03:00
23rd 945373eb5b [poll-create] Added poll option toggle for shuffled options. 2026-03-28 10:29:07 +03:00
23rd b21e6860b3 [poll-create] Added icons to buttons with toggles. 2026-03-28 10:29:07 +03:00
23rd 99a5218eb3 Added icons for buttons in create poll box. 2026-03-28 10:29:07 +03:00
23rd 5ccb58b1bb Added new class of settings button with description. 2026-03-28 10:29:07 +03:00
23rd 303d10939e [poll-create] Replaced checkboxes with settings buttons. 2026-03-28 10:28:58 +03:00
John Preston 963db7487b Bold Telegram Premium in toast. 2026-03-27 23:29:07 +07:00
John Preston 150f7dedcd Update API scheme on layer 224. 2026-03-27 23:03:17 +07:00
John Preston 80abcd70b5 [ai] Try using subagents more in Codex. 2026-03-27 23:03:14 +07:00
John Preston bbf23cefb6 Make AI Tools title skip a bit smaller. 2026-03-27 22:55:15 +07:00
John Preston f73793ce8a Add simple animation for AI Tools button. 2026-03-27 22:25:36 +07:00
John Preston d48ceab73d [ai] Add a review rule about isVisible vs isHidden. 2026-03-27 22:25:35 +07:00
John Preston 4935ceda5b Fix position of copy button in AI Tools. 2026-03-27 22:24:40 +07:00
John Preston 73e45b9cc7 [ai] Make /icon command work on macOS too. 2026-03-27 22:24:40 +07:00
John Preston fe03dbab96 Hopefully fix std::clamp() contract violation.
Fixes #30486.
2026-03-27 15:54:46 +07:00
John Preston 507af0a14d [ai] Improve the tr::marked() force rules. 2026-03-27 12:54:56 +07:00
John Preston 1dca7c2a69 [ai] Improve /reflect command for docs updates. 2026-03-27 12:54:56 +07:00
John Preston 712e79d0a2 Add sparkle animation to AI Tools title. 2026-03-27 12:54:56 +07:00
John Preston 353c95adae Support box->setTitle(v::text::data, context). 2026-03-27 12:54:56 +07:00
John Preston c64f175b19 Fix custom bot verification description show. 2026-03-27 12:54:56 +07:00
People-11 b185900b4f feat: improve message shot
Add Show Spoiler
Fix photo not showing date in shot
Fix show date in media group
Hide inapplicable options

Co-authored-by: AlexeyZavar <sltkval1@gmail.com>
2026-03-26 19:05:01 +03:00
John Preston b55d80212c Update API scheme on layer 224. 2026-03-26 22:50:39 +07:00
John Preston 5f61c96ed9 [ai] Add some more review guidelines. 2026-03-26 22:50:39 +07:00
John Preston fa7b00c0e2 Select translation tone in AI Tools. 2026-03-26 22:11:48 +07:00
John Preston 9dc17b1daf [ai] Normalize line endings by Codex on Windows. 2026-03-26 22:11:48 +07:00
People-11 a3d03a3c63 feat: option to open link without warning 2026-03-26 18:07:16 +03:00
Ivan Romanov 3fc8796bda feat: option to hide premium statuses
Option allows to hide premium statuses in chat list, in group chats and above contact chat.
2026-03-26 17:55:33 +03:00
Bush2021 34c9b24123 fix: AyuForward for private chats 2026-03-26 17:07:15 +03:00
Ivan Romanov 591f131972 chore: add Fedora installation instructions 2026-03-26 16:20:50 +03:00
John Preston 8f610401ae Better screen reader detection on Windows. 2026-03-26 17:33:48 +07:00
John Preston 1fa219c1cd Make working send-from-ai-tools button. 2026-03-26 14:13:01 +07:00
John Preston 19a1bd9451 Use animated emoji in styles. 2026-03-26 11:39:44 +07:00
John Preston 577e8f14af Improve loading / failed states in ai editor. 2026-03-25 21:28:52 +07:00
John Preston 3da3334131 Correct max userpic length for managed bot. 2026-03-25 21:14:38 +07:00
John Preston 3a5b2c6ecf Add a Create Bot button to link preview. 2026-03-25 18:24:41 +07:00
John Preston 391a3b02f0 Show nice future bot link preview. 2026-03-25 16:02:35 +07:00
John Preston c57e40620b Make chats list a bit less freezing. 2026-03-25 15:58:00 +07:00
John Preston 0dd30d4668 Fix build with Xcode. 2026-03-25 15:34:19 +07:00
John Preston 66e4cab8f8 Allow disabling accessibility helpers. 2026-03-25 14:40:18 +07:00
John Preston d462ca3241 Add scroll to active style tab. 2026-03-25 13:54:21 +07:00
John Preston 1100b38b4c Show colored diffs in AI fixing. 2026-03-25 13:11:18 +07:00
John Preston f07510bd67 Use skip block for result text and copy button. 2026-03-25 13:11:18 +07:00
John Preston 82d496ba24 Make scrollable style tabs, suggest premium. 2026-03-25 13:11:18 +07:00
John Preston b6b6e18896 Don't break old settings reading. 2026-03-25 13:08:50 +07:00
John Preston f36ad1c37a [ai] Add instructions for local storage. 2026-03-25 13:08:50 +07:00
John Preston 21c6efa32a [ai] Use vectosolve service for svg gen. 2026-03-25 13:08:50 +07:00
John Preston c12e152618 Update API scheme on layer 224. 2026-03-25 13:08:50 +07:00
John Preston d455d6ee32 Improve managed bot creation. 2026-03-25 13:08:50 +07:00
John Preston 4069e4412c Initial attempt to add ai controls. 2026-03-25 13:08:50 +07:00
John Preston 4d76520ce3 [ai] Add some more review guidelines. 2026-03-25 13:08:50 +07:00
John Preston 0bc9ee3cf1 [ai] Try using subagents in Codex. 2026-03-25 13:08:50 +07:00
23rd 90eda7c03a Fixed build. 2026-03-25 13:08:50 +07:00
John Preston eb6e6ec89a Update API scheme on layer 224. Build broken. 2026-03-25 13:08:50 +07:00
John Preston 358a9f87a1 Initial support for managed bot creation. 2026-03-25 13:08:50 +07:00
John Preston 8224e6ece1 Use menu items with checks for spoiler / quality. 2026-03-25 13:08:50 +07:00
John Preston 87ebd2720f Send high quality as first-class option. 2026-03-25 13:08:50 +07:00
John Preston 98a6af1ca9 [ai] Add /icon command, trying SVG icon generation. 2026-03-25 13:08:50 +07:00
John Preston ac19655d21 Update API scheme on layer 224. 2026-03-25 13:08:50 +07:00
John Preston 53a2d4704d Improve giveaway prices display. 2026-03-25 13:08:50 +07:00
John Preston 994dd2e05c Don't edit non-member tags. 2026-03-25 13:08:50 +07:00
John Preston 28637308ed Fix settings userpic top in Information. 2026-03-25 13:08:50 +07:00
John Preston 68dd72f4fe Update API scheme on layer 224. 2026-03-25 13:08:49 +07:00
John Preston 5a39484407 Better post views tracking. 2026-03-25 13:08:49 +07:00
John Preston 4fcfbed7d2 Allow filtering resale gifts by-stars-only. 2026-03-25 13:08:49 +07:00
John Preston 5b3d9cf3ba Track song listenings. 2026-03-25 13:08:49 +07:00
John Preston 9f57a82c75 Update API scheme to layer 224. 2026-03-25 13:08:49 +07:00
John Preston 1e6f7c7f3f Add support for bottom subsection tabs mode. 2026-03-25 13:08:49 +07:00
Bush2021 8890ed606e fix: clear menu‑toggle ripple when popup destroyed by active‑chat change 2026-03-25 00:04:22 +03:00
Kaeeraa 41b699d8ad chore: update nix installation
Updated installation instructions for NixOS using Flake and Nixpkgs.
2026-03-24 21:40:51 +03:00
Ar3love b4f7c0fe9b Fix personal photo hint shown when setting group/channel photo (#30470)
* Fix personal photo hint shown when setting group/channel photo
Closes #30467

* Added bot exclusion to personal photo hint visibility check.

---------

Co-authored-by: 23rd <23rd@vivaldi.net>
2026-03-24 10:48:05 +03:00
Ilya Fedin ba4715a3af Qt 6.11.0-rc1 -> 6.11.0 2026-03-23 15:26:03 +04:00
AlexeyZavar e49bf706c5 chore: adjust ttl stuff 2026-03-19 03:56:02 +03:00
AlexeyZavar 1c9ac520cb fix: hide loading progress for shots 2026-03-19 02:55:33 +03:00
AlexeyZavar 102f882ca4 fix: make it build 2026-03-19 02:33:27 +03:00
AlexeyZavar b93c93a20c Merge tag 'v6.6.2' into dev 2026-03-19 01:24:29 +03:00
AlexeyZavar abb73d624e chore: remove stars animation in settings & reorder 2026-03-19 00:58:12 +03:00
AlexeyZavar 0aa7e85228 feat: show burn status 2026-03-19 00:58:12 +03:00
AlexeyZavar dea23ce3c9 chore: better id aliases & cleanup 2026-03-19 00:58:12 +03:00
AlexeyZavar aa60283fcb feat: add repeat icon
Co-authored-by: immat0x1 <immat0x1@protonmail.com>
2026-03-19 00:58:12 +03:00
AlexeyZavar 96231c217c fix: crash & badges position with avatarCorners 2026-03-19 00:58:12 +03:00
AlexeyZavar 7868e5e905 fix: apply scheduling for repeat 2026-03-19 00:58:12 +03:00
AlexeyZavar d061c569b7 fix: peer ID 2026-03-19 00:58:12 +03:00
AlexeyZavar 04eb23ae32 fix: show supporter badge in account picker & menu 2026-03-19 00:58:12 +03:00
AlexeyZavar 6edf31beb6 fix: icon picker bottom clip 2026-03-19 00:58:12 +03:00
AlexeyZavar 5dbeedd914 chore: replace ghost icon 2026-03-19 00:58:12 +03:00
AlexeyZavar 1d7c45b324 fix: .value() -> .changes()
.value() emits current value, triggering a lot of updates e.g. on history opening
2026-03-19 00:58:12 +03:00
AlexeyZavar 5b9ab96b19 fix: apply hide all chats without restart 2026-03-19 00:58:12 +03:00
AlexeyZavar cfad40f7bb feat: add message appearance preview 2026-03-19 00:58:12 +03:00
AlexeyZavar 840366b385 chore: update sqlite3 2026-03-19 00:58:11 +03:00
AlexeyZavar b4c04bd3b5 chore: fix some warnings 2026-03-19 00:58:11 +03:00
AlexeyZavar 8bd64c62c2 fix: telegram avatar rounding & ttl badge position & calls speak animation 2026-03-19 00:58:11 +03:00
AlexeyZavar 42e7f625cd fix: improve context menu handling in chats 2026-03-19 00:54:55 +03:00
AlexeyZavar 55fb7aeb68 feat: implement streamer mode on macOS 2026-03-19 00:54:55 +03:00
AlexeyZavar dfc6718bea fix: app restart & crashes on macOS 2026-03-19 00:54:55 +03:00
John Preston 06c5154e99 Beta version 6.6.4.
- Fix launch on Linux.
2026-03-17 12:10:53 +04:00
rdmcd 294516c2be Fix startchannel/startgroup deeplinks for bots with Threaded Mode.
Move the isForum() branch below bot-specific handlers (BotApp,
ShareGame, AddToGroup/AddToChannel) so forum view doesn't intercept
bot deeplinks. Move Boost branch above isForum() to simplify
the condition.
2026-03-16 16:25:05 +04:00
23rd f1117b0071 [img-editor] Improved crop overlay with 3x3 grid. 2026-03-16 14:11:52 +03:00
23rd 776260d265 Fixed build.
Related commit: 4ba2581df8.
2026-03-16 13:09:22 +03:00
John Preston af4c7bc754 Support system text replacements on macOS. 2026-03-16 13:10:21 +04:00
John Preston ff54ea88e2 Improve layout of gift / auction webpage preview. 2026-03-16 13:10:21 +04:00
John Preston eef6ba797f [ai] Fix Codex child agents execution. 2026-03-16 13:10:21 +04:00
John Preston 18e9882916 [ai] Add static member naming review rule. 2026-03-16 13:10:21 +04:00
John Preston c299e673ad [ai] Add some more review guidelines. 2026-03-16 13:10:21 +04:00
John Preston 9533e95dd2 [ai] Add a /reflect custom command. 2026-03-16 13:10:21 +04:00
John Preston 1610ad345f Push non-default app scale to IV. 2026-03-16 13:10:21 +04:00
23rd 4ba2581df8 Removed Replace button from attach previews and added More button. 2026-03-15 20:41:10 +03:00
23rd d9b9a40119 Fixed compose search race by clearing list before starting new search.
Related commit: f5281b7418.
2026-03-15 16:21:49 +03:00
23rd bb6481f194 Replaced rounded buttons for recommended filters with pills. 2026-03-15 15:58:29 +03:00
23rd 1cbcef17c8 Changed behavior to always display open userpic menu item. 2026-03-15 15:43:19 +03:00
23rd 921d5a62d2 [img-editor] Fixed first-stroke jump from invalidated refs.
The interpolation loop kept references to _currentStroke.back()
while pushing into the same vector.
Vector reallocation could invalidate these references
and create random first-segment jumps,
so lastPos/lastPressure are now copied before the loop.

Related commit: d581bdcf56.
2026-03-15 08:05:54 +03:00
23rd 2cce6ddb3e [img-editor] Fixed brush crash by clamping content rect within scene. 2026-03-15 08:05:54 +03:00
23rd 73cbef5b82 Fixed stale pinned Saved Messages sublists on clear that subsection. 2026-03-15 08:05:54 +03:00
Reza Bakhshi Laktasaraei dc2d6e9d12 feat(accessibility): use ButtonMenu role for main menu buttons
Set ButtonMenu role on main menu toggle buttons in dialogs and
filters menu since they open navigation menus.
2026-03-14 21:54:51 +04:00
Ilya Fedin b5f8abf45c Build boost manually in Docker 2026-03-14 15:34:00 +04:00
John Preston 36a3542d63 [ai] Add a release custom command. 2026-03-13 10:33:33 +04:00
John Preston 4fd4b14fcc Beta version 6.6.3.
- Drawing tools in image editor (brush, marker, eraser, arrow).
- Draw-to-reply button in media viewer.
- Trim recorded voice messages.
- Per-file captions when sending multiple files.
- Audio sharing in calls on Linux.
- Ripple effects for reactions, send and reply buttons.
- Fix saved music shuffled playing.
2026-03-12 23:02:47 +04:00
John Preston 5b916a5f5e Fix build with GCC. 2026-03-12 23:02:47 +04:00
23rd 7d1a7c2b6c [img-editor] Updated color button with rainbow gradient ring. 2026-03-12 12:20:42 +03:00
John Preston aa78825b7b Revert "Update menu_send.cpp"
This reverts commit f9bf1e9372.
This reverts commit a08f8d890d.

Fair point raised on GitHub, that the cost of "click-by-memory" may
be too high in this case over the consistency gains, with admins
sending messages instantly instead of scheduling, like it did before.
2026-03-12 13:11:21 +04:00
John Preston 308116f792 Fix build with MSVC. 2026-03-12 13:08:16 +04:00
23rd d581bdcf56 [img-editor] Fixed initial brush stroke on start paint. 2026-03-12 12:59:50 +04:00
23rd cf7ebb0f4a [img-editor] Refined control islands with pill bars. 2026-03-12 12:59:50 +04:00
23rd 9275b45ab8 Added initial implementation of draw-to-reply. 2026-03-12 12:59:50 +04:00
23rd a8452601d7 Added draw-to-reply button to media view. 2026-03-12 12:59:50 +04:00
23rd a242e76f26 [img-editor] Added simple animation to current color on change color. 2026-03-12 12:59:50 +04:00
23rd 380c333185 [img-editor] Added simple animation to size control. 2026-03-12 12:59:50 +04:00
23rd 02eac1ee14 [img-editor] Added ability to save tool size and color separately. 2026-03-12 12:59:49 +04:00
23rd d0d1d91ef3 [img-editor] Added simple highlight of selected tool. 2026-03-12 12:59:49 +04:00
23rd 91df896f8e [img-editor] Refined eraser brush algorithm. 2026-03-12 12:59:49 +04:00
23rd 537375b92b [img-editor] Added simple modes of brush for arrow / marker / eraser. 2026-03-12 12:59:49 +04:00
23rd a5a43dcc7f [img-editor] Added tool buttons in paint mode. 2026-03-12 12:59:49 +04:00
23rd a4f0a636e2 Added tgs animations for tool buttons in photo editor. 2026-03-12 12:59:49 +04:00
23rd d189b1966e [img-editor] Added simple palette with buttons. 2026-03-12 12:59:49 +04:00
23rd 55649cba30 Fixed selection display of ColorSample on non-solid background. 2026-03-12 12:59:49 +04:00
23rd 4b521e687e [img-editor] Removed combined control for size and color. 2026-03-12 12:59:49 +04:00
23rd 6ed80c9706 [img-editor] Added dedicated brush size control. 2026-03-12 12:59:49 +04:00
23rd 898eebbf4b [img-editor] Fixed non-clickable bottom area by masking editor controls. 2026-03-12 12:59:49 +04:00
23rd c4847e752c [img-editor] Expanded paint canvas to fill editor window during zoom. 2026-03-12 12:59:49 +04:00
23rd 8aa09d32dc [img-editor] Fixed brush stroke start offset and spacing at high zoom.
Related commit: 7ce7b88a40.
2026-03-12 12:59:49 +04:00
23rd 00ef43657e [img-editor] Fixed crash on close by detaching viewport event filter. 2026-03-12 12:59:49 +04:00
23rd 7c5475e62a [img-editor] Added wheel zoom and middle-button pan for paint canvas. 2026-03-12 12:59:49 +04:00
23rd 8256ebd5aa Added simple icon to button for bot settings from profile actions. 2026-03-12 12:59:49 +04:00
23rd 38f059cfb2 Increased maximum speed of auto-scroll mode. 2026-03-12 12:59:49 +04:00
23rd fca5b6f378 Handled any mouse press to exit middle-click auto-scroll mode. 2026-03-12 12:59:49 +04:00
23rd 57b8740adf Replaced import/export of experimental settings with compact format. 2026-03-12 12:59:49 +04:00
23rd c86d2c6986 Added simple implementation of import/export for experimental settings. 2026-03-12 12:59:49 +04:00
23rd ccb563eff1 Moved out dock menu from obj-c implementation to Qt implementation.
This allows to remove
the `NSApplicationDelegate::applicationDockMenu` patch for Qt.
2026-03-12 12:59:49 +04:00
23rd e0d28a580c Slightly improved code style in mtproto translate provider. 2026-03-12 12:59:49 +04:00
Ilya Fedin f85da1ad12 Use streaming batch translation in chat tracker
Co-Authored-By: Codex <codex@openai.com>
2026-03-12 12:59:49 +04:00
Ilya Fedin 87ef5d06df Use translation providers for chat translation with parallel requests
Co-Authored-By: Codex <codex@openai.com>
2026-03-12 12:59:49 +04:00
Ilya Fedin f0a47c8769 Allow Linux TranslateProvider re-use 2026-03-12 12:59:49 +04:00
Ilya Fedin 27080d4b96 Fix include in Linux translate provider 2026-03-12 12:59:49 +04:00
23rd a61334247d Fixed ratio of icon in update button from dialogs widget.
Related commit: c6bf905253.
2026-03-12 12:59:49 +04:00
23rd f5281b7418 Fixed compose search list freeze by resetting merged search state flags. 2026-03-12 12:59:49 +04:00
23rd 08be7f1960 Enabled ability to open full checked moderate box for channel senders.
Related commit: 9b483c390d.
2026-03-12 12:59:49 +04:00
23rd 5e44170091 Added initial ability to trim recorded voice messages. 2026-03-12 12:59:49 +04:00
23rd ff3dc8987d Implemented Opus audio trimming and concatenation with waveform. 2026-03-12 12:59:49 +04:00
23rd f4a2be34ea Clamped experimental sticker size override to a safe scaled range. 2026-03-12 12:59:48 +04:00
John Preston b1a537801c Update lib_ui. 2026-03-12 12:59:39 +04:00
linux 5521ff621a Add accessible names to pinned and contact status bar buttons. 2026-03-12 12:49:58 +04:00
linux 37037d0713 Add accessible names to Compose Controls buttons 2026-03-12 12:49:58 +04:00
linux 9672c147e2 Fix top bar action buttons focus on selection cancel 2026-03-12 12:35:32 +04:00
Ilya Fedin b7d3aa4b07 Fix missing QFile::open result check in logs 2026-03-11 17:01:20 +04:00
John Preston 09f9819233 Fix reorder freeze in chats list. 2026-03-11 15:54:08 +04:00
John Preston cf2a44792f Add member tag ripple. 2026-03-10 22:48:42 +04:00
John Preston c61c249405 Ripple effects for links. 2026-03-10 21:34:10 +04:00
John Preston 3670e1d9db Fix crash in formatting applying.
Fixes #30426.
2026-03-10 21:34:10 +04:00
John Preston aa582be321 Fix possible crash in streamed-reply-drafts. 2026-03-10 19:03:13 +04:00
John Preston 4dff43a65e Improve code-spoilering regular expression. 2026-03-10 17:14:18 +04:00
John Preston 97345dbd59 Fix "Deleted Message" reply in streamed drafts. 2026-03-10 15:55:38 +04:00
John Preston 6564a42f21 Fix saved music shuffled playing.
Fixes https://bugs.telegram.org/c/60020
2026-03-10 15:50:53 +04:00
John Preston f7679c50d8 Always spoiler codes in notifications. 2026-03-10 15:31:17 +04:00
John Preston dbb7e34950 Fix editing of checklist in Saved Messages. 2026-03-10 15:01:38 +04:00
Ilya Fedin 34f0d7026e Open photos with external media viewer
Co-Authored-By: GLM-5 <contact@zhipuai.cn>
2026-03-10 12:40:17 +04:00
Ilya Fedin 59ecfd67f0 Add location tracking to PhotoData
Add persistent file location storage for downloaded photos,
similar to DocumentData. This allows the app to remember
where a photo was saved and reuse that path.

Co-Authored-By: GLM-5 <contact@zhipuai.cn>
2026-03-10 12:40:17 +04:00
Ilya Fedin 6acc2633a5 Open any document type via external media viewer 2026-03-10 12:40:17 +04:00
Ilya Fedin 07649b3c16 External video player -> External media viewer 2026-03-10 12:40:17 +04:00
Ilya Fedin a2c268c923 Don't require second click to open cached videos in external viewer 2026-03-10 12:40:17 +04:00
Ilya Fedin 0b98b88dfc Support file saving for streaming videos with external video player 2026-03-10 12:40:17 +04:00
Ilya Fedin c2f64700c1 Move external video player option handling to SessionController::openDocument 2026-03-10 12:40:17 +04:00
Ilya Fedin f6ac2c5aa9 Revert "Don't stream videos when external player is used"
This reverts commit b0ce88395f.
2026-03-10 12:40:17 +04:00
Ilya Fedin ff08ab1023 Revert "Avoid using streaming loader with external video player"
This reverts commit d9ddb12500.
2026-03-10 12:40:17 +04:00
John Preston b30948fd81 In GroupAdmin scope send /start only with token.
Fixes #30026.
2026-03-10 12:35:55 +04:00
John Preston 008600f6d3 Faster controls disappearing in media viewer. 2026-03-10 12:25:58 +04:00
John Preston 73686ae930 Add ripple animation to reactions in messages. 2026-03-10 12:07:38 +04:00
John Preston 3223e6389c Add ripple effect to send button. 2026-03-10 11:59:29 +04:00
John Preston b9d3b9364c Fix t.me/bot?start=param for bot-forums. 2026-03-10 11:59:29 +04:00
John Preston 7f71e9dd52 Fix build with Xcode. 2026-03-09 21:23:26 +04:00
dependabot[bot] 71497e592c Bump docker/build-push-action from 6 to 7
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6 to 7.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v6...v7)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-09 18:44:43 +04:00
dependabot[bot] b24a13d962 Bump docker/setup-buildx-action from 3 to 4
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 3 to 4.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](https://github.com/docker/setup-buildx-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-09 18:44:30 +04:00
John Preston 4212be1b6c Add ripple effect to reply button. 2026-03-09 17:38:41 +04:00
futpib 5f1121123c Freeze chat list order while mouse hovers over it
When subscribed to many active chats, the list reorders too quickly,
causing misclicks. Freeze the visual order while the mouse is over the
chat list and replay deferred reorderings when the mouse leaves or
after 5 seconds of inactivity.

Fixes #1504.
2026-03-06 23:16:40 +04:00
John Preston 68e1504685 Use crl::on_main_queue for chained init steps. 2026-03-06 22:49:10 +04:00
futpib ffea1e3917 Defer sticker reads via crl::on_main chain for faster first paint
Instead of reading all sticker sets synchronously in crl::on_main,
chain each read step via crl::on_main so that paint events can be
processed between heavy file reads. This moves first paint from
~2807ms to ~1294ms by allowing the UI to render before sticker
loading completes.
2026-03-06 22:32:21 +04:00
John Preston 8eab8af02d Don't always lower members count when banning.
Fixes #30371.
2026-03-06 22:03:20 +04:00
John Preston 9d371ddb94 Fix controls. 2026-03-06 22:02:43 +04:00
John Preston 58d334c1c8 Fix crash in restrict-from-recent-actions. 2026-03-06 21:59:51 +04:00
John Preston 5507e9c00d Simplify file sending, always attach a caption. 2026-03-06 21:08:35 +04:00
John Preston 2de7fb5c25 Simplify caption management in SendFilesBox. 2026-03-06 21:08:35 +04:00
cumdev1337 485d820fe2 Do not exit fullscreen mode when applying video quality 2026-03-06 21:07:52 +04:00
John Preston b1d08b3e30 Preserve topicRootId() on edition-to-history-clear. 2026-03-06 14:09:06 +04:00
John Preston e86fec4ab6 Fix messages clear on history delete. 2026-03-06 14:08:51 +04:00
John Preston a4c4ea129c Always process item destroy in topics. 2026-03-06 14:08:37 +04:00
John Preston 56e675ec9c Revert "Fixed ability to delete chat as forum with all topics."
This reverts commit f40064333e.

This destroys messages that were not really deleted.
2026-03-06 12:04:40 +04:00
futpib 61b7b2d5dc Use rename instead of copy for log file rotation at startup
Replace the expensive file copy in Logs::instanceChecked() with an
atomic rename. The old code copied log_startX.txt to log.txt then
deleted the original, which took ~83ms of synchronous I/O. A simple
rename on the same filesystem is nearly instant (~0.3ms).
2026-03-06 10:53:05 +04:00
John Preston 64562b6171 Update lib_ui. 2026-03-05 22:12:31 +04:00
futpib ec7c76b8d2 Cache Webview::Availability() result for startup checks
Iv::ShowButton() and LocationPicker::Available() each called
Webview::Availability() separately (~200ms each on Linux). Replace
the per-caller static caches with a single shared cache in
Core::CachedWebviewAvailability(), reducing startup from two
~200ms calls to one.
2026-03-05 16:13:38 +04:00
linux 1a35929eb8 accessibility: label profile photo buttons by role 2026-03-05 16:03:30 +04:00
linux 151f3f6cc4 accessibility: label QR code button in settings cover 2026-03-05 16:03:30 +04:00
futpib dc6b9dda4d Use faster containers for bulk-populated custom emoji maps
Replace base::flat_map (sorted vector with O(n) insertion) with
std::unordered_map for CustomEmojiManager::_instances and std::map
for EmojiListWidget::_customEmoji. These maps accumulate ~8000
entries during startup with unsorted keys, causing O(n²) total
insertion cost. This change reduces refreshCustom() from ~3s to
~50ms (57x speedup).
2026-03-05 15:20:36 +04:00
John Preston f9bf1e9372 Fix the build on Windows. 2026-03-05 11:30:38 +04:00
John Preston e3689a1f12 Update submodules. 2026-03-05 11:26:46 +04:00
John Preston c65ab01647 Fix possible crash in members list dropdown. 2026-03-05 11:25:27 +04:00
John Preston 63a76b273a Fix trailing seconds in date formatting. 2026-03-05 11:25:27 +04:00
John Preston cc7ad543ee Update submodule. 2026-03-05 11:25:27 +04:00
Ilya Fedin 48e2e2c2db Avoid saving viewer position unless it's really on screen 2026-03-05 09:52:56 +04:00
paterkleomenis f8fc9956d0 Calls: enable audio sharing flow on Linux
Enables the desktop share audio flow on Linux within Calls UI and plumbing.

- calls_call: add withAudio parameter to toggleScreenSharing, track
  _screenWithAudio flag, create/destroy SystemAudioCapture when sharing
  starts with audio, and clean it up in destroyController.

- calls_panel / calls_group_panel: use LoopbackAudioCaptureSupported()
  to report audio support on all platforms; show a GenericBox with audio
  toggle when a unique desktop capture source is available (PipeWire),
  then start sharing with the chosen audio setting.

Depends on desktop-app/lib_webrtc#22
Closes #26642
2026-03-05 09:25:37 +04:00
cumdev1337 719cae0406 building-win: update .sln => .slnx 2026-03-04 16:34:51 +03:00
dependabot[bot] 7a9b62fc40 Bump actions/upload-artifact from 6 to 7
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 6 to 7.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-04 17:33:42 +04:00
Daniel Novomeský d804a327aa Update dav1d, libwebp, libheif, libjxl 2026-03-04 16:36:05 +04:00
Ilya Fedin 87caf0e2c4 Disable 32-bit Qt 6 Windows action builds
They don't build anymore
2026-03-04 16:35:35 +04:00
InternalProgramError a08f8d890d Update menu_send.cpp
Unification of Send menu (https://bugs.telegram.org/c/55220)
2026-03-04 16:33:40 +04:00
Ilya Fedin d9ddb12500 Avoid using streaming loader with external video player
Streaming loader is unnecessary slow for this use-case

Co-authored-by: Codex <codex@openai.com>
2026-03-04 16:32:47 +04:00
Ilya Fedin f68db94c81 Qt 6.10.2 -> 6.11.0-rc1 2026-03-04 14:48:09 +04:00
Ilya Fedin b84345c083 Update GCC to 15 in Docker 2026-03-04 14:38:10 +04:00
John Preston f06ca5a07c Force a newline before ``` in markdown parsing.
Fixes #27739.
2026-03-04 13:13:40 +04:00
Ilya Fedin 25026d1657 Support Crow Translate on Linux 2026-03-04 11:44:40 +03:00
Ilya Fedin 1782f5c463 Add experimental sticker size option 2026-03-04 11:44:40 +03:00
23rd 66a5e67cbf Fixed losing of extension when rename image from clipboard. 2026-03-04 11:08:19 +03:00
23rd f1bf8e554e Fixed display of show original button in translate box. 2026-03-04 08:32:04 +03:00
23rd d4a5bb788c Moved out some classes from lib_translate. 2026-03-04 08:32:04 +03:00
23rd df1a8346e0 Added new translate provider that uses url template from experimental. 2026-03-04 08:32:04 +03:00
23rd ccce8756ed Added simple error handler for translations. 2026-03-04 08:32:04 +03:00
23rd 1e0a16a214 Added ability to use platform provider of translations on macOS. 2026-03-04 08:32:04 +03:00
23rd d7e8199365 Added platform provider of translations. 2026-03-04 08:32:04 +03:00
23rd cec580a645 Moved out api translations as separated provider. 2026-03-04 07:08:51 +03:00
23rd 8a9409005f Split translate box to api and td_ui parts. 2026-03-04 07:08:51 +03:00
23rd 8c7d38ea25 Added ability to change caption to every file in SendFilesBox. 2026-03-04 07:08:51 +03:00
23rd fe4f460a3b Added logic to process captions from attach prepared files. 2026-03-04 07:08:51 +03:00
23rd 47beb2e7e1 Added initial support of simple captions to attach prepared files. 2026-03-04 07:08:51 +03:00
23rd 04ccdc4b30 Added initial support of system accent color. 2026-03-04 07:08:51 +03:00
John Preston ad5b451182 Version 6.6.2.
- Fix editing of media files.
- Fix admin rights in legacy groups for tag editing.
- Fix opening emoji packs from custom emoji click.
2026-03-03 19:15:28 +04:00
23rd 11474102cd Fixed text recognition retry in media viewer on missing large photo. 2026-03-03 19:15:28 +04:00
23rd 5f8702fc62 Reversed recent voter rendering order in poll view userpics list. 2026-03-03 19:15:28 +04:00
23rd ba7b3422c9 Slightly improved phrases in who reacted context action. 2026-03-03 19:15:28 +04:00
John Preston 115017c8cd Fix possible crash in reactions to dice messages.
Refresh media later in edition application, so that we don't destroy
MediaDice earlier than calling itemDataChanged and _dice is accessed.
2026-03-03 18:41:18 +04:00
John Preston 769da0ec15 Improve layout of channel story controls. 2026-03-03 18:19:38 +04:00
John Preston 151b169dda Improve style of edit tag control. 2026-03-03 17:09:09 +04:00
John Preston 84b7de1405 Fix editing media files. 2026-03-03 16:33:01 +04:00
23rd 3a7bf449ed Fixed ability to open emoji pack from rection preview.
Regression was introduced in b2531b588f.
2026-03-03 15:23:42 +04:00
23rd f2701e89bd Added support of hold mode to auto-scroll with middle click. 2026-03-03 15:23:40 +04:00
John Preston 1bb89e818e Update submodules. 2026-03-03 14:48:08 +04:00
Ilya Fedin 28af45c65a Ensure LLD is used in Linux action
It's specified in the Dockerfile but action accidentally removes it when disabling debug symbols
2026-03-03 12:16:53 +04:00
Ilya Fedin d52d82f7e6 Fix GCC 15 -Wrange-loop-construct 2026-03-03 12:16:32 +04:00
Ilya Fedin ca0c9ab659 Fix GCC 15 -Wdangling-pointer 2026-03-03 12:16:32 +04:00
John Preston de4d55e06a Allow sending voices by Ctrl+R in topics.
Fixes #30361.
2026-03-02 15:36:26 +04:00
John Preston 221d79283d Admins don't edit tags in legacy groups. 2026-03-02 15:19:58 +04:00
John Preston 1705e5a03e Version 6.6.1.
- Fix crash in legacy groups members list.
- Fix display of member tags in legacy groups.
- Make fast reply button appear instantly.
- Allow hiding fast reply button.
2026-03-02 12:57:08 +04:00
John Preston 06c5b6c2fb Allow disabling fast reply button. 2026-03-02 12:55:04 +04:00
John Preston 9b0b154bd3 Fix display of tags in legacy groups. 2026-03-02 12:53:56 +04:00
John Preston 15778fc6db Fix crash in legacy groups viewing. 2026-03-02 12:52:56 +04:00
John Preston 932ea86b45 Update cmake_helpers. 2026-03-02 11:07:21 +04:00
AlexeyZavar 4ea9355f5f fix: plugin description parsing & cleanup unread mentions/reactions on deleted messages 2026-03-02 01:22:41 +03:00
AlexeyZavar e8a98abcd1 fix: ripple on comments with semi-transparent deleted messages 2026-03-02 00:33:20 +03:00
AlexeyZavar af5695d462 fix: crash when hovering over members in chat 2026-03-01 23:58:40 +03:00
AlexeyZavar bfc1c83c0b fix: hide reactions from blocked peers 2026-03-01 23:21:00 +03:00
John Preston e5f2bcad03 Version 6.6.
- Member Tags in groups.
- Disable Sharing in Private Chats.
- Timestamps for Polls.
- Log In With Telegram.
- Time and Date Formatting.
2026-03-01 21:57:20 +04:00
John Preston e972a297e1 Fix possible crash in theme editor. 2026-03-01 21:57:20 +04:00
AlexeyZavar 439a8543e2 chore: refactor icon picker & reorder includes 2026-03-01 20:47:36 +03:00
John Preston 02bf8e52af Remove tag editing in broadcasts. 2026-03-01 21:34:57 +04:00
John Preston c569781921 Hide menu on focus out only if not to a child. 2026-03-01 21:34:57 +04:00
John Preston 343261d6ae Fix actions in members dropdown. 2026-03-01 21:34:57 +04:00
John Preston 7c0698739b Rollback setFocus in menu items, breaks DropdownMenu. 2026-03-01 18:08:03 +04:00
John Preston c30608d7eb Fix build with GCC. 2026-03-01 18:01:00 +04:00
23rd e37894d011 Fixed Classic theme accent restore on startup.
Fixed #24930.
2026-03-01 09:43:26 +04:00
John Preston 43581b0b64 Fix build with Xcode. 2026-03-01 09:43:26 +04:00
AlexeyZavar 79195cac36 fix: always use wide chat for message history 2026-03-01 03:39:11 +03:00
AlexeyZavar 38917114f0 feat: avatar corners 2026-03-01 03:15:21 +03:00
23rd ddb3798ab0 Set forced origin for left userpic menu for constant distance to items. 2026-02-28 21:21:32 +04:00
John Preston a58047e88a Fix some regressions in accessibility commit. 2026-02-28 19:07:12 +04:00
John Preston 794c2c495d Improve formatted date phrases / copy / tooltip. 2026-02-28 19:07:12 +04:00
John Preston 284173ec3c Trim trailing dot in single line service messages. 2026-02-28 19:07:12 +04:00
John Preston ae3925b9cd Nice toast after reminder from formatted date. 2026-02-28 19:07:12 +04:00
John Preston 20f79c5ae5 Confirm enable sharing request sending. 2026-02-28 19:07:11 +04:00
John Preston cb902dae76 Use Enter to submit proxy confirm / proxy add.
Fixes #30346.
2026-02-28 19:07:11 +04:00
John Preston 2ce5e5530b Revert checkbox accessibility role for toggles. 2026-02-28 19:07:11 +04:00
John Preston 70e7758c0c Extract ExportToCalendar. 2026-02-28 19:07:11 +04:00
John Preston d349a28d76 Track interactions in webview for clipboard access. 2026-02-28 19:07:11 +04:00
John Preston 9efa707b64 Improve format of several copied to clipboard messages. 2026-02-28 19:07:11 +04:00
23rd 15be845421 Blocked internal oauth links from inside the app.
Related commit: cb827406ca.
2026-02-28 19:07:11 +04:00
John Preston d343431e75 Remove sender name from gift offer text. 2026-02-28 19:07:11 +04:00
John Preston f1199852a2 Select messages by timestamp clicks. 2026-02-28 19:07:11 +04:00
John Preston aa89e2c5e7 Make semi-transparent voice/video button if restricted. 2026-02-28 19:07:11 +04:00
John Preston 826b3912ce Allow attaching a date to a InputField text part. 2026-02-28 19:07:11 +04:00
John Preston 87f53ce1bf Try showing as expired only requests without actions. 2026-02-28 19:07:11 +04:00
John Preston b622ca45d2 Show vote day/time in poll results. 2026-02-28 19:07:11 +04:00
John Preston c9ac77ccbf Use separate phrase for singular Edit Tag. 2026-02-28 19:07:11 +04:00
John Preston 8a98369a0e Try receiving messages only from top frame. 2026-02-28 19:07:11 +04:00
23rd c1ec676262 Added api support to show match codes first to url auth box. 2026-02-28 19:07:11 +04:00
John Preston 6327bac6c2 Update API scheme on layer 223. 2026-02-28 19:07:11 +04:00
John Preston cd5b185c12 Test adding to calendar. 2026-02-28 19:07:11 +04:00
John Preston f93e1f4188 Support participant rank changes in admin log. 2026-02-28 19:07:11 +04:00
John Preston 72f690ce99 Fix formatted date quotes. 2026-02-28 19:07:11 +04:00
John Preston 90129c10d8 Initial formatted date support. 2026-02-28 19:07:10 +04:00
John Preston e5804fb213 Support expired state for allow-sharing request. 2026-02-28 19:07:10 +04:00
John Preston 2aae67cb81 Show nice gift burned error everywhere. 2026-02-28 19:07:10 +04:00
John Preston efc31d6e58 Fix build with new scheme. 2026-02-28 19:07:10 +04:00
John Preston 0c9340e380 [ai] Improve lang-phrase code style. 2026-02-28 19:07:10 +04:00
John Preston c39c0b597c Nice tag badge click handler in groups. 2026-02-28 19:07:10 +04:00
John Preston 6d0ff399fb Update Qt patches for accessibility. 2026-02-28 19:07:10 +04:00
John Preston d77e23df86 Update API scheme on layer 223. 2026-02-28 19:07:10 +04:00
John Preston 5022950c32 Update lib_ui for Menu accessibility. 2026-02-28 19:07:10 +04:00
23rd 8d08d83ba1 Added animated emoji support to url auth box for match codes. 2026-02-28 19:07:10 +04:00
23rd 2418fb311e Added api support of match code to url auth box. 2026-02-28 19:07:10 +04:00
John Preston a83890b03e Support nice Reply button in the corner. 2026-02-28 19:07:10 +04:00
John Preston 0f6a5480df Implement nice member/admin edit in groups. 2026-02-28 19:07:10 +04:00
John Preston 4d767fb279 Implement nice tag edit with preview. 2026-02-28 19:07:10 +04:00
John Preston 3621dc754a Add premium promo for disable sharing. 2026-02-28 19:07:10 +04:00
John Preston f14c592148 Sometimes only replace in crafting. 2026-02-28 19:07:10 +04:00
John Preston f5bee133a4 Improve delete / tag highlight more. 2026-02-28 19:07:10 +04:00
John Preston fc2fd60cdb Check first craft gift address. 2026-02-28 19:07:10 +04:00
John Preston edc3006fbe Improve Remove/Delete from group participants. 2026-02-28 19:07:10 +04:00
John Preston e1a2fd2481 Start nice redesigned group tags display. 2026-02-28 19:07:10 +04:00
John Preston de1e3cc975 Use palette values for colored keyboard buttons.
Fixes #30292.
2026-02-28 19:07:10 +04:00
John Preston d88f817874 Fix highlight issue in messages search results. 2026-02-28 19:07:09 +04:00
John Preston 3e7fa1bde3 Fix possible crash in IV script. 2026-02-28 19:07:09 +04:00
John Preston a9e35afbd7 Implement disabling/enabling sharing. 2026-02-28 19:07:09 +04:00
John Preston f60dfaf14a Always use fresh admin rank, remembered user rank. 2026-02-28 19:07:09 +04:00
John Preston cefce69fda Better right tag handling in messages. 2026-02-28 19:07:09 +04:00
John Preston 5ab68c9ebb Update API scheme on layer 223. 2026-02-28 19:07:09 +04:00
John Preston 5c62bce037 Don't show premium gift border for resale. 2026-02-28 19:07:09 +04:00
John Preston 92fe61610f Fix clip of rarity percent in variants view. 2026-02-28 19:07:09 +04:00
John Preston ab41a469c7 Clip reaction/weather area views in stories. 2026-02-28 19:07:09 +04:00
John Preston 75636d69ff Return "When window closed" setting section.
Fixes #30284.
2026-02-28 19:07:09 +04:00
John Preston c20bf7aeb1 Center the keyboard button icon without text. 2026-02-28 19:07:09 +04:00
John Preston 4c2d72d00b Support no-topics recipient state in bot-forums. 2026-02-28 19:07:09 +04:00
John Preston 2e538b5d38 Update icons for tags editing. 2026-02-28 19:07:09 +04:00
John Preston 660e753ce7 Allow replacing first gift in crafting. 2026-02-28 19:07:09 +04:00
John Preston f4dec97178 Support icons in native bot webview buttons. 2026-02-28 19:07:09 +04:00
John Preston e9fced5c2c Nice design of admin/member tags. 2026-02-28 19:07:09 +04:00
John Preston 3dba01535b Update API scheme on layer 223. 2026-02-28 19:07:09 +04:00
John Preston e509aa8072 Add "All Messages" fake-topic to bot-forum forwards. 2026-02-28 19:07:09 +04:00
John Preston e85bb2085c Update API scheme on layer 223. 2026-02-28 19:07:08 +04:00
John Preston aa94491ad7 Allow editing my rank / other ranks. 2026-02-28 19:07:08 +04:00
John Preston 7969795a01 Show custom ranks, allow toggling on. 2026-02-28 19:07:08 +04:00
John Preston 62d32a1bdf Update API scheme on layer 223. 2026-02-28 19:07:08 +04:00
John Preston 4e9c0ea3a5 Implement private chat noforward following. 2026-02-28 19:07:08 +04:00
John Preston 5c7d2723ed Update API scheme to layer 223. Owners. 2026-02-28 19:07:08 +04:00
John Preston 17e8fd5636 Update changelog link to generated page. 2026-02-28 19:07:08 +04:00
John Preston 18ab2dd0d1 [ai] Remove mention of ultrathink for Claude. 2026-02-28 19:07:08 +04:00
John Preston 03e78536f0 Update lib_base with zlib-ng fix. 2026-02-28 19:07:08 +04:00
23rd 7fb0e3900f Added ability to open full checked moderate box with pressed Ctrl. 2026-02-28 19:07:08 +04:00
23rd 9b483c390d Added ability to open full checked moderate box from left userpic menu. 2026-02-28 19:07:08 +04:00
23rd 385f05b21b Added ability to show moderate box with preset of options. 2026-02-28 19:07:08 +04:00
23rd 7d310e56cc Added accounts list to tray menu on macOS.
Related commit: 57b22d2ad2.
2026-02-28 19:07:08 +04:00
23rd 7899e4943b Changed behavior to open context menu with right-click on macOS tray. 2026-02-28 19:07:08 +04:00
23rd 1848748118 Fixed build. 2026-02-28 19:07:08 +04:00
23rd 04dbbab4a1 Replaced vector container for SendFilesBox::Block with deque.
SendFilesBox::Block (aka Block) passes action
callbacks to AlbumPreview / SingleMediaPreview.
These callbacks access Block::_items through a captured "this" pointer.

With std::vector<Block>, _blocks.emplace_back() may reallocate and
move existing Block objects. Callbacks already stored inside previews
then keep a dangling Block*, and a later context-menu action can crash
when reading this->_items.

Switched _blocks to std::deque<Block> so existing element addresses stay
stable on std::deque::push_back, keeping callback captures valid
for previews.
2026-02-28 19:07:08 +04:00
23rd 3ebec4db75 Changed behavior to send text as caption to first file in files album. 2026-02-28 19:07:08 +04:00
23rd ff3b0fe2d9 Updated Windows build docs for VS 2026. 2026-02-28 19:07:07 +04:00
23rd d62f294494 Added initial support of auto-scroll with middle click to history view.
Fixed #24518.
2026-02-28 19:07:07 +04:00
Ilya Fedin 46758a82a7 Add unlimited recent stickers experimental option 2026-02-28 19:06:20 +04:00
Ilya Fedin 1292bbd954 Mention by name with Ctrl-Click 2026-02-28 19:03:00 +04:00
cumdev1337 234e0b247b Save webauthn resident key 2026-02-28 11:31:30 +04:00
mukthar777 d9d0410797 accessibility: add label to clear search button in search field 2026-02-28 06:41:25 +04:00
mukthar777 eabeae20b6 Add lableing to birthday in profile action 2026-02-28 06:41:25 +04:00
mukthar777 215303cc69 accessibility: implement button labeling across info sections 2026-02-28 06:41:25 +04:00
mukthar777 17db3361d3 Add labels to buttons in dialog widget 2026-02-28 06:41:25 +04:00
mukthar777 91fb6d405d Accessibility: add labeling for group call panel buttons 2026-02-28 06:41:25 +04:00
mukthar777 d5634d5aa4 Accessibility: Add labeling to calls panel 2026-02-28 06:41:25 +04:00
mukthar777 dbeebd2efd Labeling in media player 2026-02-28 06:41:25 +04:00
Artem Lytkin 0bcec5f10c Fixed: GitHub Issue #29530 - Missing Expandable Quote Button in Caption Field 2026-02-27 23:51:31 +04:00
dependabot[bot] d285b2409b Bump actions/checkout from 4 to 6
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 6.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v6)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-27 23:44:55 +04:00
dependabot[bot] 3030a80f37 Bump actions/upload-pages-artifact from 3 to 4
Bumps [actions/upload-pages-artifact](https://github.com/actions/upload-pages-artifact) from 3 to 4.
- [Release notes](https://github.com/actions/upload-pages-artifact/releases)
- [Commits](https://github.com/actions/upload-pages-artifact/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/upload-pages-artifact
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-27 23:44:26 +04:00
dependabot[bot] 47bf9f2429 Bump actions/setup-python from 5 to 6
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-27 23:44:12 +04:00
Reza Bakhshi Laktasaraei 827bd7c9a9 feat(accessibility): add accessible name to search button in narrow layout
The search icon button shown when the filters sidebar is active had no
accessible name, making it appear as an unnamed button to screen readers.
2026-02-27 23:42:27 +04:00
futpib 9dc236b685 Convert https://t.me/ URLs to tg:// scheme in start URL handling
checkStartUrls() passed URLs directly to openLocalUrl() which only
handles tg:// scheme URLs. When https://t.me/ links were passed as
command-line arguments, they were silently ignored. Now URLs are
converted via TryConvertUrlToLocal() before processing, matching the
behavior used when clicking links inside the app.
2026-02-27 23:42:08 +04:00
Ilya Fedin 0cddac16fb Add MinSizeRel support on Linux
Allows to build Telegram itself with multi-config generator as well as all dependencies with -Os optimizations
2026-02-27 23:34:33 +04:00
AlexeyZavar c26d158bc7 chore: hot-reload for more options 2026-02-26 21:21:25 +03:00
AlexeyZavar 17281314e7 feat: hide reactions in private chats 2026-02-26 17:15:42 +03:00
AlexeyZavar aa7d8cd39c fix: highlight buttons in settings 2026-02-26 16:37:26 +03:00
AlexeyZavar 6489311ab8 chore: some fixes
translator cache, filter zalgo in author, semi-transparent deleted messages with replies
2026-02-26 15:46:04 +03:00
AlexeyZavar 6b8e680510 fix: format read date with seconds only if enabled
Co-authored-by: Ireina <140869597+re-zero001@users.noreply.github.com>
2026-02-26 15:46:04 +03:00
AlexeyZavar 52a522c5b8 fix: video forward 2026-02-26 15:46:04 +03:00
AlexeyZavar a0604c5594 chore: rewrite settings to new builder & support settings links from android version 2026-02-26 15:46:04 +03:00
AlexeyZavar 1b12c3379f fix: return AyuGram section 2026-02-22 22:00:32 +03:00
AlexeyZavar 12610c994a chore: add build note for Windows 2026-02-22 22:00:32 +03:00
AlexeyZavar 666b9a354f chore: sync linux metainfo xml 2026-02-22 22:00:32 +03:00
AlexeyZavar be8a3c8a61 fix: fetch supporters from mirror if failed 2026-02-22 22:00:32 +03:00
John Preston 5a6a38da29 Fix path for changelog. 2026-02-20 11:27:46 +04:00
John Preston ce8682e0ee Generate HTML changelog from text version. 2026-02-20 11:22:54 +04:00
AlexeyZavar 79c537eeb8 chore: update year 2026-02-19 16:37:30 +03:00
AlexeyZavar a671960ba7 fix: make it build 2026-02-19 16:31:18 +03:00
23rd 7ffebafb60 Added ability rename files from send files box. 2026-02-19 12:02:11 +03:00
23rd dff3698432 Replaced FileLoadTask constructor parameters with structs. 2026-02-19 11:00:02 +03:00
23rd ca8959fc67 Added auto-close for moderate box when all messages are deleted. 2026-02-19 09:43:01 +03:00
23rd 3d6b1feee0 Fixed emoji display in top bar from admin log.
Related commit: 29ca797b3b.
2026-02-19 09:35:08 +03:00
John Preston f9e2b5f9a2 [ai] Add uninitialized variables review rule. 2026-02-18 22:41:17 +04:00
John Preston 3134f6a08f [ai] Improve style rule for trailing newlines. 2026-02-18 22:41:17 +04:00
John Preston d98011ccdc [ai] Move codex skill to correct place. 2026-02-18 22:41:17 +04:00
John Preston 7201f8a86e [ai] Ask /task command to record work time. 2026-02-18 22:41:16 +04:00
Ilya Fedin 770c39677d Install 2x icons on Linux 2026-02-18 22:20:37 +04:00
AlexeyZavar 8bfd3bee99 Merge tag 'v6.5.1' into dev 2026-02-17 03:35:09 +03:00
AlexeyZavar 1a29b6ac6e feat: save message shot config 2026-02-17 03:20:26 +03:00
23rd b2531b588f Fixed possible crash from rection preview. 2026-02-16 13:52:25 +03:00
23rd f7098efc36 Fixed icons in transcribe button while loading with disabled animation. 2026-02-16 13:15:02 +03:00
23rd 491f569ca3 Added simple loading placeholder while jumping to date in shared media. 2026-02-16 13:15:02 +03:00
23rd 8d258d013a Added simple small mark to clickable title in calendar box. 2026-02-16 13:15:02 +03:00
23rd 2fc23dc8fb Added simple tooltip to shared media buttons in profile.
Related commit: d6ba6ac41e.
2026-02-16 13:15:02 +03:00
23rd a22f6c28d6 Replaced sticker set box with foreground preview on custom emoji click. 2026-02-16 13:15:02 +03:00
23rd 4cdea65aa5 Added support of rpl name to color sample for your color buttons. 2026-02-15 12:10:35 +03:00
23rd a8a3c1555b Added highlight filter button from filters container on dialog drag. 2026-02-15 11:47:58 +03:00
23rd b9f1c21b5e Fixed position of popup menu from More button in shared media info. 2026-02-15 10:52:13 +03:00
23rd 4c5ca97e75 Slightly improved media animation in calendar box. 2026-02-15 10:51:39 +03:00
23rd 8c86a6e55e Disabled dialogs drag to filters while dragging among pinned dialogs. 2026-02-15 09:59:05 +03:00
23rd c66c670ce3 Added initial support of touch scroll to history admin log section. 2026-02-14 08:51:27 +03:00
AlexeyZavar fede50ef48 chore: use cool beta badges 2026-02-13 18:01:48 +03:00
AlexeyZavar 648c60bee8 chore: reorder 2026-02-13 16:52:19 +03:00
AlexeyZavar dd8368a58b fix: apply MD3 switches without restart 2026-02-13 16:52:19 +03:00
AlexeyZavar 4a3be62dd1 fix: load media for shot & don't clear selection if not saved
idea from https://github.com/People-11/AyuGramDesktop/commit/ea4ca21d51775939579df3c4421e7d7c9f59fdca
2026-02-13 16:52:18 +03:00
AlexeyZavar 06fec79ce7 feat: improve link previews 2026-02-13 16:52:18 +03:00
AlexeyZavar cf72307b95 feat: reply to deleted messages 2026-02-13 16:52:18 +03:00
AlexeyZavar 48c7a4046c feat: semi-transparent deleted messages 2026-02-13 16:52:18 +03:00
AlexeyZavar 9952048550 chore: refactor schedule messages 2026-02-13 16:52:18 +03:00
AlexeyZavar b6d19149d9 feat: per-account ghost & lock ghost features & refactor 2026-02-13 16:52:15 +03:00
AlexeyZavar 4107597a3a fix: schedule messages in topics/comments 2026-02-13 16:52:06 +03:00
AlexeyZavar 6092d9a4ad fix: hide cocoon notice if using other provider 2026-02-13 16:52:06 +03:00
AlexeyZavar e46d2615a6 fix: padding 2026-02-13 16:52:06 +03:00
AlexeyZavar c91baa5179 feat: add exteraGram plugins basic info box 2026-02-13 16:52:04 +03:00
23rd 0543491bab Guarded api requests in search calendar controller. 2026-02-13 11:56:57 +03:00
23rd cb13636622 Fixed profile gifts button showing empty before recent gifts loaded. 2026-02-13 11:56:57 +03:00
23rd 51178d7dd7 Added ability to add peer to filter by link or username. 2026-02-13 11:56:57 +03:00
23rd 359675b446 Added ability to drag dialogs to search field. 2026-02-13 11:56:57 +03:00
23rd 95387d58b0 Added ability to drag dialogs to input message fields. 2026-02-13 11:56:57 +03:00
23rd 6387a1591c Added profile link as text data when dragging dialog with username. 2026-02-13 11:56:57 +03:00
23rd 93542f89fb Used separate drag thresholds for pinned and unpinned dialogs. 2026-02-13 11:56:57 +03:00
23rd b49f2a7187 Disabled drag and drop of dialogs to folders when there are no folders. 2026-02-13 11:56:57 +03:00
23rd 4732d7810e Improved fix for verified icon and gift status show both in profiles.
Related commit: d51dd1cdb5.
2026-02-13 11:56:57 +03:00
23rd b915198205 Added event filter to handle Esc key for reaction preview. 2026-02-13 11:56:57 +03:00
23rd b36d165fc3 Added ability to cancel forward in history widget with Esc key. 2026-02-13 11:56:57 +03:00
23rd c6817a60cb Added ability to take written caption from SendFilesBox on cancel. 2026-02-13 11:56:57 +03:00
23rd 5d9271ea86 Added requireImage arg to restrict calendar clicks to dates with images. 2026-02-13 11:56:57 +03:00
23rd dfd5df4265 Removed unused search functions for calendar. 2026-02-13 11:56:57 +03:00
23rd f777ad8d8c Replaced process of date in media calendar with offset message id. 2026-02-13 11:56:57 +03:00
23rd c085245747 Replaced jump to date method with jump to message in info provider. 2026-02-13 11:56:57 +03:00
23rd e04b6e9201 Moved PeerId parameter to SearchCalendarController constructor. 2026-02-13 11:56:57 +03:00
23rd b6121a5d64 Added initial ability to open media calendar from info media sections. 2026-02-13 11:56:57 +03:00
23rd 2a48c002f9 Slightly improved style of dynamic images in calendar box. 2026-02-13 11:56:57 +03:00
23rd 446b3941c8 Added simple animation for dynamic images to calendar box. 2026-02-13 11:56:56 +03:00
23rd 0134b928dc Added controller for calendar search. 2026-02-13 11:56:56 +03:00
23rd 17b88c46b9 Added initial ability to provide dynamic image to calendar dates. 2026-02-13 11:56:56 +03:00
23rd d6765ab394 Replaced args for calendar show from session controller with descriptor. 2026-02-13 11:56:56 +03:00
23rd 09c43a0f1d Changed callback in calendar box to have ability to close box itself. 2026-02-13 11:56:56 +03:00
23rd 9e434a9136 Added initial ability to info list widget to jump to date. 2026-02-13 11:56:56 +03:00
23rd d80cd8d7aa Added virtual method to info data providers to jump to date. 2026-02-13 11:56:56 +03:00
John Preston 2f80db329b Show unique gift number for my gifts. 2026-02-13 11:56:47 +04:00
John Preston cfc8d28a59 Fix autoupdate/dictionaries show/hide in settings. 2026-02-13 11:56:47 +04:00
John Preston 6619cccd3e Allow sending videos as files. 2026-02-13 11:56:46 +04:00
John Preston b28cc7c548 Don't overlap buttons with settings menu.
Fixes #30268.
2026-02-13 11:56:46 +04:00
John Preston 12b192a15b [ai] Make a more complex task workflow. 2026-02-13 11:56:46 +04:00
John Preston 29462e44dc Fix the "Open With" entry on macOS. 2026-02-13 11:56:46 +04:00
John Preston 535f5410ad Fix keyboard loading animation. 2026-02-13 11:56:46 +04:00
John Preston f25c5f7bfe Pass force_file to send video as file. 2026-02-13 11:56:46 +04:00
John Preston e6e9dc201b Fix pagination requests in craft gifts slices. 2026-02-13 11:54:49 +04:00
AlexeyZavar 92bb0910c0 fix: async loading 2026-02-12 16:36:59 +03:00
AlexeyZavar 48aecae2d9 feat: search in deleted messages 2026-02-12 16:36:59 +03:00
AlexeyZavar 6e368fedeb fix: allow forwarding expiring videos 2026-02-12 16:03:42 +03:00
AlexeyZavar e1be829246 fix: local premium emojis in quote & suggest 2026-02-12 16:03:42 +03:00
AlexeyZavar 5f4335d560 feat: filter zalgo 2026-02-12 16:03:42 +03:00
Ilya Fedin 86b4155605 Add faq and vcs-browser URLs to the AppStream metadata 2026-02-11 09:03:53 +04:00
John Preston 6b0fc1bef6 Version 6.5.1.
- Drag-n-drop chats to folders.
- Fix crash in adding Recommended folders.
- Fix crash in crafting gifts selection layer.
- Fix disappeared Login Email button in Settings.
- Fix Tab focusing chats search when autocompleting hashtags or mentions.
2026-02-09 21:59:51 +04:00
John Preston 51d2276259 Fix adding recommended folders. 2026-02-09 21:52:09 +04:00
John Preston 36c398908a Save and restore settings section state. 2026-02-09 21:52:09 +04:00
John Preston 1a388698f4 Implement keyboard navigation in settings search. 2026-02-09 21:52:09 +04:00
John Preston 63d69a4faa Fix old tg://settings/themes link. 2026-02-09 21:52:09 +04:00
Ilya Fedin 16b667040d Update media viewer geometry after show on macOS 2026-02-09 21:52:09 +04:00
John Preston 96696c3983 Implement tg://settings/search properly. 2026-02-09 21:52:09 +04:00
John Preston 1695bdd63c Fix crafted gift number in result display. 2026-02-09 21:52:09 +04:00
John Preston edae1efabe Fix old tg://settings links, including Login Email. 2026-02-09 21:52:09 +04:00
John Preston d1caea2a3a Fix some deep link highlights. 2026-02-09 21:52:09 +04:00
John Preston 5c87c43007 Conditionally handle Tab in fields in custom way. 2026-02-09 21:52:08 +04:00
John Preston 998b3af598 Simplify custom emoji click handlers. 2026-02-09 21:52:08 +04:00
John Preston 647c2b351b Fix possible crash in craft gift selection. 2026-02-09 21:52:08 +04:00
John Preston 9ea08a28d6 Fix another possible crash in links. 2026-02-09 21:52:08 +04:00
John Preston 0d4a6f8e8d Remove dead code, return Login Email button. 2026-02-09 21:52:08 +04:00
John Preston 5521b4e2bb Force non-negative rarity for non-crafted. 2026-02-09 21:52:08 +04:00
John Preston 5f4c3841a0 Fix sender label text for crafted. 2026-02-09 21:52:08 +04:00
23rd 2ccb55f675 Fixed possible title text overlap with account switcher in url auth box. 2026-02-09 20:41:38 +03:00
23rd 2a28b53400 Attempted to fix reset state while replying with Ctrl+Up/Down hotkey.
The previous fix: e672041a79.
Regression was introduced: a05d85673a.
2026-02-09 20:41:38 +03:00
23rd 7884b7de44 Fixed condition for tooltip on version label.
Regression was introduced: 2015a1c69f.
2026-02-09 20:41:38 +03:00
23rd d96ed0d241 Fixed wrong display of chat preview from dialogs while drag. 2026-02-09 20:41:38 +03:00
23rd b3dcb1596a Added session check to dialog drag-and-drop between different servers. 2026-02-09 20:26:58 +03:00
23rd 93539f078e Fixed cleanup of animation schedule method in drag on dialogs destroy. 2026-02-09 20:26:58 +03:00
23rd 32ea2638c4 Added ability to drag and drop dialogs to filters.
Fixed #7463.
Fixed #24191.
Fixed #17301.
2026-02-08 17:40:03 +03:00
23rd d367b0902d Added support of drag and drop peers to horizontal filters container. 2026-02-08 17:40:03 +03:00
23rd 5edea056ef Added ability to provide pixmap to system-wide drag. 2026-02-08 17:40:03 +03:00
23rd 73658c3604 Added support of drag and drop peers to vertical filters container. 2026-02-08 17:40:03 +03:00
23rd e6ceea6bfc Added common util to install drag and drop on filters container. 2026-02-08 17:40:03 +03:00
23rd df14515927 Added ability to check if peer can be added to specific filter. 2026-02-08 11:02:25 +03:00
John Preston 8dd754c1fa Version 6.5.
- Leaving Groups to a New Admin.
- Log In With Telegram.
- Gift Crafting.
- Colored Buttons for Bots.
- Search in Settings.
2026-02-07 00:40:36 +04:00
John Preston 8aa13b4910 Fix possible crash in custom emoji elision. 2026-02-07 00:40:32 +04:00
K H Musthafal Mukthar b0f7846832 Accessibility: add labels for buttons history (#30213)
* Add labeling for buttons in history top bar widget
* Add labeling for send button
* Add labeling to buttons in history widget
* Add screen reader support for silent toggle button as checkbox.
* Add labeling to buttons in voice record bar
2026-02-06 23:00:20 +04:00
John Preston e94373f264 Fix buid with Xcode. 2026-02-06 22:44:58 +04:00
John Preston 8d85f1d76f Show non-craftable semi-transparent in box. 2026-02-06 22:43:53 +04:00
John Preston 955319fc23 Allow crafting another gift after success. 2026-02-06 20:36:25 +04:00
John Preston dad5f9511c Ignore linkFg for special custom emoji link. 2026-02-06 20:36:25 +04:00
John Preston 3c3a65cc70 Fix gift to self, hide sender row in table. 2026-02-06 20:36:25 +04:00
John Preston 3e7a9943a7 [ai] Improve review subagent. 2026-02-06 20:36:25 +04:00
John Preston 5aed7a7b89 [ai] Add style guide to avoid optional::value. 2026-02-06 20:36:25 +04:00
John Preston b0bcb2132c [ai] Extract REVIEW.md for review task step. 2026-02-06 15:03:34 +04:00
John Preston 9468dad455 [ai] Try a task pipeline skill for Codex. 2026-02-06 15:03:34 +04:00
John Preston 9ea48a12dd [cc] Add review steps for /task command. 2026-02-06 13:24:43 +04:00
John Preston 737ea42698 Make all custom emoji in messages clickable. 2026-02-06 13:24:43 +04:00
John Preston 27db7eee26 Show some error toasts on group info saving.
Fixes #30207.
2026-02-06 13:24:43 +04:00
John Preston f45925fb54 Fix crash in message inject in converted group.
Fixes #30209.
2026-02-06 13:24:43 +04:00
John Preston 3c15ec6e49 Remove legacy profile cover code. 2026-02-06 13:24:43 +04:00
John Preston b6ec635c52 Make BadgeTooltip a child of info top bar. 2026-02-06 13:24:43 +04:00
John Preston 9694a0c296 Don't center old discussion posts in topics. 2026-02-06 13:24:43 +04:00
John Preston 63e21abb60 Fix premium star layout in Settings. 2026-02-06 13:24:43 +04:00
John Preston 1651f54208 Improve gift title + number positioning. 2026-02-06 13:24:43 +04:00
John Preston c80d0b73c2 Fix gift privacy check for unique. 2026-02-06 13:24:43 +04:00
23rd 2015a1c69f Simplified installing of tooltip to some labels. 2026-02-06 13:24:43 +04:00
23rd 36e312193f Constrained position of popup menu from top bars to related screen.
Related commits: 67818a2c28 and d1abbae1b3.
2026-02-06 13:24:43 +04:00
23rd bb5e765cfe Fixed cancel reply with Esc in general monoforum section. 2026-02-06 13:24:43 +04:00
23rd 61e3c5d730 Fixed display of right checkbox in gender row from passport details box. 2026-02-06 13:24:43 +04:00
23rd dfcc968c3a Fixed display of subsection title of restrictions list in moderate box. 2026-02-06 13:24:43 +04:00
23rd 19f2579640 Fixed display of phrase for admins when appoint new chat owner on leave. 2026-02-06 13:24:43 +04:00
23rd ed8b3e1bba Fixed height calculation for sponsored message text in media view. 2026-02-06 13:24:43 +04:00
23rd c9dbb83fba Fixed display of action button to manage topic in info top bar. 2026-02-06 13:24:43 +04:00
23rd 25cd88fb01 Added action button to leave basic group to info top bar. 2026-02-06 13:24:43 +04:00
23rd ecc4a034ca Attempt to fix reply from general topic in bots with forum. 2026-02-06 13:24:43 +04:00
23rd c46096ade2 Attempted to fix incorrect display of about view for bots with forum.
Previous commit: 949ea7b8df.
2026-02-06 13:24:42 +04:00
Ilya Fedin 35f4f40b3e Call QInputMethod::show in CodeInput 2026-02-06 13:24:42 +04:00
23rd 66c080559d Added support of input method to CodeInput. 2026-02-06 13:24:42 +04:00
John Preston 9dc71ad9fa Add crafting lottie to the process. 2026-02-06 13:24:42 +04:00
John Preston 28d22d2332 Display lottie on craft failure. 2026-02-06 13:24:42 +04:00
John Preston 6590a8b769 [cc] Some more code style hints. 2026-02-06 13:24:42 +04:00
John Preston a7ae420645 Show all attribute chances. 2026-02-06 13:24:42 +04:00
John Preston 0f2ae9bde6 Use format-count-decimal for gift number. 2026-02-06 13:24:42 +04:00
John Preston afae88f6cc Support new service messages. 2026-02-06 13:24:42 +04:00
John Preston 606bc5523d Use exact colors for uncommon rarities. 2026-02-06 13:24:42 +04:00
John Preston 85e6b0b018 Improve unique gift view. 2026-02-06 13:24:42 +04:00
John Preston aab3ad6bc0 Fix changing ANGLE backend in Settings. 2026-02-06 13:24:42 +04:00
John Preston 71158ca331 Support stories with incorrect aspect. 2026-02-06 13:24:42 +04:00
John Preston 7d172a6427 Allow to toggle between regular and crafted models. 2026-02-06 13:24:42 +04:00
John Preston c3d17d1fd5 [cc] Improve follow-up tasks. 2026-02-06 13:24:42 +04:00
John Preston 1b26fea1e0 Allow "Enlarge Video" / "Shrink Video". 2026-02-06 13:24:42 +04:00
John Preston ca2bb144b9 [cc] Move work files to .ai/ folder. 2026-02-06 13:24:42 +04:00
John Preston d06a9539da Improve craft failed gift thumbnails. 2026-02-06 13:24:42 +04:00
John Preston 50c7308980 [cc] Add /task command. 2026-02-06 13:24:42 +04:00
John Preston 868e1fe22d Use correct color for links in blockquotes. 2026-02-06 13:24:42 +04:00
John Preston b5cd717a8b Name crafted models correctly. 2026-02-06 13:24:42 +04:00
John Preston f96fe33747 Show burned gift badge and toast. 2026-02-06 13:24:41 +04:00
John Preston 24c8738ad7 Show chance percent in adding craft gifts. 2026-02-06 13:24:41 +04:00
John Preston a5dba00155 Make nicer rare variants preview. 2026-02-06 13:24:41 +04:00
John Preston fcbdf3e87b Add Craft action to menu. 2026-02-06 13:24:41 +04:00
John Preston 51bbe4d2bb Load more saved gifts for crafting. 2026-02-03 13:06:35 +04:00
John Preston 3304801e9a Move unique gift lower a bit. 2026-02-03 13:06:15 +04:00
John Preston b2169ff7d7 Name crafted with a separate lang key. 2026-02-03 13:04:00 +04:00
John Preston 026b4df014 Improve resale for craft display. 2026-02-02 23:34:51 +04:00
John Preston 86a622c49c Nice gift craft error handling. 2026-02-02 13:12:51 +04:00
AlexeyZavar f0599a34c7 feat: search by ID 2026-02-01 23:46:30 +03:00
23rd 4189c0b2dc Improved style of credits history entry out for upgrade gifts. 2026-02-01 23:33:58 +04:00
23rd eb1d383c05 Added info to empty list of available participants to appoint new owner. 2026-02-01 23:33:58 +04:00
John Preston be1fc22a05 Read correct attribute craft chances. 2026-02-01 23:33:58 +04:00
John Preston 15bd2132c2 Fix build with Xcode. 2026-02-01 23:33:58 +04:00
John Preston f9174327d8 Fix build with MSVC. 2026-02-01 23:33:58 +04:00
John Preston 134b4b4273 Update API scheme to layer 222. 2026-02-01 23:33:58 +04:00
John Preston 0bbab2bd59 Support colored/iconed bot buttons. 2026-02-01 23:33:58 +04:00
John Preston affbcea601 Update API scheme to layer 224. 2026-02-01 23:33:58 +04:00
23rd 85456f401a Added tooltip to info labels from auth box with url. 2026-02-01 23:33:58 +04:00
23rd 4e0e87aa49 Added toasts to url auth with url. 2026-02-01 23:33:58 +04:00
23rd cdf3481de9 Added support of new oauth urls. 2026-02-01 23:33:58 +04:00
23rd 7418e6acbf Added simple toast on success url auth without url. 2026-02-01 23:33:58 +04:00
23rd 89e750a6aa Moved out significant part of url auth box to td_ui. 2026-02-01 23:33:58 +04:00
23rd 7a573bf809 Added initial api support of url auth login with details. 2026-02-01 23:33:57 +04:00
John Preston 2fd50c5401 Update API scheme to layer 223. 2026-02-01 23:33:57 +04:00
23rd 949ea7b8df Attempted to fix incorrect display of about view for bots with forum. 2026-02-01 23:33:57 +04:00
23rd c9b5d64c83 Added api support to catch next channel owner before leave. 2026-02-01 23:33:57 +04:00
23rd c450e8374b Moved out transfer ownership management to separate class. 2026-02-01 23:33:57 +04:00
23rd de0f768e7f Added new type to widget for userpics transfer. 2026-02-01 23:33:57 +04:00
23rd 41eb626338 Added ability to insert custom separators to PeerListsBox. 2026-02-01 23:33:57 +04:00
John Preston 3e456dbcb9 Improve select gift box for craft. 2026-02-01 23:33:57 +04:00
John Preston 8086ab45ea Use correct phrases in craft. 2026-02-01 23:33:57 +04:00
John Preston 60d9d92060 Send real craft requests. 2026-02-01 23:33:57 +04:00
John Preston 00fd140ff6 Allow buying gifts from resale for craft. 2026-02-01 23:33:57 +04:00
John Preston f5aabb414a Fix glitch on first craft open. 2026-02-01 23:33:57 +04:00
John Preston 701215381a Improve design of craft ending. 2026-02-01 23:33:57 +04:00
John Preston 966968db7b Update API scheme on layer 222. 2026-02-01 23:33:57 +04:00
John Preston e3adbb469f Start craft failure improvement. 2026-02-01 23:33:57 +04:00
John Preston b67ac293fd Implement craft success animation. 2026-02-01 23:33:57 +04:00
John Preston 1a7b934af9 Scheme generation: skip channelForbidden flags check. 2026-02-01 23:33:57 +04:00
John Preston 372f7b4198 Update API scheme on layer 222. 2026-02-01 23:33:57 +04:00
John Preston 3f922f2333 Support failure animation. 2026-02-01 23:33:57 +04:00
John Preston d556d3f575 Fix icon coloring in new bot topics. 2026-02-01 23:33:57 +04:00
John Preston de3862950e Use correct icons in craft preview. 2026-02-01 23:33:56 +04:00
John Preston d6c3f0b5e0 Use correct timestamps for reveal. 2026-02-01 23:33:56 +04:00
John Preston ed14a0342d Rotate the target face while not shown. 2026-02-01 23:33:56 +04:00
John Preston 79ff1c9902 Add loading state to craft animation starting. 2026-02-01 23:33:56 +04:00
John Preston 42cb36481c Land gifts without jumping. 2026-02-01 23:33:56 +04:00
John Preston 08dae545a2 Nice transitions hand-picked. 2026-02-01 23:33:56 +04:00
John Preston a716f2be36 Use determined hardcoded animations. 2026-02-01 23:33:56 +04:00
John Preston 3a548a0383 Attempt to programmatically finish rotation. 2026-02-01 23:33:56 +04:00
John Preston a9a47e6f55 First attempt at nice snapping-to-sides. 2026-02-01 23:33:56 +04:00
John Preston 3076747d3e Improve starting transitions. 2026-02-01 23:33:56 +04:00
John Preston c977983a1f Make nice forge square frame. 2026-02-01 23:33:56 +04:00
John Preston 80099b3ff3 Make nice gift button square frame. 2026-02-01 23:33:56 +04:00
John Preston 0e62acc2a6 Start craft animation. 2026-02-01 23:33:56 +04:00
John Preston 41d825a4db [cc] Allow -NoCommit in task runner. 2026-02-01 23:33:56 +04:00
John Preston d3784d423b Filter out attributes by type in variants. 2026-02-01 23:33:56 +04:00
John Preston 8c515d3751 Support rare/legendary/epic rarities. 2026-02-01 23:33:56 +04:00
John Preston 28564475ea Use gradient button for craft start. 2026-02-01 23:33:56 +04:00
John Preston ce59100bc6 Add crafted attribute preview. 2026-02-01 23:33:56 +04:00
John Preston 8d7b75c329 Improve selecting gifts for craft. 2026-02-01 23:33:56 +04:00
John Preston 1da7ba6446 Use correct craft icon button. 2026-02-01 23:33:56 +04:00
John Preston db09c071d8 Nice state display in crafting middle. 2026-02-01 23:33:56 +04:00
John Preston 8c0c87b2c9 Start improving crafting design. 2026-02-01 23:33:56 +04:00
John Preston 1cb648c103 Initial no-design craft implementation. 2026-02-01 23:33:55 +04:00
John Preston aa56a7362a Update API scheme on layer 222. 2026-02-01 23:33:55 +04:00
23rd 7d1bc28103 Added initial support of forum bots that can manage topics. 2026-02-01 23:33:55 +04:00
23rd 7a88485999 Fixed build. 2026-02-01 23:33:55 +04:00
John Preston 3c76f0f917 Update API scheme to layer 222. 2026-02-01 23:33:55 +04:00
John Preston 68abf86e2c [cc] Improve iterating script. 2026-02-01 23:33:55 +04:00
John Preston 16b9732b82 [cc] Add -SingleCommit option to iteration script. 2026-02-01 23:33:55 +04:00
John Preston 18661709d0 [cc] Add taskplanner skill utility. 2026-02-01 23:33:55 +04:00
John Preston 59c9f28078 [cc] Update locked pdb instruction. 2026-02-01 23:33:55 +04:00
John Preston d26510a1e9 [cc] Add CLAUDE.md for the Claude Code agent. 2026-02-01 23:33:55 +04:00
23rd ab27005dfc Replaced NewBotThreadDownIcon with lambda. 2026-02-01 09:57:56 +03:00
23rd b0e2f948a9 Added icon to new thread about view for bots with forum. 2026-02-01 09:57:56 +03:00
23rd 42f38b042f Added history view LambdaGenericPart. 2026-02-01 09:57:07 +03:00
23rd e672041a79 Attempted to fix reset state while replying with Ctrl+Up/Down hotkey.
Regression was introduced: a05d85673a.
2026-02-01 08:51:55 +03:00
23rd 9a04220129 Added ability to open call menu from history top bar with right click.
Related commit: 20b5de755d.
2026-02-01 08:50:58 +03:00
23rd fa785b745b Fixed wrong color index fallback when cloud peer color is missing. 2026-02-01 08:50:58 +03:00
23rd 527e742a89 Fixed ability to process of credits payment with good credits balance.
Regression was introduced: ae851b8733.
2026-02-01 08:50:58 +03:00
Ilya Fedin 54683b2d21 Decompose countInitialGeomety from MainWindow 2026-01-31 20:21:48 +04:00
Ilya Fedin d33293ba6b Add name argument to PositionWithScreen 2026-01-31 20:21:48 +04:00
Iaroslav 64c5796d1a fix: fixed touchpad-scrolling emoji packs while setting emoji status in main menu 2026-01-31 18:37:56 +04:00
John Preston f9699e19af Beta version 6.4.4.
- Fix crash in topic group opening.
- Show correct profile colors preview when edit.
- Strip quote entities in media viewer.
2026-01-31 18:36:44 +04:00
BandrikGryphon e5cc336011 Update changelog.txt
Corrected the year for the newest 4 changes from 2025 to 2026, for the recent 4 updates (6.4 to 6.4.3 beta).
2026-01-30 09:05:11 +04:00
John Preston c215b9fd5f Fix crash in topic group opening. 2026-01-29 18:20:40 +04:00
John Preston 46cb49865a Show correct profile colors preview when edit. 2026-01-29 18:20:40 +04:00
John Preston e4c7d62012 Activate window with shown nft. 2026-01-29 18:20:40 +04:00
John Preston 85167d34e9 Strip quote entities in media viewer.
They may be collapsed with no way to expand them.
2026-01-29 18:20:40 +04:00
John Preston 0e7a20fe9f Close mediaview when opening nft links. 2026-01-29 18:20:40 +04:00
John Preston f9f3778a4a Beta version 6.4.3.
- Search in Settings.
2026-01-29 18:20:40 +04:00
John Preston 49be0d2679 Fix build with GCC. 2026-01-29 18:20:40 +04:00
John Preston f7f3539f48 Fix build with Xcode. 2026-01-29 18:20:40 +04:00
Ilya Fedin 2a3c260dd6 Qt 6.10.1 -> 6.10.2 2026-01-29 16:49:47 +04:00
John Preston 1ac081d695 Update patches revision. 2026-01-28 14:28:19 +04:00
John Preston e537279692 Fix build with Xcode. 2026-01-28 14:22:17 +04:00
John Preston a111727302 Fix build with Qt 5. 2026-01-28 13:03:15 +04:00
Ilya Fedin 5c900c2b54 Update to modern OpenGL library on Linux 2026-01-28 12:56:40 +04:00
Ilya Fedin dc3d4ad873 Remove --target tde2e
It's not needed since b5f2470b79
2026-01-28 12:00:36 +04:00
Ilya Fedin 76e597f57f Get rid of PATH_BACKUP_ in prepare.py
Each step spawns a separate shell instance, the environment gets reset anyway
2026-01-28 12:00:36 +04:00
Ilya Fedin 4d1b25ce78 CMAKE_OSX_DEPLOYMENT_TARGET defaults to MACOSX_DEPLOYMENT_TARGET 2026-01-28 12:00:36 +04:00
Ilya Fedin 4ef57e5ffd Switch tg_owt to default generator on Windows 2026-01-28 12:00:36 +04:00
Ilya Fedin 0368722c4d Switch tg_angle to default generator 2026-01-28 12:00:36 +04:00
Ilya Fedin baecfd6775 Don't set parallel count in prepare.py
Given that we use ninja now, it will be (cpu_count+2) with the possibility to override it via CMAKE_BUILD_PARALLEL_LEVEL
2026-01-28 12:00:36 +04:00
Ilya Fedin ccf6428633 Use Ninja cmake generators in prepare.py
Use Ninja Multi-Config instead of Visual Studio on Windows

Use Ninja instead of Unix Makefiles on macOS
2026-01-28 12:00:36 +04:00
Ilya Fedin e73fe08212 Don't set architecture explicitly for cmake in prepare.py
Let it inherit from the command prompt
2026-01-28 12:00:36 +04:00
Ilya Fedin 2c85060c49 Revert "Use v143 toolset in some dependencies."
This reverts commit 580c688b2b.
2026-01-28 12:00:36 +04:00
Ilya Fedin 0729bd7f83 Initial screen from geometry 2026-01-28 11:59:01 +04:00
John Preston 27e1867346 Delete old faq entries. 2026-01-28 11:55:22 +04:00
John Preston ecae9c7794 Add separate lang key for FAQ search result subtitles.
Use shorter 'FAQ' prefix for search results instead of full
'Telegram FAQ' that's used for the main FAQ button label.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:21 +04:00
John Preston 594dc126e7 Index FAQ entries together with settings entries.
Now FAQ entries appear in filtered search results when the query
matches, not just when query is empty. Uses same button cache and
first-letter index for both settings and FAQ entries.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:21 +04:00
John Preston fafe2f96c1 Restore settings search query on return. 2026-01-28 11:55:21 +04:00
John Preston 4c2e73a3ae Show FAQ entries as default search results. 2026-01-28 11:55:21 +04:00
John Preston eff86fc84d Cache and reuse search result buttons in settings.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:21 +04:00
John Preston 55624b3410 Fix Ctrl+F in settings. 2026-01-28 11:55:21 +04:00
John Preston e022c6e0f9 Optimize settings search with first-letter index.
Build search index once when the section is created instead
of recomputing on every query. Use first-letter lookup for
O(1) candidate filtering, following the pattern from theme
editor's searchByQuery implementation.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:21 +04:00
John Preston 16442e2013 Preserve search query on navigation in settings.
Use the stepDataReference mechanism to save and restore the
search query when navigating from results to a section and back.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:21 +04:00
John Preston 38832396bc Implement smart sorting for settings search results.
Sort results by match count (descending), then by parent chain
depth (ascending), and finally alphabetically by title.
2026-01-28 11:55:21 +04:00
John Preston b60f6b0705 Implement word-based matching in settings search.
Use TextUtilities::PrepareSearchWords() to normalize query and
entry text: split into words, remove accents, and lowercase.
Match by word prefix: each query word must match at least one
entry word by startsWith().

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:21 +04:00
John Preston f822d23509 Support Ctrl+F shortcut in settings to open search. 2026-01-28 11:55:21 +04:00
John Preston 55d43e7cad Fix search highlighting across settings sections. 2026-01-28 11:55:21 +04:00
John Preston af28ef7c94 Don't index section buttons in settings search. 2026-01-28 11:55:21 +04:00
John Preston 81b095e73d Improve subtitles for settings section entries. 2026-01-28 11:55:21 +04:00
John Preston 49253a9586 Fix deeplink settings search entries. 2026-01-28 11:55:21 +04:00
John Preston 374b877323 Add Profile Photo search entry.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:21 +04:00
John Preston 2b5732f586 Add deeplink support for search entries.
SearchEntry now has an optional `deeplink` field. When set, clicking
the search result activates the deeplink URL instead of navigating.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:21 +04:00
John Preston 38d8aa2a33 Fix interface scale highlighting.
The custom build method in Main::setupContent() was missing the
HighlightRegistry setup, so widgets added via builder.add() with
search entries weren't being registered for highlighting.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:21 +04:00
John Preston ead60ebfcd Fix Chat::Id() → ChatId() in settings.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:21 +04:00
John Preston d2933428a4 Fix search result subtitles.
sectionPath() was starting with parentId instead of the section itself,
causing subtitles to skip the section name the entry belongs to.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:21 +04:00
John Preston ec683d7488 Add place for current working AI docs. 2026-01-28 11:55:21 +04:00
John Preston 0d88925f83 Remove SectionBuildMethod exports from headers
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:21 +04:00
John Preston f5319724e3 Move Settings::PrivacySecurity class to anonymous namespace
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:21 +04:00
John Preston d37216815d Move Settings::Notifications class to anonymous namespace
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:21 +04:00
John Preston 4982814d36 Move Settings::Chat class to anonymous namespace
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:21 +04:00
John Preston e84e8a7cf6 Move Settings::Advanced class to anonymous namespace
- Move Advanced class definition into .cpp file anonymous namespace
- Export only Type AdvancedId() in header
- Keep exported helper functions (SetupConnectionType, HasUpdate, etc.)
- Remove unused SetupWindowCloseBehaviorContent declaration
- Update callers to use AdvancedId() instead of Advanced::Id()

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:21 +04:00
John Preston 480dcd8a7a Move Settings::Main class to anonymous namespace
- Move Main class definition from header to .cpp file
- Export only Type MainId() from header
- Update all external references from Main::Id() to MainId()
- Remove Builder::MainSection export from namespace
- Add missing includes for settings_common_session.h where needed

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:21 +04:00
John Preston 6bda4dd0d8 Upgrade settings_local_passcode to full builder pattern
- Move LocalPasscodeManage class into anonymous namespace
- Remove Builder::LocalPasscodeManageSection export from header
- Use inline buildMethod for setupContent()
- Keep Create/Check/Change enter-type sections as-is (form-based)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:21 +04:00
John Preston 18114458b8 Upgrade settings_calls to full builder pattern
- Move Calls class to anonymous namespace in .cpp
- Export only Type CallsId() from header
- Move AddCameraSubsection to be a free function (exported)
- Keep all device helper functions exported
- Update all references to use CallsId() and AddCameraSubsection()
- Add missing include to calls_group_settings.cpp

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:21 +04:00
John Preston 7e5b85c4b3 Upgrade settings_information to full builder pattern
- Move Information class to anonymous namespace in .cpp
- Export only Type InformationId() from header
- Keep exported helpers: SetupAccounts, UpdatePhotoLocally, Badge::*
- Use custom buildMethod with HighlightRegistry for all profile widgets
- Update all references to use InformationId() instead of Information::Id()

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:20 +04:00
John Preston 4199bba706 Upgrade settings_shortcuts to full builder pattern
- Move Shortcuts class to anonymous namespace in .cpp
- Export only Type ShortcutsId() from header
- Use custom buildMethod with HighlightRegistry for reset button
- Update settings_chat.cpp to use ShortcutsId() instead of Shortcuts::Id()

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:20 +04:00
John Preston d7fa4048c1 Upgrade settings_websites to full builder pattern
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:20 +04:00
John Preston 20408aa531 Upgrade settings_premium to full builder pattern
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:20 +04:00
John Preston 518993cb4c Upgrade settings_notifications_type to full builder pattern
- Move widget creation into BuildNotificationsTypeContent() builder function
- Use builder.add() with widget and search callbacks for indexed controls
- Update setupContent() to use build() with custom buildMethod that captures _type
- Remove manual highlight tracking (QPointer fields and showFinished() registrations)
- Class remains in header due to parameterized constructor (takes Notify type)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:20 +04:00
John Preston 8a017226c3 Upgrade settings_passkeys to full builder pattern
- Move create passkey button to builder.addButton() with proper ID
- Use builder.add() for dynamic passkeys list
- Move Passkeys class from header to .cpp (anonymous namespace)
- Remove extern SectionBuildMethod from header
- Have setupContent() call build() with custom build method
- Simplify header to only export Type PasskeysId() and PasskeysNoneBox()

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:20 +04:00
John Preston 31f3d6810d Upgrade settings_credits to full builder pattern
- Move stats/gift/earn buttons to builder.addButton() with proper IDs
- Use builder.add() for dynamic subscriptions/history lists
- Have setupContent() call build(content, buildMethod)
- Remove extern SectionBuildMethod from header
- Extract BuildCurrencyWithdrawalSection helper function
- Add forward declarations for builder functions

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:20 +04:00
John Preston ac5b9a3e78 Upgrade settings_business to full builder pattern
- Add BusinessState struct for shared state between setupContent and builder
- Update setupContent() to call build() with custom method
- Remove duplicate widget creation code
- Use state->setPaused and state->sponsoredButton instead of class members
- Remove extern SectionBuildMethod from header

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:20 +04:00
John Preston cde0a11c74 Upgrade settings_global_ttl to full builder pattern
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:20 +04:00
John Preston b0ddca72ae Upgrade settings_blocked_peers to full builder pattern
Move Blocked class to anonymous namespace in .cpp, export only
Type BlockedPeersId() in header. Remove extern SectionBuildMethod
from header. Update references in privacy_security and deep_links.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:20 +04:00
John Preston 7dbeb56111 Upgrade settings_active_sessions to full builder pattern
- Move Sessions class to anonymous namespace in .cpp file
- Export only Type SessionsId() in header
- Use builder pattern with custom buildMethod for widget creation
- Handle highlights registration through WidgetContext
- Rename local Type enum to DeviceType to avoid conflict with Settings::Type
- Update all references to Sessions::Id() in other files to use SessionsId()

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:20 +04:00
John Preston df347ad0f4 Upgrade settings_folders to full builder pattern
- Move Folders class to anonymous namespace in .cpp
- Export only Type FoldersId() from header
- setupContent() uses custom SectionBuildMethod capturing state
- Widget creation through builder.add() callbacks
- Highlight registration via push_back

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:20 +04:00
John Preston 4c5cf47bc9 Rewrite settings_websites to new builder pattern
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:20 +04:00
John Preston 53cb0e79cb Rewrite settings_shortcuts to new builder pattern
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:20 +04:00
John Preston 9316cec95d Rewrite settings_premium to new builder pattern
- Move settings_premium.h/cpp from settings/ to settings/sections/
- Add BuildHelper with kMeta for search indexing
- Index premium features and subscribe button for search
- Keep complex Premium section UI (custom top bar, feature list) as non-indexed
- Update all include paths across the codebase

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:20 +04:00
John Preston 86398de8bd Rewrite settings_passkeys to new builder pattern
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:20 +04:00
John Preston d966dc2343 Rewrite settings_notifications_type to new builder pattern
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:20 +04:00
John Preston fd4c42a156 Rewrite settings_information to new builder pattern
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:20 +04:00
John Preston 5b14d62ede Rewrite settings_folders to new builder pattern
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:20 +04:00
John Preston 1fa68effdd Rewrite settings_credits to new builder pattern
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:20 +04:00
John Preston 4fc45c590e Rewrite settings_business to new builder pattern
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:20 +04:00
John Preston 8812b892c4 Rewrite settings_blocked_peers to new builder pattern
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:20 +04:00
John Preston e60db7cfb1 Rewrite settings_active_sessions to new builder pattern
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:20 +04:00
John Preston 8c97e5f942 Rewrite settings_local_passcode to new builder pattern
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:19 +04:00
John Preston 057e21905e Rewrite settings_global_ttl to new builder pattern
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:19 +04:00
John Preston ca5e18391b Rewrite settings_calls to new builder pattern
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:19 +04:00
John Preston 802917de12 Move settings_builder from settings/builder/ to settings/ 2026-01-28 11:55:19 +04:00
John Preston 8d30a03f50 Unite settings_privacy_security and settings_privacy_security_builder into settings/sections/settings_privacy_security.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:19 +04:00
John Preston 94b5a20c0a Unite settings_notifications and settings_notifications_builder into settings/sections/settings_notifications.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:19 +04:00
John Preston 7c06e847f9 Unite settings_chat and settings_chat_builder into settings/sections/settings_chat.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:19 +04:00
John Preston 7a3f6a6994 Unite settings_advanced and settings_advanced_builder into settings/sections/settings_advanced.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:19 +04:00
John Preston c39bc10d2f Unite settings_main and settings_main_builder into settings/sections/settings_main.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:55:19 +04:00
John Preston 28acb19032 Restore support mode settings. 2026-01-28 11:55:19 +04:00
John Preston d94abec352 Index sections themselves. 2026-01-28 11:55:19 +04:00
John Preston bf0ba68092 Make more settings sections searchable. 2026-01-28 11:55:19 +04:00
John Preston df1410d84d Search results look nicer now. 2026-01-28 11:55:19 +04:00
John Preston 1d0c41b295 Implement main section correctly. 2026-01-28 11:55:19 +04:00
John Preston 7064de6eef Start settings search. 2026-01-28 11:55:19 +04:00
John Preston 0e36d45233 Always close after passcode disabling. 2026-01-28 11:55:19 +04:00
John Preston fdfe1f1cb5 Always keep SessionController in Settings sections. 2026-01-28 11:55:19 +04:00
John Preston 1e5a93249c Support all required deep links. 2026-01-28 11:55:19 +04:00
John Preston 808a9e6fb9 Move Advanced/Privacy/Chat settings to builder. 2026-01-28 11:55:18 +04:00
John Preston ca4677686a Support most settings/edit and privacy deep links. 2026-01-28 11:55:18 +04:00
John Preston 7bf2318b80 Add default delay for highlight. 2026-01-28 11:55:18 +04:00
John Preston 194810cd56 Add initial support for all deep links. 2026-01-28 11:55:18 +04:00
John Preston 5426bf1761 Add Settings::ScrollToWidget. 2026-01-28 11:55:18 +04:00
John Preston f34995cfd3 Add title to set birthday box. 2026-01-28 11:55:18 +04:00
John Preston 795b73325a Support self QR code box deep_link. 2026-01-28 11:55:18 +04:00
John Preston cb28a50017 Highlight emoji status button. 2026-01-28 11:55:18 +04:00
John Preston f447423e2e Allow postponed highlight request. 2026-01-28 11:55:18 +04:00
John Preston 1b3e275cf2 Add HighlightWidget helper. 2026-01-28 11:55:18 +04:00
John Preston a86529c22c Support nice search activation without query. 2026-01-28 11:55:18 +04:00
John Preston 47b2b604e4 Add structure for huge amount of deep links handling. 2026-01-28 11:55:18 +04:00
John Preston ff35468dac Move my QR code button from title to cover in Settings. 2026-01-28 11:55:18 +04:00
John Preston 0c5c5d3c42 Migrate all notification settings to builder. 2026-01-28 11:55:17 +04:00
John Preston 74f204e8e8 Migrate all settings main section to builder. 2026-01-28 11:55:17 +04:00
John Preston 375a8cea12 Initial settings builder experiment. 2026-01-28 11:55:17 +04:00
23rd 156942f8fb Added saving of geometry for call panel. 2026-01-28 10:02:27 +03:00
23rd 4cd0e2c9d7 Added simple icon to button for bot privacy policy from profile actions. 2026-01-28 09:20:42 +03:00
23rd ae851b8733 Fixed display of credits payment form even with small credits balance. 2026-01-28 08:57:57 +03:00
23rd 67818a2c28 Fixed position of popup menu from More button in history view top bar. 2026-01-28 08:57:57 +03:00
23rd 7c675a378c Added experimental option to force embedded search in chat. 2026-01-28 08:57:57 +03:00
23rd ff3f434acc Added popup menu to call button from history view top bar for users. 2026-01-28 08:57:57 +03:00
23rd 5146c05ec3 Added ability to start outgoing call without user confirmation. 2026-01-28 08:57:57 +03:00
23rd b97322c198 Removed report button from profile top bar actions for joined groups. 2026-01-28 08:57:57 +03:00
23rd d1abbae1b3 Fixed position of popup menu from More button in profile top bar. 2026-01-28 08:57:57 +03:00
23rd ebc2190779 Removed optimization of ripple animation in replies for unwrapped media. 2026-01-28 08:57:57 +03:00
23rd 3fdfd76f6e Fixed false drag state while copying recognized text from media view. 2026-01-28 08:57:57 +03:00
23rd c7459af4ec Changed bg of important tooltip for top peers selector. 2026-01-28 08:57:57 +03:00
23rd 61e0e39641 Particularly ported QMenu::hasMouseMoved to top peers popup selector. 2026-01-28 08:57:57 +03:00
23rd da3b62341f Added tooltip to fast share about popup selector for top peers. 2026-01-28 08:57:57 +03:00
23rd a5db6cd363 Fixed crash from feature to kick participants from common groups. 2026-01-28 08:57:57 +03:00
John Preston 786b0e77b8 Add nice animations to stories on focus search. 2026-01-28 08:57:57 +03:00
John Preston 6dce4e360f Use lottie for voice/round message icon. 2026-01-28 08:57:57 +03:00
23rd f40064333e Fixed ability to delete chat as forum with all topics. 2026-01-28 08:57:57 +03:00
23rd 160075c22b More removed forum shape from bot userpics. 2026-01-28 08:57:57 +03:00
23rd ce0f10f764 Renamed default tab for all bot forums. 2026-01-28 08:57:57 +03:00
23rd a7def1ee87 Removed enforced empty general forum topic creation for bots. 2026-01-28 08:57:57 +03:00
23rd 6bdbf85279 Fixed display of tabs in forum bots on receiving full user. 2026-01-28 08:57:57 +03:00
23rd c7dd173858 Returned about to bots with forum. 2026-01-28 08:57:57 +03:00
23rd 9541e983d2 Removed forum shape from bot userpics. 2026-01-28 08:57:57 +03:00
John Preston 1ea7d979a8 Use FASTLINK only in x64 builds. 2026-01-28 08:57:57 +03:00
John Preston fa190a74da Enable LTO by an option. 2026-01-28 08:57:57 +03:00
John Preston 1696e4495a Use /DEBUG:FASTLINK for debug builds. 2026-01-28 08:57:57 +03:00
23rd 8b3498aaf1 Fixed ability to drag'n'drop to non-primary window chat while searching. 2026-01-28 08:57:57 +03:00
23rd 5865891797 Fixed memory clearing for popup selector. 2026-01-28 08:57:57 +03:00
23rd 4c655a6b9d Added support of right press-move-release to popup selector for peers. 2026-01-28 08:57:57 +03:00
23rd d0448569b7 Fixed position of popup selector for messages with inline reactions. 2026-01-28 08:57:57 +03:00
23rd 03d7736b99 Added keyboard support to popup selector for top peers. 2026-01-28 08:57:56 +03:00
23rd 70604b6e8b Added simple tooltip to peers in popup selector for top peers. 2026-01-28 08:57:56 +03:00
23rd 2f6e8bbef9 Added ability to show popup selector for top peers from fast share. 2026-01-28 08:57:56 +03:00
23rd e2ed9baacb Added initial popup selector for top peers. 2026-01-28 08:57:56 +03:00
23rd b45896b294 Added initial implementation of userpics strip for popup selector. 2026-01-28 08:57:56 +03:00
23rd 3ea8d14521 Extracted strip selector from reactions to make dedicated popup. 2026-01-28 08:57:56 +03:00
23rd 9fb25bfada Added special bullet char to global access. 2026-01-28 08:57:56 +03:00
23rd 481de1e3e3 Added bullet separator between name and date in media viewer overlay. 2026-01-28 08:57:56 +03:00
23rd 2781e6c304 Attempted to fix rare visual glitch when pinned bar is not resized.
Fixed #30188.
2026-01-28 08:57:56 +03:00
23rd a05d85673a Improved process of replying via hotkeys for sending messages.
Fixed #30160.
2026-01-28 08:57:56 +03:00
23rd 2c68df9696 Fixed column bounds check in ShareBox for mouse to prevent cross-rows.
Fixed #30155.
2026-01-28 08:57:56 +03:00
23rd 97a1d5c592 Fixed stale state of media edit manager in history widget.
Fixed #30147.
2026-01-28 08:57:56 +03:00
23rd 7134363905 Slightly improved padding of emoji status in accounts list. 2026-01-28 08:57:56 +03:00
23rd e6369eaae1 Added chat filters to feature to kick participants from common groups. 2026-01-28 08:57:56 +03:00
23rd 8585a00051 Fixed position of freshly pinned to top stories. 2026-01-26 11:38:11 +03:00
23rd 1f072631e5 Fixed crash when forward message from web bot to forum topic. 2026-01-26 11:38:11 +03:00
23rd 8343178219 Improved forwarded info in service messages for staked dice. 2026-01-26 11:38:11 +03:00
23rd b28bb112fe Fixed display of compose search when edit media caption. 2026-01-26 11:37:53 +03:00
23rd 68f65ea000 Slightly improved position of context menu from top button in proxy box. 2026-01-26 11:37:53 +03:00
23rd 49b27d6b0d Removed notifications action buttom from profile top bar for self. 2026-01-26 11:37:53 +03:00
Ilya Fedin 5a425dc5be Update patches in prepare.py 2026-01-21 20:59:52 +04:00
Ilya Fedin 18acef841b Add experimental option for QT_WIDGETS_HIGHDPI_DOWNSCALE 2026-01-21 20:59:52 +04:00
Ilya Fedin 6022c79cbb Ensure curl is present when building snap 2026-01-21 17:54:33 +04:00
Ilya Fedin a86c84b1a1 Set more cmake variables globally in macOS packaged action 2026-01-19 21:01:38 +04:00
Ilya Fedin 70bddf76fa Cache rnnoise in macOS packaged action 2026-01-19 21:01:38 +04:00
Ilya Fedin 82c6e50753 Cache only installed files in macOS packaged action 2026-01-19 21:01:38 +04:00
Ilya Fedin d3f2270f22 Switch rnnoise to GitHub in macOS packaged action 2026-01-19 21:01:38 +04:00
Ilya Fedin fb90685a7c Add tde2e version to cache key in macOS packaged action 2026-01-19 21:01:38 +04:00
Ilya Fedin bbd865ddec Stop calling hdiutil in macOS packaged action
It periodically fails for some reason
2026-01-19 21:01:38 +04:00
AlexeyZavar 895c988ba6 fix: make it build 2026-01-12 22:53:07 +03:00
AlexeyZavar e15d380dd1 Merge tag 'v6.4.2' into dev 2026-01-12 20:19:28 +03:00
nikitadan4pi 1f6806d68b chore: update linux build docs 2026-01-12 18:44:47 +03:00
Danila Dergachev dde6ee67a2 fix: hide notification counters for top tabs 2026-01-12 18:37:09 +03:00
AlexeyZavar dbfc556cb9 fix: jump to beginning 2026-01-12 18:27:34 +03:00
John Preston 6e412f43b2 Version 6.4.2.
- Fix non-closing popup menu items.
- Fix crash in my profile section resize.
- Fix some text glitches because of render optimizations.
2026-01-10 21:29:01 +04:00
John Preston d6d4dc9826 Reapply "Attempt to fix window geometry restore on Windows." 2026-01-10 21:29:01 +04:00
John Preston 96230fb4d0 Fix build with GCC. 2026-01-10 11:24:46 +04:00
23rd cd065beb0c Replaced ItemBase::setClickedCallback with setActionTriggered. 2026-01-09 22:49:23 +03:00
23rd 5f8a9dddff Removed trigger filter from menu action factory. 2026-01-09 22:44:34 +03:00
23rd 659640b851 Added lottie icon while loading amount of all messages to moderate box. 2026-01-08 21:21:51 +03:00
23rd e8566002d6 Added general replies to admin log messages. 2026-01-08 07:18:46 +03:00
23rd 4f96812b90 Added ability to have duplicates in stack of sections. 2026-01-08 07:18:46 +03:00
23rd 20b5de755d Added ability to open menu from history view top bar with right click. 2026-01-07 10:15:23 +03:00
23rd b8a17d4266 Optimized repaint clip for ripple animation from history view reply. 2026-01-07 09:58:04 +03:00
23rd 5d9523466b Fixed optimized repaint of message text while swipe gesture.
Related commits: 8638d26156 and 9027e3b7ee.
2026-01-06 18:38:53 +03:00
23rd 4a1a21bc4f Fixed crash from feature to kick participants from common groups. 2026-01-06 18:33:19 +03:00
23rd 5eeb9e561d Added date of end of ban from group to admin log. 2026-01-06 17:49:29 +03:00
John Preston 4ffddae162 Fix crash in my profile resize. 2026-01-06 11:50:00 +04:00
23rd 309e3f804d Removed over-optimization from stories processing in profile top bar. 2026-01-06 09:30:01 +03:00
23rd 0d853c9393 Fixed possible crash on summarizing of caption from grouped media. 2026-01-06 09:11:19 +03:00
23rd 6d145be8d2 Returned back full Ubuntu to Github CI for user agent updater. 2026-01-06 08:49:25 +03:00
23rd 81820a220d Removed workaround for shadows from some menu items.
Related commits: 52d78ef724 and 4c545181ad.
2026-01-06 08:30:08 +03:00
23rd 513d4f962f Added key press handler to menu item for rate voice transcriptions. 2026-01-06 08:30:08 +03:00
23rd 9d09a637fe Slightly simplified resize handler for menu items. 2026-01-06 08:30:08 +03:00
23rd b958e0a275 Replaced generic widget-based parent with explicit Menu class in items. 2026-01-06 07:21:15 +03:00
23rd 8952277ae9 Replaced phrase for saved messages date to be more clearer. 2026-01-05 20:58:35 +03:00
23rd 4a482540cb Fixed ability to schedule message until online for notification user. 2026-01-05 20:58:35 +03:00
23rd f9ba0092bc Fixed menu items with check. 2026-01-05 20:58:35 +03:00
Ilya Fedin b0fa6170e5 Add Windows arm64 build to GitHub actions 2026-01-05 21:54:56 +04:00
Ilya Fedin 83668b3b93 Add Windows Qt 6 build to GitHub actions 2026-01-05 21:54:56 +04:00
Ilya Fedin e5683489bb Use x64 build tools to build x86 binaries in Windows action 2026-01-05 21:54:56 +04:00
Ilya Fedin f82a6f7f98 Share ThirdParty cache by runner architecture on Windows 2026-01-05 21:54:56 +04:00
John Preston 3502287832 Version 6.4.1.
- Fix context menu double activations.
- Fix text rendering in animating bubbles.
2026-01-05 17:56:42 +04:00
John Preston 38a3f00de2 Fix build with GCC. 2026-01-05 17:56:42 +04:00
John Preston c5d4b3affc Fix allowed gifts list for channels. 2026-01-05 14:52:44 +04:00
John Preston 36da011736 Fix recent views / reactions menu in stories. 2026-01-05 14:24:03 +04:00
John Preston 58e9d933c3 Fix crash in NotifySettings::apply. 2026-01-05 12:45:02 +04:00
John Preston 38e586c8e2 Fix build with MSVC. 2026-01-05 12:45:02 +04:00
23rd 9027e3b7ee Fixed optimized repaint of message text while send animating.
Related commit: 8638d26156.
2026-01-05 12:45:02 +04:00
23rd bac03ac47b Fixed display of summary header in history view on unload heavy parts. 2026-01-05 12:45:02 +04:00
23rd e6c01c4434 Fixed icon fg in summary header from history view. 2026-01-05 12:45:02 +04:00
23rd bb7c4fbb21 Fixed issue that caused peer list box height to fluctuate on show.
Related commit: 64975f2dd5.
2026-01-05 12:45:02 +04:00
github-actions[bot] e6ad773c89 Update copyright year to 2026. (#30159) 2026-01-05 12:21:48 +04:00
John Preston e3d7791a9c Version 6.4.
- AI Summaries for posts in channels.
2026-01-03 23:30:06 +04:00
John Preston 9f65e14adb Fix incorrect stake message appearance. 2026-01-03 23:30:06 +04:00
John Preston a05d7aaf91 Fix crash in stats with Qt 6 on Windows. 2026-01-03 22:10:33 +04:00
John Preston 350a5dd7bc Fix build. 2026-01-03 22:10:33 +04:00
John Preston be92c59b1b Fix build with Qt 6 on Windows. 2026-01-03 21:14:59 +04:00
23rd 29028d60cd Fixed disappearing back button in top bar from admin log section. 2026-01-03 17:18:32 +03:00
23rd dd424ef25d Fixed inconsistency of media player widget on manual voice stop. 2026-01-03 15:06:24 +03:00
23rd 64975f2dd5 Increased height of all boxes with peer lists. 2026-01-03 13:11:17 +03:00
23rd 13d4a2f8ca Revert "Increased height of various boxes with participants list."
This reverts commit 3d61da74ed.
2026-01-03 13:02:47 +03:00
23rd b498a41f58 Added lottie icon to history view summary header. 2026-01-03 11:13:04 +03:00
23rd 80ba8a93b0 Split AddUniqueCloseMoreButton and AddUniqueCloseButton. 2026-01-03 10:32:29 +03:00
23rd adcae206b2 Moved out about cocoon box to td_ui. 2026-01-03 10:32:26 +03:00
23rd 20e6e771d7 Improved summary text processing with channel translations. 2026-01-03 10:32:04 +03:00
23rd 813b12baeb Split SummaryHeader history view component from Reply component. 2026-01-03 10:32:04 +03:00
23rd 1e6912f560 Respected different scales in rects of text recognition for macOS. 2026-01-03 05:13:29 +03:00
23rd e26e73b6f2 Fixed locked summary buttons after becoming premium. 2026-01-03 04:57:10 +03:00
23rd bb3f54efcb Fixed stacking of tabbed panel after successful sent gif with caption. 2026-01-02 17:46:55 +03:00
23rd 65c7d0bc39 Added ability to hide under spoiler gif with caption on send.
Fixed #30126.
2026-01-02 17:36:55 +03:00
23rd 89848a644d Added ability to choose environment without key modifier in debug. 2026-01-02 16:50:31 +03:00
23rd b370b859aa Attempted to fix color of lottie icon from transcribe while loading.
Related commit: 08a64f0dc0.
2026-01-02 16:50:00 +03:00
23rd 73c1adea5f Limited birthday contacts userpics display to 3 in top bar suggestion. 2026-01-02 16:09:19 +03:00
23rd 6d66194c38 Added tooltip with date to service messages in admin log. 2026-01-02 16:03:51 +03:00
23rd 5396d78f9a Slightly improved code style in history item components. 2026-01-02 16:03:51 +03:00
John Preston 1ba2e78f4d Make DeadlockDetector an experimental setting. 2026-01-02 16:56:58 +04:00
John Preston d8a3df644b Don't check my own gifts privacy. 2026-01-02 16:56:31 +04:00
John Preston 05d3c2dc4a Fix possible crash in topic creation discard. 2026-01-02 16:19:58 +04:00
John Preston f4515558c2 Show only first frame in topic dividers. 2026-01-02 16:19:58 +04:00
John Preston 5726026289 Show "No chats." if no topics loaded. 2026-01-02 16:19:58 +04:00
John Preston c8c327566b Always keep General topic, don't delete all. 2026-01-02 16:19:58 +04:00
John Preston 02667395ee Update service msg opacity in custom themes. 2026-01-02 16:19:58 +04:00
23rd e3465ba688 Added click handler to reply inline markup with url in admin log. 2026-01-02 14:31:47 +03:00
23rd 29ca797b3b Moved out back button for admin log to td_ui. 2026-01-02 10:45:56 +03:00
23rd 3ac4eefe1d Slightly improved style of top bar in admin log section. 2026-01-02 10:45:56 +03:00
23rd 34c35ece99 Slightly improved code style in admin log section. 2026-01-02 07:42:07 +03:00
23rd a5f76235eb Slightly improved style of admin log section. 2026-01-02 07:42:07 +03:00
23rd a8f3a04b43 Added quoted replies to admin log messages. 2026-01-02 06:58:18 +03:00
23rd 9f36721631 Added workaround to avoid corner glitches on media player panel. 2026-01-01 16:18:43 +03:00
23rd 3959c4fac6 Increased round radius for media player panel and volume. 2026-01-01 16:18:43 +03:00
23rd 91ef6f814a Improved style with increased round radius for emoji suggestion panel. 2026-01-01 16:18:43 +03:00
23rd a2af6d8d46 Attempted to increase round radius for inner dropdown menu. 2026-01-01 16:18:43 +03:00
23rd 2f9853799d Added right press-move-release gesture to reactions on Unix systems. 2025-12-31 19:22:50 +03:00
23rd ae725fa0db Added experimental option to able kick participants from common groups. 2025-12-31 19:22:50 +03:00
23rd 75fe14ad28 Added initial ability to kick participants from common groups. 2025-12-31 19:22:50 +03:00
AlexeyZavar b495e37130 fix: possible crash 2025-12-31 14:17:59 +03:00
Alexey 8875f85336 chore: update mac build doc 2025-12-31 13:40:01 +03:00
ArtemOver e43e5e8beb chore: add Gentoo Linux installation instructions 2025-12-31 13:33:51 +03:00
23rd 490c07bfe0 Added remembered list for common moderated groups to session settings. 2025-12-31 12:23:22 +03:00
23rd 6e04ad19d4 Added ability to sequentially request for many channels in moderate box. 2025-12-31 12:23:22 +03:00
23rd 19e965ce45 Reverted "Wrapped text recognition on macOS with experimental toggle."
This reverts commit feb1ea6502.
2025-12-31 12:18:04 +03:00
AlexeyZavar b5d6d46ed8 fix: possible crash 2025-12-31 12:14:41 +03:00
Bush2021 6c6b592502 fix: AyuDeleted flag not shown 2025-12-31 12:04:52 +03:00
23rd 58cd2b2a2e Removed report from profile top bar actions for admins. 2025-12-31 11:58:23 +03:00
23rd ef7efd7796 Added support of premium requirement for summary feature. 2025-12-31 11:49:04 +03:00
23rd 607226d196 Added support of summarize message to translated language. 2025-12-30 20:47:54 +03:00
23rd 3366ddf0eb Removed focus handler for emoji toggle in edit contact box. 2025-12-30 20:47:54 +03:00
23rd db143b875b Added gradient to userpic button with change photo role. 2025-12-30 20:47:54 +03:00
23rd f2dc58d4a8 Made login email check less restricted in privacy settings. 2025-12-30 20:47:54 +03:00
John Preston e9ea9832bd Show 'View all variants >' link in upgrade box. 2025-12-30 18:15:45 +04:00
AlexeyZavar 672ca18dde fix: make it build 2025-12-30 16:08:58 +03:00
AlexeyZavar cb24e7d085 Merge tag 'v6.3.10' & extra into dev 2025-12-30 14:28:06 +03:00
John Preston 580c688b2b Use v143 toolset in some dependencies. 2025-12-30 12:56:47 +04:00
AlexeyZavar 6b985764f8 chore: show toast on settings reset 2025-12-30 03:01:33 +03:00
AlexeyZavar e7ef873935 chore: revert some style changes 2025-12-30 03:01:33 +03:00
AlexeyZavar 628b2c714f fix: reduce log spam 2025-12-30 03:01:33 +03:00
AlexeyZavar 01fc8ea1c1 feat: cache localizations 2025-12-30 03:01:33 +03:00
AlexeyZavar 6dd4af8ad5 fix: pass dialogId to edit filter box 2025-12-30 03:01:33 +03:00
AlexeyZavar c2bc02928b feat: support premium emoji for non-premium users 2025-12-30 03:01:33 +03:00
AlexeyZavar b69ff3f862 feat: registration & join dates 2025-12-30 03:01:33 +03:00
23rd 8638d26156 Slightly optimized repaint of text in messages when it is out of clip. 2025-12-29 20:15:59 +03:00
23rd e4a16e7e83 Replaced repaint of loading transcribe button with repaint only in rect. 2025-12-29 20:15:59 +03:00
23rd 4e2114e2fe Improved loading state of transcribe button. 2025-12-29 20:15:59 +03:00
23rd 8bf30e67a9 Removed animation of summarize button when it is not hovered. 2025-12-29 20:15:59 +03:00
23rd 4f8e230efb Simplified handle in ministar particles when paint context is paused. 2025-12-29 19:28:35 +03:00
23rd 71a4d7d310 Added ability to request particularly repaint history views. 2025-12-29 14:06:24 +03:00
23rd 1002e8e6ad Replaced with struct returned rpl data for requests of view repaint. 2025-12-29 14:02:24 +03:00
23rd cad9790e0b Fixed mouse handler on menu item with checkbox. 2025-12-29 13:19:53 +03:00
23rd 3aa5ad7204 Fixed display of out currency entries in settings for credits section. 2025-12-29 13:09:22 +03:00
23rd db2ccb7c68 Added new api support to text summarizing. 2025-12-29 11:21:23 +04:00
John Preston 60e114469a Fix possible crash in non-accessible channels. 2025-12-29 11:21:23 +04:00
John Preston 9f43dacf25 Fix accessing deleted/frozen peers. 2025-12-29 11:21:23 +04:00
John Preston a36a30ce01 Update API scheme on layer 221. 2025-12-29 11:21:23 +04:00
John Preston c294582ffe Optimize summary entry state checking. 2025-12-29 11:21:23 +04:00
John Preston ff3e346433 Use correct text update for summarize. 2025-12-29 11:21:23 +04:00
John Preston 0dc2970e90 Pin summarize button to message top. 2025-12-29 11:21:23 +04:00
John Preston 43e6431b4e Identify auctions by id instead of slug. 2025-12-29 11:21:23 +04:00
John Preston 0a98ee7a99 Stick summarize button to visible area bottom. 2025-12-29 11:21:23 +04:00
John Preston 802373f108 Pass real visible area to chat paint context. 2025-12-29 11:21:23 +04:00
John Preston a7a0378cfb Don't update name if showing summarize fake reply. 2025-12-29 11:21:23 +04:00
John Preston 6ca4de8457 Scroll and highlight message when summary is shown
Add requestItemShowHighlight signal to Data::Session for triggering
scroll-to-item with highlight animation from any part of the codebase.

Both HistoryWidget (legacy) and ListWidget (modern) subscribe to this
signal and perform animated scroll with highlight when triggered.

The signal is emitted in two cases:
1. When API returns a fresh summarization result
2. When toggling visibility of a cached summary to shown state
2025-12-29 11:21:23 +04:00
John Preston 6a8707cc09 Fix gift upgrade checkbox initial state not being saved. 2025-12-29 11:21:22 +04:00
John Preston 0b8877cc5b Fix rpl guideline from cursor rules. 2025-12-29 11:21:22 +04:00
John Preston 7472f612e6 Add AI summarization threshold. 2025-12-29 11:21:22 +04:00
John Preston 992aaca272 Fix stack-var reference return. 2025-12-29 11:21:22 +04:00
John Preston 093eb28e75 Implement nice Cocoon about box. 2025-12-29 11:21:22 +04:00
23rd 57754be6f0 Added initial ability to summarize text of messages. 2025-12-29 11:21:22 +04:00
John Preston f13c6109db Special toast for stake game. 2025-12-29 11:21:22 +04:00
John Preston f30e91c946 Add stake presets. 2025-12-29 11:21:22 +04:00
John Preston 784e8f2799 Check insufficient ton for a stake. 2025-12-29 11:21:22 +04:00
John Preston 13453351bf Improve design of dice stake box. 2025-12-29 11:21:22 +04:00
John Preston 77f31ca4b5 Show stake won/lost below the dice. 2025-12-29 11:21:22 +04:00
John Preston 7f70af58ee Update API scheme on layer 221. 2025-12-29 11:21:22 +04:00
John Preston c8d5817942 Mostly ready emoji stake edit box. 2025-12-29 11:21:22 +04:00
John Preston 4a7148e20a Initial stake dice game implementation. 2025-12-29 11:21:22 +04:00
John Preston a96e00e44c Update API scheme to layer 221. 2025-12-29 11:21:22 +04:00
John Preston 89ddff7f1a Fix crash in unique gift viewing. 2025-12-29 11:21:22 +04:00
John Preston ebc22c5e3b Don't force toUpper in CustomEmojiTextBadge. 2025-12-29 11:21:22 +04:00
23rd 926bb91fac Added ability to set shortcut for admin log. 2025-12-28 13:36:55 +03:00
23rd fb670b7cdf Added ability to ban participant with report spam from admin log. 2025-12-28 13:00:50 +03:00
23rd b1d9dba775 Moved out method to report spam with messages to single place. 2025-12-28 12:23:38 +03:00
23rd 6499665d98 Fixed display of radio buttons in settings section for global ttl. 2025-12-28 11:44:59 +03:00
23rd 3d61da74ed Increased height of various boxes with participants list. 2025-12-28 11:35:05 +03:00
23rd 23d61dd1c0 Fixed initial list of reactions when some reactions in group was chosen. 2025-12-28 10:52:46 +03:00
23rd c695545f97 Returned kick button to list of members but only for inaccessible users.
Related commits: d7bf9e285c and 490f6f7e50.
2025-12-28 10:12:03 +03:00
23rd a3465ea80c Removed duplicated menu item for Character Palette for modern macOS. 2025-12-28 10:12:03 +03:00
23rd 3ed0a093b0 Slightly improved code style in stickers list widget. 2025-12-28 10:12:02 +03:00
23rd dc4e5185ed Added initial implementation of smart stickers search. 2025-12-28 10:12:02 +03:00
Ilya Fedin 5739a37c7f Cache ThirdParty together with Libraries on macOS 2025-12-27 09:25:47 +04:00
Ilya Fedin 8639936e45 Remove depot_tools and yasm
They're actually unused
2025-12-27 09:25:47 +04:00
Ilya Fedin 89d9270ea6 Add six dependency required by gyp on macOS 2025-12-27 09:25:47 +04:00
Ilya Fedin e52aa98a9f Switch service actions to ubuntu-slim 2025-12-26 14:11:29 +04:00
Ilya Fedin af24830233 Fix Ctrl+, shortcut on Linux
Regression was introduced in 30819509d3
2025-12-26 14:11:14 +04:00
Ilya Fedin bece15eaac Ensure patches aren't cleared up in actions
They're used by following steps
2025-12-23 04:52:00 +03:00
John Preston e762ec4631 Beta version 3.6.10.
- Fix user info showing from large group messages.
- Fix sent state of outgoing messages in forums.
- Show who sent your unique collectible gifts.
- Update Qt on all platforms.
2025-12-22 22:29:56 +04:00
23rd 7341c05d36 Added initial ability to translate admin log entries. 2025-12-22 22:29:38 +04:00
23rd b1bf68b830 Added simple tooltip to fromPhoto element in view messages.
Fixed #773.
2025-12-22 22:29:38 +04:00
Ilya Fedin 1a071c5c6b Ensure prepare.py cache keys aren't cleared in actions 2025-12-22 22:01:39 +04:00
Ilya Fedin 6de7e7f4a8 Cherry-pick a jpegli fix for DHT marker 2025-12-22 18:37:54 +04:00
John Preston 632a14e65a Update lib_ui for updated Qt. 2025-12-22 17:57:40 +04:00
John Preston 321576658f Show gift sender badge. 2025-12-22 17:56:56 +04:00
John Preston fac241b87e Return some of getDifference on unknown peers. 2025-12-22 17:56:56 +04:00
John Preston 39bd52c1e2 Fix crash in bot chat userpic right click. 2025-12-22 17:56:56 +04:00
John Preston e55f394db5 Fix updating access hash, fix userpic loading. 2025-12-22 17:56:56 +04:00
John Preston 00d7eeb742 Fix chat row update when message is sent. 2025-12-22 17:56:55 +04:00
John Preston bcfa106959 Show max 3 joined by invite link. 2025-12-22 17:56:55 +04:00
John Preston fe3c545455 Fix controls disappearing in group calls. 2025-12-22 17:56:55 +04:00
John Preston 885d431d65 Fix text selection in topic webpage/collapsed-quote. 2025-12-22 17:56:55 +04:00
John Preston a103047e03 Attempt to fix topic draft saving. 2025-12-22 17:56:55 +04:00
John Preston b04866a2fc Fix video metadata rotation reading. 2025-12-22 17:56:55 +04:00
John Preston 28434f4bee Full support and build fix. 2025-12-22 17:56:55 +04:00
John Preston 53324d5494 Initial support for min-user-from-message request. 2025-12-22 17:56:55 +04:00
23rd 66645ce523 Fixed local storage of user photos when previous userpic set as main. 2025-12-22 17:56:55 +04:00
23rd 06caf65a6a Fixed local storage of user photos when userpic was uploaded. 2025-12-22 17:56:55 +04:00
23rd 5026b07626 Added ability to replace user photo entry in storage. 2025-12-22 17:56:55 +04:00
23rd 8cfa722966 Fixed local storage of user photos when self userpic was deleted. 2025-12-22 17:56:55 +04:00
23rd f31337ecb5 Improved style of box for denied unconfirmed authentications. 2025-12-22 17:56:55 +04:00
23rd f468666973 Moved out creation of lottie icon in circle to single place. 2025-12-22 17:56:55 +04:00
23rd 590421daaa Added name of single passkey to right label in privacy settings. 2025-12-22 17:56:55 +04:00
23rd e1248ba0b2 Fixed left padding of text in resolving phone menu item. 2025-12-22 17:56:55 +04:00
23rd 89b15142ef Returned button for topics list to profile info. 2025-12-22 17:56:55 +04:00
23rd 57b22d2ad2 Added accounts list to dock menu on macOS. 2025-12-22 17:56:54 +04:00
23rd d51dd1cdb5 Fixed verified icon and gift status together in profile top bar. 2025-12-22 17:56:54 +04:00
23rd 6418af0ada Improved division by zero in photo editor stroke rendering calculations. 2025-12-22 17:56:54 +04:00
Ilya Fedin 08d6e8c7eb Update Qt
6.10.0 -> 6.10.1
6.2.12 -> 6.2.13
5.15.17 -> 5.15.18
2025-12-22 17:53:10 +04:00
dependabot[bot] cf7ae1adf2 Bump actions/upload-artifact from 5 to 6
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 5 to 6.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-22 15:10:45 +04:00
dependabot[bot] 691f796df6 Bump actions/cache from 4 to 5
Bumps [actions/cache](https://github.com/actions/cache) from 4 to 5.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-22 15:09:52 +04:00
dependabot[bot] 2775074113 Bump dessant/lock-threads from 5 to 6
Bumps [dessant/lock-threads](https://github.com/dessant/lock-threads) from 5 to 6.
- [Release notes](https://github.com/dessant/lock-threads/releases)
- [Changelog](https://github.com/dessant/lock-threads/blob/main/CHANGELOG.md)
- [Commits](https://github.com/dessant/lock-threads/compare/v5...v6)

---
updated-dependencies:
- dependency-name: dessant/lock-threads
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-22 15:08:55 +04:00
Ilya Fedin bf9014342c More aggressive libraries clean up in macOS action 2025-12-22 14:00:18 +04:00
Ilya Fedin fb9a456b59 More aggressive libraries clean up in Windows action 2025-12-22 14:00:18 +04:00
Ilya Fedin e36e52fd9e Disable debug symbols in Windows action 2025-12-22 14:00:18 +04:00
Ilya Fedin f076793fa6 Revert "Keep only one Windows action run"
This reverts commit 0116f098f8.
2025-12-22 14:00:18 +04:00
Ilya Fedin 0116f098f8 Keep only one Windows action run
This decreases the queue and fits cache in 10 GB
2025-12-18 22:16:53 +04:00
Ilya Fedin fc728e7a13 Disable debug symbols in macOS action 2025-12-18 22:16:53 +04:00
Ilya Fedin 5114c9a58e Revert "Free more disk space in mac action"
This reverts commit ccf6a3fb97.
2025-12-18 22:16:53 +04:00
Ilya Fedin 3bd896b8fa Authorize getting WebRTC version in macOS packaged action
It gets rate limited otherwise...
2025-12-18 22:16:53 +04:00
Ilya Fedin dddefc3904 Move WebRTC version before general cache key
That's more logical
2025-12-18 22:16:53 +04:00
Ilya Fedin fc0cbaadd5 Separate action artifact flavor with space 2025-12-18 22:16:53 +04:00
John Preston 6b862688cb Show all variants when clicking on percents. 2025-12-18 21:17:07 +04:00
John Preston 767eedaa76 Fix the cover in unique variants previews. 2025-12-18 21:17:07 +04:00
John Preston 1578c3c09d Fix glitching unique variants previews. 2025-12-18 21:17:07 +04:00
John Preston 9496ebd19e Remove AddFullWidthButton helper. 2025-12-18 21:17:07 +04:00
AlexeyZavar b4e8d580d0 fix: apply ease to business hours 2025-12-18 09:00:59 +03:00
AlexeyZavar d48a40fa5f fix: badges in new profiles 2025-12-18 09:00:59 +03:00
John Preston 1ea2d936b5 Fix crash in Settings in Windows on ARM. 2025-12-17 13:01:54 +04:00
23rd 6ce7641971 Replaced WebAuthn dll loading with SafeLoadLibrary on Windows. 2025-12-16 17:09:13 +03:00
23rd 98f5247126 Fixed full recreation of pattern bg while scroll reactions settings. 2025-12-16 14:31:34 +03:00
23rd bf36718c93 Fixed full recreation of pattern bg while scroll notifications settings. 2025-12-16 14:29:28 +03:00
23rd 11c193b699 Improved cache quality of animated emoji in reactions settings box. 2025-12-16 12:35:05 +03:00
23rd 5c1604fc53 Fixed cache of graphs in chart widgets on retina. 2025-12-16 11:46:36 +03:00
23rd 4c545181ad Fixed display of resolving phone menu item with increased round radius. 2025-12-16 11:17:42 +03:00
23rd 5ee8100274 Added date of saved forwards to tooltip. 2025-12-16 11:17:42 +03:00
23rd 86351f48d6 Fixed display of forwarded messages from self to self. 2025-12-16 11:17:42 +03:00
23rd 6996e410d5 Fixed empty userpic in history top bar for sublist with hidden author. 2025-12-16 11:17:42 +03:00
23rd 5d6994f170 Removed outdated 1000-member limit for channel deletion. 2025-12-16 04:26:32 +03:00
John Preston beb4fafdf3 Version 6.3.9.
- Fix possible crash in audio playback speed menu.
- Fix possible crash in forum or bot topic deletion.
2025-12-15 22:51:14 +04:00
John Preston 3e22cb6d0a Fix crash in media playback speed dropdown.
Fixes #30111.
2025-12-15 21:40:55 +04:00
John Preston 849def7e75 Don't disable dice/slots animation. 2025-12-15 21:40:54 +04:00
John Preston 1a4195f7e2 Fix possible crash on topic deletion. 2025-12-15 21:40:54 +04:00
John Preston 0b4a718afe Don't re-create topic when clearing its messages. 2025-12-15 21:40:54 +04:00
John Preston b53ca51d37 Fix crash on topic icon emoji without title. 2025-12-15 21:40:54 +04:00
John Preston 60c9707a64 Fix incorrect reporting of gift as channel's. 2025-12-15 21:40:54 +04:00
John Preston 08a979e638 Use more simple tr::... text helpers. 2025-12-15 21:40:54 +04:00
John Preston 629158fedb Fix crash in bad attach bots parsing. 2025-12-15 21:40:54 +04:00
John Preston f15e99ce1d Don't check payment when editing a message. 2025-12-15 21:40:53 +04:00
23rd 18f9c040e0 Removed obsolete code that prevented menu from inactive window on macOS. 2025-12-15 21:40:53 +04:00
23rd 7f6baa0fdc Added right press-move-release gesture to menu on Unix systems.
Fixed #29826.
Fixed #10366.
2025-12-15 21:40:53 +04:00
23rd bb9a112677 Fixed unnecessary recreation of fireworks in history view todo list. 2025-12-15 21:40:53 +04:00
23rd 7952d2688e Slightly improved animation of personal channel when it is removed. 2025-12-15 21:40:53 +04:00
23rd 0f41fd1356 Added ability to remove personal channel from your profile section. 2025-12-15 21:40:53 +04:00
23rd 8c3a8a7d20 Added ability set currently opened channel as personal from info menu. 2025-12-15 21:40:53 +04:00
John Preston dbbe4b9398 Version 6.3.8. (Linux only)
- Fix crash on older Linux.
2025-12-15 16:40:41 +04:00
John Preston e0b0f00621 Version 6.3.7: Fix build with GCC. 2025-12-15 16:18:32 +04:00
John Preston 516d6cf11e Version 6.3.7.
- Fix login with passkey visibility on Windows.
- Improve gift upgrading experience.
2025-12-14 16:03:36 +04:00
Reza Bakhshi Laktasaraei 673db168ac Feat: Set accessibility name for Main menu toggle and add related strings. 2025-12-14 16:03:23 +04:00
John Preston 496e96d00a Fix currency icon in channel post offers. 2025-12-14 16:02:52 +04:00
John Preston 88fdc16070 Don't allow free buy gift offers. 2025-12-14 16:02:51 +04:00
23rd df98cdb127 Fixed build on Windows and Linux. 2025-12-14 12:54:55 +03:00
23rd 68b245c3d6 Removed button from dialogs widget when dialogs are empty in archive. 2025-12-14 10:39:10 +03:00
John Preston 0248c8d8c0 Increase gift upgrade animation speed. 2025-12-13 14:05:50 +04:00
John Preston 3ac517b716 Fix build with GCC. 2025-12-13 14:03:02 +04:00
John Preston 8414c3e382 Put keyboard buttons above outside reactions. 2025-12-13 13:35:56 +04:00
23rd 9f8dc1d7d3 Fixed opening details of upgraded and transferred star gift. 2025-12-13 13:35:56 +04:00
23rd 56927d2780 Fixed string name and value matching in table during gift upgrade. 2025-12-13 13:35:56 +04:00
23rd a027284826 Added voices to SMTC.
Fixed #28915.
2025-12-13 13:35:56 +04:00
23rd e0159c32cc Returned display of button in box for passkey creation when unsupported. 2025-12-13 13:35:56 +04:00
23rd 9cc30741d9 Attempted once again to improve status color with dark theme in profile.
Previous related commit: 7a75c80b27.
2025-12-13 13:35:56 +04:00
23rd 863752e974 Added invalidation gift button background cache on palette changes. 2025-12-13 13:35:56 +04:00
23rd cb76031165 Fixed fade color of animated attribute while upgrading gift. 2025-12-13 13:35:55 +04:00
23rd c45cf07b06 Fixed text color of peer value in table on palette change. 2025-12-13 13:35:55 +04:00
23rd d35d425918 Fixed display of ToS link to any box of gifts with empty credits. 2025-12-12 22:22:56 +04:00
23rd d4a3a53484 Simplified ability to enable all reactions in channels. 2025-12-12 22:22:55 +04:00
John Preston 5d90b12a08 Fix blockquotes without skip block optimal size. 2025-12-12 21:40:08 +04:00
John Preston e3ce190f4e Use real upgrade code instead of testing. 2025-12-12 21:09:22 +04:00
John Preston ffd50c5582 Finish upgrading gifts animation. 2025-12-12 20:53:38 +04:00
John Preston c758f05a7a Finish gift upgrade cover animation. 2025-12-12 17:43:21 +04:00
John Preston 9263c08068 Started the gift upgrade animation. 2025-12-12 14:59:44 +04:00
John Preston 703f77ac93 Upgrade gift while staying in the same box. 2025-12-11 22:25:43 +04:00
John Preston 32bdb5a519 Don't show gift value box twice. 2025-12-11 10:49:37 +04:00
John Preston d8484a7b2b Update cmake_helpers. 2025-12-11 10:48:07 +04:00
23rd eca8dfb0ec Renamed rpl::start_with_ with rpl::on_. 2025-12-10 21:28:33 +03:00
23rd 29b714dd5f Used fallback name for passkeys without name in list from settings. 2025-12-10 20:46:56 +03:00
23rd 3f3b2cb2ba Fixed display of passkey button in privacy settings section. 2025-12-10 20:46:56 +03:00
John Preston c31d9ded27 No price decrease countdown for free upgrades. 2025-12-10 14:27:34 +04:00
John Preston 03df5b8546 rpl::type_erased() -> rpl::type_erased. 2025-12-10 14:27:05 +04:00
John Preston 03e1e5cca9 Fix login with passkey link display. 2025-12-10 14:26:09 +04:00
John Preston 10d5cc0d24 Fix appConfig refresh on DC change. 2025-12-10 14:10:55 +04:00
John Preston 506c8ff73c Don't show upgrade costs for free upgrades. 2025-12-10 13:38:54 +04:00
John Preston 924e9a21b5 Don't offer View Profile / Send Message in private chat. 2025-12-10 12:30:42 +04:00
John Preston 2f528a9853 Fix seconds phrase for auctions. 2025-12-10 12:09:06 +04:00
23rd 7f58650794 Added preview of reaction to posts on right click. 2025-12-10 09:47:48 +03:00
23rd b9a109c146 Added ability to set custom animation duration for MediaPreviewWidget. 2025-12-10 09:47:48 +03:00
23rd 9fb4f4b556 Fixed display of original date with nearest days in self. 2025-12-10 09:47:48 +03:00
23rd 52d78ef724 Increased round radius for popup menu. 2025-12-10 09:47:48 +03:00
23rd 7ce7b88a40 Implemented adaptive drawing algorithm with smoothing in image editor.
- Adaptive point filtering - zoom-based minimum distance (3px / zoom)
  prevents point overflow during fast movements.

- Speed-based pressure simulation - exponential smoothing (decay 0.95)
  creates variable line thickness: pressure = clamp(1.0 - speed * 0.1).

- Two-pass
  weighted averaging - smoothed = current * 0.5 + neighbors * 0.25
  eliminates jagged lines while preserving initial direction.

- Incremental rendering with 3-point overlap - draws only new segments,
  reduces complexity from O(n^2) to O(n).

- QPainterPath with quadratic Bezier curves - single fillPath() call
  instead of multiple drawEllipse().
2025-12-10 09:47:48 +03:00
23rd 4a43dfd091 Added profile color support to calls panel. 2025-12-10 09:47:48 +03:00
23rd 52cc76636c Moved out verify details below app button when it is presented in info. 2025-12-10 09:47:48 +03:00
23rd f0a3ddb184 Fixed phrase in menu item to share gift collection. 2025-12-10 09:47:48 +03:00
23rd b172c9a3b2 Added check for empty proxy list before showing delete all menu item. 2025-12-10 09:47:48 +03:00
Ilya Fedin 6cfda1dd43 Use gi::object_cast 2025-12-10 10:43:28 +04:00
AlexeyZavar cc7c14a529 fix: hide empty star reaction button 2025-12-09 21:55:29 +03:00
AlexeyZavar 60a73c3915 fix: make it build 2025-12-09 21:41:49 +03:00
AlexeyZavar 77e300b551 Merge tag 'v6.3.6' into dev 2025-12-09 20:09:22 +03:00
Ilya Fedin 2ae31f7285 Support crashpad_handler in packaged mode 2025-12-09 13:46:07 +04:00
Ilya Fedin 412c06160a Fix setting Breakpad framework path with non-Xcode generators 2025-12-09 13:45:31 +04:00
Ilya Fedin c27c47dd52 Set M_ARENA_MAX earlier
It doesn't work properly with auto-updatable builds otherwise
2025-12-09 12:36:12 +04:00
Ilya Fedin 6ea30feb18 Attach malloc_trim lifetime to LinuxIntegration 2025-12-09 12:36:12 +04:00
Ilya Fedin a7be550550 Fix packaged build with Updater on macOS 2025-12-09 12:35:51 +04:00
Ilya Fedin a279f0a296 Attempt to fix cache key instability in macOS packaged and Linux actions 2025-12-09 12:33:21 +04:00
John Preston 1c4f663941 Version 6.3.6.
- Fix crash in media viewer.
- Fix crash in experimental settings.
2025-12-06 00:07:39 +04:00
John Preston 94f9321db9 Fix crash in experimental settings opening. 2025-12-06 00:05:31 +04:00
John Preston ae70b10cea Fix crash in media viewer. 2025-12-05 23:58:08 +04:00
John Preston 4f685552e7 Version 6.3.5.
- Offer stars or TON for unique gifts.
- Preview gift auctions before they start.
- Support passkey login on Windows.
2025-12-05 23:11:53 +04:00
John Preston e085a76165 Fix build with GCC. 2025-12-05 23:11:32 +04:00
23rd 30bd3ed013 Removed WebAuthn support from entitlements. 2025-12-05 23:11:32 +04:00
23rd 25edab4c94 Fixed build with Xcode. 2025-12-05 23:11:32 +04:00
23rd 3aa241d825 Removed WebAuthn support for macOS for now. 2025-12-05 23:11:32 +04:00
John Preston 9b867af7fd Use known gift number in some places. 2025-12-05 20:11:54 +04:00
John Preston 0df3be8630 Use better ratio stars/usd/ton. 2025-12-05 20:11:54 +04:00
John Preston 542326af8f Show offer value diff percent. 2025-12-05 20:11:54 +04:00
John Preston ea5052e69e Add "Ban Users" channel admin right. 2025-12-05 20:11:54 +04:00
John Preston 2dd96b2269 Better phrases for upcoming auctions. 2025-12-05 20:11:54 +04:00
John Preston 627152e2a9 Nice gifts promo box. 2025-12-05 20:11:54 +04:00
John Preston f01c93ed58 Update API scheme on layer 220. 2025-12-05 20:11:54 +04:00
John Preston 6fe61ed58a Add gifts premium promo. 2025-12-05 20:11:54 +04:00
John Preston 43347f671c Show rarity in gift variants preview. 2025-12-05 20:11:54 +04:00
John Preston 0b67fa65f2 Full upgradable variants preview. 2025-12-05 20:11:54 +04:00
John Preston 65b3a36984 Implement upcoming auction preview box. 2025-12-05 20:11:54 +04:00
John Preston b08cf75f0b Start auction preview display. 2025-12-05 20:11:54 +04:00
John Preston 0cc21e5ca2 Update API scheme on layer 220. 2025-12-05 20:11:54 +04:00
John Preston 48f9a92cc3 Improve Checkbox / Button accessibility. 2025-12-05 20:11:54 +04:00
John Preston 939882ef68 Show profile design gift wear promo. 2025-12-05 20:11:54 +04:00
John Preston 52084cf0ae Apply correct min/max offer values. 2025-12-05 20:11:54 +04:00
John Preston f06f654191 Confirm making an offer. 2025-12-05 20:11:53 +04:00
John Preston 356d20542e Use nice radius in offer with buttons. 2025-12-05 20:11:53 +04:00
John Preston 31ea4cfe80 Process offers with accept / reject. 2025-12-05 20:11:53 +04:00
John Preston 1e89ee4e50 Show Reject/Accept buttons for offers. 2025-12-05 20:11:53 +04:00
John Preston 6fccbf036c Rename HistoryMessage[SuggestedPost->Suggestion]. 2025-12-05 20:11:53 +04:00
John Preston 41d206e354 Rename SuggestPostOptions to SuggestOptions. 2025-12-05 20:11:53 +04:00
John Preston 23880ac6c1 Update API scheme to layer 220.
Allow offering to buy gifts.
2025-12-05 20:11:53 +04:00
John Preston 4439cbf553 Pass effect_id to forward message requests. 2025-12-05 20:11:53 +04:00
23rd f506f1b830 Added read availability of passkeys from appConfig. 2025-12-05 20:11:53 +04:00
23rd feb1ea6502 Wrapped text recognition on macOS with experimental toggle. 2025-12-05 20:11:53 +04:00
23rd fea80b4919 Wrapped passkeys on macOS with experimental toggle due to instability. 2025-12-05 20:11:53 +04:00
23rd 373bb8d74c Improved display of ripple on release in buttons from subsection tabs. 2025-12-05 20:11:53 +04:00
23rd 3ddefd78ba Fixed display of tabbed selector on installed set for read-only peers. 2025-12-05 20:11:53 +04:00
23rd d62e4da163 Added simple cache of recognized text to media view overlay. 2025-12-05 20:11:53 +04:00
23rd 8c60863e11 Added ability to copy recognized text from media view overlay. 2025-12-05 20:11:53 +04:00
23rd d5be8c8989 Added initial ability to recognize text to media view overlay. 2025-12-05 20:11:53 +04:00
23rd 255b30e88a Added initial implementation of text recognition for macOS. 2025-12-05 20:11:53 +04:00
23rd d2dd124be0 Added dummy platform files for text recognition. 2025-12-05 20:11:53 +04:00
23rd 1053b30a6d Added api support for max count of passkeys for accounts. 2025-12-05 18:15:54 +04:00
23rd e7c1073e13 Added initial error handler to passkeys processing. 2025-12-05 18:15:54 +04:00
23rd 0480c6a4af Added initial ability to login with passkey. 2025-12-05 18:15:54 +04:00
23rd c70a49c0f3 Added initial api support to login with passkey. 2025-12-05 18:15:54 +04:00
John Preston 7840fd481a Use correct icon for passkey in Settings. 2025-12-05 18:15:54 +04:00
23rd 2a8b491c95 Replaced pure text with Text::String in list of passkeys in settings. 2025-12-05 18:15:54 +04:00
23rd 39c4344047 Added divider with description to section of settings for passkeys. 2025-12-05 18:15:54 +04:00
23rd cdb58e4ebd Added button for new passkeys to section of settings. 2025-12-05 18:15:54 +04:00
23rd 972325fb6d Added menu to simple list of passkeys in section of settings. 2025-12-05 18:15:54 +04:00
23rd 933b6bedc9 Added icons to simple list of passkeys in section of settings. 2025-12-05 18:15:54 +04:00
23rd 2db8a5d00a Added initial simple list of passkeys to section of settings. 2025-12-05 18:15:54 +04:00
23rd be043ea349 Added initial api support to delete passkey. 2025-12-05 18:15:54 +04:00
23rd e531abf31b Added header with lottie to section of settings for passkeys. 2025-12-05 18:15:54 +04:00
23rd a6af680e59 Added initial entry point to section of settings for passkeys. 2025-12-05 18:15:54 +04:00
23rd 8292334c9b Moved out Settings::Passkeys class from header. 2025-12-05 18:15:54 +04:00
23rd f20c5a1d3c Added initial box as entry point for passkey creation. 2025-12-05 18:15:53 +04:00
23rd d1e2ec0309 Added initial api support to request of passkeys for account. 2025-12-05 18:15:53 +04:00
23rd fe91cae8bc Added initial api support to register passkey. 2025-12-05 18:15:53 +04:00
23rd 7bb30bc4a8 Added initial dummy files for component of passkeys. 2025-12-05 18:15:53 +04:00
23rd 2d41d5903b Added initial dummy files for settings section of passkeys. 2025-12-05 18:15:53 +04:00
23rd df672ffaf5 Added phrases for settings section of passkeys. 2025-12-05 18:15:53 +04:00
23rd cb100623fb Added initial macOS API support for passkeys. 2025-12-05 18:15:53 +04:00
23rd 30ef7270b3 Added initial Win API support for passkeys. 2025-12-05 18:15:53 +04:00
23rd 91694a69eb Added initial implementation of deserialization data for passkeys. 2025-12-05 18:15:53 +04:00
23rd cb07bcf0db Added initial dummy platform files for passkeys. 2025-12-05 18:15:53 +04:00
23rd a31e384409 Added dummy files for credential data of passkeys. 2025-12-05 18:15:53 +04:00
John Preston 4829c6d028 Update API scheme to layer 219. 2025-12-05 18:15:53 +04:00
Ilya Fedin ccf6a3fb97 Free more disk space in mac action 2025-12-05 09:58:57 +04:00
Ilya Fedin 2005814fca Actually free space in macOS action
Looks like the command was broken all the time but it was unnoticable due to `|| true`
2025-12-05 09:58:57 +04:00
Ilya Fedin 7319665bda Free more disk space in snap action 2025-12-05 09:58:57 +04:00
Ilya Fedin d74074a21b Stop creating empty TCP log 2025-12-01 19:39:47 +04:00
John Preston 113115f58c Fix selecting gifts for a collection. 2025-12-01 12:20:33 +04:00
John Preston e84799283d Simplify and fix link wrapping. 2025-12-01 12:20:33 +04:00
John Preston 71272ed2ec Improve view of finished auctions. 2025-12-01 11:38:35 +04:00
Ilya Fedin 6787c338ac Fix Russian bounds
No way it occupies 360° of latitude
2025-12-01 11:30:47 +04:00
Ilya Fedin 774a44ac7e Stop using geocode-glib
It doesn't seem to work properly anymore, it ignores the passed location doing reversed geocoding based on GeoIP only
2025-12-01 11:30:47 +04:00
23rd 29cdd358cc Added regional English/Portuguese spell check support for macOS. 2025-11-29 09:42:12 +03:00
23rd b9b1bd5e58 Improved once again display of original date in self.
Related commits are 417d151f2c and cbc03d1e45.
2025-11-29 09:17:39 +03:00
23rd 59814aaeb0 Added ability to view stories anonymously from info stories section. 2025-11-29 09:04:42 +03:00
23rd fd52b3c23b Fixed once again unwanted reset filter on creation of tabs strip.
Regression was introduced in c0bbb669e0.
2025-11-29 08:27:45 +03:00
John Preston 6e75a41ee6 Version 6.3.4: Fix build with Xcode. 2025-11-26 16:44:09 +04:00
John Preston 84266aef2c Version 6.3.4.
- Show active auctions above chats list.
- Add star sending effects in live stories.
- Fix back button in group member profile view.
- Export separate topics message history.
- Export audio files saved to profile.
- Many different crash fixes.
2025-11-26 14:58:32 +04:00
John Preston 40a7f8ea50 Try allowing only tab-focus for screen readers. 2025-11-26 14:57:35 +04:00
John Preston 7c4fcdd9cb Update emoji to Unicode 16. 2025-11-26 14:48:16 +04:00
John Preston 92e87852c1 Fix top bar title/subtitle in saved messages.
Fixes #30018.
2025-11-26 13:27:32 +04:00
John Preston 73c4da2b21 Show '+' to the right of all bids. 2025-11-26 13:01:15 +04:00
23rd 9f4da7e890 Added button for profile color to settings information section. 2025-11-26 05:37:09 +03:00
23rd 8b23457373 Fixed display of verified icon in box from web bot preview.
Regression was introduced in e7fa330215.
2025-11-26 05:30:38 +03:00
23rd ab2fd7c749 Once again fixed position of tag preview in chats filter settings.
Previous related commit 512e6de39b.
2025-11-26 05:20:23 +03:00
John Preston 040a6ddf3a Fix build with MSVC. 2025-11-25 21:34:26 +04:00
John Preston 55afe0912f Add screen reader state logging. 2025-11-25 21:28:57 +04:00
23rd ee48127094 Added send small button to box of entry from credits earn history. 2025-11-25 20:01:09 +03:00
23rd 445576d568 Added ToS link to any box of entry from credits earn history. 2025-11-25 18:59:47 +03:00
23rd 8f1d40892e Added info of limited gifts to box of entry from credits earn history. 2025-11-25 18:59:47 +03:00
23rd 766db9660c Swap name of sender and subtext for paid messages in earn history list. 2025-11-25 18:59:47 +03:00
23rd 68665ec1f2 Added phrase for paid reactions of live stories to credits earn history. 2025-11-25 18:59:47 +03:00
John Preston b400964aa1 Don't allow admin to send stars in streams. 2025-11-25 19:37:26 +04:00
John Preston 317530cfa3 Attempt to fix audio cracks in streams. 2025-11-25 19:37:10 +04:00
John Preston e8fba23b59 Don't allow sending stars from stream admin. 2025-11-25 19:05:55 +04:00
John Preston ef749e695e Show nice layout of stars-only messages. 2025-11-25 18:30:09 +04:00
John Preston 712ef33d6b Submit custom bid with Enter. 2025-11-25 17:50:25 +04:00
John Preston 0441b7dbc3 Show star senders in live stories. 2025-11-25 17:50:25 +04:00
23rd 3ee0dcbacd Provided topic name to export controller for topic history. 2025-11-25 06:19:41 +03:00
23rd 57411b962f Added initial ability to export topic history. 2025-11-25 06:19:34 +03:00
23rd 4eee00d95e Added forwarded_from_id field to json export for forwarded messages. 2025-11-25 06:14:06 +03:00
23rd 957a08962f Added dark theme to exported html. 2025-11-25 06:14:06 +03:00
23rd 21c82f5fe1 Added ability to view stories anonymously from context menu. 2025-11-25 06:14:06 +03:00
23rd 27964993f6 Added safe guard to userpic in peer qr box. 2025-11-25 06:14:06 +03:00
John Preston 14e296e1f9 Improve layout of about auction box. 2025-11-24 22:06:55 +04:00
John Preston 23c0ff934f Skip premium badge for Saved Messages. 2025-11-24 22:01:56 +04:00
John Preston c64ef1e20e Allow transfering gifts without premium. 2025-11-24 21:04:51 +04:00
John Preston ed97619c6c Guard by widget instead of session. 2025-11-24 19:22:20 +04:00
23rd 924ec592b1 Improved paint with ready full peer before animation in profile top bar. 2025-11-24 18:18:13 +03:00
23rd 669c581701 Added dummy filler to PeerQrBox when result link is empty. 2025-11-24 17:46:49 +03:00
23rd e97ae3d537 Fixed display of QR button in info profile when no usernames. 2025-11-24 17:46:49 +03:00
23rd 08800b68f4 Slightly improved subtext for topic link in info profile. 2025-11-24 17:46:49 +03:00
23rd a59db6529c Added default guarded callback for simple QR box for peer username. 2025-11-24 17:46:49 +03:00
dependabot[bot] 02a54ceea6 Bump actions/checkout from 5 to 6
Bumps [actions/checkout](https://github.com/actions/checkout) from 5 to 6.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-24 17:59:24 +04:00
John Preston f0a7c547e8 Add safe check for strange click reports. 2025-11-24 17:51:42 +04:00
John Preston ecfb343690 Fix crash in going from saved music to a chat. 2025-11-24 17:38:54 +04:00
John Preston c65472c9b3 Add more assertions to find a problem. 2025-11-24 17:27:29 +04:00
John Preston c42864d35e Fix crash in several video removed from video call. 2025-11-24 17:08:10 +04:00
John Preston b02ce599e6 Fix possible crash in usernames order saving. 2025-11-24 14:47:14 +04:00
John Preston 1ae5495b91 Add some more assertions for subsection tabs. 2025-11-24 14:20:10 +04:00
John Preston c4fbb8c199 Fix possible crash in group call box closing. 2025-11-24 14:19:37 +04:00
John Preston 313872dacc Fix crash in live location message destruction. 2025-11-24 12:23:13 +04:00
John Preston ef15136a3b Fix possible crash in conference box closing. 2025-11-24 10:12:38 +04:00
John Preston 4342c8d761 Fix Live stories display without OpenGL. 2025-11-24 09:59:34 +04:00
23rd 644744ac9e Improved phrase of original date in self. 2025-11-23 18:29:01 +03:00
23rd cbc03d1e45 Fixed display of original date in self when original sender is hidden. 2025-11-23 18:13:34 +03:00
23rd 7f56192b97 Fixed handler of login email in intro section.
This occurs both log in with setting up of login email
and log in by code from login email (set before).
2025-11-23 16:25:01 +03:00
23rd 6590f3b741 Added simple handle of EMAIL_NOT_SETUP error from email login section. 2025-11-23 16:25:01 +03:00
23rd c0bbb669e0 Fixed unwanted switching to default filter on creation of tabs strip. 2025-11-23 16:25:01 +03:00
23rd 63014adfef Fixed rpl trigger for back button in profile top bar. 2025-11-23 16:25:01 +03:00
23rd 1ad055c8c8 Updated libiconv to v1.18. 2025-11-22 12:36:36 +03:00
John Preston 9b558564e9 Show my place correctly. 2025-11-21 21:26:44 +04:00
John Preston 476e66d027 Version 6.3.3: Fix build with Xcode. 2025-11-21 20:37:46 +04:00
John Preston fc11d81673 Version 6.3.3.
- Some more improvements for gift auctions.
2025-11-21 19:07:31 +04:00
John Preston 629754a353 Correctly track emoji pausing in suggestions bar. 2025-11-21 19:05:02 +04:00
John Preston 147dbee051 Implement active auctions chats list bar. 2025-11-21 18:58:03 +04:00
John Preston 7204c3c25d Version 6.3.2: Fix build with GCC. 2025-11-20 23:58:26 +04:00
23rd b412241d25 Added minimal threshold to emoji preview for reaction selector. 2025-11-20 22:39:01 +04:00
23rd f9883afd61 Removed assertion from stats point details widget to avoid crash. 2025-11-20 22:39:01 +04:00
GitHub Action 181f811f18 Update User-Agent for DNS to Chrome 142.0.0.0. 2025-11-20 22:25:19 +04:00
dependabot[bot] 2f0bd3c085 Bump endersonmenezes/free-disk-space from 2.1.1 to 3.0.0
Bumps [endersonmenezes/free-disk-space](https://github.com/endersonmenezes/free-disk-space) from 2.1.1 to 3.0.0.
- [Release notes](https://github.com/endersonmenezes/free-disk-space/releases)
- [Commits](https://github.com/endersonmenezes/free-disk-space/compare/713d134e243b926eba4a5cce0cf608bfd1efb89a...6c4664f43348c8c7011b53488d5ca65e9fc5cd1a)

---
updated-dependencies:
- dependency-name: endersonmenezes/free-disk-space
  dependency-version: 3.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-20 22:25:03 +04:00
Ilya Fedin a9d8332766 macos-15-intel -> macos-latest 2025-11-20 22:24:51 +04:00
John Preston f5036171cf Add actions menu (about/copy/share) for auctions. 2025-11-20 22:24:16 +04:00
John Preston cdc8b8e473 Show nice userpics in change recipient. 2025-11-20 21:53:35 +04:00
John Preston ab404c5452 Fix possible crash in sticker preview. 2025-11-20 21:48:30 +04:00
John Preston 0585f9d667 Show correct value of gifted auction gift. 2025-11-20 21:12:20 +04:00
John Preston 19225c7dd3 Rebuild slider when relevant values change. 2025-11-20 20:47:56 +04:00
23rd 8c1844b1c0 Improved unloading heavy part from MediaGeneric for gift's backgrounds. 2025-11-20 19:25:44 +03:00
23rd af63d86e24 Replaced timer with single-shot updates in auction from view web page. 2025-11-20 19:02:55 +03:00
23rd 1f2fd3ad96 Added support of auctions to history view web page. 2025-11-20 18:22:43 +03:00
23rd f41fdcdb98 Added saved music to data export. 2025-11-20 15:43:21 +03:00
23rd f78a9b4220 Removed display of empty menu from userpic in profile top bar. 2025-11-20 15:43:21 +03:00
23rd 06b3ce58ed Fixed stories mouse interaction after album switch in My Profile.
When switching between cached albums with equal story counts,
stories become unresponsive until scrolling occurs. This happens
because the list is recreated with zero visible top/bottom values.

Added deferred visible range update after album switching.
2025-11-20 15:43:20 +03:00
John Preston 7c70d8b1c2 Show some rounds info on details page. 2025-11-20 15:01:26 +04:00
John Preston 2b1e032a9b Show by color if you'll be winning the round. 2025-11-20 14:34:19 +04:00
23rd 4f5d6a2fd5 Replaced dependence from scroll events in flexible scroll with custom. 2025-11-20 14:15:56 +04:00
23rd c3b90aa492 Improved calculation of filler height for flexible scroll. 2025-11-20 14:15:56 +04:00
23rd bb2daac007 Added support of text color from emoji status in profile top bar. 2025-11-20 14:15:56 +04:00
23rd bc2449c3f9 Fixed update of local state after reorder stories in albums. 2025-11-20 14:15:56 +04:00
23rd 0bf50de77a Fixed display of menu for actions in profile top bar for sublists. 2025-11-20 14:15:56 +04:00
23rd 473bc32b71 Fixed peer in info profile opened from sublist. 2025-11-20 14:15:55 +04:00
23rd e5e143dcf8 Extended behavior of manage button in profile top bar to edit topic. 2025-11-20 14:15:55 +04:00
23rd 2de08746ac Added toast to topic icon in profile top bar. 2025-11-20 14:15:55 +04:00
23rd ae6833b4d5 Added width checks to profile top bar to prevent redundant calls. 2025-11-20 14:15:55 +04:00
23rd f1fe5f6a71 Fixed width of very long go-to-forum button in profile top bar. 2025-11-20 14:15:55 +04:00
23rd 5054d0615e Fixed events handler of self forwards tagger.
Regression was introduced in e62a4b065a.
2025-11-20 14:15:55 +04:00
John Preston 4f5007ea64 Use a separate lang key for reset photo button. 2025-11-20 14:14:08 +04:00
John Preston 233f6ed13b Improve bid information display. 2025-11-20 14:13:43 +04:00
John Preston f15b883471 Support subtext in Stars Bubble in bids. 2025-11-20 13:29:19 +04:00
John Preston 312d5f0121 Improve auction gift display. 2025-11-20 11:39:22 +04:00
Ilya Fedin 75a1657c49 Log Linux notification daemon startup errors 2025-11-20 10:42:13 +04:00
Ilya Fedin 667d92100e Switch Linux notification service watcher to std::optional 2025-11-20 10:42:13 +04:00
AlexeyZavar a88ddbac2c chore: update sqlite3 2025-11-19 15:23:49 +03:00
AlexeyZavar 537268ed63 feat: shadowban on channels
Co-authored-by: Emil <40684650+MrCheatEugene@users.noreply.github.com>
2025-11-19 15:16:30 +03:00
Ilya Fedin 8ff4bc8cff Port IconButton back to setAccessibleName 2025-11-19 16:06:56 +04:00
AlexeyZavar c310b14421 fix: disable shadowban on self 2025-11-19 15:02:43 +03:00
AlexeyZavar b025209c31 fix: refine album handling in filters 2025-11-19 14:48:42 +03:00
John Preston 656b262648 Allow setting custom auction bid. 2025-11-19 15:00:06 +04:00
AlexeyZavar a063ce3c45 fix: invalidate message filtered status on edit 2025-11-19 02:35:29 +03:00
AlexeyZavar c554372ba4 fix: random crashes & rewrite worker 2025-11-19 02:18:59 +03:00
John Preston c1769b9ba2 Correctly show/hide price selection. 2025-11-18 20:30:43 +04:00
John Preston 04c9d92b4a Fix couple of comments layout bugs. 2025-11-18 20:11:22 +04:00
John Preston 0babef5a09 Always show comments, send stars if disabled. 2025-11-18 19:44:24 +04:00
John Preston cd52407723 Fix back button restore in new profile cover. 2025-11-18 18:24:16 +04:00
John Preston 68c0aa7fb9 Fix quadratic loop on many same custom emoji. 2025-11-18 17:57:00 +04:00
John Preston f1622c40a4 Fix possible crash from accessibility text insertion. 2025-11-18 17:56:33 +04:00
John Preston 688e7316eb Version 6.3.1.
- Reorder saved music in My Profile.
- Fix new cover overlapping information in My Profile.
- Fix opening stories from My Profile.
- Fix media viewer breaking after viewing Live Stories.
- Fix several possible crashes.
2025-11-17 20:45:32 +04:00
23rd ef5ec47797 Slightly improved code style of info media list section. 2025-11-17 18:30:36 +03:00
23rd 147ad4a773 Slightly improved code style of info media list widget. 2025-11-17 18:30:36 +03:00
23rd 9752145b49 Fixed userpic paint on new self upload in profile top bar. 2025-11-17 18:30:36 +03:00
23rd 662b862d2f Fixed edge skips in list of actions from info profile. 2025-11-17 18:30:36 +03:00
23rd 6d469509a4 Added tooltip to userpic in profile top bar. 2025-11-17 18:30:36 +03:00
23rd 0dfbb8a5ae Added ability to set group or channel photo from profile top bar. 2025-11-17 18:30:36 +03:00
23rd 1e12ecda70 Extended story outline support to channels in profile top bar. 2025-11-17 18:30:36 +03:00
23rd 035087987c Added icon for reorder to media list section with one column mode. 2025-11-17 18:30:36 +03:00
23rd 18422c4193 Added ability to get both item and section by point in layout overview. 2025-11-17 18:30:36 +03:00
John Preston f1f9fe27a9 Provide better error on specific bad proxy links.
There are a lot of incorrect MTProxy links with secret in base64
starting with "EE" in base64 encoded format.
2025-11-17 19:26:06 +04:00
John Preston 10667e14e2 Fix crash in ShareBox scheduling.
Fixes #30012.
2025-11-17 18:36:43 +04:00
John Preston b04c7efdf4 Fix last server message tracking in sublist/forum.
Fixes #30011.
2025-11-17 18:15:16 +04:00
John Preston 0119731360 Fix style of username input for a proxy. 2025-11-17 18:15:00 +04:00
John Preston 8f337684d5 Add close buttons to AuctionGotGiftsBox. 2025-11-17 13:58:19 +04:00
John Preston dae93552f0 Show correct months count in premium gifts. 2025-11-17 13:57:18 +04:00
John Preston 351bbb240f Shorten bid amount for huge bids. 2025-11-17 13:44:16 +04:00
John Preston 5716de2e6e Fix LIVE badge translations. 2025-11-17 13:03:53 +04:00
John Preston 14295d59d1 Add some debug logs on app startup timing. 2025-11-17 12:55:44 +04:00
John Preston df0849473c Fix possible crash in button accessibility. 2025-11-17 12:22:54 +04:00
John Preston 9736706894 Fix initial loading of My Profile with stories. 2025-11-17 12:19:23 +04:00
John Preston 12343a5c31 Less templates in Info::FlexibleScroll. 2025-11-17 12:02:42 +04:00
John Preston a7f046a617 Fix incorrect GL texture deletion. 2025-11-17 11:23:40 +04:00
Ilya Fedin 67bf796f1e Split scheme check code in Linux launch maps implementation 2025-11-17 10:48:01 +04:00
John Preston 22d632abc3 Update hidden gift icon. 2025-11-17 10:47:07 +04:00
John Preston 25094c1ee6 Support paddings in icon parts. 2025-11-17 10:47:07 +04:00
John Preston 5b71ad0456 Fix build with MSVC. 2025-11-17 10:47:07 +04:00
John Preston 9146ba996f Force v143 toolset on Windows for now (win7). 2025-11-17 09:39:25 +04:00
23rd 42900787e1 Added initial ability to filter layout items for reordering. 2025-11-16 23:52:56 +03:00
23rd ba10c10a94 Added initial ability to reorder tracks in saved music section. 2025-11-16 23:52:56 +03:00
23rd 3f37e9ca6f Added initial ability to reorder stories in albums. 2025-11-16 23:52:56 +03:00
23rd c5ea86b474 Added initial implementation of reorder items in media layouts.
Except mosaic.
2025-11-16 23:52:56 +03:00
23rd 76720092a5 Added api support to reorder track from saved music. 2025-11-16 23:52:56 +03:00
23rd 7a75c80b27 Attempted to improve status color with darkest gifts in profile top bar. 2025-11-16 13:01:57 +03:00
23rd b2dcbebb5b Added proper visibility forwarding to flexible scroll content widget. 2025-11-16 12:54:15 +03:00
John Preston aadc81279a Version 6.3: Fix build with GCC. 2025-11-15 21:51:15 +04:00
John Preston febd6dd18f Version 6.3.
- Support for Gift auctions.
- Support for Live stories.
- New profile pages design.
2025-11-15 18:22:08 +04:00
John Preston 1236b35aaf Fix build with MSVC. 2025-11-15 18:22:08 +04:00
23rd 41a9a25823 Added collectible emoji status preview to chat settings. 2025-11-15 18:19:07 +04:00
23rd 55ae81524d Attempted to fix change color in preview while reset unique status. 2025-11-15 18:19:07 +04:00
John Preston a9cf5dd6f2 Fix crash in "Copy Topic Link" action. 2025-11-15 17:54:16 +04:00
John Preston 1e45692ba4 Fix build with Xcode. 2025-11-15 17:48:00 +04:00
John Preston 997cff63a8 Update gyp to support Visual Studio 2026. 2025-11-15 17:39:37 +04:00
John Preston 5db513cc55 Fix build with Xcode. 2025-11-15 17:18:30 +04:00
John Preston 4a7280be5e Fix balance alignment in paid reactions box. 2025-11-15 14:28:56 +04:00
John Preston 59826d492f Show sold out instead of premium paywall. 2025-11-15 14:18:36 +04:00
John Preston 85c2a5fd75 Attempt to fix edit profile colors for self. 2025-11-15 14:02:23 +04:00
John Preston 33dd3342e8 Display correct pattern in edit color box. 2025-11-15 12:38:18 +04:00
John Preston 94fc50f793 Fix live story outline in profile cover. 2025-11-15 12:29:34 +04:00
John Preston 1e79f4a9a5 Don't suggest conversion for auction gifts. 2025-11-15 12:00:01 +04:00
John Preston f56825c526 Replace newlines with spaces for non-admins. 2025-11-15 12:00:01 +04:00
John Preston d7c0f9dee8 Set correct auction about icons. 2025-11-15 12:00:01 +04:00
John Preston a71c59beae Disable newlines in stream comments. 2025-11-15 12:00:01 +04:00
John Preston 5f729433f6 Don't attach reactions menu to streams. 2025-11-15 12:00:01 +04:00
John Preston a1d37475c9 Share just link for live stories. 2025-11-15 12:00:01 +04:00
John Preston 9275dfce70 Fix crash when no top winners yet. 2025-11-15 12:00:01 +04:00
John Preston ff9afdae3e Simple auction position display. 2025-11-15 12:00:01 +04:00
John Preston 12a2dcf484 Fix custom emoji text badge with spaces. 2025-11-15 12:00:01 +04:00
John Preston c3f5f69c2a Remove some debug code. 2025-11-15 12:00:01 +04:00
John Preston 1320e7ac2f Allow placing bid with message / anonymous. 2025-11-15 12:00:01 +04:00
John Preston ae6b0dd753 Implement bought items box. 2025-11-15 12:00:01 +04:00
John Preston e43830c08e Handle auction links. 2025-11-15 12:00:01 +04:00
John Preston 4a5cdbcfb2 Nice bidding information display. 2025-11-15 12:00:01 +04:00
John Preston 9b599644d9 Improve bidding logic. 2025-11-15 12:00:01 +04:00
John Preston cab93600dd Add about auction box layout (no icons yet). 2025-11-15 12:00:01 +04:00
John Preston 0e5e4ca7ea Simple KV storage in session().local(). 2025-11-15 12:00:00 +04:00
John Preston a293134b5e Implement auction info box (active/ended). 2025-11-15 12:00:00 +04:00
John Preston 3831860943 Extract resale star gift box code. 2025-11-15 12:00:00 +04:00
John Preston 1f8214e658 Specify auction phrases for sent auction gifts. 2025-11-15 12:00:00 +04:00
John Preston 58d2e2ece2 Add lang keys for the auctions. 2025-11-15 12:00:00 +04:00
John Preston 424f416fdd Update API scheme to layer 218. 2025-11-15 12:00:00 +04:00
23rd 95c12a0b8e Improved style of slider within paid reactions box for streams. 2025-11-15 12:00:00 +04:00
23rd 45d42c8c31 Added MediaSlider color overrides structure for customizable styling. 2025-11-15 12:00:00 +04:00
23rd 5b94095c78 Added badge to userpic from top bar profile for live stories. 2025-11-15 12:00:00 +04:00
John Preston 605ad0a01c Update API scheme on layer 217. 2025-11-15 12:00:00 +04:00
John Preston 10b8dc3595 Fix star reaction counter in streams. 2025-11-15 12:00:00 +04:00
John Preston 432f6aeae6 Support disallow_stargifts_from_channels right. 2025-11-15 12:00:00 +04:00
John Preston 6702ff3c55 Add SavedMusic privacy editions. 2025-11-15 12:00:00 +04:00
John Preston 8f205f13d8 Show schedule repeat info in BottomInfo. 2025-11-15 11:59:59 +04:00
John Preston 22a133b182 Always allow rescheduling. 2025-11-15 11:59:20 +04:00
23rd bc61175e79 Changed display of widget for login email setup only for primary window. 2025-11-15 11:59:20 +04:00
23rd 874e344f91 Added accounts list menu to widget for login email setup. 2025-11-15 11:59:20 +04:00
23rd f832e31c7b Added support of pending suggestion to set up login email. 2025-11-15 11:59:20 +04:00
John Preston 4cdd793e0c Show crowns in stream comments. 2025-11-15 11:59:20 +04:00
John Preston 0d11cb603f Add LIVE badge for outlined userpics. 2025-11-15 11:59:20 +04:00
John Preston 1e197ae66c Hide comments toggle button if no comments. 2025-11-15 11:59:20 +04:00
John Preston 2a88103b5f Support live stories links. 2025-11-15 11:59:20 +04:00
John Preston 49caea416b Close the viewer when call finishes / fails. 2025-11-15 11:59:20 +04:00
John Preston 5bfe270f24 Support story loading state. 2025-11-15 11:59:20 +04:00
John Preston e8f10f2b45 Use colorings from appconfig. 2025-11-15 11:59:20 +04:00
John Preston 834986410c Update watchers count. 2025-11-15 11:59:20 +04:00
John Preston deffbcf231 Skip showing cheap messages. 2025-11-15 11:59:20 +04:00
John Preston 2d720a8349 Show LIVE badge and watchers count. 2025-11-15 11:59:20 +04:00
John Preston 182d45b7ea Check limits when sending comments. 2025-11-15 11:59:20 +04:00
John Preston 3cd68842bf Use reaction color for send button. 2025-11-15 11:59:20 +04:00
John Preston 861ada351e Make sure you have enough stars for comment. 2025-11-15 11:59:20 +04:00
John Preston e32d863daa Support layout of admin comments in streams. 2025-11-15 11:59:20 +04:00
John Preston 81fc652dc1 Ignore price for admins of live story. 2025-11-15 11:59:20 +04:00
John Preston b72deb1a0e Update client hello algorithm. 2025-11-15 11:59:19 +04:00
John Preston cab38f00c2 Support initial hidden state of comments. 2025-11-15 11:59:19 +04:00
John Preston 137594ccee Track stars stats by short poll / local updates. 2025-11-15 11:59:19 +04:00
23rd 449f7fb2a3 Added support settings/login_email link. 2025-11-15 11:59:19 +04:00
John Preston 2a5bea7e4e Support comments restriction. 2025-11-15 11:59:19 +04:00
John Preston ea309caa22 Support min stars for comment. 2025-11-15 11:59:19 +04:00
John Preston 89bc58ab29 Allow moderation of video stream comments. 2025-11-15 11:59:19 +04:00
John Preston 2d754c93a7 Support choosing send_as in video streams. 2025-11-15 11:59:19 +04:00
John Preston 1017d4cda3 Fix build with Xcode. 2025-11-15 11:59:19 +04:00
John Preston 68dab26be5 New layout of star reaction button in streams. 2025-11-15 11:59:19 +04:00
John Preston 8eb0ec9f7a Send stars from star reaction right click. 2025-11-15 11:59:19 +04:00
John Preston 1da47f62fc Update API scheme on layer 217. 2025-11-15 11:59:19 +04:00
John Preston 70939c4b9c Correctly edit video stream comment price. 2025-11-15 11:59:19 +04:00
John Preston 491ad744ea Update API scheme on layer 217. 2025-11-15 11:59:19 +04:00
John Preston a1565c7fff Allow highlighting pinned messagse. 2025-11-15 11:59:19 +04:00
John Preston 496dbfb2f0 Track mouse in pinned strip. 2025-11-15 11:59:19 +04:00
John Preston 0e44dac208 Use correct lifetime in call messages. 2025-11-15 11:59:19 +04:00
John Preston 2b808933d2 Add some logging to conference participants. 2025-11-15 11:59:19 +04:00
John Preston ba0f682e3a Improve pinned comments design a bit. 2025-11-15 11:59:19 +04:00
John Preston ef49652415 Remove old messages correctly. 2025-11-15 11:59:18 +04:00
John Preston 8e30ee1192 Animate pinned duration. 2025-11-15 11:59:18 +04:00
John Preston 74a676026f Show pinned messages. 2025-11-15 11:59:18 +04:00
John Preston af93c2ee49 Set correct comments area. 2025-11-15 11:59:18 +04:00
John Preston 6b05d253a7 Support different backgrounds for paid comments. 2025-11-15 11:59:18 +04:00
John Preston 797b2a5085 Remove messages by count, not by date. 2025-11-15 11:59:18 +04:00
John Preston b898cf4fde Integrate paid reaction logic to video streams. 2025-11-15 11:59:18 +04:00
John Preston 1c17432f70 Request and store top donors in video streams. 2025-11-15 11:59:18 +04:00
John Preston a6c96df51f Update API scheme on layer 217. 2025-11-15 11:59:18 +04:00
John Preston d7abe73753 Show unread comments dot in video streams. 2025-11-15 11:59:18 +04:00
John Preston 1b84063dd3 Force sending finalizing even without update. 2025-11-15 11:59:18 +04:00
John Preston ed5b7fe3e6 Improve video stream comment placeholder. 2025-11-15 11:59:18 +04:00
John Preston 699ac83729 Support simple type of send stars reactions. 2025-11-15 11:59:18 +04:00
John Preston 1e1ce492e6 Update API scheme on layer 217. 2025-11-15 11:59:18 +04:00
John Preston 7afb9f1fc8 Make toggle comments button. 2025-11-15 11:59:18 +04:00
John Preston 7bfe418c3e Update API scheme on layer 217. 2025-11-15 11:59:18 +04:00
John Preston 94c1388b6a Start redesign of video stream comments. 2025-11-15 11:59:18 +04:00
John Preston 90f53cba31 Show video stream in borrowed renderer. 2025-11-15 11:59:18 +04:00
John Preston a675fca607 Don't show story lines in video streams. 2025-11-15 11:59:18 +04:00
John Preston bf58171f64 Paint video streams outlines in red. 2025-11-15 11:59:18 +04:00
John Preston e619bd4acc Show progress correctly (empty). 2025-11-15 11:59:18 +04:00
John Preston 5f5b7ffb66 Support pin ttl for paid messages in streams. 2025-11-15 11:59:18 +04:00
John Preston 2216e75cab Initial choose stars in video stream box. 2025-11-15 11:59:18 +04:00
John Preston a61d73f48a Allow selecting how many stars to send. 2025-11-15 11:59:17 +04:00
John Preston ecdca38d9e Allow sending comments with stars. 2025-11-15 11:59:17 +04:00
John Preston a34bc7cc89 Hide like button in video stream. 2025-11-15 11:59:17 +04:00
John Preston d12a0be66c Support volume changing in video streams. 2025-11-15 11:59:17 +04:00
John Preston 890421e00e Show volume control in video streams. 2025-11-15 11:59:17 +04:00
John Preston dc57886b68 Start messages layout changes for streams. 2025-11-15 11:59:17 +04:00
John Preston 832fb023e8 Update API scheme on layer 217. 2025-11-15 11:59:17 +04:00
John Preston af8c171b1a Don't crash on media viewer call without stories. 2025-11-15 11:59:17 +04:00
John Preston 58264f8b57 Initial messages support in video streams. 2025-11-15 11:59:17 +04:00
John Preston eb7d614566 Update API scheme on layer 217. 2025-11-15 11:59:17 +04:00
John Preston c11cab858d Initial support for streamed stories. 2025-11-15 11:59:17 +04:00
John Preston 18438b17a5 Update API scheme on layer 217. 2025-11-15 11:59:17 +04:00
John Preston f2464df96f Update API scheme on layer 217. 2025-11-15 11:59:17 +04:00
John Preston 5ee0a2fea2 Allow repeat scheduling in any chat. 2025-11-15 11:59:17 +04:00
John Preston 1296505d01 Add repeat Biweekly period. 2025-11-15 11:59:17 +04:00
John Preston 332b70a27d Repeated scheduled messages (reminders). 2025-11-15 11:59:17 +04:00
John Preston c4d5d52b96 Update API scheme to layer 217. 2025-11-15 11:59:17 +04:00
John Preston 7a5554202e Fix build with latest Xcode. 2025-11-15 11:56:01 +04:00
John Preston df2c426096 Disable fraudulent warning for IV / Location Picker. 2025-11-15 11:56:01 +04:00
23rd b33cdc581b Slightly improved condition for handler of record voice shortcut. 2025-11-15 02:09:22 +03:00
23rd 3cd213b9bf Added dialog suggestions close on open dialog in new window. 2025-11-14 14:34:47 +03:00
23rd aebb37b516 Replaced unknown member count with channel type labels in profiles. 2025-11-14 12:25:18 +03:00
23rd d016c80ba5 Improved style of edit icon from profile top bar. 2025-11-14 12:25:18 +03:00
23rd 882f1c4d1a Improved fix of title width with emoji in profile top bar. 2025-11-14 12:25:18 +03:00
23rd 3ffdf8d281 Made calls check less restricted to avoid redundant repaint in profiles. 2025-11-14 12:25:18 +03:00
23rd c183243711 Improved photo process on full receive in profile top bar. 2025-11-14 12:25:18 +03:00
23rd eeb2c953ad Prioritized badge display by truncating title in profile top bar. 2025-11-14 12:25:18 +03:00
23rd bfb2f3015a Added action button to profile top bar for direct messages. 2025-11-14 12:25:18 +03:00
23rd 9c54f53613 Fixed display of discuss action in discussion group in profile top bar. 2025-11-14 12:25:17 +03:00
23rd 257c7af2f3 Changed pin gifts to end of pinned list instead of begin. 2025-11-14 12:25:17 +03:00
23rd 4ed256814a Added spoiler to box for rtmp calls. 2025-11-14 12:25:17 +03:00
23rd 1f8ea32388 Fixed crash on zero-size resize in MultiSelect during focus animations. 2025-11-14 12:25:17 +03:00
23rd 69403e7967 Fixed display of verified icon in web view for bots.
Regression was introduced in e7fa330215.
2025-11-14 12:25:17 +03:00
23rd 7cc4c76c54 Fixed ripple of QR button in profile info. 2025-11-14 12:25:17 +03:00
23rd cf74a81d07 Fixed display in reply view of specific replied media from group. 2025-11-10 19:37:18 +03:00
23rd 417d151f2c Added original date of forwarded messages to bottom message in self. 2025-11-10 19:37:18 +03:00
23rd ff42b7f61a Fixed gift opening when mouse released on different gift than pressed. 2025-11-10 19:37:18 +03:00
23rd 658c2a0a78 Added ability to reorder pinned gifts to view with all peer gifts. 2025-11-10 19:37:18 +03:00
23rd 90d6899577 Removed menu item to pin / unpin gift from collections. 2025-11-10 19:37:18 +03:00
23rd 5db0e53c0c Added api method to reorder pinned gifts. 2025-11-10 19:37:18 +03:00
Ilya Fedin 7dea4f36fb Accept a list of URLs on Linux
It's supported not only via D-Bus but via command line too since 5fbf280e4a
2025-11-10 16:15:41 +04:00
John Preston 6fea6393c6 Beta version 6.2.6: Fix build with GCC. 2025-11-07 17:53:02 +04:00
John Preston 53f063fe16 Beta version 6.2.6: Fix build with Xcode. 2025-11-07 17:10:52 +04:00
John Preston 6ee72b9c32 Beta version 6.2.6.
- Bug fixes in the new profile page design.
2025-11-07 16:39:44 +04:00
John Preston 5faefa7997 Attempt to fix possible crash in quick action. 2025-11-07 16:38:03 +04:00
John Preston b0726cd31a Don't show lock on sold out gifts. 2025-11-07 16:38:02 +04:00
John Preston 64f5fa8dc3 Revert "Improved focus widgets within chat when foreground box is presented."
This reverts commit 080ecece66.
2025-11-07 16:38:02 +04:00
John Preston ad300f5eae Customize DividerBar/DividerLabel styles. 2025-11-07 16:38:02 +04:00
John Preston 7331160e22 Improve accessibility changes. 2025-11-07 16:38:02 +04:00
Reza Bakhshi Laktasaraei 6af82e5ae5 Update Telegram/SourceFiles/settings/settings_intro.cpp
Co-authored-by: ilya-fedin <fedin-ilja2010@ya.ru>
2025-11-07 16:10:36 +04:00
Reza Bakhshi Laktasaraei 9b2347171f Update Telegram/SourceFiles/settings/settings_chat.cpp
Co-authored-by: ilya-fedin <fedin-ilja2010@ya.ru>
2025-11-07 16:10:36 +04:00
Reza Bakhshi Laktasaraei c60629c17d Update Telegram/SourceFiles/ui/widgets/continuous_sliders.cpp
Co-authored-by: ilya-fedin <fedin-ilja2010@ya.ru>
2025-11-07 16:10:36 +04:00
Reza Bakhshi Laktasaraei 353e18e8e3 Update Telegram/SourceFiles/ui/widgets/continuous_sliders.cpp
Co-authored-by: ilya-fedin <fedin-ilja2010@ya.ru>
2025-11-07 16:10:36 +04:00
Reza Bakhshi Laktasaraei f069df285d Update Telegram/SourceFiles/ui/widgets/continuous_sliders.h
Co-authored-by: ilya-fedin <fedin-ilja2010@ya.ru>
2025-11-07 16:10:36 +04:00
Reza Bakhshi Laktasaraei 6c5f8dffa6 Add accessibility value API to RpWidget
Add keyboard controls and accessibility value reporting to ContinuousSlider
Remove redundant accessibilityRole overrides from intro pages; set Step role to Dialog
2025-11-07 16:10:36 +04:00
Ilya Fedin 4a77e23b54 Skip RpWindow's geometry handling for fullscreen media viewer 2025-11-07 08:51:47 +04:00
23rd 942e53b59b Added option to able revert flexible scroll to first version. 2025-11-06 23:47:03 +03:00
23rd 21a6a256b9 Attempted to fix scroll flickering to profiles. 2025-11-06 23:47:03 +03:00
23rd 99567d3a53 Added second implementation of flexible scroll with event filter. 2025-11-06 23:47:03 +03:00
John Preston eddad6b690 Show correct price per year in 2year premium.
Fixes #29961.
2025-11-06 22:54:43 +04:00
John Preston d02a8cbca1 Better handle group conversion and bar settings.
Fixes #29886.
2025-11-06 22:54:43 +04:00
John Preston 3b079aa29a Don't try requesting peer settings in monoforums. 2025-11-06 22:54:42 +04:00
John Preston df5307dd32 Use "Saved Messages" in chat switcher.
Fixes #29896.
2025-11-06 22:54:42 +04:00
John Preston 65891508e0 Focus start button on launch. 2025-11-06 22:54:42 +04:00
John Preston b5f4e40c3e Fix build with MSVC. 2025-11-06 22:54:42 +04:00
23rd a427730acd Replaced static header icons with lottie animations in ShowOrPremiumBox. 2025-11-06 18:24:08 +03:00
23rd d7639a1ab6 Slightly improved style of last seen button in profile top bar. 2025-11-06 17:34:36 +03:00
23rd 01a140ea29 Fixed crash on erasing peer search result with pressed sponsored button. 2025-11-06 17:27:10 +03:00
23rd 6e0ff9b6a0 Fixed Up key scrolling when no editable messages exist in chat history. 2025-11-06 17:27:10 +03:00
23rd fb14eeeb1e Replaced full profile with short info on open from paid reactions box. 2025-11-06 17:27:10 +03:00
23rd 0c701d9d95 Added ministar particles to premium bubbles with Credits type. 2025-11-06 17:27:10 +03:00
23rd f1ceb1c95a Added ministar particles to slider within paid reactions box. 2025-11-06 17:27:10 +03:00
23rd 6bd41a07a1 Added dedicated class for ministar particles effect. 2025-11-06 17:27:10 +03:00
23rd 2b78bb6e79 Added ability to provide width of outline to slider style. 2025-11-06 17:27:10 +03:00
23rd 7e5d5ddafe Added top senders badge only they are present to paid reactions box. 2025-11-06 16:39:37 +03:00
23rd 150c25c81a Added terms of service label and link to paid reaction box. 2025-11-06 16:39:37 +03:00
23rd 95319bdaca Fixed center position of checkbox in paid reactions box. 2025-11-06 16:39:37 +03:00
23rd d982835b50 Added paid reaction details display on right click on it from message. 2025-11-06 16:39:37 +03:00
23rd 6f040aa0b5 Added empty button for paid reaction to messages with other reactions. 2025-11-06 16:39:37 +03:00
23rd 080ecece66 Improved focus widgets within chat when foreground box is presented. 2025-11-06 16:39:37 +03:00
23rd 31ece2c26e Improved position of video in full screen mode in overlay media viewer. 2025-11-06 16:39:37 +03:00
23rd 9a20f4b935 Fixed display amount of available balance in withdrawal widget. 2025-11-06 16:39:37 +03:00
23rd ea61fd22f5 Added ability to copy url to second button from withdrawal widget. 2025-11-06 16:39:37 +03:00
23rd c77f8f9f41 Added external link indicator to second button from withdrawal widget. 2025-11-06 16:39:36 +03:00
23rd ad758c51c2 Fixed display of url from withdrawal widget when withdrawal disabled. 2025-11-06 16:39:36 +03:00
23rd 8ac7fd14ec Renamed changePhoneIconSize with normalBoxLottieSize. 2025-11-06 16:39:36 +03:00
23rd ed7c5e97cb Added lottie icon to rtmp box. 2025-11-06 16:39:36 +03:00
23rd fb928a15a6 Fixed display of unread badges in filters strip after remote reorder. 2025-11-06 16:39:36 +03:00
23rd f60155e7b8 Slightly improved position of stars rating in profile top bar. 2025-11-06 16:39:36 +03:00
23rd 7c28b1a6a6 Slightly improved pattern color in some cases in profile top bar. 2025-11-06 16:39:36 +03:00
23rd a300f4662e Fixed width of title with emoji in profile top bar. 2025-11-06 16:39:36 +03:00
AlexeyZavar 354ef0fc58 chore: update ru preview as well 2025-11-05 13:18:21 +03:00
AlexeyZavar e624b238b2 chore: update preview
Co-authored-by: Juliano <mirandolli@gmail.com>
2025-11-05 13:08:05 +03:00
Alexey 369fe832ea chore: update macOS building docs 2025-11-05 12:39:02 +03:00
AlexeyZavar 4a7552fdab fix: translator crashes 2025-11-05 10:59:34 +03:00
AlexeyZavar aa57a17af6 fix: line separators in google translator 2025-11-05 10:19:52 +03:00
AlexeyZavar 926c6a55ce fix: translator crashes 2025-11-04 10:38:08 +03:00
AlexeyZavar 3d005e8e87 fix: pluralization 2025-11-04 09:57:51 +03:00
23rd 3ff376774f Added emoji selector to name input field in filter edit box. 2025-11-02 18:35:18 +03:00
23rd e16c05385f Improved length limit for title of filter edit box. 2025-11-02 18:35:18 +03:00
23rd 6e8825cdd5 Added ability to add newly created chat to folder. 2025-11-01 18:50:01 +03:00
23rd 1c19895ce7 Paused emoji in top bar suggestion when window inactive. 2025-11-01 18:50:00 +03:00
23rd e62a4b065a Extracted common toast timer logic to recent self forwards tagger. 2025-11-01 18:50:00 +03:00
23rd ba363285a7 Added ability to add newly joined chat to folder. 2025-11-01 18:50:00 +03:00
23rd 679c932697 Added local event for recent joined chats. 2025-11-01 18:50:00 +03:00
23rd 581ec70bf3 Fixed dividers below shared media section in profile info. 2025-11-01 18:50:00 +03:00
23rd 4d2700ab1c Added special tracker to allow override dividers below in profile info. 2025-11-01 18:50:00 +03:00
23rd b365136639 Added special at least one shown button tracker to profile info. 2025-11-01 18:50:00 +03:00
23rd f23153e1ac Fixed skip for view channel button in profile info. 2025-11-01 18:50:00 +03:00
23rd 26cb931dcf Fixed skip for report reaction button in profile info. 2025-11-01 18:50:00 +03:00
23rd 42d2190d17 Moved out "add to contact" button from info above in hierarchy. 2025-11-01 18:50:00 +03:00
23rd 63ad80200e Fixed display of join action button in profile top bar on channel join. 2025-11-01 18:50:00 +03:00
23rd 68e9c63693 Slightly improved style of badges in boost box. 2025-11-01 18:50:00 +03:00
23rd 542ff88d3b Fixed order of features in boost box. 2025-11-01 18:50:00 +03:00
23rd bf7f73e472 Fixed repaint of action buttons in profile top bar on palette changed. 2025-11-01 18:50:00 +03:00
23rd c9f195be90 Improved color for verified inner check in profile top bar. 2025-11-01 18:50:00 +03:00
23rd 715da30a72 Added peer colors as feature to boost box. 2025-11-01 18:50:00 +03:00
23rd 4e9f2aaadd Removed redundant button for chat management from info actions list. 2025-11-01 18:50:00 +03:00
23rd 71cbb037ce Added new action button for chat management to profile top bar. 2025-11-01 18:50:00 +03:00
AlexeyZavar 35ea9070e4 chore: respect autodownload settings 2025-11-01 14:41:53 +03:00
AlexeyZavar 67c5ff4939 fix: cover size on macOS 2025-11-01 14:27:03 +03:00
AlexeyZavar 4e8a6f4098 fix: filters import error message 2025-11-01 13:51:28 +03:00
AlexeyZavar 66a4b1a9f1 feat: improve app icon render & adapt macOS icons 2025-11-01 13:39:12 +03:00
23rd 9e43972313 Added item about peer colors to summary of premium features. 2025-10-31 15:42:24 +03:00
23rd 4a8bb75851 Added new badge to entry point for edit peer color box. 2025-10-31 15:04:17 +03:00
23rd 80dce3b65a Added profile color sample to button in settings and manage sections. 2025-10-31 14:41:25 +03:00
23rd 056534fb41 Fixed api requests for edit colors in edit peer color box. 2025-10-31 14:39:06 +03:00
23rd e444b82683 Fixed display of pattern emoji in button without color in edit color. 2025-10-31 12:12:00 +03:00
AlexeyZavar b59115e27c fix: make it compile on macOS & fix warnings 2025-10-31 12:01:53 +03:00
23rd d9e4f686fb Added menu items for contacts to profile top bar. 2025-10-31 11:57:30 +03:00
23rd 2cd224af98 Fixed centered position of icons in action buttons from profile top bar. 2025-10-31 10:26:35 +03:00
bleizix 4af1ca65ed fix: ghost toggles 2025-10-31 09:06:18 +03:00
23rd a50141ac8a Added one line for private topic links to profile info. 2025-10-31 01:21:14 +03:00
23rd f11b36cdb1 Improved track of sliders to avoid empty dividers in profile top bar. 2025-10-31 01:20:55 +03:00
23rd f30af1c4ed Added go to forum button instead of status for topic in profile top bar. 2025-10-30 22:25:06 +03:00
23rd 45def31826 Returned button to view channel to profile top bar.
Regression was introduced 6147b0eec0.
2025-10-30 21:28:34 +03:00
23rd a22afce820 Added music button to stories section. 2025-10-30 21:15:59 +03:00
23rd af874bebfd Moved out music button creation to single place. 2025-10-30 21:15:59 +03:00
23rd 7cdb651538 Slightly optimized repaint for userpic and gifts in profile top bar. 2025-10-30 20:43:07 +03:00
23rd 5e1752bcbc Fixed useless repaint for bot verified badges. 2025-10-30 20:31:54 +03:00
23rd eb295cb19c Simplified foreground color of badges in profile top bar. 2025-10-30 20:31:54 +03:00
23rd ace42226b6 Fix rounding in preview of settings for quick dialog actions. 2025-10-30 18:49:41 +03:00
23rd 5e1b4b4e6a Added ability to report userpic from profile top bar. 2025-10-30 18:05:27 +03:00
23rd f009fa9e47 Fixed callback of back button in profile top bar. 2025-10-30 18:05:27 +03:00
23rd f08c00557d Fixed display of back button in profile top bar. 2025-10-30 18:05:27 +03:00
23rd a0e0d95775 Added ability to click on emoji status in profile top bar. 2025-10-30 18:05:05 +03:00
23rd a4acab983d Fixed width of title with bot verified badge in profile top bar. 2025-10-30 18:05:05 +03:00
23rd 5237a7977d Fixed ability to select and copy peer name in profile top bar. 2025-10-30 18:05:05 +03:00
23rd eb285bc1ac Fixed width of title on peer name changes in profile top bar. 2025-10-30 18:05:05 +03:00
23rd 7d97cd25ab Fixed bg position of pinned gift in profile top bar on non-retina. 2025-10-30 14:54:52 +03:00
23rd 55f4a99824 Fixed quality of pinned gift in profile top bar on non-retina. 2025-10-30 14:02:31 +03:00
23rd 34373836b9 Fixed position of pattern emoji in profile top bar on different scales. 2025-10-30 14:02:31 +03:00
23rd 1509891ec0 Fixed size of pattern emoji in profile top bar on non-retina. 2025-10-30 14:02:31 +03:00
dependabot[bot] 877ef7d78f Bump actions/upload-artifact from 4 to 5
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 5.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-29 17:41:11 +04:00
John Preston 8f26a24f78 Beta version 6.2.5.
- New profile pages design.
- Qt 6.10 on Linux.
2025-10-29 14:34:51 +04:00
John Preston 6abd4bae58 Fix build with Qt 6 on Windows. 2025-10-29 14:34:51 +04:00
John Preston f8844750f5 Fix build with Xcode. 2025-10-29 14:34:51 +04:00
John Preston de984d44ac Fix build on Windows. 2025-10-29 14:34:51 +04:00
23rd babcefeb23 Returned button for reaction reporting to profile info. 2025-10-29 13:15:05 +03:00
23rd 71a55290ab Removed display of empty placeholder for gifts when gifts are loaded. 2025-10-28 20:38:26 +03:00
23rd 8ef0b88633 Slightly improved position of status in profile top bar. 2025-10-28 14:08:11 +03:00
23rd f9c3415aa7 Added handler of pinned gifts order event to profile top bar. 2025-10-28 13:53:41 +03:00
23rd deb7d5914f Fixed api ability to toggle pinned star gifts. 2025-10-28 13:53:41 +03:00
23rd 469e4394bd Attempted to improve flexible scroll in some cases. 2025-10-28 13:53:41 +03:00
23rd 1bcf9dda0a Added placeholder for empty list of self gifts to edit peer color box. 2025-10-28 13:53:41 +03:00
23rd 02fafde09d Added correspond premium feature premium box in edit peer color box. 2025-10-28 13:53:41 +03:00
23rd de5e1b3452 Added boost hint below preview in edit peer color box for groups. 2025-10-28 13:53:41 +03:00
23rd 4381db691b Slightly improved color of action buttons in profile top bar. 2025-10-28 13:53:41 +03:00
23rd bd879262c2 Added limit for count of actions to profile top bar. 2025-10-28 13:53:41 +03:00
23rd da88b4c475 Centered status with all elements as unified group in profile top bar. 2025-10-28 13:53:41 +03:00
23rd 276a18cddd Returned close button to profile top bar in Side wrap. 2025-10-28 13:53:41 +03:00
23rd 6eb54e55a5 Improved style of verified check in profile top bar. 2025-10-28 13:53:41 +03:00
23rd e7fa330215 Split verified check icon. 2025-10-28 13:53:41 +03:00
23rd 27ed160a40 Added handler for palette changed event to profile top bar. 2025-10-28 13:53:40 +03:00
23rd 180b614c86 Improved foreground of pattern emoji in profile top bar. 2025-10-28 13:53:40 +03:00
23rd e2e6b64632 Improved z-order of main button in edit peer color box. 2025-10-28 13:53:40 +03:00
23rd be46aacbe5 Moved up button for emoji status in edit peer color box for channels. 2025-10-28 13:53:40 +03:00
23rd 3bd46f3415 Added about labels about profile colors to edit peer color box. 2025-10-28 13:53:40 +03:00
23rd 7e6e2960bd Added ability to edit profile color to edit peer color box for channels. 2025-10-28 13:53:40 +03:00
23rd 9df4377450 Improved ability set emoji status locally in profile top bar. 2025-10-28 13:53:40 +03:00
23rd 294ab035f0 Moved out function for tabs in edit peer color box to anon namespace. 2025-10-28 13:53:40 +03:00
23rd f96554e271 Moved out top bar preview creation to function in edit peer color box. 2025-10-28 13:53:40 +03:00
23rd 2c1fdbe55b Added ability to retrieve required boost level for peer colors to api. 2025-10-28 13:53:40 +03:00
23rd b5bce29514 Added about text for profile to edit peer color box. 2025-10-28 13:53:40 +03:00
23rd 97557b85d9 Added ability to apply profile style to edit peer color box. 2025-10-28 13:53:40 +03:00
23rd 8a5cc70d9b Added ability to set unique gift from edit peer color box for profile. 2025-10-28 13:53:40 +03:00
23rd d5075891b2 Added ability to wear unique gift locally to profile top bar. 2025-10-28 13:53:40 +03:00
23rd 4df778f4e9 Added always display of story outline while preview to profile top bar. 2025-10-28 13:53:40 +03:00
23rd 3cda66f1f3 Added reset button for profile to edit peer color box. 2025-10-28 13:53:40 +03:00
23rd e0991d9376 Added simple emoji pattern selector for profile to edit peer color box. 2025-10-28 13:53:40 +03:00
23rd 8c94742070 Added ability to set emoji pattern locally to profile top bar. 2025-10-28 13:53:40 +03:00
23rd 419b2b02bc Added ability to set bg locally to profile top bar. 2025-10-28 13:53:40 +03:00
23rd b4998527dd Added simple profile top bar preview to edit peer color box. 2025-10-28 13:53:40 +03:00
23rd 8ac8598b20 Replaced controller in descriptor for profile top bar. 2025-10-28 13:53:40 +03:00
23rd f7ddf8b024 Added ability to provide custom wrap value to profile top bar. 2025-10-28 13:53:40 +03:00
23rd 18f1563829 Added ability to provide custom key to profile top bar. 2025-10-28 13:53:40 +03:00
23rd 20ba35c0a7 Added simple color selector for profile to edit peer color box. 2025-10-28 13:53:40 +03:00
23rd de4764c1c7 Added simple mode for profiles to color selector. 2025-10-28 13:53:40 +03:00
23rd 31bb8a3ac5 Extracted ColorSelector class to td_ui. 2025-10-28 13:53:40 +03:00
23rd e0156abe7c Added ability to use color sample for peer profile color. 2025-10-28 13:53:40 +03:00
23rd 7d02e92843 Extracted ColorSample class to td_ui. 2025-10-28 13:53:40 +03:00
23rd 80aef75ea5 Added ability to retrieve color data from index for profile to api. 2025-10-28 13:53:40 +03:00
23rd c940062787 Added initial sections for tabs to edit peer color box. 2025-10-28 13:53:40 +03:00
23rd 4b3b9ad140 Added simple tab selector to edit peer color box. 2025-10-28 13:53:40 +03:00
23rd 1bb2efc346 Split logic of box for edit peer color and inner of box. 2025-10-28 13:53:40 +03:00
23rd 0b699b45b1 Centered title with all badges as unified group in profile top bar. 2025-10-28 13:53:40 +03:00
23rd 3c0487db81 Fixed status position on change in profile top bar. 2025-10-28 13:53:40 +03:00
23rd f62869e4df Fixed link color for status with profile color in profile top bar. 2025-10-28 13:53:40 +03:00
23rd fce459f612 Added initial support of solo pattern emoji to profile top bar. 2025-10-28 13:53:40 +03:00
23rd 6a003114db Added single-loop mode for gift animations to top bar in Side wrap. 2025-10-28 13:53:40 +03:00
23rd 39ed5cab0d Added recreation of action buttons in profile top bar on full receiving. 2025-10-28 13:53:40 +03:00
23rd 4b67c8f4bb Set fixed position of mute menu in profile top bar. 2025-10-28 13:53:40 +03:00
23rd 65604add65 Removed action buttons for notification user from profile top bar. 2025-10-28 13:53:40 +03:00
23rd 3e69f65d1c Moved menu toggle from top to action button in profile top bar. 2025-10-28 13:53:40 +03:00
23rd 0b26dbbc9e Added middle elision to action buttons in profile top bar. 2025-10-28 13:53:40 +03:00
23rd 152d943f3d Fixed overridden colors for lottie icon in action buttons from top bar. 2025-10-28 13:53:40 +03:00
23rd 7fffd1d318 Added support of profile color to profile top bar for badges. 2025-10-28 13:53:40 +03:00
23rd 5d875341f4 Added support of profile color to profile top bar for stories outline. 2025-10-28 13:53:40 +03:00
23rd 61dbd4c4c2 Fixed possible crash from profile top bar in groups. 2025-10-28 13:53:40 +03:00
23rd 5f42011c7b Added support of profile color to top bar for gradient backgrounds. 2025-10-28 13:53:40 +03:00
23rd 7e56174ba9 Added support of profile color to profile top bar for solid backgrounds. 2025-10-28 13:53:40 +03:00
23rd 0a83b3f58c Added convenient method to resolve profile color by peer. 2025-10-28 13:53:40 +03:00
23rd 71fec23311 Added applying of profile colors to peers. 2025-10-28 13:53:40 +03:00
23rd 2ba3035a13 Added new data change flag for profile colors. 2025-10-28 13:53:40 +03:00
23rd 7a653a8e1b Added initial support of profile colors to peers. 2025-10-28 13:53:40 +03:00
23rd a93b32fb53 Added initial api support of profile colors. 2025-10-28 13:53:40 +03:00
23rd d82cc350c0 Added initial data structures for profile colors. 2025-10-28 13:53:39 +03:00
23rd 5997a7d48a Replaced color calculation from int with single function. 2025-10-28 13:53:39 +03:00
23rd 7641fb6712 Converted ABGR to RGB in fireworks module. 2025-10-28 13:53:39 +03:00
23rd dfaf9b9d43 Fixed position of right sublabel for notes in profile section. 2025-10-28 13:53:39 +03:00
23rd 6147b0eec0 Removed main buttons from profile sections. 2025-10-28 13:53:39 +03:00
23rd 2eefef3649 Reduced left padding for info labels in profile section. 2025-10-28 13:53:39 +03:00
23rd 1905a67e6c Removed mute toggle from profile section. 2025-10-28 13:53:39 +03:00
23rd 38ab18f6fb Moved verification label under info in profile. 2025-10-28 13:53:39 +03:00
23rd ddcc20c8a7 Removed actions button from profile top bar in section for stories. 2025-10-28 13:53:39 +03:00
23rd f3c6763058 Removed additional divider after profile top bar. 2025-10-28 13:53:39 +03:00
23rd 91a11d2e74 Moved out some calculations from paint event in music button. 2025-10-28 13:53:39 +03:00
23rd fb880481a4 Replaced custom music data formatting with common song name formatter. 2025-10-28 13:53:39 +03:00
23rd 9e6703f02f Slightly improved style of top bar in profile. 2025-10-28 13:53:39 +03:00
23rd da5435d1cb Added leave button to action buttons in profile top bar. 2025-10-28 13:53:39 +03:00
23rd db0726364b Added report button to action buttons in profile top bar. 2025-10-28 13:53:39 +03:00
23rd 944b2de852 Added join button to action buttons in profile top bar. 2025-10-28 13:53:39 +03:00
23rd 53927502af Added gift button to action buttons in profile top bar. 2025-10-28 13:53:39 +03:00
23rd 828d8ea051 Added discuss button to action buttons in profile top bar. 2025-10-28 13:53:39 +03:00
23rd f2e345b39f Added edit button to profile top bar for stories section. 2025-10-28 13:53:39 +03:00
23rd 6f625a899c Added profile top bar to self stories section. 2025-10-28 13:53:39 +03:00
23rd 28bc8c3bf3 Moved out creation of flexible scroll into info content widget. 2025-10-28 13:53:39 +03:00
23rd ef30949943 Moved out creation of smooth scroll for info profile top bar to helper. 2025-10-28 13:53:39 +03:00
23rd 4f888bc418 Added ability to click on pinned gifts from profile top bar. 2025-10-28 13:53:39 +03:00
23rd 34caf6967e Slightly optimized calculating of userpic geometry in profile top bar. 2025-10-28 13:53:39 +03:00
23rd a728c783d9 Removed music button from cover. 2025-10-28 13:53:39 +03:00
23rd 934d232653 Added ability to set custom bg color to music button in profile. 2025-10-28 13:53:39 +03:00
23rd 4fbc7771c9 Removed cover from profile. 2025-10-28 13:53:39 +03:00
23rd 571ab422bf Moved out music button from cover to inner widget for profile. 2025-10-28 13:53:39 +03:00
23rd 9592f4de6e Added center alignment to music button in profile. 2025-10-28 13:53:39 +03:00
23rd c126d99fd0 Fixed colorized online text in status from profile top bar. 2025-10-28 13:53:39 +03:00
23rd 11c8a272ec Improved processing of hiding all collectible things in profile top bar. 2025-10-28 13:53:39 +03:00
23rd f7170b8c50 Added initial hiding animation for gifts in profile top bar. 2025-10-28 13:53:39 +03:00
23rd 9ce28f4cb7 Added offset to background in profile top bar. 2025-10-28 13:53:39 +03:00
23rd 522a457d98 Fixed background in profile top bar on width resizing. 2025-10-28 13:53:39 +03:00
23rd 9e9ffaa27b Added menu to userpic when stories are presented in profile top bar. 2025-10-28 13:53:39 +03:00
23rd 9ab4a8ab6e Added stories support to profile top bar. 2025-10-28 13:53:39 +03:00
23rd 5c784081c2 Replaced top call button with action button in profile top bar. 2025-10-28 13:53:39 +03:00
23rd 9c84c0afe9 Improved adaptive colors in top buttons from profile top bar. 2025-10-28 13:53:39 +03:00
23rd accc5e8b10 Added adaptive color to stars rating in profile top bar. 2025-10-28 13:53:39 +03:00
23rd 1e0c71a411 Added simple appearing animation to pinned gifts in profile top bar. 2025-10-28 13:53:39 +03:00
23rd 663687884b Added adaptive color to badges in profile top bar. 2025-10-28 13:53:39 +03:00
23rd ade2bdcafd Added ability to set overridden style to profile badges. 2025-10-28 13:53:39 +03:00
23rd 9e01e64f63 Fixed possible crash from profile badge tooltip. 2025-10-28 13:53:39 +03:00
23rd 7cc0fd879d Added adaptive color to top buttons in profile top bar. 2025-10-28 13:53:39 +03:00
23rd 42bd835800 Added adaptive background color to action buttons in profile top bar. 2025-10-28 13:53:39 +03:00
23rd ef7b5cb8e7 Added initial few action buttons to profile top bar. 2025-10-28 13:53:39 +03:00
23rd 2651d79b63 Added ability to convert action button to toggle in profile top bar. 2025-10-28 13:53:39 +03:00
23rd ddc12c3f71 Added ability to pass static icon to action button in profile top bar. 2025-10-28 13:53:39 +03:00
23rd 9c3c2e9fa7 Divided scrolling process of profile top bar on different steps. 2025-10-28 13:53:39 +03:00
23rd 564f9ac38d Added action button for profile top bar as separated class. 2025-10-28 13:53:39 +03:00
23rd 1b49bd0843 Adjusted some styles for profile top bar. 2025-10-28 13:53:39 +03:00
23rd 831d79d912 Added simple container that fits within certain width. 2025-10-28 13:53:39 +03:00
23rd d61f809cca Added gradient background to recent gifts in profile top bar. 2025-10-28 13:53:39 +03:00
23rd 130176fd7e Replaced raw DocumentId with full star gift data in api recent gifts. 2025-10-28 13:53:39 +03:00
23rd 1ea9be9877 Fixed labels position in profile top bar with back button. 2025-10-28 13:53:39 +03:00
23rd e3b56aa05b Added initial support of pinned gifts in profile top bar. 2025-10-28 13:53:39 +03:00
23rd 4f4195c88a Added ability to api request of last pinned gifts for peer profile. 2025-10-28 13:53:39 +03:00
23rd 1d9a8af174 Added animated emoji pattern to profile top bar. 2025-10-28 13:53:39 +03:00
23rd 8b1e7e1fa9 Added initial static emoji pattern to profile top bar. 2025-10-28 13:53:38 +03:00
23rd eeb0b62bfa Moved out pattern points draw for unique gifts to separated class. 2025-10-28 13:53:38 +03:00
23rd 0a114bbe4a Added initial support of collectible background to profile top bar. 2025-10-28 13:53:38 +03:00
23rd 474458e4c3 Moved out gradient for unique gifts to separated class. 2025-10-28 13:53:38 +03:00
23rd c6b73631d8 Added support of topic icons to profile top bar. 2025-10-28 13:53:38 +03:00
23rd bce318c48e Added support of video userpic to profile top bar. 2025-10-28 13:53:38 +03:00
23rd 9e4ac1c835 Created simple class for video userpic processing. 2025-10-28 13:53:38 +03:00
23rd 53933db077 Added userpic for monoforum broadcasts to profile top bar. 2025-10-28 13:53:38 +03:00
23rd 4156d8e908 Added ability to open peer photo to profile top bar. 2025-10-28 13:53:38 +03:00
23rd 6491d83085 Added members click callback to profile top bar. 2025-10-28 13:53:38 +03:00
23rd 6259d30e2b Added online members count to profile top bar. 2025-10-28 13:53:38 +03:00
23rd 3ee7a0dc16 Added badge gift tooltip to profile top bar. 2025-10-28 13:53:38 +03:00
23rd 43d8723e35 Moved out badge gift tooltip from info profile cover to separated class. 2025-10-28 13:53:38 +03:00
23rd d59ab17ac5 Added last seen button and rating to status in profile top bar. 2025-10-28 13:53:38 +03:00
23rd d26cda097f Added ability to set opacity to stars rating from info profile cover. 2025-10-28 13:53:38 +03:00
23rd 6daa58b596 Improved width processing of title in profile top bar. 2025-10-28 13:53:38 +03:00
23rd d0920d9eb9 Added calls button to profile top bar. 2025-10-28 13:53:38 +03:00
23rd fbd353501b Added toggle menu button to profile top bar. 2025-10-28 13:53:38 +03:00
23rd 9876aa64e0 Moved out close and back buttons within profile top bar class. 2025-10-28 13:53:38 +03:00
23rd b8ccf7b3d4 Replaced args for profile top bar with descriptor. 2025-10-28 13:53:38 +03:00
23rd c15b5914b2 Added simple userpic to profile top bar. 2025-10-28 13:53:38 +03:00
23rd 73aebb8890 Added initial implementation of smooth scroll to profile top bar. 2025-10-28 13:53:38 +03:00
23rd f9270710be Added initial position processing of title in profile top bar. 2025-10-28 13:53:38 +03:00
23rd 0b63abf5b4 Added initial status to profile top bar. 2025-10-28 13:53:38 +03:00
23rd 51ae4af83e Extracted peer status label logic into separate StatusLabel class. 2025-10-28 13:53:38 +03:00
23rd 4832982988 Added initial title to profile top bar. 2025-10-28 13:53:38 +03:00
23rd b4d49715dc Provided peer to profile top bar. 2025-10-28 13:53:38 +03:00
23rd 0de7b4eb39 Added back button to profile top bar. 2025-10-28 13:53:38 +03:00
23rd 3e88451ea8 Added close button to profile top bar. 2025-10-28 13:53:38 +03:00
23rd 5468fde492 Set profile top bar as flexible. 2025-10-28 13:53:38 +03:00
23rd f17e13cad0 Added ability to paint round edges to profile top bar. 2025-10-28 13:53:38 +03:00
23rd f511449273 Added dummy new class for top bar within info profile. 2025-10-28 13:53:38 +03:00
23rd bbe65e212a Added initial ability to create pinned widgets to info profile. 2025-10-28 13:53:38 +03:00
ZavaruKitsu ab9dbbab70 chore: make it build 2025-10-27 12:17:57 +03:00
AlexeyZavar 51a7739436 Merge remote-tracking branch 'upstream-main/dev' into dev 2025-10-27 12:17:51 +03:00
bleizix 4cfe4153b1 fix: video/gif forwarding via AyuForward 2025-10-27 03:08:09 +03:00
AlexeyZavar af6b0cb189 fix: filters crash 2025-10-27 02:57:32 +03:00
Bush2021 df2a069371 feat: repeat message 2025-10-27 02:45:16 +03:00
ilya-fedin 5ebd0df15f Update patches on Linux 2025-10-25 20:56:56 +04:00
Ilya Fedin 66a34bcb89 Fix Docker image build 2025-10-24 15:53:58 +04:00
Sv. Lockal acad1d4175 Fix compilation with Clang-21 + libstdc++-16
.emplace() can only be used on constructible objects, while private
nested struct is not considered as constructible due to access control.

Closes #29939

Signed-off-by: Sv. Lockal <lockalsash@gmail.com>
2025-10-24 07:15:19 +04:00
AlexeyZavar c8a096537c feat: search cover in iTunes as fallback 2025-10-23 18:09:21 +03:00
Ilya Fedin 716fade52a Remove unused yasm dependency from macOS packaged action
It's not used since openh264 is not built as part of tg_owt
2025-10-23 11:41:39 +04:00
Ilya Fedin 3b9312d9ac Install only really needed parts of Qt in macOS packaged action 2025-10-23 11:41:39 +04:00
Ilya Fedin f87d072c79 Force bundled abseil-cpp for WebRTC in macOS packaged action
It fails to build with the one from brew due to a change in the API of new abseil-cpp versions
2025-10-23 11:08:21 +04:00
John Preston b61724019a Update patches revision in snapcraft. 2025-10-23 10:56:01 +04:00
John Preston 3ffdb1ee56 Fix build on Linux. 2025-10-23 10:29:24 +04:00
Ilya Fedin 5fbf280e4a Combine startUrls and sendPaths
This commit allows to handle multiple URLs of all types as positional arguments simultaneously:
* tg:// links
* tonsite:// links
* interpret:// file paths
* generic file paths (to share files)

This allows to Drag'n'Drop files to the Telegram shortcut/binary.
2025-10-23 10:23:53 +04:00
Ilya Fedin f787e0fa1d Allow to pass URLs without --
This allows to make tdesktop as a URL handler with generic file dialog in e.g. Firefox (previously the window was opening but no URL handled)
2025-10-23 10:23:53 +04:00
23rd 0d33b92d24 Added ability to edit cover for videos from edit caption box. 2025-10-23 10:09:08 +04:00
John Preston 8e5d0c66db Revert downgrade of xdg-desktop-portal. 2025-10-23 10:06:04 +04:00
AlexeyZavar ba1d4e97bb fix: color generation 2025-10-23 02:25:33 +03:00
Ilya Fedin 6e8ac60399 Actually share files with Drag'n'Drop to shortcut on macOS
The code supported this since 4.8.3 (6aef6d7f4e) for Linux but wasn't actually allowed on macOS via plist.
2025-10-22 22:02:37 +04:00
John Preston f8bd80109c Update lib_base submodule. 2025-10-22 22:02:02 +04:00
Ilya Fedin de89d349ad Implement launching maps on Linux 2025-10-22 22:01:45 +04:00
Ilya Fedin dbc9beaa19 Make psLaunchMaps async 2025-10-22 22:01:45 +04:00
Ilya Fedin 1f171c4ed1 Remove unused includes from specific_linux.cpp 2025-10-22 22:01:45 +04:00
John Preston 2e03888505 Update patches revision. 2025-10-22 22:00:42 +04:00
Ilya Fedin ab5eafbe68 Update Qt to 6.10.0 2025-10-22 21:59:38 +04:00
Ilya Fedin 73014a33fe Fix build with Qt 6.10 2025-10-22 21:59:38 +04:00
Ilya Fedin 7bdbe0ef77 Examples and tests don't get built by default with Qt 6 2025-10-22 21:59:38 +04:00
Ilya Fedin d4dbad4649 Remove -no-sbom
Following 7d78de0673
2025-10-22 21:59:38 +04:00
Ilya Fedin 24b23bbb5a Don't hardcode Qt version in the action 2025-10-22 21:59:38 +04:00
John Preston abab44a02b Adapt latest lib_ui changes for accessibility. 2025-10-22 21:56:41 +04:00
Reza Bakhshi Laktasaraei b9c07e644f Setting accessibleName and accessibleRole for objects 2025-10-22 20:40:08 +04:00
Reza Bakhshi Laktasaraei ce9c3b4ef8 enable clicking on country chooser by pressing space bar and enter key 2025-10-22 20:40:08 +04:00
Reza Bakhshi Laktasaraei 13862bd561 adding the entry poin for enabling accessibility 2025-10-22 20:40:08 +04:00
John Preston 856d38df49 Fix crash in stories volume control destructor. 2025-10-22 17:32:17 +04:00
John Preston 27a5e13107 Fix glitch in forum row switch from/to. 2025-10-22 17:31:43 +04:00
John Preston a71c24f803 Version 6.2.4.
- Highlight links in contact notes.
- Show menu with screen share controls in wide group call mode.
- Fix possible crash in saved music removing.
- Fix crash in theme editor.
2025-10-22 12:54:20 +04:00
John Preston 758ec52b91 Fix build. 2025-10-22 12:54:20 +04:00
Ilya Fedin 96418bb9f1 Make QFileOpenEvent timeout immediate 2025-10-22 12:48:33 +04:00
23rd f750d94b2d Fixed processing of recent self forwards from share box for non-premium. 2025-10-22 12:30:54 +04:00
23rd 6eb9695e1e Added links support to user notes. 2025-10-22 12:23:40 +04:00
John Preston 33bbad8053 Fix possible crash in saved music removing. 2025-10-22 12:18:12 +04:00
John Preston 3ea34461b2 Fix typing animation in chats list updates. 2025-10-22 12:18:12 +04:00
John Preston b6a202b721 Fix error display in webview box. 2025-10-22 12:18:12 +04:00
John Preston 4d8cb022c5 Make screen share controls available. 2025-10-22 12:18:12 +04:00
John Preston 3046318de5 Update submodules. 2025-10-22 12:18:12 +04:00
John Preston c351598f13 Simplify OpenGL surface renderer interface. 2025-10-22 12:18:12 +04:00
bleizix ab9c47e4bc fix: invert media & downloading state 2025-10-21 21:45:25 +03:00
bleizix 20e5e7cdbd fix: missing disableNotificationsDelay button 2025-10-21 21:45:23 +03:00
bleizix d0dd95c198 fix: hide filtered native notifications 2025-10-21 21:45:21 +03:00
bleizix 28d554af82 feat: show forward & reaction dates with years 2025-10-21 21:45:19 +03:00
John Preston 02084be583 Fix crash in theme editor. 2025-10-13 16:43:13 +04:00
John Preston e117d08b2c Version 6.2.3.
- Fix crash when viewing messages with hidden senders.
- Fix possible crash when editing contacts.
- Fix layout of character count warning in contact notes.
- Fix icons when editing contacts.
- Fix color of sending messages animation in complex themes.
- Fix crash in chat open on Flatpak build.
2025-10-12 12:06:00 +04:00
John Preston 58783170cd Fix a crash with Qt 6.10. 2025-10-12 12:04:13 +04:00
John Preston 9ba2426c02 Fix crash in messages with hidden senders. 2025-10-12 11:59:11 +04:00
23rd 2cbaa7b03d Removed ability to suggest things for contacts with paid messages. 2025-10-12 11:58:57 +04:00
23rd 836a0f3a73 Removed photo buttons in edit contact box when adding new contact. 2025-10-12 11:58:57 +04:00
23rd e9977f551f Moved info profile text file to td_ui. 2025-10-12 11:58:57 +04:00
23rd 78abe362cd Disabled simple sending animation of text messages when window is wide. 2025-10-11 20:30:45 +03:00
23rd 47c2922d55 Fixed possible crash in edit contact box. 2025-10-11 17:04:02 +03:00
23rd 690f3fecbb Fixed stuck box on resetting contact photo to original. 2025-10-11 17:04:02 +03:00
23rd d9242db7b3 Fixed display of animated icons in edit contact box on non-retina. 2025-10-11 16:29:21 +03:00
23rd a9b5e22b37 Slightly improved behavior of visibility for chars limit in notes. 2025-10-11 14:00:44 +03:00
23rd 7b8f1704dc Applied easeOutQuint on X axis for simple sending animation for text. 2025-10-11 12:21:42 +03:00
23rd de88ddf42b Fixed color of bubbles while simple sending animation in complex themes. 2025-10-11 12:21:42 +03:00
John Preston b1e707c346 Version 6.2.2.
- Fix layer.
2025-10-10 23:12:58 +04:00
John Preston 36b7b3a7cd Version 6.2.1.
- Fix sending gifts.
- Fix possible crash on Linux.
2025-10-10 23:12:22 +04:00
John Preston d44349d612 Fix possible crash on Linux. 2025-10-10 21:58:35 +04:00
23rd 53919be913 Slightly improved mouse processing for gift buttons. 2025-10-10 21:58:29 +04:00
23rd 8dd7d04fff Removed duplicated callback on press on gift in gifts list section. 2025-10-10 21:58:29 +04:00
23rd 384f6d9a31 Added logging of api updates when deleted message is unknown. 2025-10-10 21:58:29 +04:00
John Preston d51195a537 Version 6.2.
- Comments and reactions in group calls.
- Notes for contacts.
- Suggested birthdays.
- Threads for AI bots.
- Reorder gifts collections and stories albums.
- Reorder gifts inside collections.
- Apply tags instantly when forwarding to Saved Messages.
- Choose which screen to show notifications on.
- Nice text message sending animation.
2025-10-10 20:40:33 +04:00
23rd 10bedad9bf Fixed title phrase in credits settings.
Fixed #29831.
2025-10-10 16:42:54 +03:00
23rd 4027d3c07f Replaced easeOutCirc with easeOutQuint for message revealing animation. 2025-10-10 16:21:58 +03:00
AlexeyZavar c11b4131bc chore: fixes 2025-10-10 15:09:31 +03:00
23rd ec78d3b83b Added processing of recent self forwards to share box. 2025-10-10 11:29:09 +03:00
23rd acf61c24bd Moved out api processing of recent self forwards to single place. 2025-10-10 11:29:09 +03:00
23rd 338183e647 Added toast after successfully tagging of recent forwards to self. 2025-10-10 11:29:09 +03:00
23rd 59e0de85e3 Added label for test dc to intro widget. 2025-10-10 11:29:09 +03:00
23rd 2e6941c23f Improved ability to edit caption of latest uploading media with Up. 2025-10-10 11:29:03 +03:00
23rd e1c33aa87b Extracted default paint callback for VerticalDrumPicker to single place. 2025-10-10 11:28:42 +03:00
23rd 70d8cede9b Added month and year picker to calendar box by clicking on title. 2025-10-10 11:28:42 +03:00
23rd 7587bbd4bc Disabled mouse tracking after chosen emoji in tagger instantly. 2025-10-10 11:28:20 +03:00
23rd 668f0498ed Removed sending animation for texts that don't fit into input field. 2025-10-10 11:28:17 +03:00
23rd 32ff331744 Removed simple sending animation for emoji-only messages. 2025-10-10 11:28:13 +03:00
23rd bc90463893 Removed unused variable in macOS file utilities to fix compiler warning. 2025-10-10 11:26:45 +03:00
23rd 7fb486d8d2 Removed unused variable from touchbar item on macOS. 2025-10-10 11:26:42 +03:00
23rd 538df0e67c Added simple sending animation for text messages to chat section. 2025-10-10 11:24:15 +03:00
23rd 60bb93170e Fixed opacity of pattern bubble with chat theme while sending animation. 2025-10-10 11:24:15 +03:00
23rd 766370221b Fixed incorrect drawing of sending animation bubble with custom themes. 2025-10-10 11:24:15 +03:00
23rd 8007e6d354 Decomposed drawing of text and bubble for sending animation. 2025-10-10 11:24:15 +03:00
23rd 443053b927 Added simple sending animation for text messages to history widget. 2025-10-10 11:24:15 +03:00
23rd b6000bc1a8 Added ability to pass optional local message id to sendMessage method. 2025-10-10 11:24:15 +03:00
23rd 8bdf8d42d9 Adapted retrieving displays name for Windows from Qt6.6.0.
https://github.com/qt/qtbase/commit/6136b92f540c15835e0c7eb7e01ab7b58fbea685
2025-10-10 11:24:07 +03:00
Ilya Fedin c084396f8f Show display manufacturer and model on Linux 2025-10-10 11:24:07 +03:00
Ilya Fedin b29877554c Make experimental option for non-native notifications cross-platform 2025-10-10 11:24:07 +03:00
23rd a2d17f6f3f Added ability to choose display for notifications to settings. 2025-10-10 11:24:07 +03:00
23rd 54018aec90 Added experimental option for non-native notifications on macOS. 2025-10-10 11:24:07 +03:00
23rd 2699f9bcf6 Added icon to menu item for adding gift to collection. 2025-10-10 09:27:02 +04:00
23rd 094890622a Added text about to selector of tag for recent forwards to self. 2025-10-10 09:27:02 +04:00
23rd bee4ec5ddf Added ability to filter new tagger for self forwards with opened chat. 2025-10-10 09:27:02 +04:00
23rd 29f533b170 Added info about origin peer to data about recent forwards. 2025-10-10 09:27:01 +04:00
23rd 296c2a7b5b Added ability to tag recent forwarded messages to self in chat section. 2025-10-10 09:27:01 +04:00
23rd c4decce7f0 Added ability to tag with emoji recent forwarded messages to self. 2025-10-10 09:27:01 +04:00
23rd a396f507f8 Slightly improved share message phrase factory to be more flexible. 2025-10-10 09:27:01 +04:00
23rd eb96fd1b97 Added ability to paint bubble on top in reactions selector. 2025-10-10 09:27:01 +04:00
23rd 8cc7d80121 Added ability to notify about successful forwarded messages to self. 2025-10-10 09:27:01 +04:00
23rd d59139202d Added ability to add gift to collection with context menu. 2025-10-10 09:27:01 +04:00
23rd a3cd4a55de Added ability to remove gift from collection with context menu. 2025-10-10 09:27:01 +04:00
23rd 0cb7388ee0 Added menu item icon for reorder. 2025-10-10 09:27:01 +04:00
23rd 2700e9b326 Added contact notes to peer short info box. 2025-10-10 09:27:01 +04:00
23rd d36d5b2980 Added new Changes flag for user notes. 2025-10-10 09:27:01 +04:00
John Preston 028437549d Fix build on macOS. 2025-10-10 09:27:01 +04:00
John Preston 1f17551bf4 Improve new thread icon for threaded bots. 2025-10-10 09:27:01 +04:00
23rd cd301c9df2 Updated pinned intervals for sub tabs in gifts and stories on change. 2025-10-10 09:27:01 +04:00
John Preston ce43aab4cd Handle sender links and spoilers in messages. 2025-10-10 09:27:01 +04:00
John Preston 86d1ab00e0 Support disabling messages in conferences. 2025-10-10 09:27:01 +04:00
John Preston 93b2a52f34 Support enabling/disabling messages. 2025-10-10 09:27:01 +04:00
John Preston d3da830ef8 Support 3/4/5 buttons in group call layout. 2025-10-10 09:27:01 +04:00
John Preston ec4deb87c6 Support hosted unique gifts. 2025-10-10 09:27:01 +04:00
John Preston d832a0a186 Show better preview of gift-based reply-color. 2025-10-10 09:27:01 +04:00
John Preston 65800e17a5 Fix export gift on blockchain flow. 2025-10-10 09:27:01 +04:00
23rd 9c5dd452dd Added ability to reorder stories albums. 2025-10-10 09:27:01 +04:00
23rd 78940413a0 Removed instant stop of shifting animations in gifts while reordering. 2025-10-10 09:27:01 +04:00
23rd cc2f459f26 Added scroll support while dragging gift in gifts section. 2025-10-10 09:27:01 +04:00
23rd d1c98eb22a Improved mouse processing for dragged view in gifts section. 2025-10-10 09:27:01 +04:00
23rd 1fe9a0ee5a Improved previous state of dragged view in gifts section. 2025-10-10 09:27:01 +04:00
23rd 80a87f963a Preserved dragged gift during scroll gifts list to prevent recreation. 2025-10-10 09:27:01 +04:00
23rd 2c0051b083 Updated show of first star gift in collection after reorder in subtabs. 2025-10-10 09:27:01 +04:00
23rd 4a938170e1 Added initial ability to reorder star gifts within collection. 2025-10-10 09:27:01 +04:00
23rd f3a27c4fcb Removed other menu items while reordering sub tabs for gifts collection. 2025-10-10 09:27:01 +04:00
23rd f43b11fd6a Changed reorder of sub tabs for gifts collection only when finished. 2025-10-10 09:27:01 +04:00
23rd 93d382c416 Slightly simplified shake animation in sub tabs for gifts collection. 2025-10-10 09:27:01 +04:00
23rd 48e4060d62 Added scroll support to sub tabs for star gifts collection. 2025-10-10 09:27:01 +04:00
23rd bbc7ef100c Added api support for reordering of star gifts collections. 2025-10-10 09:27:00 +04:00
23rd c22468c943 Added initial ability to reorder sub tabs for gifts collection. 2025-10-10 09:27:00 +04:00
23rd 7d538ea080 Added ability to set pinned intervals to sub tabs for gifts collection. 2025-10-10 09:27:00 +04:00
23rd aad1ff95be Added simple animation to sub tabs for gifts collection while reorder. 2025-10-10 09:27:00 +04:00
23rd 72f0fb6892 Added menu item to sub tabs for star gifts collections for reordering. 2025-10-10 09:27:00 +04:00
John Preston a0baad4942 Fix build with Xcode. 2025-10-10 09:27:00 +04:00
John Preston 5e40d60e34 Update API scheme on layer 216. 2025-10-10 09:27:00 +04:00
John Preston 314f787042 Improve selection design for gifts. 2025-10-10 09:27:00 +04:00
John Preston 7f340da0ec Fix upgrade gift button text. 2025-10-10 09:27:00 +04:00
John Preston acafa2bcad Allow buy-and-set color from collectible. 2025-10-10 09:27:00 +04:00
John Preston 404d8da1a3 Mostly finish collectible colors implementation. 2025-10-10 09:27:00 +04:00
John Preston 26be7840b4 Display collectible-based user reply bars. 2025-10-10 09:27:00 +04:00
23rd 520b84f967 Replaced icon for birthday suggestion in edit contact box. 2025-10-10 09:27:00 +04:00
23rd e7f6a8a476 Added ability to edit contact note with context menu. 2025-10-10 09:27:00 +04:00
23rd 0f3ef4b35c Added ability to delete contact note with context menu. 2025-10-10 09:27:00 +04:00
23rd 60d88693ec Removed irrelevant menu item for birthday suggestion service message. 2025-10-10 09:27:00 +04:00
23rd ff6e2b6d31 Fixed pinned count for subsection tabs when chat itself is pinned. 2025-10-10 09:27:00 +04:00
23rd bc52ad7bf2 Added nice lottie icons to suggest and set photo in edit contact box. 2025-10-10 09:27:00 +04:00
23rd daa24de171 Added toast when limit for note length is reached. 2025-10-10 09:27:00 +04:00
23rd 68f0e25227 Wrapped buttons in edit contact box. 2025-10-10 09:27:00 +04:00
23rd 320f2bea7b Added QDebug support for MTP::Error. 2025-10-10 09:27:00 +04:00
23rd 666692e341 Added ability to toggle editable username for owned bots. 2025-10-10 09:27:00 +04:00
John Preston 304cc33b76 Update API scheme on layer 216. 2025-10-10 09:27:00 +04:00
John Preston e0f4aca336 Display reply/link area style from collectibles. 2025-10-10 09:27:00 +04:00
John Preston ccdff5baef Support birthday suggestion view/process. 2025-10-10 09:27:00 +04:00
John Preston 16fe056c99 Read messages limit/ttl from appConfig. 2025-10-10 09:27:00 +04:00
John Preston fb5c155f7e Fix message text clipping. 2025-10-10 09:26:59 +04:00
John Preston eccbb0df7a Add reaction selector widget. 2025-10-10 09:26:59 +04:00
John Preston 0bcfcb4ea4 Show reaction animations in messages. 2025-10-10 09:26:59 +04:00
John Preston b6b4d5c387 Remove test-case failed sending. 2025-10-10 09:26:59 +04:00
John Preston bb7bfe95e5 Fix build on Windows. 2025-10-10 09:26:59 +04:00
23rd ac1e5a08d8 Fix building with Qt 6. 2025-10-10 09:26:59 +04:00
23rd 4a05f0fd05 Added ability to suggest birthday from edit contact box. 2025-10-10 09:26:59 +04:00
23rd f1dff4d0b7 Added ability to delete contact from edit contact box. 2025-10-10 09:26:59 +04:00
23rd 96343603cd Added user notes to user profile. 2025-10-10 09:26:59 +04:00
23rd 9dccab915d Added api ability to save contact notes. 2025-10-10 09:26:59 +04:00
23rd 0decf928f0 Added ability to manage contact photo in edit contact box. 2025-10-10 09:26:59 +04:00
23rd 44faef3027 Added ability to provide special markdown set to input field for notes. 2025-10-10 09:26:59 +04:00
23rd 52a590334c Added input field for notes to edit contact box. 2025-10-10 09:26:59 +04:00
23rd 8ea9709305 Added api support to handle notes into users. 2025-10-10 09:26:59 +04:00
23rd 751c7e05f9 Added support of limit for notes about contacts. 2025-10-10 09:26:59 +04:00
23rd ebe0aa27e4 Added ability to pass optional margins to CharactersLimitLabel. 2025-10-10 09:26:59 +04:00
23rd 4ef7f0dd24 Added ability to display non-negative numbers in CharactersLimitLabel. 2025-10-10 09:26:59 +04:00
John Preston 4779c036f5 Update API scheme on layer 216. 2025-10-10 09:26:59 +04:00
John Preston 1480a4e270 Fix spoilers display. 2025-10-10 09:26:59 +04:00
John Preston 6a167a4b0f Allow custom emoji only from premium users. 2025-10-10 09:26:59 +04:00
John Preston 9b43f57dfa Support e2e encrypted conference messages. 2025-10-10 09:26:59 +04:00
John Preston fc74840b55 Apply tags filtering and length limit. 2025-10-10 09:26:59 +04:00
John Preston f408b1bb11 Scroll to bottom on message send. 2025-10-10 09:26:59 +04:00
John Preston 7a3e16b92f Escape hides message field, nice fade-shadows. 2025-10-10 09:26:59 +04:00
John Preston 939045d606 Update API scheme on layer 216. 2025-10-10 09:26:59 +04:00
John Preston b3ee80e495 Fade call messages on top and bottom. 2025-10-10 09:26:59 +04:00
John Preston 1c17a76b80 Animate message field show/hide. 2025-10-10 09:26:59 +04:00
John Preston 08a55721bf Replace ScrollArea with ElasticScroll in messages. 2025-10-10 09:26:59 +04:00
John Preston 42991bfa2c Hide scrollbar in messages. 2025-10-10 09:26:59 +04:00
John Preston 46897689d3 Support scroll of messages without mouse input. 2025-10-10 09:26:59 +04:00
John Preston 9b3acf7162 Make messages nicer, sending animation. 2025-10-10 09:26:59 +04:00
John Preston 4436e3ba69 Implement initial messages display. 2025-10-10 09:26:59 +04:00
John Preston 78b3f21e7a Update API scheme on layer 216. 2025-10-10 09:26:59 +04:00
John Preston e2ae0a7a4f Send / receive messages in group calls. 2025-10-10 09:26:58 +04:00
John Preston 5ed8f0baa5 Show sending message field in group chats. 2025-10-10 09:26:58 +04:00
John Preston f1d4e48c59 Show message button in group calls. 2025-10-10 09:26:58 +04:00
23rd 48ac431134 Fixed refreshing of pinned on unpin within subsection slider. 2025-10-10 09:26:58 +04:00
23rd d6a27c04b9 Fixed ability start recording of voice with shortcut in channels.
Fixed #29805.
2025-10-10 09:26:58 +04:00
23rd 388e9cec09 Respected admin rights in subsections slider for reordering. 2025-10-10 09:26:58 +04:00
23rd b01f70176b Added scroll support to subsections slider for reordering. 2025-10-10 09:26:58 +04:00
23rd e7b4a5db61 Fixed desired clicked callback for reordered tabs in subsection slider. 2025-10-10 09:26:58 +04:00
23rd d5a1d28779 Added recalculation of pinned state while reordering in subsection tabs. 2025-10-10 09:26:58 +04:00
23rd e0da4159ae Added api ability to reorder topics in forums with subsection tabs. 2025-10-10 09:26:58 +04:00
23rd 0eef766ea1 Added ui ability to reorder tabs in subsection slider. 2025-10-10 09:26:58 +04:00
23rd aebd53363c Added initial implementation of reorder class for subsection slider. 2025-10-10 09:26:58 +04:00
23rd f18bb1c780 Prepared subsection slider for reorder support. 2025-10-10 09:26:58 +04:00
23rd eecb7c0622 Added nice ripple mask for pinned group of buttons in subsection tabs. 2025-10-10 09:26:58 +04:00
23rd 84c0b46266 Added initial icon to pinned group of buttons in subsection tabs. 2025-10-10 09:26:58 +04:00
23rd fb030b3520 Added filling of fixed and pinned counts to subsection tabs. 2025-10-10 09:26:58 +04:00
23rd 42aac81fd8 Added initial style of pinned group of buttons in subsection tabs. 2025-10-10 09:26:58 +04:00
John Preston 09175d2b6b Allow removing unique gift details. 2025-10-10 09:26:58 +04:00
John Preston 46f64f75c7 Simplify gift tabs when sending. 2025-10-10 09:26:58 +04:00
John Preston 9b5425de14 Support 5-second slow mode. 2025-10-10 09:26:58 +04:00
John Preston 7b1135ecd4 Update API scheme on layer 216. 2025-10-10 09:26:58 +04:00
John Preston 2ca63ae324 Show upgrade price decrease information. 2025-10-10 09:26:58 +04:00
John Preston 5b02323487 Update API scheme on layer 216. 2025-10-10 09:26:58 +04:00
John Preston cf99eef9c9 Mark general topic as deleted in bot forums. 2025-10-10 09:26:58 +04:00
John Preston c54e05d220 Fix threads list opening for bots. 2025-10-10 09:26:58 +04:00
John Preston a651853534 Add thread phrases instead of topic. 2025-10-10 09:26:58 +04:00
John Preston a1a81b812a Improve bot new thread info panel. 2025-10-10 09:26:58 +04:00
John Preston e74d0ef4e2 Start new bot thread on send in All. 2025-10-10 09:26:58 +04:00
John Preston ca4caec819 Improve bot with forum opening. 2025-10-10 09:26:57 +04:00
John Preston 900c12d1d0 Fix draft-typings in topics. 2025-10-10 09:26:57 +04:00
John Preston 4d61701790 Clear out streamed drafts by messages/timeout. 2025-10-10 09:26:57 +04:00
John Preston 4fd0e734ea Initial support for streamed bot responses. 2025-10-10 09:26:57 +04:00
John Preston b4d1ba07a6 Initial forum support in bots data classes. 2025-10-10 09:26:57 +04:00
John Preston 6974c511ea Update API scheme to layer 216. 2025-10-10 09:26:57 +04:00
John Preston d30dd7450f Update API scheme to layer 215. 2025-10-10 09:26:57 +04:00
23rd f877e653e9 Fixed useless animation from mini premium stars if not painting. 2025-10-09 18:26:54 +03:00
23rd 699ffc8b50 Returned unreadBadge/Muted but keep unreadWithMentionsBadge/Muted. 2025-10-09 19:06:03 +04:00
John Preston 135b81bbb4 Fallback to any h264 encoder in video messages. 2025-10-09 19:02:06 +04:00
John Preston d9f5c2d16e Fix possible crash when video message encoding fails. 2025-10-09 19:02:06 +04:00
John Preston 2e0f04ce93 Fix alignment of "Top Senders" label. 2025-10-09 19:02:06 +04:00
John Preston 8ebb084f0f Remove incorrect "sender hidden" from unique gifts. 2025-10-09 19:02:06 +04:00
John Preston f2bc07458d Fix links clickability in forums. 2025-10-09 19:02:06 +04:00
John Preston b4daca860f Fix channel direct messages links. 2025-10-09 19:02:06 +04:00
John Preston ac6919680a Fix crash in messages containing unsupported story. 2025-10-09 19:02:06 +04:00
John Preston c6749f2d5c Stop CollectibleEmoji animation if not painting. 2025-10-09 19:02:06 +04:00
John Preston 47fd936306 Fix recording of video messages.
Fixes #29860.
2025-10-09 19:02:05 +04:00
AlexeyZavar e2d772dd3a fix: paddings 2025-10-08 23:16:36 +03:00
AlexeyZavar afd7679028 fix: filters with user chats 2025-10-08 23:16:34 +03:00
Bush2021 da668a7905 feat: use alternative Google Translate API 2025-10-08 22:00:17 +03:00
AlexeyZavar 78dd5511c7 chore: show exact last seen in box with show message seconds 2025-10-08 21:33:53 +03:00
AlexeyZavar f4171402b7 feat: use gradient 2025-10-08 21:21:45 +03:00
AlexeyZavar 68d227bf72 fix: show chat history instead of profile 2025-10-08 20:01:46 +03:00
bleizix e842780a31 fix: crashes 2025-10-08 19:54:44 +03:00
AlexeyZavar 2ee8fe532d fix: show translate entire chat button 2025-10-07 05:28:27 +03:00
Alexey decef2ca9e chore: update chat link 2025-10-07 05:08:26 +03:00
AlexeyZavar f1bf1275b8 chore: fix formatting 2025-10-07 05:06:40 +03:00
AlexeyZavar b3dc9d1de1 chore: update bug report template 2025-10-07 04:59:20 +03:00
AlexeyZavar 43e2b4d85f fix: set default values 2025-10-07 00:50:09 +03:00
bleizix d2c6c5b14a fix: database migration 2025-10-07 00:46:50 +03:00
bleizix 8e895bb78d feat: list of shadow banned users 2025-10-07 00:26:31 +03:00
bleizix 89ae7cfca2 fix: AyuForward with caption of voice messages 2025-10-06 23:57:02 +03:00
AlexeyZavar d0ca602f3f feat: allow disabling adaptive cover color 2025-10-06 23:56:31 +03:00
Ilya Fedin 147439ad34 Add missed ConnectionState member variable to operator== 2025-10-06 21:05:19 +04:00
AlexeyZavar 8ad26c0426 feat: slide animation for now playing 2025-10-06 18:50:50 +03:00
John Preston 1a3eb0f209 Version 6.1.4.
- Allow add to folder from recent / top chats.
- Fix clear history of group chats.
- Fix several crashes.
2025-10-06 13:53:57 +04:00
John Preston acd2c514ce Fix build with GCC. 2025-10-06 13:53:57 +04:00
John Preston fccff0c03a Fix build with Xcode. 2025-10-06 13:19:26 +04:00
Ilya Fedin 7cf8483f9a Get rid of AppData mentions
They renamed the extension from appdata to metainfo long time ago and the right name is "AppStream metadata"
2025-10-06 11:54:27 +04:00
Ilya Fedin 63bad22ac4 Remove some ffmpeg version conditionals
The previous commit uses a FFmpeg 6.1+ API making all those conditionals broken
2025-10-06 11:37:40 +04:00
Lukas Fleischer b009f06375 Fix compatibility with ffmpeg 8
Fixes #29713.
2025-10-06 11:37:09 +04:00
John Preston 8aa5ebf621 Fix build on Windows. 2025-10-06 11:23:54 +04:00
John Preston 53ac770772 Do links disabling in groups as well. 2025-10-06 11:23:54 +04:00
John Preston fbfe47528b Fix saved music page-after-page loading. 2025-10-06 11:23:54 +04:00
23rd 71443f7def Slightly improved style of text in credits rating icons. 2025-10-06 11:23:54 +04:00
23rd a1b1165039 Cleared sponsored messages on premium just in case. 2025-10-06 11:23:54 +04:00
23rd c060243201 Respected system-wide preference for disabling swipe-to-back on macOS. 2025-10-06 11:23:54 +04:00
23rd 93f84e2b65 Reversed gifts sort in section of shared media from info profile. 2025-10-06 11:23:54 +04:00
23rd 9cd971a53f Fixed userpic scale in short info box while scrolling. 2025-10-06 11:23:54 +04:00
23rd b22b819683 Added ability to short info for peer from menu with pressed Ctrl. 2025-10-06 11:23:54 +04:00
John Preston 8779ac3ec3 Hide links in chats with Report Spam. 2025-10-06 11:23:54 +04:00
John Preston 16ec935feb Paint correct direct userpic in recent/top peers. 2025-10-06 11:23:54 +04:00
John Preston e59d229097 Remove direct chats that were cleared. 2025-10-06 11:23:54 +04:00
John Preston 9028d9a339 Check support mode on full self load. 2025-10-06 11:23:54 +04:00
John Preston 6999a1b5e4 Allow add to folder from recent / top peers. 2025-10-06 11:23:54 +04:00
John Preston 7ef6d33ea9 Use correct phrase for bot noforwards. 2025-10-06 11:23:54 +04:00
John Preston 3824f19ce5 Fix chat preview for channel direct messages.
Fixes #29802.
2025-10-06 11:23:54 +04:00
23rd 930268ed0d Improved style of text badge in dialogs for retina displays. 2025-10-06 11:23:54 +04:00
23rd cb0a3fdb6e Disabled field for input while recording voice.
Fixed #29818.
2025-10-06 11:23:53 +04:00
23rd 4c0a2b1d3d Added initial support of swipe-to-back to settings premium and credits. 2025-10-06 11:23:53 +04:00
23rd 6fd34dee5a Fixed giveaway bubble height calculation for narrow widths. 2025-10-06 11:23:53 +04:00
23rd 1c56c4dfe5 Moved out common big unread counter formatting logic to single place. 2025-10-06 11:23:53 +04:00
23rd 53321160c4 Changed emoji for to-do list in notification text. 2025-10-06 11:23:53 +04:00
23rd 5b29d3bb72 Returned missed item back to to-do list for editing. 2025-10-06 11:23:53 +04:00
23rd 4796a3116a Slightly improved style of bottom label in to-do list. 2025-10-06 11:23:53 +04:00
23rd 6183569dc2 Slightly improved phrases in subtitle of to-do list. 2025-10-06 11:23:53 +04:00
John Preston 3296a2addb Increase .pdb page size for 32 bit build. 2025-10-06 11:23:53 +04:00
John Preston 235cb0c574 Revert "Add a hack to delete .pdb before link."
This reverts commit 0a8316138e7bb7b22ad82e0c232321dc089666d6.
2025-10-06 11:23:53 +04:00
John Preston 570fbd9a00 Allow empty query in switch inline in webview bots. 2025-10-06 11:23:53 +04:00
John Preston e205b521fd Fix parsing checklist pasting of multiline. 2025-10-06 11:23:53 +04:00
23rd ce15754575 Hid emoji status from profile cover in edit contact box as well. 2025-10-06 11:23:53 +04:00
23rd 18085bae70 Hid unused properties from profile cover in edit contact box. 2025-10-06 11:23:53 +04:00
John Preston 61536b42c9 Improve layout of transfer gift box. 2025-10-06 11:23:53 +04:00
John Preston 532f166b22 Remove NEW badge for Posts search. 2025-10-06 11:23:53 +04:00
John Preston c1d3a78316 Fix possible crash in moderate messages box. 2025-10-06 11:23:53 +04:00
John Preston e524d9694d Fix possible crash in SavedSublist. 2025-10-06 11:23:53 +04:00
John Preston 1efa889913 Fix possible crash in fast action in chats list. 2025-10-06 11:23:53 +04:00
John Preston c73788da24 Try not forcing OpenGL for main window on macOS. 2025-10-06 11:23:53 +04:00
John Preston 5ec277b2ed Show "N left" badge on limited gifts. 2025-10-06 11:23:52 +04:00
John Preston e327e1bc9c Fix crash in subsection tabs mode changing. 2025-10-06 11:23:52 +04:00
AlexeyZavar e38fbf814b feat: redesign now playing widget 2025-10-05 20:56:39 +03:00
AlexeyZavar 67c946f24a feat: support tg://chat?id= links 2025-10-04 22:43:01 +03:00
AlexeyZavar 2647cefdcc fix: update tgdb bot ID & username 2025-10-04 21:14:23 +03:00
AlexeyZavar c1e5d2a781 fix: make it build 2025-10-04 21:04:24 +03:00
AlexeyZavar 9cf11ff45d Merge tag 'v6.1.3' into dev 2025-10-04 17:26:13 +03:00
AlexeyZavar d2272ec75e chore: fix typo 2025-10-04 17:19:29 +03:00
23rd 37c5c1dc98 Delayed clearing up of expired unreviewed sessions on startup. 2025-10-03 14:01:34 +04:00
Ilya Fedin 156e1a00d3 macos-13 -> macos-15-intel 2025-10-03 11:53:22 +04:00
Ilya Fedin 3aa9a2f2c0 Allow webview without embedding on Linux 2025-10-03 11:37:51 +04:00
Ilya Fedin e1f5b57fd3 Revert "Add error message for webview without OpenGL"
This reverts commit 20fb73b626.
2025-10-03 11:37:51 +04:00
Ilya Fedin cf757b6c7b Revert "Add error message for webview unsupported display server"
This reverts commit b0933b96ef.
2025-10-03 11:37:51 +04:00
Ilya Fedin bd2da8d632 Update submodules 2025-10-01 15:59:53 +04:00
GitHub Action 01b7e387eb Update User-Agent for DNS to Chrome 140.0.0.0. 2025-10-01 10:24:02 +04:00
John Preston 60bf6b1f70 Improve gifts display. 2025-10-01 10:21:20 +04:00
John Preston 7839c6294c Add a hack to delete .pdb before link. 2025-10-01 10:21:19 +04:00
AlexeyZavar f8b0d788a2 fix: remove Telegram Premium popup for translator 2025-10-01 04:18:00 +03:00
AlexeyZavar 3e0ee584aa fix: badges & warning 2025-10-01 04:01:50 +03:00
bleizix 698e4a0af4 feat: message filters initial 2025-09-29 20:33:17 +03:00
23rd 20cadfad29 Added experimental option to hide reply button from native notification. 2025-09-29 15:12:51 +03:00
23rd 2b93362a57 Added fetching "Mark as read" translation based on macOS language. 2025-09-29 15:12:51 +03:00
23rd 5476f297e1 Added ability to get value of phrase for specific language. 2025-09-29 15:12:51 +03:00
23rd b79fbe2123 Added "Mark as read" action to macOS notifications. 2025-09-29 15:12:51 +03:00
23rd d9a76fdd9a Removed version of zlib from readme. 2025-09-29 15:12:51 +03:00
23rd 721a69f2b1 Slightly improved code style of MediaPreviewWidget. 2025-09-29 15:12:51 +03:00
23rd a49b3e67d0 Added ability to provide data to emoji list for preview via descriptor. 2025-09-29 15:12:51 +03:00
23rd 297600ca6d Added ability to set blind corners for MediaPreviewWidget. 2025-09-29 15:12:51 +03:00
23rd 15019051c0 Added QDebug operator support for Data::UnreadState. 2025-09-29 15:12:51 +03:00
23rd 2b7e8bf449 Fixed display of name of caller to fit within call panel. 2025-09-29 15:12:51 +03:00
23rd 928798dc16 Added initial ability to edit caption of latest uploading media with Up. 2025-09-29 15:12:51 +03:00
23rd 1a01ec17d6 Respected limitations of caption length for media in caption boxes. 2025-09-29 15:12:51 +03:00
23rd 69da4d749b Replaced multi-purpose callShadow with specific one for media view PiP. 2025-09-29 15:12:50 +03:00
23rd b1fc95b1d9 Added decimal separators to credits in charge slider for direct message. 2025-09-29 15:12:50 +03:00
23rd 0b7f104c95 Added ability to preview emoji within reactions emoji pan. 2025-09-29 15:12:34 +03:00
23rd 912974cb80 Added ability to set padding and margins for MediaPreviewWidget. 2025-09-29 15:12:34 +03:00
23rd 9bbb8ef31c Replaced unreadBadge/Muted with unreadWithMentionsBadge/Muted. 2025-09-29 15:12:34 +03:00
23rd e01f53a58c Fixed ability to clear history for groups and megagroups. 2025-09-29 15:12:34 +03:00
Ilya Fedin 82c69a03ef Explicitly disable documentation build for libheif 2025-09-24 10:53:31 +04:00
Ilya Fedin f8aa79aaf5 Update msys2 2025-09-24 10:53:31 +04:00
Ilya Fedin 700ae79b93 Revert "Switch macOS packaged action to latest ffmpeg"
This reverts commit 2cb20fe342.
2025-09-24 10:53:31 +04:00
Ilya Fedin 8dd8ab6366 Set deployment target in macOS packaged action 2025-09-24 10:53:31 +04:00
Ilya Fedin 28d19a99e1 Fix build with Qt 6.10 2025-09-24 08:30:48 +04:00
dependabot[bot] 6627de6460 Bump actions/stale from 9 to 10
Bumps [actions/stale](https://github.com/actions/stale) from 9 to 10.
- [Release notes](https://github.com/actions/stale/releases)
- [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/stale/compare/v9...v10)

---
updated-dependencies:
- dependency-name: actions/stale
  dependency-version: '10'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-15 17:00:15 +04:00
Ilya Fedin 795d452493 Update submodules 2025-09-15 16:42:36 +04:00
Ilya Fedin 2d7f52972d Add ASAN flag to Dockerfile generator 2025-09-15 16:42:36 +04:00
AlexeyZavar 5b7926c590 chore: add flatpak repo link 2025-09-12 03:45:33 +03:00
bleizix 1f6d0b143c feat: replace unread bar to pill 2025-09-12 03:45:33 +03:00
bleizix 8558af8189 fix: AyuForward with TTL 2025-09-12 03:45:33 +03:00
AlexeyZavar 28ceb0bed2 fix: show notice for unforwardable messages 2025-09-12 03:45:33 +03:00
AlexeyZavar 41523b03d1 fix: hide search ads 2025-09-12 03:45:33 +03:00
AlexeyZavar 4a46207fa5 chore: rename messageshot folder & fix some warnings 2025-09-12 03:45:33 +03:00
AlexeyZavar dfb9ac91e9 feat: new settings ui & features
translator, remove message tail, hide fast share, drawer customization, quick admin shortcuts, disable crash reports, donations
2025-09-12 03:45:33 +03:00
John Preston 6229c0020c Version 6.1.3.
- Fix dead keys / alt combinations / input methods issues.
2025-09-07 08:46:44 +04:00
23rd 8db1bf9052 Added ability to share link for monoforum of owned channels. 2025-09-07 08:46:44 +04:00
23rd 2740c5db23 Extracted URL protocol stripping to Ui::Text::StripUrlProtocol. 2025-09-07 08:46:44 +04:00
23rd 512e6de39b Fixed position of tag preview in chats filter settings.
Fixed #29750.
2025-09-07 08:46:44 +04:00
23rd e3c328c7e3 Reverted "Removed ability to clear history from replies chat.".
This reverts commit 86daf2a9dc.
2025-09-07 08:46:44 +04:00
John Preston 9eb5ea599e Fix build with MSVC. 2025-09-06 19:09:21 +03:00
Ilya Fedin 929032d598 Add GStreamer H264, H265, AAC and VA-API plugins to snap 2025-09-06 20:05:21 +04:00
Ilya Fedin 09fb42291d Revert "Self-build openh264 in snap for lesser package size"
This reverts commit a8430d8ecf.
2025-09-06 20:05:21 +04:00
Ilya Fedin e6665a8305 Fix playing audio files via webkitgtk in snap 2025-09-06 20:04:48 +04:00
John Preston a785d83791 Don't cancel special KeyPress events (key = 0).
I hope this fixes #29747, #29745, #29744, #29743, #29741.
2025-09-06 08:39:51 +04:00
23rd 08a64f0dc0 Fixed color of lottie icon from transcribe voices while loading. 2025-09-04 13:05:37 +03:00
John Preston 0babad837d Remove legacy "quicklaunchicon" InnoSetup task. 2025-09-04 13:03:25 +04:00
John Preston fb1f70f5de Version 6.1.2.
- Close selected chat in Ctrl+Tab chat switch by 'Q'.
- Auto-split pasted multiple lines to checklist task creation.
- Fix color picker in userpic builder.
2025-09-04 12:03:07 +04:00
John Preston d4dd1b7ba0 Fix build with GCC. 2025-09-04 12:03:07 +04:00
John Preston 82c921d739 Fix build with Xcode. 2025-09-04 12:00:49 +04:00
John Preston 180a570f99 Handle robustly Ctrl+Q/Ctrl+Arrows in Ctrl+Tab chat switch. 2025-09-04 12:00:35 +04:00
John Preston 9960a7a7e4 Remove unneeded openssl/engine.h include. 2025-09-04 11:43:59 +04:00
John Preston 2164d08c3c Fixed a crash in gifts section closing.
Fixes #29737.
2025-09-04 11:28:21 +04:00
John Preston 4b2d0d1a67 Allow a bit more theme previews. 2025-09-02 21:36:08 +04:00
John Preston d0341d191b Close selected chat in switch by Q. 2025-09-02 19:22:19 +04:00
John Preston 10237a2d90 Correct gift symbol sizes and rotations. 2025-09-02 17:28:38 +04:00
John Preston 59390ddaa1 Support pasting multi-line as multi-tasks. 2025-09-02 13:54:42 +04:00
John Preston 312c94f386 Fill suggested prices for gifts between stars/TON. 2025-09-02 12:04:47 +04:00
John Preston d697677fab Fix time input colon. 2025-09-02 08:38:10 +04:00
John Preston bf484b5518 Update lib_webview. 2025-09-02 08:33:15 +04:00
John Preston 74b530259d Fix color picker in userpic builder again. 2025-09-02 08:26:04 +04:00
John Preston 4052c3d101 Fix color picker in userpic builder. 2025-09-02 08:17:29 +04:00
John Preston 86262333a4 Version 6.1.1.
- Ctrl+Tab / Ctrl+Shift+Tab collect chats on every launch.
- Fix Ctrl+Tab / Ctrl+Shift+Tab shortcut override.
- Fix possible crashes in saved music.
- Fix webview error label alignment.
2025-09-01 17:53:59 +04:00
John Preston 3419b49381 Hide gift value details tooltips on click. 2025-09-01 17:52:15 +04:00
John Preston ec5725d8de Fix finalizing intersecting quotes. 2025-09-01 17:34:27 +04:00
John Preston 9df98352a8 Show correct error on gift limit reaching. 2025-09-01 17:14:55 +04:00
John Preston c0c5ad21b6 Don't push recent peers to chat switch. 2025-09-01 16:03:30 +04:00
John Preston 4a23da6ce1 Fix build with GCC. 2025-09-01 12:42:29 +04:00
John Preston 6d1e5243d8 Fix possible crash in recent chat switches. 2025-09-01 11:58:05 +04:00
John Preston c52a31384e Fix couple of possible crashes in saved music. 2025-09-01 11:57:19 +04:00
John Preston 36447eb1e3 Try fixing macOS action build. 2025-09-01 11:28:52 +04:00
John Preston 811dfee42c Separately bought upgrade doesn't auto-add details. 2025-09-01 11:23:33 +04:00
John Preston b075bb9f4e Fix checkbox in background settings. 2025-09-01 10:59:54 +04:00
John Preston 00919f3232 Support arrows in chat switch. 2025-09-01 10:27:55 +04:00
John Preston 6dcd52deb5 Support all userpic types in Switch. 2025-09-01 10:27:55 +04:00
John Preston edc70e9acb Improve phrases for currency switching. 2025-09-01 10:27:55 +04:00
John Preston 4ad12b6862 Fix alignment of webview crashed error. 2025-09-01 10:27:55 +04:00
John Preston d63f3b6da1 Fix ctrl+tab/ctrl+shift+tab as overriden shortcuts. 2025-09-01 10:27:55 +04:00
John Preston 84c70a0905 Suggest upgrading next gift. 2025-09-01 10:27:55 +04:00
GitHub Action 8f65a7ac19 Update User-Agent for DNS to Chrome 139.0.0.0. 2025-09-01 10:26:56 +04:00
dependabot[bot] c78262be91 Bump endersonmenezes/free-disk-space from 2.1.0 to 2.1.1
Bumps [endersonmenezes/free-disk-space](https://github.com/endersonmenezes/free-disk-space) from 2.1.0 to 2.1.1.
- [Release notes](https://github.com/endersonmenezes/free-disk-space/releases)
- [Commits](https://github.com/endersonmenezes/free-disk-space/compare/dd13eb48e709830a7ec4e50692e841be6b400d90...713d134e243b926eba4a5cce0cf608bfd1efb89a)

---
updated-dependencies:
- dependency-name: endersonmenezes/free-disk-space
  dependency-version: 2.1.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-01 10:26:29 +04:00
dependabot[bot] cb51238bfc Bump actions/checkout from 4 to 5
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-01 10:26:03 +04:00
John Preston 87f873c8b6 Version 6.1.
- Music on Profiles.
- Gift Themes.
- Gift Value Information.
- Upgrading Gifts for Other Users.
2025-09-01 00:05:29 +04:00
John Preston a37528b377 Fix crash in premium preview. 2025-09-01 00:05:29 +04:00
John Preston 51a58182ee Use saved music as is for now. 2025-09-01 00:05:29 +04:00
John Preston cc4b768f54 Implement nice gift theme message layout. 2025-08-31 23:04:49 +04:00
John Preston b016be6eb5 Fix emoji repaint crashing. 2025-08-31 22:18:17 +04:00
John Preston 881d73d4ab Fix build with MSVC. 2025-08-31 22:18:17 +04:00
John Preston 8859e352f9 Fix crash with widget double delete. 2025-08-31 22:06:04 +04:00
John Preston 5b0fc5b97b Fix build with Xcode. 2025-08-31 20:53:24 +04:00
John Preston 76cc59acab Show gift sticker in the background. 2025-08-31 20:53:12 +04:00
John Preston e792088ceb Insert gift pattern symbols in background. 2025-08-31 20:53:12 +04:00
John Preston 1dc70d5a8d Load gift themes while scrolling. 2025-08-31 20:53:12 +04:00
John Preston e876a0f6bd Set gift as theme from gift view. 2025-08-31 20:53:12 +04:00
John Preston 50450de3e4 Confirm transfer gift theme. 2025-08-31 20:53:12 +04:00
John Preston c8abc84c3c Put gift themes in beginning. 2025-08-31 20:53:12 +04:00
John Preston 1f3996032c Fix theme preview pattern loading. 2025-08-31 20:53:12 +04:00
John Preston b868cfdca9 Fix pattern caching on themed chat open. 2025-08-31 20:53:12 +04:00
John Preston d51944e6a5 Update API scheme on layer 214. 2025-08-31 20:53:12 +04:00
John Preston 4419ba55e8 Start gift theme background parsing. 2025-08-31 20:53:12 +04:00
John Preston 9e8ae54821 Update API scheme to layer 214. Start themes. 2025-08-31 20:53:12 +04:00
John Preston 4ed266780a Fix emoji status texts. 2025-08-31 20:53:12 +04:00
John Preston 46886b4dcc Support channel direct messages links. 2025-08-31 20:53:12 +04:00
John Preston 1e2531f0b1 Support locked gifts. 2025-08-31 20:53:12 +04:00
John Preston 0e43fd4d00 Update API scheme on layer 213. 2025-08-31 20:53:12 +04:00
John Preston 10448bcc3d Support fileref refresh in saved music. 2025-08-31 20:53:12 +04:00
John Preston 4f1c2788b8 Improve phrasing for saved music. 2025-08-31 20:53:11 +04:00
John Preston dbaa7b5e67 Allow forward / delete saved music. 2025-08-31 20:53:11 +04:00
John Preston 6211b7733d Support saved music playlist. 2025-08-31 20:53:11 +04:00
John Preston 0d6ea0845e Make nice music button in profile. 2025-08-31 20:53:11 +04:00
John Preston b8e10fb34b Proof-of-concept saved music API support. 2025-08-31 20:53:11 +04:00
John Preston b9c6e595d7 Update API scheme on layer 213. 2025-08-31 20:53:11 +04:00
John Preston 7d701d3e9c Fix upgrading of gifts with gifted upgrade. 2025-08-31 20:53:11 +04:00
John Preston 92d9c3c92b Finish gift value display. 2025-08-31 20:53:11 +04:00
John Preston 7007977891 Reuse some table values in gift table. 2025-08-31 20:53:11 +04:00
John Preston 9f5d24bbc9 Start gift value information display. 2025-08-31 20:53:11 +04:00
John Preston 2834a83eec Update API scheme on layer 212. 2025-08-31 20:53:11 +04:00
John Preston eb82473395 Update API scheme on layer 212, gift upgrades. 2025-08-31 20:53:11 +04:00
John Preston 4a33d3227e Suggest upgrading next gift. 2025-08-31 20:53:11 +04:00
John Preston 235456e18e Update API scheme to layer 212. 2025-08-31 20:53:11 +04:00
23rd 1f9e532fbc Added link to info to box about sponsored messages. 2025-08-31 00:34:07 +03:00
23rd 8bc2d3184a Added lottie icon to transcribe voices while loading. 2025-08-30 23:39:36 +03:00
23rd 9ef54d1218 Added LottieCustomEmoji. 2025-08-30 23:39:36 +03:00
23rd 7e48cb97b0 Fixed first frame animation of opening schedule section for send button. 2025-08-30 23:19:40 +03:00
23rd a226f0b58c Added toasts after review of unconfirmed authorizations. 2025-08-30 23:19:40 +03:00
23rd 65fd47a082 Fixed handle of dialogs resize for unconfirmed authorizations. 2025-08-30 23:19:40 +03:00
23rd 600b7d1d54 Slightly improved generation of stars in low credits balance list. 2025-08-30 23:19:40 +03:00
23rd b8f4d4877e Added loading animation to list of options for low credits balance. 2025-08-30 23:19:40 +03:00
23rd 6a114e1275 Added ability to provide to loading text element style::TextStyle. 2025-08-30 23:19:40 +03:00
23rd 5d3d8640e3 Added unconfirmed authorizations to top bar suggestions in dialogs. 2025-08-30 23:19:40 +03:00
23rd f09d2d22eb Added api support of new unconfirmed authorizations. 2025-08-30 23:19:40 +03:00
23rd 94ccd8f8b6 Added ability to store unconfirmed authorizations. 2025-08-30 23:19:40 +03:00
23rd c96ce890d6 Added initial struct data for unreviewed authorizations. 2025-08-30 23:19:40 +03:00
23rd de55be397b Improved style of withdrawal button in credits settings. 2025-08-30 23:19:40 +03:00
23rd 1420714cae Fixed display of "Show more" button in channel currency earn list. 2025-08-30 23:19:40 +03:00
23rd b15305bc69 Respected localized number format in statistics. 2025-08-30 23:19:40 +03:00
23rd db25b111e0 Fixed display of currency minor part from earn stats in some cases. 2025-08-30 23:19:40 +03:00
23rd eeea9932ed Removed simple colorizing of query of hash or cashtag in found messages. 2025-08-30 23:19:40 +03:00
23rd c710e9a54d Fixed display of label in self destruction box.
Fixed #29694.
2025-08-30 23:19:40 +03:00
23rd 62613e7da1 Added support of custom brush to loading element for peer list. 2025-08-30 23:19:40 +03:00
23rd 946b597471 Added support of custom bg to loading element for peer list. 2025-08-30 23:19:40 +03:00
23rd 691c55bedd Simplified master branch updater Github Action. 2025-08-30 23:19:40 +03:00
23rd 8387969467 Removed unused trigger for Github CI that updates user-agent for DNS. 2025-08-30 23:19:40 +03:00
23rd 90d21375c8 Removed ability to create todo lists in replies chat. 2025-08-30 23:19:40 +03:00
23rd 86daf2a9dc Removed ability to clear history from replies chat. 2025-08-30 23:19:40 +03:00
23rd 90473957cb Added process of error when collectible info can't be revealed. 2025-08-30 23:19:40 +03:00
23rd 3549c00141 Added ability to forward to Saved Messages on fast action with Ctrl. 2025-08-30 23:19:40 +03:00
23rd 1c1d13545b Added special check of balance on channel earn out just in case. 2025-08-30 23:19:40 +03:00
23rd f1b3db89fb Fixed hover rect of entry item in channel earn history. 2025-08-30 23:19:40 +03:00
23rd 8c77baca6f Fixed wrong focus while recording voice in sections. 2025-08-30 23:19:40 +03:00
Ilya Fedin 36a40d97a7 Update submodules 2025-08-30 17:50:39 +04:00
Ilya Fedin 1eb9b40607 Update Qt to 6.9.2 2025-08-30 17:50:39 +04:00
Ilya Fedin 05c10e3f57 Switch patches to nil plugin in snap 2025-08-30 16:04:57 +04:00
Ilya Fedin 0cf3325655 Fix macOS action 2025-08-26 07:48:17 +04:00
Ilya Fedin 48525de714 Restore icon key in snapcraft.yaml
Looks like it didn't help with themed icon after all and snapcraft chooses a 64x64 icon without it which looks blurry with HiDPI
2025-08-23 19:58:56 -07:00
John Preston 7e15722eab Beta version 6.0.3.
- Ctrl+Tab / Ctrl+Shift+Tab for last opened chats switching.
- New topic dividers for groups with topics and tabs.
- Adjust volume of notification sounds.
- Show stars required for the next rating level.
- IV support on Linux (in case WebView works).
2025-08-22 21:17:48 +04:00
John Preston 719c209c7b Fix build with Xcode. 2025-08-22 21:17:48 +04:00
John Preston d05ad44b84 Fix build with GCC. 2025-08-22 21:15:53 +04:00
Ilya Fedin b352c97479 Switch from custom URI scheme to local HTTP server for webview on Linux 2025-08-22 18:05:11 +04:00
Ilya Fedin 063085a6bb Format Linux webview socket path using std::format 2025-08-22 18:05:11 +04:00
Ilya Fedin b4bca16109 Get rid of wayland-scanner downgrade 2025-08-22 17:48:43 +04:00
John Preston 03770c52fe Support floating topic bars in forums. 2025-08-22 13:13:20 +04:00
John Preston 10fe5cdd5d Keep recent peers userpics in memory. 2025-08-22 13:06:04 +04:00
John Preston 57d459b917 Show nice topic/sublist userpics. 2025-08-22 13:06:03 +04:00
John Preston fe26594f12 Improve Ctrl+Tab switch design. 2025-08-22 13:05:27 +04:00
John Preston 0d8065fc1f First attempt of Ctrl+Tab/Ctrl+Shift+Tab UI. 2025-08-22 13:05:26 +04:00
John Preston a3cdae1e94 Fix refreshing story file reference. 2025-08-22 13:05:26 +04:00
John Preston 29d77b649b Nice selection of gifts for a collection. 2025-08-22 13:05:26 +04:00
John Preston 9e190cee81 Show next-level stars in rating. 2025-08-22 13:05:26 +04:00
John Preston 687bfd0f17 Remove some FixedHeightWidget-s. 2025-08-22 13:01:49 +04:00
23rd 7d7df4f749 Fixed display of about text in low credits balance box in some cases. 2025-08-20 12:40:16 +03:00
23rd 958dede319 Fixed active color of recording voice button. 2025-08-19 20:51:32 +03:00
23rd 76e814944d Added shortcuts to start recording of voice or round message.
Fixed #29633.
2025-08-19 16:52:48 +03:00
23rd fbc1d75e9a Added ability to start and lock voice recording immediately. 2025-08-19 16:43:47 +03:00
23rd b3c7ce05dc Added ability to send recording voice with submit key. 2025-08-19 16:43:47 +03:00
23rd feea881e09 Slightly improved position of tooltip for voice record bar. 2025-08-19 13:21:51 +03:00
23rd b978bc4876 Added ability to bottom scroll in HistoryView::Chat section with submit.
Fixed #29662.
2025-08-19 12:34:46 +03:00
23rd f84181e7a5 Added event for scrolling to bottom to compose controls. 2025-08-19 12:33:38 +03:00
John Preston 313ae0f86c Remove CenterWrap layout. 2025-08-18 17:55:20 +04:00
John Preston a39c018359 Scroll to top on global posts search. 2025-08-18 17:25:31 +04:00
John Preston a09f57d908 Fix natural width for LabelWithNumbers. 2025-08-18 17:25:31 +04:00
John Preston 596828cf78 Fix webview blocking popups. 2025-08-18 17:25:31 +04:00
23rd 44843aa9cd Added hint about archive and its features. 2025-08-18 13:26:26 +03:00
23rd 5f930cc4d1 Added initial ability to rate voice transcriptions. 2025-08-18 13:26:23 +03:00
23rd 7defad5d95 Added ability to clear history for channels and megagroups.
Fixed #28778.
2025-08-17 14:47:49 +03:00
23rd 707af8a295 Got rid Ui::CreateLabelWithCustomEmoji. 2025-08-17 14:47:49 +03:00
23rd e0fb9ffbb0 Added support of setting up of login email from intro. 2025-08-17 14:47:49 +03:00
23rd d614de6f5e Fixed display of error in cloud password section with new naturalWidth. 2025-08-17 14:47:49 +03:00
Ilya Fedin 86b94b4723 Change notification volume visibility on support change
Cross platform VolumeSupported wrapper
2025-08-17 14:47:49 +03:00
23rd 5070300050 Added ability to test on place volume of notifications. 2025-08-17 14:47:49 +03:00
23rd 1919546441 Added ability to change volume of specific notifications from settings. 2025-08-17 14:47:49 +03:00
23rd 1c3cd8d44b Added ability to change master volume of notifications from settings. 2025-08-17 14:47:49 +03:00
23rd 292296266f Added convenient utils to pass and change notifications volume from ui. 2025-08-17 14:47:49 +03:00
23rd a3e8848bc8 Added ability to check if OS has support of notifications volume. 2025-08-17 14:47:49 +03:00
23rd ced146fc63 Added session-specific settings for volume of notifications for peers. 2025-08-17 14:47:49 +03:00
23rd 6ed79f6a0d Added global settings for master volume of notifications. 2025-08-17 14:47:49 +03:00
23rd 15e4d86e92 Added ability to override volume in media audio tracks. 2025-08-17 14:47:49 +03:00
23rd 5a29a7d2a3 Moved out DefaultNotify to data_peer_notify_settings. 2025-08-17 14:47:49 +03:00
23rd 034740ce46 Removed unused PeerListWidget. 2025-08-17 14:47:49 +03:00
23rd a2847246e6 Replaced custom GroupMembersWidget with PeerList. 2025-08-17 14:47:49 +03:00
23rd 04479ad660 Moved out GroupMembersWidget to correspond file and namespace. 2025-08-17 14:47:49 +03:00
23rd 35d2fff593 Added initial support of highlighting for found query in quotes. 2025-08-17 14:47:49 +03:00
23rd 2b93fe9a30 Added simple colorizing of query in found messages from compose search. 2025-08-17 14:47:49 +03:00
23rd 5c33a2bd5c Added simple colorizing of query in found messages. 2025-08-17 14:47:49 +03:00
23rd a28f113105 Moved FindSearchQueryHighlight to use as util. 2025-08-17 14:47:49 +03:00
23rd eb7976a2ef Replaced alignment of title bar with left side for macOS 26. 2025-08-17 14:47:49 +03:00
23rd 15db1c0c30 Added ability to withdrawal personal currency balance. 2025-08-17 14:47:49 +03:00
23rd 2b83c95869 Moved out ui util for channel earn list to static function. 2025-08-17 14:47:49 +03:00
dependabot[bot] 273d5596d7 Bump endersonmenezes/free-disk-space
Bumps [endersonmenezes/free-disk-space](https://github.com/endersonmenezes/free-disk-space) from 4cae28d0d8e716a770938d92630f23db5184f61f to dd13eb48e709830a7ec4e50692e841be6b400d90.
- [Release notes](https://github.com/endersonmenezes/free-disk-space/releases)
- [Commits](https://github.com/endersonmenezes/free-disk-space/compare/4cae28d0d8e716a770938d92630f23db5184f61f...dd13eb48e709830a7ec4e50692e841be6b400d90)

---
updated-dependencies:
- dependency-name: endersonmenezes/free-disk-space
  dependency-version: dd13eb48e709830a7ec4e50692e841be6b400d90
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-15 17:21:13 +04:00
Ilya Fedin b423dab152 Fix Windows action execution on SDK update 2025-08-15 17:20:47 +04:00
Ilya Fedin 1b104bcf29 Update Windows SDK version 2025-08-15 17:20:47 +04:00
John Preston 5cad9a8c44 Fix build on layer 211. 2025-08-15 09:32:40 +04:00
John Preston ec8a475a2c Fix top bar selection label resizing. 2025-08-14 18:45:52 +04:00
John Preston e656cb8118 Fix vertical layout once again. 2025-08-14 18:30:17 +04:00
John Preston 7f2a0b6630 Scroll a bit further when switching tabs. 2025-08-14 18:30:01 +04:00
John Preston f9bf40a771 Fix crash in forum removal with new tabs. 2025-08-14 18:30:01 +04:00
John Preston 96360619e1 Add some asserts in stats. 2025-08-14 18:30:01 +04:00
John Preston 4cefc21819 Close forum when searching in different chat. 2025-08-14 18:30:01 +04:00
Ilya Fedin 192a56ee15 Shorter notifications proxy check for Linux notifications 2025-08-13 11:19:38 +04:00
John Preston cf16472dd0 Fix user profiles. 2025-08-13 11:18:34 +04:00
John Preston b2fb2d5821 Attempt to fix the naturalWidth feature. 2025-08-13 11:18:34 +04:00
John Preston c939eda7bb Hide "Use for calls" in Socks5 while not supported. 2025-08-13 11:18:34 +04:00
John Preston 428e059895 Write unknown cons to mtproto logs. 2025-08-13 11:18:34 +04:00
John Preston 1b4ea2e9c6 Use Api::ParseTextWithEntities more. 2025-08-13 11:18:34 +04:00
John Preston d60bfa238f Merge TWidget* into Ui::RpWidget*. 2025-08-11 13:55:16 +04:00
John Preston cc98f7da36 Fix topic unread count badges. 2025-08-11 10:36:26 +04:00
John Preston 87cdc22990 Fix marking read in new forum layout. 2025-08-11 10:36:26 +04:00
John Preston 60f6ea3252 Show informative empty posts search. 2025-08-11 10:29:11 +04:00
John Preston 86cffae001 Remove unused function. 2025-08-11 10:29:11 +04:00
John Preston 77cec0e338 Make big Upgrade button for gifts. 2025-08-11 10:29:11 +04:00
John Preston ee85bb9a1b Improve rating layout. 2025-08-11 10:29:11 +04:00
John Preston bf0b85afd1 Improve posts search transaction entry view. 2025-08-11 10:29:11 +04:00
John Preston 5473696491 Fix dice-type game display. 2025-08-11 10:29:11 +04:00
Ilya Fedin 0bc59a82ba Use symbolic links for icons in snap 2025-08-09 15:44:08 +04:00
Ilya Fedin a8430d8ecf Self-build openh264 in snap for lesser package size 2025-08-09 15:44:08 +04:00
Ilya Fedin 9672b2ec23 Use double dash consistently in snap ldflags 2025-08-09 15:44:08 +04:00
Ilya Fedin 60447f073f Partially revert "Move packages to a separate snap part"
This partially reverts commit ef2e9406c7 restoring per-part build packages so changes to them don't lead to rebuild of all parts.
2025-08-09 10:39:48 +04:00
Ilya Fedin 62329c104c Fix accidentally broken CMAKE_INSTALL_PREFIX in snap
Regression was introduced in a6a8363527
2025-08-09 10:39:48 +04:00
John Preston 536884bb46 Fix build with new Xcode. 2025-08-08 11:26:39 +04:00
John Preston efb213fb9f Fix build with latest Xcode. 2025-08-08 09:52:57 +04:00
Ilya Fedin 02b43c9375 Remove systemd-detect-virt from snap
It could be used from the core snap since hardware-observe plug was connected
2025-08-08 09:08:05 +04:00
Ilya Fedin 9a2679efaa Remove unity7 plug from snap
Looks like the desktop plug has everything needed since snapd 2.67
2025-08-08 09:07:53 +04:00
Ilya Fedin 00a396c3e7 Fix stage paths in snap 2025-08-06 07:43:33 +04:00
John Preston b4272c306d Get rid of registerImageEmoji/registerInternalEmoji. 2025-08-04 22:27:08 +04:00
John Preston b876605e93 Remove per-star options in giveaway creation. 2025-08-04 16:02:01 +04:00
John Preston 7f896a9f40 Use better ton icon in strings. 2025-08-04 12:50:24 +04:00
John Preston a96874ac55 Allow '@' in search posts queries. 2025-08-04 11:51:42 +04:00
John Preston 1f8d3ed911 Fix incorrect filesize check.
Fixes #29630.
2025-08-04 11:46:19 +04:00
23rd 56be0ef4be Fixed incorrect state of disabled calls for account in notifications. 2025-08-04 11:15:44 +04:00
John Preston 67079545b3 Ease filtering on posts search queries. 2025-08-04 11:15:09 +04:00
John Preston 54b8811843 Version 6.0.2.
- Improve design of profile stars rating.
2025-08-01 22:44:55 +04:00
John Preston 0bbfe20089 Improve pending rating info. 2025-08-01 22:09:07 +04:00
John Preston 667822ca08 Improve negative rating display. 2025-08-01 22:09:07 +04:00
Ilya Fedin 051b8c4b63 Limit malloc_trim to once per 10 seconds 2025-08-01 18:48:55 +04:00
John Preston c2f5e7eb45 Add Stories button at the bottom. 2025-08-01 18:24:12 +04:00
John Preston 45ebf7b5c6 Use separate keys for add buttons. 2025-08-01 17:47:37 +04:00
John Preston 2ccdcf8a92 Fix bad closing of suggestions. 2025-08-01 17:44:42 +04:00
John Preston 88d9fd42c4 Submit album/collection title by Enter. 2025-08-01 17:29:56 +04:00
John Preston 6d81636d1e Improve switching stories albums. 2025-08-01 17:26:44 +04:00
John Preston 22fb456d13 Fix scrolling in SubTabs. 2025-08-01 16:42:37 +04:00
John Preston 62c9666013 Show star rating preview. 2025-08-01 16:13:27 +04:00
23rd e1b2f940ad Fixed ability to reveal spoiler in title with login email pattern. 2025-08-01 16:09:13 +04:00
John Preston d2c0ec12f3 Improve negative level display. 2025-08-01 15:20:36 +04:00
John Preston 61bdbdb5d6 Fix alignment of custom verification. 2025-08-01 15:03:14 +04:00
John Preston a28ca46460 Improve rating level design. 2025-08-01 14:48:05 +04:00
John Preston 719179c1c2 Version 6.0.1.
- Fix crashing on Windows 7.
2025-08-01 11:47:00 +04:00
John Preston 1851e0c02d Show correct empty global search results. 2025-08-01 11:47:00 +04:00
John Preston 5d7ae16b4a Try fixing working on Windows 7. 2025-08-01 11:27:53 +04:00
GitHub Action 3bb8cb52f8 Update User-Agent for DNS to Chrome 138.0.0.0. 2025-08-01 11:27:43 +04:00
John Preston 3d4d3b000e Version 6.0.
- Public Post Search.
- Story Albums.
- Gift Collections.
- Profile Rating.
2025-08-01 00:15:34 +04:00
John Preston e3e97db101 Fix build with GCC. 2025-08-01 00:15:34 +04:00
John Preston 057b8d9e74 Fix build with Xcode. 2025-07-31 23:00:18 +04:00
John Preston 003e42a2ae Show nice info about star rating. 2025-07-31 22:20:19 +04:00
23rd baf932dd8b Fixed support of covers for documents in dialogs message preview. 2025-07-31 22:20:19 +04:00
23rd e2acab67e1 Fixed support of covers for documents in pinned bar and reply bar. 2025-07-31 22:20:19 +04:00
23rd 095b171db3 Added highlighting of domain part in hidden urls to confirm box. 2025-07-31 22:20:19 +04:00
23rd 9d36d7119b Added special param to links for peers to resolve them in new window. 2025-07-31 22:20:19 +04:00
John Preston 507bcbd332 Show nice global posts search button. 2025-07-31 22:20:19 +04:00
John Preston 71a15b7202 Implement global post search load-more. 2025-07-31 22:20:19 +04:00
John Preston 1718a123e8 Add NEW badge to global posts search. 2025-07-31 22:20:19 +04:00
John Preston b5c1046dca Implement paid global search requests. 2025-07-31 22:20:19 +04:00
John Preston 608481df38 Fix build in the next version of MSVC. 2025-07-31 22:20:19 +04:00
John Preston 4aab5da7ae Initial global posts search implementation. 2025-07-31 22:20:18 +04:00
John Preston 79650cf318 Support collection links. 2025-07-31 22:20:18 +04:00
John Preston 170544f68d Allow switch resale display to TON. 2025-07-31 22:20:18 +04:00
John Preston 9bc26b0068 Show correct price in gifts list. 2025-07-31 22:20:18 +04:00
John Preston 9765319027 Allow choosing Stars/TON payment. 2025-07-31 22:20:18 +04:00
John Preston 3b1c7dc5e1 Allow buying gifts resold for TONs. 2025-07-31 22:20:18 +04:00
John Preston 2a50d0856b Show correct price in resale box. 2025-07-31 22:20:18 +04:00
John Preston 23c0fcada6 Show TON icon in resale gifts. 2025-07-31 22:20:18 +04:00
John Preston aa499eab61 Allow settings gift price in TON. 2025-07-31 22:20:18 +04:00
John Preston 985324ac12 Support story album links. 2025-07-31 22:20:18 +04:00
John Preston 3c89907403 Fix last-seen-when button position. 2025-07-31 22:20:18 +04:00
John Preston 953487bb65 Display hidden state in story albums. 2025-07-31 22:20:18 +04:00
John Preston 677891d0ff Allow arbitrary order in story albums. 2025-07-31 22:20:18 +04:00
John Preston 8d2a7b00dc Implement story album management. 2025-07-31 22:20:18 +04:00
John Preston d4d4f3c082 Switch between story albums. 2025-07-31 22:20:18 +04:00
John Preston c26e8a69ca Add object_ptr::get. 2025-07-31 22:20:18 +04:00
John Preston 1c251a308a Allow loading stories in different albums. 2025-07-31 22:20:18 +04:00
John Preston c8015898ff Update API scheme on layer 211. 2025-07-31 22:20:18 +04:00
John Preston a1e36594c2 Allow creating albums of stories. 2025-07-31 22:20:18 +04:00
John Preston 043bc754ae Update API scheme to layer 211. 2025-07-31 22:20:17 +04:00
Ilya Fedin 472d9dd467 Rely on mesa-2404 libraries 2025-07-29 20:37:54 +04:00
Ilya Fedin f6a3662b0e Remove LD_LIBRARY_PATH from snap
It's not needed since Qt is linked statically
2025-07-29 20:37:54 +04:00
Ilya Fedin fb777d0c3a Another attempt to fix png theme icon ordering 2025-07-29 20:37:54 +04:00
John Preston 2a3ee968ff Fix png theme icon ordering.
Hopefully fixes #29332.
2025-07-29 14:24:54 +04:00
Ilya Fedin 0b2661ad45 Use $CRAFT_PROJECT_NAME more for consistency 2025-07-29 06:49:12 +04:00
bleizix 1dfe68e9f3 fix: cache icons in settings 2025-07-29 01:55:47 +03:00
bleizix 64b824671a fix: don't increment channel views 2025-07-29 01:55:46 +03:00
bleizix 4940d85b29 fix: AyuForward crashes & improvements 2025-07-29 01:55:43 +03:00
John Preston d458748a7a Version 5.16.6.
- Fix bad layout in box buttons.
- Fix several problems in gift collections.
2025-07-25 21:20:56 +04:00
John Preston 7f346ef606 Improve gift collections preloading. 2025-07-25 21:18:06 +04:00
John Preston ca544dbbae Fix glitch in chats search without animations. 2025-07-25 21:15:49 +04:00
John Preston 5704a07b68 Animated scroll to activated tab. 2025-07-25 21:15:47 +04:00
John Preston 5b1739246d Correctly handle gift collection updates. 2025-07-25 21:15:36 +04:00
John Preston 8ead33bc59 Fix check on new gift collection name. 2025-07-25 17:41:57 +04:00
John Preston 2f3792a3ee Fix emoji status details display. 2025-07-25 17:41:56 +04:00
John Preston 86d306632d Fix possible crash in stories state restore. 2025-07-25 17:41:55 +04:00
John Preston cc79c2cb49 Use separate lang key for All Gifts collection. 2025-07-25 17:41:54 +04:00
John Preston 26b3b13bc4 Fix edit gift collection name box. 2025-07-25 17:41:54 +04:00
John Preston bc20e65aae Support Ctrl+Shift+V "Paste as Plain Text". 2025-07-25 17:41:53 +04:00
John Preston d458bf6be3 Fix possible negative folder counters. 2025-07-25 17:41:52 +04:00
John Preston 58375f06e5 Fix buttons in non-wide-button boxes. 2025-07-25 17:41:29 +04:00
Ilya Fedin cd39853dc8 Never use LLD with non-Debug build types 2025-07-25 14:36:50 +04:00
John Preston c94a44aeb8 Fix possible crash in gift sending. 2025-07-25 11:38:25 +04:00
John Preston 237d7c1ec1 Version 5.16.5.
- Age verification support.
2025-07-25 10:21:47 +04:00
John Preston a80b67fdc9 Fix build with GCC. 2025-07-25 10:21:47 +04:00
John Preston de44c57ada Allow editing collection from three dots. 2025-07-25 10:21:47 +04:00
John Preston 448356f534 Allow editing/deleting collections. 2025-07-25 10:21:47 +04:00
John Preston 2b16b0fc7c Fix gifts display when can't manage. 2025-07-25 10:21:47 +04:00
John Preston 22515c8c29 Support gift collections editing. 2025-07-25 10:21:46 +04:00
John Preston bf050a2d5e Don't mark existing gifts as "sold out". 2025-07-25 10:21:46 +04:00
John Preston 74065714cb Fix padding for gifts list. 2025-07-25 10:21:46 +04:00
John Preston b95a39dc10 Remove swipe navigation from SubTabs. 2025-07-25 10:21:46 +04:00
John Preston bcdd202ef9 Fix build with Xcode. 2025-07-25 10:21:46 +04:00
John Preston 20ce2ead75 Take rating info url from appConfig. 2025-07-25 10:21:46 +04:00
John Preston a81b9344cf Update API scheme on layer 210. 2025-07-25 10:21:46 +04:00
John Preston a7fe004344 Load collections, request gifts in them. 2025-07-25 10:21:46 +04:00
John Preston 66e8f9865a Started gift collections. 2025-07-25 10:21:46 +04:00
John Preston 1cb4413869 Lang pack rating / premium gift features. 2025-07-25 10:21:46 +04:00
John Preston be6dbefe7c Show premium badge on gifts. 2025-07-25 10:21:46 +04:00
John Preston f655297052 Show stars rating tooltips. 2025-07-25 10:21:46 +04:00
John Preston 232c797507 Show stars rating bar. 2025-07-25 10:21:46 +04:00
John Preston 25d4a9c7a6 Parse current stars rating values. 2025-07-25 10:21:46 +04:00
John Preston 65e3111e35 Use real cloud lang. 2025-07-24 08:56:13 +04:00
John Preston 048d995922 Add weak_qptr to stdafx.h 2025-07-24 08:56:13 +04:00
John Preston dcac27e072 Make sure colors are ready for webview. 2025-07-23 11:41:03 +04:00
John Preston b754ad5248 Use base::weak_qptr / base::make_weak. 2025-07-23 11:40:59 +04:00
John Preston 321c7120df Censor 18+ marked stickers as well. 2025-07-23 11:40:37 +04:00
John Preston 4b85c9e2df Add spoilers to shared GIFs. 2025-07-23 11:40:37 +04:00
John Preston 62aec34507 Fix crash in official verify age bot open. 2025-07-23 11:40:37 +04:00
John Preston 427487c598 Verify age in sensitive toggle settings. 2025-07-23 11:40:37 +04:00
John Preston ccb8c43961 Support age verification for sensitive media. 2025-07-23 11:40:37 +04:00
John Preston fee892f9a2 Call completionHandler if open panel was cancelled. 2025-07-23 11:40:37 +04:00
John Preston 9b990728f6 Update API scheme to layer 210. 2025-07-23 11:40:37 +04:00
John Preston 9b490c9552 Fix unrelated stories on top. 2025-07-23 11:40:37 +04:00
23rd 133effef0e Added sound notification when recording of group call is started. 2025-07-23 11:40:37 +04:00
23rd 15706a7af8 Fixed ability to use PageDown/PageUp in section for pinned messages. 2025-07-23 11:40:36 +04:00
23rd 2a15faf12e Fixed incorrect display of no-chats label in dialogs while search mode. 2025-07-23 11:40:36 +04:00
23rd 9149792846 Aligned collapsed rows for folders to main menu button. 2025-07-23 11:40:36 +04:00
23rd c90c53c878 Aligned first tab of slider in dialogs widget to main menu button. 2025-07-23 11:40:36 +04:00
23rd e6387738ce Slightly improved style of top bar suggestions. 2025-07-23 11:40:36 +04:00
23rd 3882690ee1 Removed transcribe button from voice and round messages in admin log. 2025-07-23 11:40:36 +04:00
Ilya Fedin 4c049d0d75 Use Windows SDK version specified in build instruction 2025-07-22 15:37:59 +04:00
Ilya Fedin e070af3163 Limit malloc_trim to once per second 2025-07-21 07:51:48 +04:00
Ilya Fedin 1c35a91d13 Remove -s where unneeded in snap
This has no sense with static libraries
2025-07-18 09:34:07 +04:00
Ilya Fedin 4c20e79d1f Update rnnoise to 0.2 in snap 2025-07-18 09:34:07 +04:00
Ilya Fedin 669f46d6a1 Try to fix snap build on armhf 2025-07-18 09:34:07 +04:00
Ilya Fedin ea89a9f706 Free more disk space in snap action 2025-07-16 10:45:24 +04:00
Ilya Fedin 918985449b Self-build avif in snap for lesser package size 2025-07-16 10:45:24 +04:00
Ilya Fedin 18ab93a9f6 Self-build openal in snap for lesser package size 2025-07-16 10:45:24 +04:00
Ilya Fedin a6a8363527 Self-build ffmpeg in snap for lesser package size 2025-07-16 10:45:24 +04:00
Ilya Fedin 90edb0903d Use only jpegli from self-built libjxl in snap 2025-07-16 10:45:24 +04:00
Ilya Fedin ba1274ff3a Build all deps statically in snap for lesser package size 2025-07-16 10:45:24 +04:00
Ilya Fedin 60f91bff50 Stop priming static libs completely in snap 2025-07-16 10:45:24 +04:00
Ilya Fedin ef2e9406c7 Move packages to a separate snap part 2025-07-16 10:45:24 +04:00
Ilya Fedin 3d6783597f Optimize geoclue dependency in snap
It depends on entire daemon and brings unneeded dependencies that make the package way bigger
2025-07-16 10:45:24 +04:00
Ilya Fedin 7cab32f71b Switch snap to the gnome extension 2025-07-16 10:45:24 +04:00
Ilya Fedin 78a72b42b0 Don't stage unused boost-regex shared library in snap 2025-07-16 10:45:24 +04:00
AlexeyZavar 157039946f fix: allow copying inline button links 2025-07-16 00:33:27 +03:00
AlexeyZavar 09083beed0 fix: entities serialization 2025-07-16 00:00:55 +03:00
AlexeyZavar 8aa6c4582c fix: rename hide reactions
The logic is inverted everywhere, e.g. when `hideGroupReactions` is true, it's actually meant to show, not hide
2025-07-15 23:40:16 +03:00
AlexeyZavar aeb610ff70 feat: copy pack ID & copy single emoji ID 2025-07-15 23:29:37 +03:00
AlexeyZavar 1586386d6c fix: hide panel if reactions are hidden 2025-07-15 22:48:47 +03:00
AlexeyZavar 2eee51f891 fix: tray dot misalignment 2025-07-15 22:07:14 +03:00
AlexeyZavar adf46969ca chore: update nlohmann json 2025-07-15 21:33:19 +03:00
AlexeyZavar bd6ee188f8 chore: update sqlite3 2025-07-15 21:20:05 +03:00
AlexeyZavar 57893bdbf8 chore: update devs list 2025-07-15 21:17:14 +03:00
AlexeyZavar 7a37ab1b25 fix: message seconds on linux 2025-07-15 21:06:09 +03:00
AlexeyZavar 72618f98d1 fix: message field configuration in forums 2025-07-15 20:26:29 +03:00
AlexeyZavar d98e6fd51e fix: disable video ads 2025-07-15 19:48:19 +03:00
bleizix 608bcf7d42 feat: save deleted entities 2025-07-15 17:47:25 +03:00
bleizix 06d8d14ad7 fix: AyuForward crashes 2025-07-15 17:40:17 +03:00
AlexeyZavar aef400db0f fix: message shot layout 2025-07-15 17:27:28 +03:00
AlexeyZavar cdfdaf9f5f fix: make it build 2025-07-15 17:22:19 +03:00
AlexeyZavar 5270f155ff Merge tag 'v5.16.4' into dev 2025-07-15 16:48:06 +03:00
John Preston 0514f13af0 Version 5.16.4.
- Fix problem with negative unread counters.
- Fix stars values display in statistics.
- Fix crash in messages fee disabling.
2025-07-14 20:51:13 +04:00
John Preston e6a6763228 Fix build with GCC. 2025-07-14 20:51:13 +04:00
23rd 38c74bf2cf Added lottie icon and button to dialogs widget when dialogs are empty. 2025-07-14 19:42:17 +04:00
John Preston a770e47575 Fix build with Xcode. 2025-07-14 19:07:05 +04:00
John Preston c998352ab7 Possibly fix a crash in subsection tabs.
Fixes #29550.
2025-07-14 18:30:59 +04:00
John Preston 3683fa3814 Remove paid message service info in groups. 2025-07-14 17:40:30 +04:00
John Preston e62881e08b Fix blocking users in channel direct messages.
Fixes #29549.
2025-07-14 17:15:25 +04:00
John Preston 01e313e56b Fix crash after deleting sublist.
Fixes #29548.
2025-07-14 15:40:14 +04:00
John Preston 2dd5f80468 Allow transferring gifts to channels. 2025-07-14 14:29:31 +04:00
John Preston 275fb3e96a Fix actions for converted gifts. 2025-07-14 14:24:41 +04:00
John Preston 3463916b9b De-duplicate icon for checklist task adding. 2025-07-14 14:24:08 +04:00
John Preston a20de2515a Fix text-send permissions in groups.
Fixes #29546.
2025-07-14 13:58:38 +04:00
John Preston 79ea992a0f Suggest relevant min price for gift resale. 2025-07-14 13:28:57 +04:00
John Preston 0132436dc8 Move the NEW badge to gifts (market). 2025-07-14 11:29:57 +04:00
John Preston a285c1abec Fix unsupported filtering in monoforum export.
Fixes #29545.
2025-07-14 11:21:14 +04:00
John Preston 1c41e01f0d Update API scheme to layer 209. 2025-07-14 09:54:04 +04:00
John Preston f2e53ea490 Try scrolling to the task on jump. 2025-07-11 19:26:01 +04:00
John Preston bff86b90fb Highlight tasks from reply/service messages. 2025-07-11 19:26:01 +04:00
John Preston b5c9b6f552 Make and display replies to tasks. 2025-07-11 19:26:01 +04:00
John Preston 23f5102f1b Update API scheme to layer 208. 2025-07-11 19:26:01 +04:00
John Preston bf51e911b8 Fix unread counters with monoforums.
Fixes #29544.
2025-07-11 19:26:00 +04:00
John Preston 4039d7ab71 Update tgcalls. 2025-07-11 19:26:00 +04:00
John Preston 77a09a0e59 Fix some search options. 2025-07-11 19:26:00 +04:00
John Preston 154c777788 Improve formatting for some strange cases. 2025-07-11 19:26:00 +04:00
John Preston 628c36c87d Fix crash in the private fee disable. 2025-07-11 19:26:00 +04:00
John Preston a746b7abcf Fix reactions in media-only service messages.
Fixes #29543.
2025-07-11 19:26:00 +04:00
John Preston 64184e6c90 Support controls on sponsored in video. 2025-07-11 19:26:00 +04:00
John Preston ecc955d2ce Show sponsored messages in video. 2025-07-11 19:26:00 +04:00
John Preston f7e1b2c70c Fix build with QT_VERSION_MAJOR provided. 2025-07-11 19:26:00 +04:00
John Preston 284cbda7c0 Track shown sponsored in video. 2025-07-11 19:26:00 +04:00
John Preston e5ca9e4c39 Ability to request video ads. 2025-07-11 19:26:00 +04:00
John Preston 02aaa71e78 Fix updating sublist chats in Saved Messages.
Fixes #29448.
2025-07-11 19:26:00 +04:00
AlexeyZavar f56b5ea03e fix: forward box crash
Co-authored-by: mmlo <eu@memelo.dev>
2025-07-10 14:43:33 +03:00
John Preston 6afd4dcdd1 Fix stats values display. 2025-07-09 09:33:50 +04:00
23rd 52bb189996 Fixed possible crash when paste invalid proxy link to proxy box. 2025-07-09 09:33:50 +04:00
AlexeyZavar aafdac6da4 fix: localization variables loading 2025-07-09 01:20:57 +03:00
AlexeyZavar bd202fce21 fix: make it build 2025-07-09 00:03:21 +03:00
AlexeyZavar f450001edb Merge tag 'v5.16.3' into dev 2025-07-09 00:02:08 +03:00
John Preston 8ff6f9af45 Remove unused DELAYLOAD. 2025-07-08 23:24:48 +04:00
John Preston 36bb1d0cf3 Version 5.16.3.
- Allow removing / charging fee in channel direct messages.
- Don't offer creating checklists in channels.
- Support author channel in gifts.
2025-07-08 22:44:40 +04:00
John Preston c7c8e39e20 Fix build with Xcode. 2025-07-08 22:44:40 +04:00
John Preston 8e9630459b Add session_id to mtproto logs. 2025-07-08 21:32:49 +04:00
Ilya Fedin 1c53fca925 Remove unused yasm dependency from snap 2025-07-08 20:38:51 +04:00
Ilya Fedin 7d78de0673 Get rid of QT_GENERATE_SBOM=OFF 2025-07-08 20:38:51 +04:00
John Preston f8acc55365 Remove checklist creation in broadcasts. 2025-07-08 20:29:44 +04:00
John Preston c3157fe90d Fix incorrect dc for stars revenue requests. 2025-07-08 20:29:43 +04:00
John Preston 35b129287b Support RemoveFee/ChargeFee in monoforums. 2025-07-08 20:29:43 +04:00
John Preston d05155a403 Show who released the gift. 2025-07-08 20:29:43 +04:00
AlexeyZavar e5ca216c99 fix: make it build 2025-07-07 02:56:10 +03:00
AlexeyZavar 13a96ee1d3 Merge tag 'v5.16.2' into dev 2025-07-07 01:23:33 +03:00
AlexeyZavar 12879207ef fix: restrict saving content toggle 2025-07-07 00:59:02 +03:00
bleizix e097a5de58 feat: implement AyuForward 2025-07-06 23:54:45 +03:00
Neurotoxin001 0cd2617576 feat: delete own messages from groups 2025-07-06 21:07:32 +03:00
AlexeyZavar 6c303b8f87 chore: update README 2025-07-06 18:55:27 +03:00
AlexeyZavar 91224d8a1c fix: use tgdatabase bot again 2025-07-06 18:50:10 +03:00
AlexeyZavar 48e961392d fix: allow saving paid media 2025-07-06 18:09:54 +03:00
AlexeyZavar 5b08a1adfb chore: update langs 2025-07-06 17:37:35 +03:00
Neurotoxin001 3bbb9daa34 feat: disable reactions in channels and groups 2025-07-06 17:22:26 +03:00
AlexeyZavar 3f5f17705d feat: select multiple chats by holding ctrl or shift in forward box 2025-07-06 11:01:34 +03:00
John Preston f0aca45b11 Update API scheme on layer 207. 2025-07-04 21:31:20 +04:00
John Preston d205e3b4a3 Version 5.16.2.
- Fix crash in some checklists.
- Fix problems with some private chats message sending.
- Fix chats list preview for rejected/balance-low suggestions.
2025-07-04 20:23:44 +04:00
John Preston 8b40a77297 Fix build. 2025-07-04 20:23:37 +04:00
John Preston a7e87cc722 Try reducing self userFull requests. 2025-07-04 17:57:37 +04:00
John Preston 09f106bd49 Remove .00 from credits amount. 2025-07-04 17:57:35 +04:00
John Preston 8a0869fb75 Fix phrases for rejected/failed suggestion. 2025-07-04 17:56:35 +04:00
John Preston 7ccf26310d Fix spoilers in todo lists. 2025-07-04 17:51:02 +04:00
23rd e1420ba26c Decreased size of ministars for buttons in media for history view. 2025-07-04 09:46:09 +03:00
23rd c693c9cd44 Fixed history list of earn channel for currency. 2025-07-03 22:13:38 +03:00
GitHub Action e698557092 Update User-Agent for DNS to Chrome 137.0.0.0. 2025-07-03 17:46:26 +04:00
John Preston 1238c90450 Fix crash in Todo Lists. 2025-07-03 13:52:54 +04:00
John Preston e991dca5a0 Version 5.16.1.
- Fix inline keyboard updating in bot messages.
- Fix possible crash in fast chat switching.
- Different minor fixes.
2025-07-02 17:32:50 +04:00
23rd 37093c9f33 Slightly improved mini stars for button in history view premium gifts. 2025-07-02 17:32:50 +04:00
John Preston 1dd4f62ece Fix editing direct message prices. 2025-07-02 17:32:50 +04:00
Ilya Fedin 9ec27aad53 Update patches 2025-07-02 17:24:38 +04:00
Ilya Fedin f1d3a946d5 Get rid of libtgvoip leftovers 2025-07-02 17:24:38 +04:00
John Preston fd24f7045e Fix editing price per message. 2025-07-02 12:36:07 +04:00
John Preston 33671e7737 Save correct starsPerMessage for admins. 2025-07-02 12:04:29 +04:00
John Preston 13ecc6a56b Use separate phrase for Update Time. 2025-07-02 12:04:01 +04:00
23rd 20815eecbc Fixed request of recent gifts only when peer has gifts. 2025-07-02 10:18:22 +03:00
23rd f2f5ffd861 Moved out Type of ministars from class to separated enum class. 2025-07-02 10:18:22 +03:00
John Preston b0971601b1 Add distinct item for Poll in menu. 2025-07-02 11:15:48 +04:00
23rd 7253d764d2 Guarded requests of recent gifts for button from shared media section. 2025-07-02 11:05:48 +04:00
23rd 71f3a1f7cf Fixed wrong duplicated gifts in button from shared media section. 2025-07-02 11:05:41 +04:00
John Preston 950659b29d Fix aggregate checklists updates. 2025-07-02 10:57:20 +04:00
John Preston b4392d0e3c Update cmake submodule. 2025-07-02 10:27:14 +04:00
John Preston 4571302642 Fix usd values in stats. 2025-07-02 10:08:12 +04:00
Ilya Fedin 5121f04d66 Remove jemalloc 2025-07-02 09:38:24 +04:00
Ilya Fedin 77642d2876 Limit the amount of malloc arenas and call malloc_trim periodically with glibc
To prevent excessive memory usage looking like memory leak
2025-07-02 09:38:24 +04:00
John Preston ef69796798 Fix bot buttons refresh. 2025-07-02 07:20:51 +04:00
John Preston 869854fbc2 Version 5.16: Fix build with GCC. 2025-07-01 23:53:52 +04:00
John Preston 4584d912cc Version 5.16.
- Create private and group checklists.
- Suggest Posts in Channels.
- Monetizing via Suggested Posts.
2025-07-01 23:05:11 +04:00
John Preston ddd3d38dac Use more separate phrases. 2025-07-01 23:00:40 +04:00
John Preston fcba6bc7d7 Fix first days of some months. 2025-07-01 22:20:09 +04:00
John Preston a147c0fb4f Update API scheme on layer 206. 2025-07-01 22:10:30 +04:00
John Preston c3cc3fa9bd Separate phrase for paid messages placeholder. 2025-07-01 22:10:14 +04:00
23rd 0f0e14132a Added ability to copy and paste proxy list with shortcuts. 2025-07-01 19:33:25 +04:00
23rd a2c2ed0b4a Added ability to clear proxy list from top context menu in settings. 2025-07-01 19:33:25 +04:00
23rd 8bebca4502 Added ability to share your proxy list with clipboard. 2025-07-01 19:33:25 +04:00
23rd e9a550d458 Added ability to add proxies list from clipboard. 2025-07-01 19:33:25 +04:00
23rd bee567f2b1 Added transaction id info to channel earn history entries. 2025-07-01 19:33:25 +04:00
23rd 0fd7061671 Replaced Data::EarnHistoryEntry with Data::CreditsHistoryEntry. 2025-07-01 19:33:25 +04:00
23rd 96951576c1 Fixed credits display in statistic charts. 2025-07-01 19:33:24 +04:00
John Preston a665d7cc3c Show USD estimate in suggest posts. 2025-07-01 19:32:49 +04:00
John Preston 9b989329d4 Fix muted state of monoforums. 2025-07-01 15:59:20 +04:00
John Preston eccfd75a83 Scroll to active tab in subsection tabs. 2025-07-01 15:10:21 +04:00
John Preston 7e8a152eef Fix crash in topic links opening. 2025-07-01 14:39:28 +04:00
John Preston 44810f95a5 Fix clearing history in legacy groups. 2025-07-01 14:12:35 +04:00
John Preston bcd42dbb6a Block forwarded todo lists. 2025-07-01 13:01:29 +04:00
John Preston 6e77126a65 Fix task completion date tooltip. 2025-07-01 12:29:00 +04:00
John Preston 735bbef655 Fix phone/card click handler generation. 2025-07-01 12:23:55 +04:00
John Preston 7006a07dd3 Show completed-by names in tasks. 2025-07-01 12:10:08 +04:00
John Preston 7284926db4 Support links in tasks. 2025-07-01 11:26:56 +04:00
John Preston b506bf9506 Fix webpage preview glitch in small bubbles. 2025-07-01 11:05:02 +04:00
John Preston 3fea28f8b0 Warn admins about commission and stars. 2025-06-30 22:23:55 +04:00
John Preston cc6649667c Revert "Get rid of /DELAYLOAD"
This reverts commit 6586791655.
2025-06-30 18:29:28 +04:00
John Preston 24121fbbce Improve conditions / phrases. 2025-06-30 18:26:53 +04:00
John Preston ef280dae3e Open ready-preloaded TON section. 2025-06-30 16:56:42 +04:00
John Preston 49f580a36b Use better file origin for gift stickers. 2025-06-30 13:27:13 +04:00
John Preston a56d2b1313 Better handle min in linked channels. 2025-06-30 13:22:04 +04:00
John Preston f083180401 Support correct sitckers for TON gifts. 2025-06-30 12:32:33 +04:00
23rd 7b870edefa Added specific color for blue currency icon. 2025-06-30 11:22:08 +03:00
23rd a293fa1de6 Replaced std::map with flat_map for selected items in history list. 2025-06-30 10:55:25 +03:00
23rd 3a8898dd24 Added ability to share proxy with QR code. 2025-06-30 10:55:25 +03:00
23rd b97c8b9a17 Fixed order of saving grouped media from bulk download menu item. 2025-06-30 10:55:25 +03:00
23rd a0a8d76441 Proceeded returned earn history entries as inbound. 2025-06-30 09:51:53 +03:00
23rd 9199612cf7 Slightly improved macOS build docs by adding storage requirements. 2025-06-30 01:01:15 +03:00
23rd abfd37c045 Added suffix to version string for debug builds. 2025-06-29 23:40:24 +03:00
23rd ac243136b9 Replaced AboutBox with generic box. 2025-06-29 23:40:24 +03:00
23rd c93e948bb3 Added support of maximum amount of credits to withdraw from app config. 2025-06-29 22:34:46 +03:00
23rd 388803ffdb Fit transactions id from credits history entries to table cell. 2025-06-29 22:34:46 +03:00
23rd a809ccf229 Added support of special sticker pack for currency history entries. 2025-06-29 22:34:46 +03:00
23rd d1796a515e Fixed comparing of credits amount with different types. 2025-06-29 22:34:46 +03:00
23rd a11d3efed6 Added support of usd rate for withdrawal from app config. 2025-06-29 22:34:46 +03:00
Neurotoxin001 a8fb7cd225 fix: hide messages group 2025-06-29 22:28:41 +03:00
23rd 9d7aab4326 Added initial support of personal earn currency history. 2025-06-29 21:14:20 +03:00
23rd a3b76fed4c Added initial implementation of section for personal currency settings. 2025-06-29 21:14:20 +03:00
23rd 21f5f96d69 Added entry point to section of personal currency settings. 2025-06-29 21:14:20 +03:00
23rd 70d3061d59 Added support of lottie icon to premium top bar. 2025-06-29 21:14:20 +03:00
23rd 8f7a66a21a Improved spell checking on macOS. 2025-06-29 21:14:20 +03:00
23rd cd8e944751 Added recent gifts to section of shared media from info profile. 2025-06-29 21:14:20 +03:00
23rd 66e05594f6 Fixed display of top bar suggestion on premium value changed. 2025-06-29 21:14:20 +03:00
23rd d06a9e2e5c Added missing shortcut to toggle fullscreen for windows on macOS. 2025-06-29 21:14:20 +03:00
23rd 64df9222dd Added handle of flood errors on requesting to check chat invite.
Fixed #29368.
2025-06-29 21:14:20 +03:00
23rd 900ac46583 Moved out gifts from userpic to description in credits history list. 2025-06-29 21:14:20 +03:00
23rd fda1c8399f Added icon to big button in credits settings. 2025-06-29 21:14:20 +03:00
23rd c2cd4fc75f Improved style of credits settings. 2025-06-29 21:14:20 +03:00
23rd ef5a9eb777 Added some utils to convenient insert of credits icons to text labels. 2025-06-29 21:14:20 +03:00
23rd 8e3100acdd Added ability to provide max width to about label in premium top bar. 2025-06-29 21:14:20 +03:00
23rd 50d74fcf25 Fixed build with layer 206. 2025-06-29 21:14:20 +03:00
John Preston 140862ce5a Update API scheme on layer 206. 2025-06-29 20:42:52 +03:00
John Preston 966453dd8f Update scheme on layer 206. Build broken. 2025-06-27 22:54:34 +04:00
John Preston fcd37adc38 Fix build with Xcode. 2025-06-27 22:53:37 +04:00
John Preston 6a3989488e Fix possible crash in quick replies. 2025-06-27 21:29:39 +04:00
John Preston fbfdef8f9a Remove balance for admins changing prices. 2025-06-27 21:29:39 +04:00
John Preston b66c61573f Make counter-suggestions link originals. 2025-06-27 21:29:39 +04:00
John Preston 9186b28b60 Fix suggest of a forward. 2025-06-27 21:29:39 +04:00
John Preston 915a1b105c Add balance of stars / TON. 2025-06-27 21:29:39 +04:00
John Preston 12b9b3ce71 To-Do List -> Checklist. 2025-06-27 21:29:39 +04:00
John Preston deb4c48551 Server-side min/max values for TON suggests. 2025-06-27 21:29:39 +04:00
John Preston 9dfaac8582 Optimize some request channel full requests. 2025-06-27 21:29:39 +04:00
John Preston bd5b9f5347 Make less channel full requests. 2025-06-27 21:29:39 +04:00
John Preston ff4b9a3cfe Improve suggest post UI. 2025-06-27 21:29:35 +04:00
John Preston e844d7ed89 Use phrase from lang.strings for TON gift. 2025-06-27 21:29:35 +04:00
John Preston f3ae8f7f75 Fix styles in discussion group management. 2025-06-27 21:29:35 +04:00
John Preston f137eddbf9 Use correct premium promo for To-Do Lists. 2025-06-27 21:29:35 +04:00
John Preston c70f75b21a Add Stars/TON checks to suggestions. 2025-06-27 21:29:35 +04:00
John Preston 141fb875f9 Add icons to suggestion buttons. 2025-06-27 21:29:35 +04:00
John Preston 344d47e7dd Fix stars amount check. 2025-06-27 21:29:35 +04:00
John Preston 4840a9094b Check amounts of stars/TON. 2025-06-27 21:29:35 +04:00
John Preston 6f305c8974 Improve layout in suggested price box. 2025-06-27 21:29:35 +04:00
John Preston c83bae3bb5 Use correct icon in post suggesting. 2025-06-27 21:29:35 +04:00
John Preston 4c1b962486 Support adding an offer to existing message. 2025-06-27 21:29:35 +04:00
John Preston b929e2a7b2 Update API scheme on layer 160, show correct warnings. 2025-06-27 21:29:35 +04:00
John Preston 1ecd7aa7cf Implement suggestion of changes. 2025-06-27 21:29:34 +04:00
John Preston 881aed50ea Support _suggestOptions for changes in ComposeControls. 2025-06-27 21:29:34 +04:00
John Preston 6272b79f70 Allow suggesting with TON. 2025-06-27 21:29:34 +04:00
John Preston 0fa50f1951 Update API scheme on layer 206. 2025-06-27 21:29:34 +04:00
John Preston dc19f2e76c Start suggesting changes to messages by editing. 2025-06-27 21:29:34 +04:00
John Preston 498116c3f6 Show correctly change suggestions. 2025-06-27 21:29:34 +04:00
John Preston e29dcf7489 Update API scheme on layer 206. Re-Suggest. 2025-06-27 21:29:34 +04:00
John Preston ec28eea7f0 Make keyboard fully shown with media. 2025-06-27 21:29:34 +04:00
John Preston ebce4d0f31 Show suggested service info. 2025-06-27 21:29:34 +04:00
John Preston bf9492e083 Show approve/decline service messages. 2025-06-27 21:29:34 +04:00
John Preston cb987c1baf PoC suggested accept/decline. 2025-06-27 21:29:34 +04:00
John Preston e4a4be1f53 Don't show visibility status in opened-by-link gifts. 2025-06-27 21:29:34 +04:00
John Preston f6d1fe6c04 Update API scheme on layer 206. 2025-06-27 21:29:34 +04:00
John Preston 7e5a29a5cc PoC suggesting posts to channels. 2025-06-27 21:29:34 +04:00
John Preston 8dbc175c02 Update API scheme on layer 206. 2025-06-27 21:29:33 +04:00
John Preston 0473374d51 Allow admin sending to monoforum for free. 2025-06-27 21:29:33 +04:00
John Preston b2d7342b9e Attempt to fix monoforum muted setting. 2025-06-27 21:29:33 +04:00
John Preston b965aecc6c Update API scheme to layer 206. 2025-06-27 21:29:33 +04:00
John Preston 9290c90bdc Allow fully editing todo lists. 2025-06-27 21:29:33 +04:00
John Preston d83a80ec53 Improve adding tasks to todo lists. 2025-06-27 21:29:33 +04:00
John Preston 248fe1b53f Add tasks to todo lists. 2025-06-27 21:29:33 +04:00
John Preston bf217bf7aa Check premium for todo lists actions. 2025-06-27 21:29:33 +04:00
John Preston e5de8e22b7 Add fireworks on ending a task list. 2025-06-27 21:29:33 +04:00
John Preston 5666e84d92 Add ability to create todo lists. 2025-06-27 21:29:33 +04:00
John Preston a97d1b8669 Support task lists view/update/actions. 2025-06-27 21:29:33 +04:00
John Preston 06db13a0ab Update API scheme to layer 205. 2025-06-27 21:29:33 +04:00
John Preston 9832af7cce Show messages from channels in monoforums. 2025-06-27 21:29:32 +04:00
Yagiz Nizipli cf4a617f2b update ada-url to v3.2.4 (#29353) 2025-06-27 09:56:01 -07:00
Sean Wei 5a6a5fd4d1 Change const T&& parameters to T&& to enable proper move semantics
Previously some constructors/functions used `const T&&`, which prevents
calling the move constructor. This commit removes the `const` qualifier
so that `std::move` actually performs a move.
2025-06-27 20:50:08 +04:00
Ilya Fedin e6ebc19b4f Switch qt snapcraft part to cmake plugin 2025-06-27 20:49:30 +04:00
Neurotoxin001 2250fe75c4 fix: use custom serialization for settings
The error occurred when adding a new fields, for example showForwards, to the AyuGramSettings class. The NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT macro was used for serialization, which works correctly only when the number of parameters is up to 64. After extending the structure, the macro failed to expand and the compiler started generating messages about undefined identifiers like NLOHMANN_JSON_TO.

The fix was to replace the problematic macro with manual implementation of to_json and from_json functions. For each field, it is now explicitly specified how to serialize and deserialize it, which eliminates the limitation on the number of arguments. Additionally, auxiliary macros NLOHMANN_JSON_TO, NLOHMANN_JSON_FROM and NLOHMANN_JSON_FROM_WITH_DEFAULT have been declared in case they are absent in the header file used.

More info: https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/#notes
2025-06-26 19:08:41 +03:00
AlexeyZavar e27b1840c6 chore: update README
Co-authored-by: Max Balashov <rsg245@yandex.com>
2025-06-26 18:57:24 +03:00
Neurotoxin001 717d197998 fix: image order when downloading albums 2025-06-26 18:36:25 +03:00
Ilya Fedin 02dd0dbbef Push Docker image to GHCR again 2025-06-24 08:47:28 +04:00
John Preston 2e4a437d32 Version 5.15.4.
- Fix updating messages in Saved Messages subchats.
- Fix possible issues with mouse cursor on Linux.
2025-06-12 22:07:05 +04:00
John Preston 63e1d6dab6 Fix saved messages sublists updates. 2025-06-12 22:07:02 +04:00
Daniel Novomeský 23133499c7 Update dav1d, openh264, libwebp, libavif, libde265, libheif 2025-06-10 08:56:12 +04:00
Ilya Fedin 67bd87b50c Prevent non-Qt harfbuzz/libpng from being linked 2025-06-10 08:55:58 +04:00
Ilya Fedin 6d31a4246f Fix default cursor path 2025-06-09 20:24:09 +04:00
John Preston d4f38b6d66 Version 5.15.3: Revert cmake_helpers downgrade. 2025-06-09 11:05:47 +04:00
John Preston 959229f143 Version 5.15.3.
- Fix new contact top bar appearance.
- Remove change photo button for channel direct messages.
2025-06-09 09:39:02 +04:00
John Preston 22f9b1a0b1 Hide photo change button for monoforums. 2025-06-09 09:37:51 +04:00
John Preston a8fc5a722f Fix display of contact status. 2025-06-09 09:37:51 +04:00
AlexeyZavar 69420f5750 chore: refactor & reformat settings 2025-06-08 11:00:04 +03:00
AlexeyZavar 20976ac9f9 fix: ttl messages destroying 2025-06-06 21:27:39 +03:00
AlexeyZavar dc33accae7 chore: update sqlite3 2025-06-06 11:38:15 +03:00
AlexeyZavar 29d1f1f14a fix: copy sticker owner ID if not found 2025-06-06 11:37:52 +03:00
Ilya Fedin 6102119673 Update cmake_helpers 2025-06-06 11:14:06 +04:00
Ilya Fedin 0c635a05ff Allow overriding jobs count in Dockerfile 2025-06-06 11:14:06 +04:00
Ilya Fedin 307a7791df Set Implib commit 2025-06-06 11:14:06 +04:00
Ilya Fedin 49b056a0ce Update xcb libraries to avoid freedesktop's anongit 2025-06-06 11:14:06 +04:00
Ilya Fedin af58ffadcb Use cache action for Docker layers cache 2025-06-06 11:13:56 +04:00
John Preston dcbda7b3af Version 5.15.2.
- Fix sending messages in new forum layout.
- Add statistics for user stars.
2025-06-05 22:55:29 +04:00
John Preston 553cc0c6ae Fix new forum messages sending. 2025-06-05 21:26:50 +04:00
23rd 067dcbfbeb Added initial entry point for self statistics of credits. 2025-06-05 19:59:02 +03:00
23rd 759258bb39 Added support of statistics availability to Credits component. 2025-06-05 19:49:25 +03:00
John Preston 3667ef551c Version 5.15.1.
- Fix launch on Windows 7.
- Fix launch on older Linux distributions.
- Fix crash in group chat message right click.
- Fix unread counters in channel direct messages.
- Don't generate "User joined" message in channel direct messages.
- Fix some other glitches in new forums and channel direct messages.
2025-06-05 19:08:28 +04:00
Ilya Fedin a3308087a5 Fix static libstdc++ link 2025-06-05 16:57:04 +04:00
John Preston bfb4652425 Realtime update admin status in members list. 2025-06-05 16:09:41 +04:00
John Preston 03c24e2906 Show better monoforum chat info column. 2025-06-05 15:29:26 +04:00
John Preston dc61faace1 Handle disabling direct messages in channel. 2025-06-05 15:29:26 +04:00
John Preston 73ea86ceeb Improve monoforum chat profiles. 2025-06-05 14:24:30 +04:00
John Preston 9a622ab466 Add view channel button to monoforum info. 2025-06-05 14:09:03 +04:00
John Preston 65cfd6c81c Fix new forum layout search and topics list. 2025-06-05 13:55:55 +04:00
John Preston 08681ac1b9 Show join requests in new forums layout. 2025-06-05 13:39:33 +04:00
John Preston f9acb5d19b Fix activation of wrong tab after new window. 2025-06-05 13:00:14 +04:00
John Preston e9e187c58b Ctrl+Click to open subsection in a new window. 2025-06-05 12:54:59 +04:00
John Preston 3bc20c3550 Save last opened subsection within a launch. 2025-06-05 12:47:16 +04:00
John Preston 4b25406d14 Remove delay when switching subsection tabs. 2025-06-05 12:19:27 +04:00
John Preston 265b7904a8 Fix blockquote/code captions to media in reply bar. 2025-06-05 12:10:31 +04:00
John Preston fb2274c58d Fix glitch in new forum layout opening. 2025-06-05 12:04:28 +04:00
John Preston 3cfdc9d897 Fix setting group emoji status. 2025-06-05 11:40:05 +04:00
John Preston 11986ac698 Show star in channel direct messages settings. 2025-06-05 11:33:43 +04:00
John Preston a08436ecd2 Fix unread counters in filters with monoforums. 2025-06-05 11:04:23 +04:00
John Preston e92adf94a7 Improve adaptive loading in subsection tabs. 2025-06-05 10:45:13 +04:00
Ilya Fedin d25356917d Stop setting CMAKE_EXE_LINKER_FLAGS in actions 2025-06-05 09:56:19 +04:00
John Preston 0adb3b062f Use only first name in birthday notification. 2025-06-05 09:55:16 +04:00
John Preston 9316480884 Don't generate joined message in monoforums. 2025-06-05 09:22:44 +04:00
John Preston 4e5082f6c6 Fix comments root view position.
Fixes #29389.
2025-06-05 09:06:19 +04:00
John Preston 16d5dbe71c Fix crash in group chat context menu.
Fixes #29387.
2025-06-05 08:59:07 +04:00
John Preston 133d7874e3 Revert d3d compiler to 10.0.22621.3233. 2025-06-05 08:56:53 +04:00
John Preston 4659d5db5d Version 5.15.
- Send Direct Messages to Channels.
- Enable New Tab Layout for Topics.
- Create Polls with Up To 12 Options.
2025-06-04 22:56:02 +04:00
Ilya Fedin af061125dd Fix Docker build without LTO 2025-06-04 21:33:53 +04:00
John Preston 5c4b1f6638 Show message author to admins in monoforums. 2025-06-04 21:33:27 +04:00
John Preston ee3d70f879 Fix glitching userpics in monoforum. 2025-06-04 21:05:08 +04:00
John Preston 7dadaa1b28 Save subsection tabs layout to disk. 2025-06-04 19:39:34 +04:00
John Preston a72782e232 Use server provided default stars count for direct. 2025-06-04 18:42:17 +04:00
John Preston 8654ffb6fb Don't show "Who Viewed" in monoforums. 2025-06-04 18:26:48 +04:00
John Preston 90e445eec9 Don't show notifications from other admins. 2025-06-04 18:26:30 +04:00
John Preston 910b6d8879 Fix unread mark badge in new forums layout. 2025-06-04 18:13:21 +04:00
John Preston 8d1c2f832d Add "Create topic" to new forum view. 2025-06-04 17:59:25 +04:00
John Preston 158d2a4124 Fix possible stack overflow in subsection tabs. 2025-06-04 17:59:10 +04:00
John Preston 66473738d6 Add simple shadow to subsection tabs. 2025-06-04 17:26:23 +04:00
John Preston 6a43107bb2 Fix possible crash in subsection tabs. 2025-06-04 16:52:44 +04:00
John Preston 28e7afa412 Even nicer empty chat. 2025-06-04 16:48:37 +04:00
John Preston 8dc151e14d Fix build on Windows. 2025-06-04 16:21:21 +04:00
John Preston a330a3f2eb Nicer empty monoforum for non-admins. 2025-06-04 15:45:22 +04:00
Ilya Fedin 8f7195d3b2 Fix macOS action 2025-06-04 11:17:35 +04:00
Ilya Fedin a4e4502d50 Add missing dependencies to macOS packaged action 2025-06-04 11:17:35 +04:00
GitHub Action 902da90100 Update User-Agent for DNS to Chrome 136.0.0.0. 2025-06-04 10:28:54 +04:00
John Preston d775760f98 Support nice monoforum userpics. 2025-06-04 10:00:24 +04:00
John Preston dfb6600104 Fix loading of horizontal avatar strip. 2025-06-04 10:00:24 +04:00
John Preston 41ed487d5e Improve opening ChatWidget at the end. 2025-06-04 10:00:24 +04:00
John Preston d156de05a5 Allow replying in monoforum while not in it. 2025-06-04 10:00:24 +04:00
John Preston f4582ddf36 Correctly mark monoforum chats as read. 2025-06-04 10:00:24 +04:00
John Preston 7f7b764f7b Allow ton:// links in webapps. 2025-06-04 10:00:24 +04:00
John Preston dd8fdfc3d4 Allow forwarding polls to monoforums. 2025-06-04 10:00:24 +04:00
John Preston 6c80d443b9 Better entry point for Direct Messages. 2025-06-04 10:00:24 +04:00
John Preston cd05586d51 Fix display of pinned messages in sublists. 2025-06-04 10:00:24 +04:00
John Preston dfc1ec3ccf Support shared media / pins for sublists. 2025-06-04 10:00:23 +04:00
John Preston ffe6786ad1 Support unread reactions in monoforums. 2025-06-04 10:00:23 +04:00
John Preston 6068678fa1 Improve separate window support. 2025-06-04 10:00:23 +04:00
John Preston 50b761fab2 Remove showing monoforums inside dialogs widget. 2025-06-04 10:00:23 +04:00
John Preston 0d43f16db2 Remove unsupported actions from monoforum menu. 2025-06-04 10:00:23 +04:00
John Preston 3278de9ba1 Support mark as read/unread in sublists. 2025-06-04 10:00:23 +04:00
John Preston abe1962002 Show context menu for topics in new tabs. 2025-06-04 10:00:23 +04:00
John Preston 5b15f377cd Improve set direct message price box. 2025-06-04 10:00:23 +04:00
John Preston d0e5ea78a5 Improve topics layout management. 2025-06-04 10:00:23 +04:00
John Preston 853757e611 Fix tabs transfer between chat widgets. 2025-06-04 10:00:22 +04:00
John Preston c3860cfe72 Improve monoforum top bar status. 2025-06-04 10:00:22 +04:00
John Preston 90b2c077a6 Don't flood with bot requests in monoforums. 2025-06-04 10:00:22 +04:00
John Preston fdce4bada7 Implement nice topic mode editing. 2025-06-04 10:00:22 +04:00
John Preston 4c8ff1c7ec Disable polls in monoforums, enable in Saved Messages. 2025-06-04 10:00:22 +04:00
John Preston 2a153214f6 Support polls with 12 options. 2025-06-04 10:00:22 +04:00
John Preston d7c964afc5 Show "Messages" badge for monoforum. 2025-06-04 10:00:22 +04:00
John Preston 5943052cd1 Show badges in new tabs. 2025-06-04 10:00:22 +04:00
John Preston 8512154b45 Implement better horizontal/vertical tabs. 2025-06-04 10:00:22 +04:00
John Preston 0e5419c60b Fix opening forums with tabs. 2025-06-04 10:00:22 +04:00
John Preston 1d26482298 Update API scheme on layer 204. 2025-06-04 10:00:21 +04:00
John Preston 126749f04c Fix build with new MSVC. 2025-06-04 10:00:21 +04:00
John Preston e0e69ce740 Support vertical tabs somehow. 2025-06-04 10:00:21 +04:00
John Preston 72b57924b7 Correctly load tab slices. 2025-06-04 10:00:21 +04:00
John Preston fdbdeeb956 Start new tabs for monoforums. 2025-06-04 10:00:21 +04:00
John Preston 3dbdecf73d Make monoforum sender badges float. 2025-06-04 10:00:21 +04:00
John Preston 7dc8943840 Improve monoforum opening. 2025-06-04 10:00:21 +04:00
John Preston 646b852717 Correct rights check in monoforums. 2025-06-04 10:00:21 +04:00
John Preston 075f754a71 Update API scheme on layer 204. 2025-06-04 10:00:21 +04:00
John Preston f65556acb7 Support drafts in monoforum sublists. 2025-06-04 10:00:21 +04:00
John Preston b2c01991a6 Support unread state in sublists. 2025-06-04 10:00:21 +04:00
John Preston 4bc5e81513 Update API scheme on layer 204. 2025-06-04 10:00:19 +04:00
John Preston 2b24fe95c2 Update API scheme on layer 204. 2025-06-04 10:00:19 +04:00
John Preston 358e64f2cc Show monoforums as forums in chats list. 2025-06-04 10:00:19 +04:00
John Preston 5dc50b6d96 Respect price of messages to channels. 2025-06-04 10:00:18 +04:00
John Preston b91a040a32 Update API scheme on layer 204. 2025-06-04 10:00:18 +04:00
John Preston 76db55ff19 Support forwarding to monoforums. 2025-06-04 10:00:18 +04:00
John Preston e17bf18350 Update API scheme on layer 204. 2025-06-04 10:00:18 +04:00
John Preston 43b4499125 Add monoforum sender bar divider. 2025-06-04 10:00:18 +04:00
John Preston c6d43a802c Fix sending messages in monoforums. 2025-06-04 10:00:18 +04:00
John Preston 21f8403357 Merge SublistSection into ChatSection. 2025-06-04 10:00:18 +04:00
John Preston 40053e3388 Rename RepliesWidget/Memento to ChatWidget/Memento. 2025-06-04 10:00:14 +04:00
John Preston abcf7e3a47 Update API scheme & fix monoforum send. 2025-06-04 10:00:14 +04:00
John Preston f8913bf9b9 Show square userpics for monoforums. 2025-06-04 10:00:14 +04:00
John Preston 51878ab38e Allow opening monoforums. 2025-06-04 10:00:14 +04:00
John Preston d3f9a84a0a Allow enabling direct messages in channels. 2025-06-04 10:00:14 +04:00
John Preston 23eedb468f Update API scheme to layer 204. 2025-06-04 10:00:14 +04:00
John Preston 9cb89fff45 Fix dropping filter in gifts. 2025-06-04 10:00:14 +04:00
23rd 79f0b22276 Compressed lottie for media forbidden. 2025-06-03 18:30:38 +03:00
23rd 8b2a728a0d Fixed display of loading animation from search in Saved Messages. 2025-06-03 18:28:11 +03:00
23rd b4120b156e Added nice overlay to recorded round videos. 2025-06-03 17:55:37 +03:00
23rd 1ae3122c20 Added support of suggestion to validate cloud password to settings. 2025-06-03 17:55:37 +03:00
23rd 727acca217 Updated Qt to 5.15.17 on Windows. 2025-06-03 17:55:37 +03:00
23rd 5f8d662d67 Slightly improved of forward declarations in history item. 2025-06-03 17:55:18 +03:00
23rd 81b432140c Added ability to edit caption from box even when file is uploaded. 2025-06-03 17:55:18 +03:00
23rd adc1ee71a9 Slightly improved box to edit caption of grouped file. 2025-06-03 17:55:18 +03:00
23rd 5ac373d4aa Added simple box to edit caption of single file while it's uploading. 2025-06-03 17:55:18 +03:00
23rd 5b9e24f3f4 Slightly improved box for writing captions to be more generic. 2025-06-03 17:55:18 +03:00
23rd 0e44de2fe3 Slightly improved style of exception button in notifications settings. 2025-06-03 17:55:18 +03:00
23rd b0125e8165 Slightly improved display of numbers approaching zero in stats charts. 2025-06-03 17:55:18 +03:00
23rd a532067a93 Fixed dismissing of custom pending suggestions. 2025-06-03 17:55:18 +03:00
Ilya Fedin f456071c08 Switch Dockerfile to packaged mode 2025-06-03 18:25:15 +04:00
Ilya Fedin 3896f0995c Runtime Implib detection 2025-06-03 18:25:15 +04:00
Ilya Fedin 56ff5808a3 Unify packaged/non-packaged binary name 2025-06-03 18:25:15 +04:00
Ilya Fedin 15c817dd15 Update Qt 6.9.0 -> 6.9.1 2025-06-03 15:01:48 +04:00
Ilya Fedin 7246c3f304 Set cmake OpenGL default to legacy in Dockerfile 2025-06-03 14:11:25 +04:00
Ilya Fedin e4f59f1ec4 Build only static libraries in Dockerfile 2025-06-03 14:11:25 +04:00
Ilya Fedin 5f0e9538cf Move Implib to Dockerfile 2025-06-03 10:16:58 +04:00
Ilya Fedin 73649128f3 Update cmake_helpers 2025-06-03 09:58:11 +04:00
Ilya Fedin edc84731ac Change debug cmake flags according to Dockerfile options 2025-06-03 09:58:11 +04:00
Ilya Fedin 108b116b06 Use lld when building without LTO in Dockerfile 2025-06-03 09:58:11 +04:00
Ilya Fedin dda587dc6f DESKTOP_APP_USE_PACKAGED_LAZY -> DESKTOP_APP_DISABLE_QT_PLUGINS 2025-06-03 09:50:07 +04:00
Ilya Fedin 4a9dd43598 Update tg_owt 2025-06-03 09:41:49 +04:00
Ilya Fedin a64cfe661a Add missing deps to webrtc Docker layer 2025-06-03 09:41:33 +04:00
Ilya Fedin 7e418a16ae Fix packaged conditions in lib_ffmpeg and Packer 2025-06-03 09:41:22 +04:00
Ilya Fedin ecf1fa2bbd Get rid of lib prefixes in Docker layers 2025-06-03 09:28:44 +04:00
Ilya Fedin a6157a34bc Update variable syntax in Dockerfile 2025-06-03 09:28:44 +04:00
Ilya Fedin 8e37e66706 Make TOOLSET variable not dependent on jinja in Dockerfile 2025-06-03 09:28:44 +04:00
Ilya Fedin dd6a4931e5 Make QT variable local to the Docker layer 2025-06-03 09:28:44 +04:00
Ilya Fedin 2d000e826b Remove GIT variable from Dockerfile 2025-06-03 09:28:44 +04:00
Ilya Fedin c1028e7408 Remove GIT_FREEDESKTOP variable from Dockerfile 2025-06-03 09:28:44 +04:00
Ilya Fedin 28b54fac37 Revert GIT_UPDATE_M4 in Dockerfile
This partially reverts commit 9461095c88.
2025-06-03 09:28:44 +04:00
Ilya Fedin 845fddf5f2 Use enable_language 2025-06-03 09:28:31 +04:00
Ilya Fedin e3e2a477c1 Proper check for multi-config generator 2025-06-03 09:20:45 +04:00
Ilya Fedin bf4442ecf5 CMAKE_CONFIG_TYPE doesn't seem to work
This partially reverts commit ae45189436.
2025-06-03 09:20:24 +04:00
AlexeyZavar 3be793032f fix: use usinfobot for username resolving & update README 2025-06-02 15:52:31 +03:00
Crd5 0fab18e8e8 chore: add homebrew as a download source for macOS 2025-06-02 15:48:52 +03:00
Ilya Fedin ab6375ef2a Update submodules 2025-05-27 10:56:02 +04:00
Ilya Fedin 2535b6e08c Update GCC to 14 on Linux 2025-05-27 10:56:02 +04:00
Ilya Fedin 2f003d416a Update OpenAL to 1.24.3 on Linux 2025-05-27 10:56:02 +04:00
Ilya Fedin 579b358f8b Use system gobject-introspection in Dockerfile 2025-05-27 10:56:02 +04:00
Ilya Fedin 231a583bf7 Build tg_owt in packaged mode in Dockerfile 2025-05-27 10:56:02 +04:00
Ilya Fedin f0cfbacb4f Install Qt to global prefix in Dockerfile 2025-05-27 10:56:02 +04:00
Ilya Fedin ae45189436 Set cmake generator, build type and parallel level globally in Dockerfile 2025-05-27 10:56:02 +04:00
Ilya Fedin ff8292b863 Set build directory for libde265 in Dockerfile 2025-05-27 10:56:02 +04:00
Ilya Fedin ebe45f73a0 Shorten GIT_UPDATE_M4 2025-05-27 10:56:02 +04:00
kuro neko c91f41e988 fix: upstream docker build
Same as https://github.com/telegramdesktop/tdesktop/commit/88ce676c46bb9806765bd0f4a8c700a60802d1b8
2025-05-26 04:55:51 +03:00
Ilya Fedin 88ce676c46 Use Python 3.11 explicitly in Docker 2025-05-20 18:55:54 +04:00
Ilya Fedin 426cc2798e Revert "Use Python 3.12 in Docker"
This reverts commit 1d2df63652.
2025-05-20 18:55:54 +04:00
Ilya Fedin 1d2df63652 Use Python 3.12 in Docker 2025-05-20 17:59:43 +04:00
2265 changed files with 238065 additions and 56840 deletions
+559
View File
@@ -0,0 +1,559 @@
# Phase Prompts
Use these templates as Codex subagent messages. Use them as same-session checklists only for Phase 0, intentional main-session build work, Phase 7, or when delegation is unavailable from the start. Replace `<TASK>`, `<PROJECT>`, `<LETTER>`, and `<REPO_ROOT>`.
## Orchestration Rules
- Phase 0 runs in the main session.
- When delegation is available, use a fresh subagent for Phase 1, Phase 2, Phase 3, each Phase 4 implementation unit, and each Phase 6 pass. Do not switch those phases to same-session midstream because of a timeout or missing artifact.
- Phase 7 runs in the main session on Windows because it depends on the final local diff and touched-file set.
- Write each phase prompt to `.ai/<PROJECT>/<LETTER>/logs/phase-<name>.prompt.md` before execution.
- If you delegate a phase, send the prompt file contents as the initial `spawn_agent` message.
- When writing the phase prompt file, append the standard progress file contract and the standard compact reply block below so the subagent knows how to surface progress before the final artifact.
- After each phase completes, write `.ai/<PROJECT>/<LETTER>/logs/phase-<name>.result.md` summarizing the status, files touched, and any follow-up notes.
- Use `fork_context: false` by default. If the phase depends on thread-only context or UI attachments, pass that context explicitly or enable `fork_context` only for that phase.
- Prefer `worker` for phases that write files. Use `default` for plan or review passes if that fits the host better. Use `explorer` only for narrow read-only questions.
- When supported, request `model: gpt-5.4` and `reasoning_effort: xhigh` for delegated phases.
- Default wait budget for delegated phases is 5 minutes while the phase is clearly still in progress. Successful completion may wake earlier, so this does not delay finished work.
- When a phase appears close to landing, use 1-2 minute waits until it finishes.
- A `wait_agent` timeout is not failure. On timeout, inspect both the expected artifact and the matching progress file before deciding anything.
- If the expected artifact exists and shows progress, wait again.
- If the expected artifact is not ready but the progress file mtime moved or its heartbeat counter increased since the previous check, wait again. Prefer mtime checks first and avoid rereading the file unless you need detail. Do not count that as a failed wait.
- If neither the expected artifact nor the progress file moved since the previous blocked check, send one short follow-up asking the same agent to refresh the progress file, finish the required artifact, and return the standard compact reply block, then wait again.
- If the same agent still produces no usable artifact and no meaningful progress-file movement after two full default waits and one follow-up, close it and retry the phase in a fresh subagent.
- For Phase 1, Phase 2, Phase 3, Phase 4, and Phase 6, if delegated retries still fail, stop and ask the user rather than rerunning the phase locally.
- Never use `codex exec`, background shell child processes, or JSONL child-session logging from this skill.
## Standard Progress File Contract
Append this verbatim to every delegated phase prompt:
```text
Before deep work, create or update the matching progress file in `.ai/<PROJECT>/<LETTER>/logs/`.
Use `<phase-name>.progress.md` as a concise heartbeat with:
- `Heartbeat: <N>` on the first line, incremented on each meaningful update
- Current step
- Files being read or edited
- Concrete findings or decisions so far
- Blocker or next checkpoint
Update it sparingly: preferably at natural milestones, and otherwise only after a longer quiet stretch such as roughly 5-10 minutes.
Keep it tiny so the parent can usually rely on file mtime or the heartbeat counter instead of rereading the whole file.
Do not wait until the final artifact to write progress.
```
## Standard Compact Reply Block
Append this verbatim to every delegated phase prompt:
```text
Before replying in chat, write the required artifact(s) to disk.
Reply in 8 lines or fewer using exactly these keys:
STATUS: <DONE|BLOCKED|APPROVED|NEEDS_CHANGES>
ARTIFACTS: <paths>
TOUCHED: <repo paths or none>
BLOCKER: <none or one short line>
Do not restate the full context, plan, diff, or long reasoning in the chat reply.
```
## Artifact-Based Completion Checks
- Phase 1 is complete only when `about.md` and `context.md` both exist and are non-empty.
- Phase 2 is complete only when `plan.md` exists, contains a `## Status` section, and no unintended source edits were made.
- Phase 3 is complete only when `plan.md` contains both `Phases:` in the Status section and `Assessed: yes`.
- Phase 4 is complete only when the target phase checkbox changed to checked and the touched-file list matches the owned write set, or the blocker explains any mismatch.
- Phase 5 is complete only when the build outcome is known and the build checkbox is updated on success.
- Phase 6a is complete only when `review<R>.md` exists and contains a verdict line.
- Phase 6b is complete only when the requested fixes were applied and the post-fix build outcome is known.
## Phase 0: Setup
Record the current time now and store it as `$START_TIME`. You will use this at the end to display total elapsed time.
Before running any phase prompts, determine whether this is a new project or a follow-up task.
Follow-up detection:
1. Extract the first word or token from the task description. Call it `FIRST_TOKEN`.
2. Check `.ai/` to see existing project names.
3. Check whether `.ai/<FIRST_TOKEN>/about.md` exists.
4. If the file exists, this is a follow-up task. The project name is `FIRST_TOKEN`. The task description is everything after `FIRST_TOKEN`.
5. If the file does not exist, this is a new project. The full input is the task description.
Do not proceed until you have determined follow-up vs new.
For new projects:
- Using the list of existing projects, pick a unique short name (1-2 lowercase words, hyphen-separated) that does not collide.
- Create `.ai/<PROJECT>/`, `.ai/<PROJECT>/a/`, and `.ai/<PROJECT>/a/logs/`.
- Set `<LETTER>` = `a`.
For follow-up tasks:
- Scan `.ai/<PROJECT>/` for existing task folders (`a/`, `b/`, ...). Find the latest one (highest letter).
- The previous task letter = that highest letter.
- The new task letter = next letter in sequence.
- Create `.ai/<PROJECT>/<LETTER>/` and `.ai/<PROJECT>/<LETTER>/logs/`.
Then proceed to Phase 1. Follow-up tasks do not skip context gathering. They use a modified Phase 1F prompt.
## Phase 1: Context (New Project, letter = `a`)
```text
You are a context-gathering agent for a large C++ codebase (Telegram Desktop).
TASK: <TASK>
YOUR JOB: Read AGENTS.md, inspect the codebase, find all files and code relevant to this task, and write two documents.
Steps:
1. Read AGENTS.md for project conventions and build instructions.
2. Search the codebase for files, classes, functions, and patterns related to the task.
3. Read all potentially relevant files. Be thorough and prefer reading more rather than less.
4. For each relevant file, note:
- file path
- relevant line ranges
- what the code does and how it relates to the task
- key data structures, function signatures, and patterns used
5. Look for similar existing features that could serve as a reference implementation.
6. Check api.tl if the task involves Telegram API.
7. Check .style files if the task involves UI.
8. Check lang.strings if the task involves user-visible text.
Write two files.
File 1: .ai/<PROJECT>/about.md
This file is not used by any agent in the current task. It exists solely as a starting point for a future follow-up task's context gatherer. No planning, implementation, or review phase should rely on it during the current task.
Write it as if the project is already fully implemented and working. It should contain:
- Project: What this project does (feature description, goals, scope)
- Architecture: High-level architectural decisions, which modules are involved, how they interact
- Key Design Decisions: Important choices made about the approach
- Relevant Codebase Areas: Which parts of the codebase this project touches, key types and APIs involved
Do not include temporal state like "Current State", "Pending Changes", "Not yet implemented", or "TODO". Describe the project as a complete, coherent whole.
File 2: .ai/<PROJECT>/a/context.md
This is the primary task-specific implementation context. All downstream phases should be able to work from this file plus the referenced source files. It must be self-contained. Include:
- Task Description: The full task restated clearly
- Relevant Files: Every file path with line ranges and descriptions
- Key Code Patterns: How similar things are done in the codebase, with snippets when useful
- Data Structures: Relevant types, structs, classes
- API Methods: Any TL schema methods involved, copied from api.tl when useful
- UI Styles: Any relevant style definitions
- Localization: Any relevant string keys
- Build Info: Build command and any special notes
- Reference Implementations: Similar features that can serve as templates
Be extremely thorough. Another agent with no prior context will rely on this file.
Do not implement code in this phase.
```
## Phase 1F: Context (Follow-up Task, letter = `b`, `c`, ...)
```text
You are a context-gathering agent for a follow-up task on an existing project in a large C++ codebase (Telegram Desktop).
NEW TASK: <TASK>
YOUR JOB: Read the existing project state, gather any additional context needed, and produce fresh documents for the new task.
Steps:
1. Read AGENTS.md for project conventions and build instructions.
2. Read .ai/<PROJECT>/about.md. This is the project-level blueprint describing everything done so far.
3. Read .ai/<PROJECT>/<PREV_LETTER>/context.md. This is the previous task's gathered context.
4. Understand what has already been implemented by reading the actual source files referenced in about.md and the previous context.
5. Based on the new task description, search the codebase for any additional files, classes, functions, and patterns that are relevant to the new task but not already covered.
6. Read all newly relevant files thoroughly.
Write two files.
File 1: .ai/<PROJECT>/about.md (rewrite)
Rewrite this file instead of appending to it. The new about.md must be a single coherent document that describes the project as if everything, including this new task's changes, is already fully implemented and working.
It should incorporate:
- everything from the old about.md that is still accurate and relevant
- the new task's functionality described as part of the project, not as a pending change
- any changed design decisions or architectural updates from the new task requirements
It should not contain:
- temporal state such as "Current State", "Pending Changes", or "TODO"
- history of how requirements changed between tasks
- references to "the old approach" versus "the new approach"
- task-by-task changelog or timeline
- information that contradicts the new task requirements
File 2: .ai/<PROJECT>/<LETTER>/context.md
This is the primary document for the new task. It must be self-contained and should include:
- Task Description: The new task restated clearly, with enough project background that an implementation agent can understand it without reading any other .ai files
- Relevant Files: Every file path with line ranges relevant to this task
- Key Code Patterns: How similar things are done in the codebase
- Data Structures: Relevant types, structs, classes
- API Methods: Any TL schema methods involved
- UI Styles: Any relevant style definitions
- Localization: Any relevant string keys
- Build Info: Build command and any special notes
- Reference Implementations: Similar features that can serve as templates
Be extremely thorough. Another agent with no prior context should be able to work from this file alone.
Do not implement code in this phase.
```
## Phase 2: Plan
```text
You are a planning agent. You must create a detailed implementation plan.
Read these files:
- .ai/<PROJECT>/<LETTER>/context.md
- Then read the specific source files referenced in context.md to understand the code deeply.
Create a detailed plan in: .ai/<PROJECT>/<LETTER>/plan.md
The plan.md should contain:
## Task
<one-line summary>
## Approach
<high-level description of the implementation approach>
## Files to Modify
<list of files that will be created or modified>
## Files to Create
<list of new files, if any>
## Implementation Steps
Each step must be specific enough that an agent can execute it without ambiguity:
- exact file paths
- exact function names
- what code to add, modify, or remove
- where exactly in the file (after which function, in which class, and so on)
Number every step. Group steps into phases if there are more than about eight steps.
### Phase 1: <name>
1. <specific step>
2. <specific step>
### Phase 2: <name> (if needed)
1. <specific step>
## Build Verification
- build command to run
- expected outcome
## Status
- [ ] Phase 1: <name>
- [ ] Phase 2: <name> (if applicable)
- [ ] Build verification
- [ ] Code review
Do not implement code in this phase.
```
## Phase 3: Plan Assessment
```text
You are a plan assessment agent. Review and refine an implementation plan.
Read these files:
- .ai/<PROJECT>/<LETTER>/context.md
- .ai/<PROJECT>/<LETTER>/plan.md
- Then read the actual source files referenced to verify the plan makes sense.
Assess the plan:
1. Correctness: Are the file paths and line references accurate? Does the plan reference real functions and types?
2. Completeness: Are there missing steps? Edge cases not handled?
3. Code quality: Will the plan minimize code duplication? Does it follow existing codebase patterns from AGENTS.md?
4. Design: Could the approach be improved? Are there better patterns already used in the codebase?
5. Phase sizing: Each phase should be implementable by a single agent in one session. If a phase has more than about 8-10 substantive code changes, split it further.
Update plan.md with your refinements. Keep the same structure but:
- fix any inaccuracies
- add missing steps
- improve the approach if you found better patterns
- ensure phases are properly sized for single-agent execution
- add a line at the top of the Status section: `Phases: <N>`
- add `Assessed: yes` at the bottom of the file
If the plan is small enough for a single agent (roughly 8 steps or fewer), mark it as a single phase.
Do not implement code in this phase.
```
## Phase 4: Implementation
Run one implementation unit per plan phase. Keep implementation phases sequential by default. Parallelize only if their write sets are disjoint and the plan makes that safe.
For each phase in the plan that is not yet marked as done, use this prompt:
```text
You are an implementation agent working on phase <N> of an implementation plan.
Read these files first:
- .ai/<PROJECT>/<LETTER>/context.md
- .ai/<PROJECT>/<LETTER>/plan.md
Then read the source files you will be modifying.
Your owned write set for this phase:
<OWNED_WRITE_SET>
YOUR TASK: Implement only Phase <N> from the plan:
<paste the specific phase steps here>
Rules:
- Follow the plan precisely.
- Follow AGENTS.md coding conventions.
- You are not alone in the codebase. Respect existing changes and do not revert unrelated work.
- Do not modify .ai/ files except to update the Status section in plan.md.
- When done, update plan.md Status section: change `- [ ] Phase <N>: ...` to `- [x] Phase <N>: ...`
- Do not work on other phases.
When finished, report what you did, which files you changed, and any issues encountered.
```
After each implementation phase:
1. Use a narrow read or search to confirm the status line was updated.
2. Verify the owned write set and touched files with a small diff summary such as `git diff --name-only`.
3. If more phases remain, run the next implementation phase.
4. If all phases are done, proceed to build verification.
## Phase 5: Build Verification
Only run this phase if the task modified project source code.
Prefer running the build in the main session because it is critical-path work. If you delegate it, use a worker subagent and wait immediately for the result.
```text
You are a build verification agent.
Read these files:
- .ai/<PROJECT>/<LETTER>/context.md
- .ai/<PROJECT>/<LETTER>/plan.md
The implementation is complete. Your job is to build the project and fix any build errors that block the planned work.
Steps:
1. Run (from repository root): cmake --build ./out --config Debug --target Telegram
2. If the build succeeds, update plan.md: change `- [ ] Build verification` to `- [x] Build verification`
3. If the build fails:
a. Read the error messages carefully
b. Read the relevant source files
c. Fix the errors in accordance with the plan and AGENTS.md conventions
d. Rebuild and repeat until the build passes
e. Update plan.md status when done
Rules:
- Only fix build errors. Do not refactor or improve code beyond what is needed for a passing build.
- Follow AGENTS.md conventions.
- If build fails with file-locked errors (C1041, LNK1104, "cannot open output file", or similar access-denied lock issues), stop and report the lock. Do not retry.
- You are not alone in the codebase. Respect existing changes and do not revert unrelated work.
When finished, report the build result and which files, if any, you changed.
```
## Phase 6: Code Review Loop
After build verification passes, run up to 3 review-fix iterations. Set iteration counter `R = 1`.
Review loop:
```text
LOOP:
1. Run review phase 6a with iteration R.
2. Read review<R>.md verdict:
- "APPROVED" -> go to FINISH
- "NEEDS_CHANGES" -> run fix phase 6b
3. After fix work completes and build passes:
R = R + 1
If R > 3 -> go to FINISH
Otherwise -> go to step 1
FINISH:
- Update plan.md: change `- [ ] Code review` to `- [x] Code review`
- Proceed to Phase 7 on Windows, otherwise proceed to Completion
```
### Step 6a: Code Review
```text
You are a code review agent for Telegram Desktop (C++ / Qt).
Read these files:
- .ai/<PROJECT>/<LETTER>/context.md
- .ai/<PROJECT>/<LETTER>/plan.md
- REVIEW.md
- If R > 1, also read .ai/<PROJECT>/<LETTER>/review<R-1>.md
Then run `git diff` to see the current uncommitted changes for this task.
Read the modified source files in full to understand the changes in context.
Perform a focused code review using these criteria, in order:
1. Correctness and safety: Obvious logic errors, missing null checks at API boundaries, potential crashes, use-after-free, dangling references, race conditions.
2. Dead code: Added or left-behind code that is never used within the scope of the changes.
3. Redundant changes: Diff hunks that have no functional effect.
4. Code duplication: Repeated logic that should be shared.
5. Wrong placement: Code added to a module where it does not logically belong.
6. Function decomposition: Whether an extracted helper would clearly improve readability.
7. Module structure: Only in exceptional cases where a large new chunk of code clearly belongs elsewhere.
8. Style compliance: REVIEW.md rules and AGENTS.md conventions.
Important guidelines:
- Review only the changes made, not pre-existing code outside the scope of the task.
- Be pragmatic. Each suggestion should have a clear, concrete benefit.
- Do not suggest comments, docstrings, or over-engineering.
Write your review to: .ai/<PROJECT>/<LETTER>/review<R>.md
The review document should contain:
## Code Review - Iteration <R>
## Summary
<1-2 sentence overall assessment>
## Verdict: <APPROVED or NEEDS_CHANGES>
If the verdict is NEEDS_CHANGES, continue with:
## Changes Required
### <Issue 1 title>
- Category: <dead code | duplication | wrong placement | function decomposition | module structure | style | correctness>
- File(s): <file paths>
- Problem: <clear description>
- Fix: <specific description of what to change>
Keep the list focused. Prioritize the most impactful issues.
When finished, report your verdict clearly as: APPROVED or NEEDS_CHANGES.
```
### Step 6b: Review Fix
```text
You are a review fix agent. You implement improvements identified during code review.
Read these files:
- .ai/<PROJECT>/<LETTER>/context.md
- .ai/<PROJECT>/<LETTER>/plan.md
- .ai/<PROJECT>/<LETTER>/review<R>.md
Then read the source files mentioned in the review.
YOUR TASK: Implement all changes listed in review<R>.md.
Rules:
- Implement exactly the review changes, nothing more.
- Follow AGENTS.md coding conventions.
- You are not alone in the codebase. Respect existing changes and do not revert unrelated work.
- Do not modify .ai/ files except where the review process explicitly requires it.
After all changes are made:
1. Build (from repository root): cmake --build ./out --config Debug --target Telegram
2. If the build fails, fix build errors and rebuild until it passes.
3. If build fails with file-locked errors (C1041, LNK1104, "cannot open output file", or similar access-denied lock issues), stop and report the lock. Do not retry.
When finished, report what changes were made and which files you touched.
```
## Phase 7: Windows Text Normalization
Run this phase only on Windows hosts and only after the review loop has finished.
Use the current task's result logs as the source of truth for what Codex touched. Do not sweep the whole repo and do not rewrite unrelated files from a dirty worktree.
```text
You are performing the final Windows-only text normalization phase for task-think.
Read these files:
- .ai/<PROJECT>/<LETTER>/plan.md
- .ai/<PROJECT>/<LETTER>/logs/phase-4*.result.md
- .ai/<PROJECT>/<LETTER>/logs/phase-5*.result.md
- .ai/<PROJECT>/<LETTER>/logs/phase-6*.result.md
Your job:
- Collect the union of repo file paths listed under "Touched files" in those result logs.
- Keep only files inside the repository that currently exist and are textual project files: source, headers, build/config files, localization files, style files, and similar text assets.
- Exclude `.ai/`, `out/`, binary files, and unrelated user files that were not touched by Codex in this task.
- Rewrite each kept file so all line endings are CRLF.
- If a kept file is UTF-8 or ASCII text, write it back as UTF-8 without BOM. Never add a UTF-8 BOM to source/config/project text files.
- Preserve file content otherwise. Preserve whether the file ended with a trailing newline.
Rules:
- Run this phase in the main session on Windows.
- Do not modify files outside the touched-file set for the current task.
- Do not rewrite binary files.
- When scripting this phase, do not use writer APIs or defaults that emit UTF-8 with BOM.
- If a file cannot be normalized safely, record it as a failure instead of silently skipping it.
When finished:
1. Write `.ai/<PROJECT>/<LETTER>/logs/phase-7-line-endings.result.md`
2. Include:
- whether the phase completed
- which files were normalized
- which files were skipped and why
- whether any UTF-8 BOMs were removed or verified absent
- any failures that need to be mentioned in the final summary
```
## Completion
When all phases, including build verification, code review, and Windows line ending normalization when applicable, are done:
1. Read the final `plan.md` and report the summary to the user.
2. Show which files were modified or created.
3. Note any issues encountered during implementation.
4. Summarize the code review iterations: how many rounds, what was found and fixed, or whether it was approved on the first pass.
5. On Windows, mention the text-normalization result briefly: which project files were normalized, whether any BOMs were removed, or whether nothing needed changes.
6. Calculate and display the total elapsed time since `$START_TIME` (format as `Xh Ym Zs`, omitting zero components).
7. Remind the user of the project name so they can request follow-up tasks within the same project.
## Error Handling
- If any phase fails or gets stuck, follow the timeout and retry rules above. Do not close an agent solely because the final artifact is missing while its progress file is still advancing. For Phase 1, Phase 2, Phase 3, Phase 4, and Phase 6, do not rerun locally after delegated retries fail; ask the user instead.
- If `context.md` or `plan.md` is not written properly by a phase, rerun that phase in a fresh subagent with more specific instructions.
- If build errors persist after the build phase's attempts, report the remaining errors to the user.
- If a review-fix phase introduces new build errors that it cannot resolve, report to the user.
## Prompt Delivery And Logs
For each phase:
1. Write the full prompt to `.ai/<PROJECT>/<LETTER>/logs/phase-<name>.prompt.md`
2. Delegate by sending that prompt text to a fresh subagent, or use it as a same-session checklist only for the designated main-session phases or when delegation was unavailable from the start
3. For delegated phases, expect a matching `.ai/<PROJECT>/<LETTER>/logs/phase-<name>.progress.md` heartbeat while work is in flight
4. Save a concise completion note to `.ai/<PROJECT>/<LETTER>/logs/phase-<name>.result.md`
For review iterations, include the iteration in the file name, for example:
- `phase-6a-review-1.prompt.md`
- `phase-6a-review-1.result.md`
- `phase-6b-fix-1.prompt.md`
- `phase-6b-fix-1.result.md`
## Subagent Pattern
Use this pattern conceptually for delegated phases:
1. Write the phase prompt file.
2. Spawn a fresh subagent with the phase prompt, usually with `fork_context: false`.
3. Require the agent to create the matching progress file early and refresh it sparingly: at natural milestones when possible, otherwise only after a longer quiet stretch such as roughly 5-10 minutes.
4. Wait in 5-minute intervals when the next step is blocked on that phase, checking both the final artifact and the progress file on timeout.
5. When the phase looks close to finishing, switch to 1-2 minute waits.
6. Prefer filesystem mtime checks on the progress file first. If its mtime moved or the heartbeat counter increased, keep waiting; do not treat that as a stall.
7. If neither the artifact nor the progress file moves, send one short follow-up to the same agent, then retry once with a fresh subagent before involving the user.
8. Validate the expected artifact or code changes with small shell summaries and the completion checks above.
9. Write the result log from the validated outcome and the compact reply block.
Do not replace this pattern with shell-launched `codex exec`.
+145
View File
@@ -0,0 +1,145 @@
---
name: task-think
description: Orchestrate a multi-phase implementation workflow for this repository with artifact files under .ai/<project-name>/<letter>/ using Codex subagents instead of shell-spawned child processes. Use when the user wants one prompt to drive context gathering, planning, plan assessment, implementation, build verification, and review with persistent artifacts, clear phase handoffs, and a thin parent thread. Prefer spawn_agent/send_input/wait_agent, keep heavy pre-build work delegated when possible, and avoid pulling timed-out phases back into the main session.
---
# Task Pipeline
Run a full implementation workflow with repository artifacts and clear phase boundaries.
## Inputs
Collect:
- task description
- optional project name (if missing, derive a short kebab-case name)
- optional constraints (files, architecture, risk tolerance)
- optional screenshot paths
If screenshots are attached in UI but not present as files, write a brief textual summary into the task artifacts before spawning fresh subagents so later phases can read the requirements without inheriting the whole parent thread.
## Overview
The workflow is organized around projects. Each project lives in `.ai/<project-name>/` and can contain multiple sequential tasks (labeled `a`, `b`, `c`, ... `z`).
Project structure:
```text
.ai/<project-name>/
about.md # Single source of truth for the entire project
a/ # First task
context.md # Gathered codebase context for this task
plan.md # Implementation plan
review1.md # Code review documents (up to 3 iterations)
review2.md
review3.md
logs/
phase-*.prompt.md
phase-*.progress.md
phase-*.result.md
b/ # Follow-up task
context.md
plan.md
review1.md
logs/
...
c/ # Another follow-up task
...
```
- `about.md` is the project-level blueprint: a single comprehensive document describing what this project does and how it works, written as if everything is already fully implemented. It contains no temporal state ("current state", "pending changes", "not yet implemented"). It is rewritten, not appended to, each time a new task starts, incorporating the new task's changes as if they were always part of the design.
- Each task folder (`a/`, `b/`, ...) contains self-contained files for that task. The task's `context.md` carries all task-specific information: what specifically needs to change, the delta from the current codebase, gathered file references, and code patterns. Planning, implementation, and review phases should rely on the current task folder.
## Artifacts
Create and maintain:
- `.ai/<project-name>/about.md`
- `.ai/<project-name>/<letter>/context.md`
- `.ai/<project-name>/<letter>/plan.md`
- `.ai/<project-name>/<letter>/review<R>.md` (up to 3 review iterations)
- `.ai/<project-name>/<letter>/logs/phase-<name>.prompt.md`
- `.ai/<project-name>/<letter>/logs/phase-<name>.progress.md` for delegated phases
- `.ai/<project-name>/<letter>/logs/phase-<name>.result.md`
Each `phase-<name>.result.md` should capture a concise outcome summary: whether the phase completed, which files it touched, and any follow-up notes or blockers.
Each delegated `phase-<name>.progress.md` should act as a heartbeat: a tiny monotonic counter plus current step, files being read or edited, concrete findings so far, and the next checkpoint. It is not a final artifact; it exists so the parent can distinguish active research from a truly stuck subagent without rereading large context.
## Phases
Run these phases sequentially:
1. Phase 0: Setup - Record start time, detect follow-up vs new project, create directories.
2. Phase 1: Context Gathering - Read codebase, write `about.md` and `context.md`. Use Phase 1F for follow-up tasks.
3. Phase 2: Planning - Read context, write detailed `plan.md` with numbered steps grouped into phases.
4. Phase 3: Plan Assessment - Review and refine the plan for correctness, completeness, code quality, and phase sizing.
5. Phase 4: Implementation - Execute one implementation unit per plan phase.
6. Phase 5: Build Verification - Build the project, fix any build errors. Skip if no source code was modified.
7. Phase 6: Code Review Loop - Run review and fix iterations until approved or the iteration limit is reached.
8. Phase 7: Windows Text Normalization - On Windows only, after review passes and before the final summary, normalize LF to CRLF for the text source/config files Codex edited in this task and ensure rewritten UTF-8 project files are saved without BOM.
Use the phase prompt templates in `PROMPTS.md`.
## Execution Mode
Use Codex subagents as the primary orchestration mechanism.
- When delegation is available, Phase 1, Phase 2, Phase 3, each Phase 4 implementation unit, and each Phase 6 review or review-fix pass must run in fresh subagents. Do not rerun those phases in the main session midstream just because a wait timed out or an artifact is missing.
- Run Phase 7 in the main session on Windows because it depends on the final local file state and the exact touched-file set for the current task.
- When any same-session helper rewrites Windows project text files, preserve CRLF and write UTF-8 without BOM. Avoid writer APIs or defaults that silently inject a UTF-8 BOM.
- The main session may read `context.md` once after Phase 1 and `plan.md` once after Phase 3. After that, prefer narrow shell checks, file existence checks, and status-line reads instead of rereading full documents or diffs.
- Prefer `worker` for phases that write files. Use `explorer` only for narrow read-only questions that unblock your next local step.
- Keep `fork_context` off by default. Pass the phase prompt and explicit file paths instead of the whole thread unless the phase truly needs prior conversational context or thread-only attachments.
- When the platform supports it, request `model: gpt-5.4` and `reasoning_effort: xhigh` for spawned phase agents. If overrides are unavailable, inherit the current session settings.
- Write the exact phase prompt to the matching `logs/phase-<name>.prompt.md` file before you delegate. Use the same prompt file as a checklist if you later need to fall back to same-session execution.
- For delegated phases, require an early `logs/phase-<name>.progress.md` heartbeat before deep work. The subagent should create or update it early, keep it tiny, and refresh it sparingly: preferably at natural milestones, and otherwise only after a longer quiet stretch such as roughly 5-10 minutes.
- In every delegated prompt, require a compact final reply with only status, artifact paths, touched files, and blocker or `none`. Detailed reasoning belongs in `.ai/` artifacts, not in the chat reply.
- After a subagent finishes, verify that the expected artifacts or code changes exist, then write a short result log in `logs/phase-<name>.result.md`.
- For delegated phases, use `wait_agent` with a 5-minute timeout by default while a phase is still clearly in progress. Successful completion may wake earlier, so this does not add latency to finished phases.
- When a phase looks close to completion — for example the final artifact has appeared, a build is in its final pass, or the agent said it is wrapping up — switch to 1-2 minute waits until it lands.
- A timeout is not a failure; it only means no final status arrived yet. Do not treat short waits as stall detection for research-heavy phases.
- On timeout, inspect the expected artifact, the phase progress file mtime, and the worktree for movement. Prefer mtime checks first; only reread the progress file when you need detail.
- If the progress file mtime moved or its heartbeat counter increased since the previous check, treat that as active progress and wait again.
- If no usable final artifact exists yet but the progress file is appearing or advancing, keep the same subagent alive. Progress-file movement does not count toward the retry limit.
- If no usable final artifact exists yet and neither the expected artifact nor the progress file has moved since the previous blocked check, send one short follow-up asking the same subagent to refresh the progress file, finish the artifact, and return the compact status block, then wait again.
- Only if the same subagent still shows no meaningful movement in either the expected artifact or the progress file after two full default waits and one follow-up should you close it and rerun that phase in a fresh subagent.
- Use `wait_agent` only when the next step is blocked on the result. While the delegated phase runs, do small non-overlapping local tasks such as validating directory structure or preparing the next prompt file.
- Build verification is critical-path work. Prefer running the build in the main session, and only delegate a bounded build-fix phase when there is a concrete reason.
- If subagents are unavailable in the current environment, or current policy does not allow delegation from the start, run the phase in the main session using the same prompt files. Otherwise, do not switch a pre-build phase to same-session midstream. Never fall back to shell-spawned `codex exec` child processes from this skill.
## Verification Rules
- If build or test commands fail due to file locks or access-denied outputs (C1041, LNK1104), stop and ask the user to close locking processes before retrying.
- Treat a delegated phase as complete only when the required artifact or status update exists on disk and matches the phase goals; do not rely on the chat reply alone.
- Never claim completion without:
- implemented code changes present
- build attempt results recorded
- review pass documented with any follow-up fixes
- on Windows, if the task edited project source/config text files, a CRLF / no-BOM normalization pass recorded after review
## Completion Criteria
Mark complete only when:
- All plan phases are done
- Build verification is recorded
- Review issues are addressed or explicitly deferred with rationale
- On Windows, Codex-edited project source/config text files have been normalized to CRLF, any UTF-8 rewrites were saved without BOM, and the result is logged
- Display total elapsed time since start (format: `Xh Ym Zs`, omitting zero components)
- Remind the user of the project name so they can request follow-up tasks within the same project
## Error Handling
- If any phase fails, times out, or gets stuck, follow the retry ladder from Execution Mode. Do not close an agent solely because the final artifact is missing while its progress file is still moving. After two delegated attempts remain blocked with no meaningful progress, report the issue to the user. Do not absorb the phase into the main session before build unless delegation was unavailable from the start.
- If `context.md` or `plan.md` is not written properly by a phase, rerun that phase in a fresh subagent with more specific instructions. Do not repair it locally before build unless delegation was unavailable from the start.
- If build errors persist after the build phase's attempts, report the remaining errors to the user.
- If a review-fix phase introduces new build errors that it cannot resolve, report to the user.
- If Phase 7 cannot safely normalize a touched file on Windows or remove an introduced UTF-8 BOM from a touched project text file, record the failure in the result log and report it in the final summary instead of silently skipping it.
## User Invocation
Use plain language with the skill name in the request, for example:
`Use local task-think skill with subagents: make sure FileLoadTask::process does not create or read QPixmap on background threads; use QImage with ARGB32_Premultiplied instead.`
For follow-up tasks on an existing project:
`Use local task-think skill with subagents: my-project also handle the case where the file is already cached`
If screenshots are relevant, include file paths in the same prompt when possible.
-57
View File
@@ -1,57 +0,0 @@
---
Language: Cpp
BasedOnStyle: LLVM
AccessModifierOffset: -4
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignOperands: false
AlignTrailingComments: false
AllowShortCaseLabelsOnASingleLine: true
AllowShortIfStatementsOnASingleLine: true
AllowShortLoopsOnASingleLine: true
AlwaysBreakTemplateDeclarations: Yes
BinPackArguments: false
BinPackParameters: false
BraceWrapping:
AfterCaseLabel: false
AfterClass: true
AfterControlStatement: false
AfterEnum: true
AfterFunction: false
AfterNamespace: false
AfterStruct: true
AfterUnion: true
AfterExternBlock: true
BeforeCatch: false
BeforeElse: false
BeforeLambdaBody: true
BeforeWhile: false
SplitEmptyFunction: true
SplitEmptyRecord: true
SplitEmptyNamespace: true
BreakBeforeBraces: Custom
ColumnLimit: 120
IncludeCategories:
- Regex: '^<.*'
Priority: 1
- Regex: '^".*'
Priority: 2
- Regex: '.*'
Priority: 3
IncludeIsMainRegex: '([-_](test|unittest))?$'
IndentCaseLabels: true
IndentWidth: 4
InsertNewlineAtEOF: true
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 2
SpaceAfterCStyleCast: true
SpaceAfterTemplateKeyword: false
SpaceInEmptyParentheses: false
SpacesInAngles: false
SpacesInConditionalStatement: false
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
TabWidth: 4
UseTab: Always
...
+306
View File
@@ -0,0 +1,306 @@
---
description: Generate an SVG icon from a design mockup using vectosolve vectorization
allowed-tools: Read, Write, Edit, Glob, Grep, Bash, Agent, AskUserQuestion, TodoWrite, mcp__vectosolve__vectorize
---
# Icon - SVG Icon Generation from Design Mockup
You generate production-quality SVG icons for Telegram Desktop by vectorizing design mockup screenshots using the vectosolve MCP service, then post-processing the result to match the Telegram icon format.
**Arguments:** `$ARGUMENTS` = "$ARGUMENTS"
If `$ARGUMENTS` is empty, ask the user to describe the icon they want and paste a cropped screenshot of it.
## Overview
The workflow takes a cropped screenshot of an icon from a design mockup (grabbed from the clipboard), vectorizes it via the vectosolve MCP, then post-processes the SVG (recolor to white-on-transparent, restructure to minimal format, set 24x24 output size).
Working directory: `.ai/icon_{name}/` with iterations labeled by letter (`a/`, `b/`, ...), each containing `source.png`. Output SVGs are in the icon root: `a.svg`, `b.svg`, etc.
Follow-ups are supported: `/icon {icon_name} <description>` continues from where the previous run left off.
## Phase 0: Setup
**Record the current time** (using `date` or equivalent) as `$START_TIME`.
### Step 0a: Clipboard grab (MUST be the VERY FIRST action)
If there is an image attached to the user's message:
1. Generate a random 8-character hex string for `HASH` (use `openssl rand -hex 4` or similar).
2. **IMMEDIATELY** — before any other processing — run this Bash command to save the clipboard image:
```bash
HASH=$(openssl rand -hex 4) && if [[ "$OSTYPE" == darwin* ]]; then bash .claude/grab_clipboard.sh ".ai/icon_${HASH}.png"; else powershell -ExecutionPolicy Bypass -File .claude/grab_clipboard.ps1 ".ai/icon_${HASH}.png"; fi
```
On macOS `.claude/grab_clipboard.sh` is used; on Windows `.claude/grab_clipboard.ps1`. Both grab the current clipboard image and save it to the specified path.
3. If the command fails (exit 1 / no image on clipboard):
- Tell the user: **"Clipboard doesn't contain an image. Please copy the icon area first, then retry."** (On macOS: Cmd+Ctrl+Shift+4 to snip to clipboard; on Windows: Win+Shift+S.)
- **STOP IMMEDIATELY. Do NOT continue.** You cannot use the image pasted in the conversation — it exists only as pixels in the chat, not as a file you can send to vectosolve. The clipboard grab is the ONLY way to get the image to disk. Do not attempt any workaround.
4. Read back the saved `.ai/icon_HASH.png` using the Read tool.
5. Compare it visually with the image pasted in the conversation. They should depict the same thing.
- If they look **completely different**: delete `.ai/icon_HASH.png` and fail:
> "The clipboard image doesn't match what you pasted. Please re-copy and retry."
- If they look the same (or close enough): proceed. Store the temp path.
If NO image is attached to the message, skip this step entirely.
### Step 0b: Fail-fast — verify vectosolve MCP
Check that the `mcp__vectosolve__vectorize` tool is available by looking at your available tools list. If it is NOT available, fail immediately with:
> vectosolve MCP is not configured. Set it up with:
> ```
> claude mcp add vectosolve --scope user -e VECTOSOLVE_API_KEY=vs_xxx -- npx @vectosolve/mcp
> ```
> Then restart Claude Code.
### Step 0c: Follow-up detection
Extract the first word/token from `$ARGUMENTS` (everything before the first space or newline). Call it `FIRST_TOKEN`.
Run these TWO commands using the Bash tool, **IN PARALLEL**:
1. `ls .ai/` — to see all existing icon project names
2. `ls .ai/icon_{FIRST_TOKEN}/context.md` — to check if this specific icon project exists
**Evaluate the results:**
- If command 2 **succeeds** (context.md exists): this is a **follow-up**. The icon name is `FIRST_TOKEN`. The follow-up description is everything in `$ARGUMENTS` after `FIRST_TOKEN`.
- If command 2 **fails** (not found): this is a **new icon**. The full `$ARGUMENTS` is the icon description.
### Step 0d: New icon setup
1. Parse `$ARGUMENTS` to determine:
- **Icon description**: what the icon should depict
- **Icon type**: default is `menu` (24x24 menu/button icon). User may specify otherwise.
- **Target subfolder**: `menu/` by default, or another subfolder if specified.
2. Choose an icon file name:
- Lowercase letters and underscores only — **NO hyphens**
- Match existing naming conventions (check `Telegram/Resources/icons/{subfolder}/`)
- Must NOT conflict with existing icons
- Must NOT collide with existing `.ai/icon_{name}/` directories
3. Create `.ai/icon_{name}/` and `.ai/icon_{name}/a/`.
4. Write `.ai/icon_{name}/context.md` with:
```
## Icon: {icon_name}
Type: {menu/other}
Target: Telegram/Resources/icons/{subfolder}/{icon_name}.svg
## Original Request
{full $ARGUMENTS text}
## Follow-ups
(none yet)
```
5. Set `LETTER` to `a`.
### Step 0e: Follow-up setup
1. Read `.ai/icon_{name}/context.md` to get the icon type, subfolder, and full history.
2. Find the latest existing letter folder in `.ai/icon_{name}/` (highest letter).
3. Set `LETTER` to the next letter after the latest.
4. Create `.ai/icon_{name}/{LETTER}/`.
5. Update `.ai/icon_{name}/context.md` — append the follow-up description to the `## Follow-ups` section:
```
### Follow-up (starting at letter {LETTER})
{follow-up description}
```
### Step 0f: Place source image
If a clipboard image was grabbed in Step 0a:
1. Copy (or move) `.ai/icon_HASH.png` → `.ai/icon_{name}/source.png` (overwrite if exists — this is always the latest source).
2. Copy it to `.ai/icon_{name}/{LETTER}/source.png` (archive per-iteration source).
3. Delete the temp `.ai/icon_HASH.png` if it was copied (not moved).
If NO image was grabbed:
- **New icon with no image**: Ask the user to provide a screenshot. STOP.
- **Follow-up with no image**: The existing `source.png` in the icon root carries forward. Copy it to `.ai/icon_{name}/{LETTER}/source.png`. If no source.png exists at all, ask the user for an image.
### Step 0g: Verify renderer
Locate the render tool (`codegen_style` with `--render-svg` mode):
```bash
if [[ "$OSTYPE" == darwin* ]]; then
ls out/Telegram/codegen/codegen/style/Debug/codegen_style
else
ls out/Telegram/codegen/codegen/style/Debug/codegen_style.exe
fi
```
If missing, build it: `cmake --build out --config Debug --target codegen_style`
Test on a known good SVG (use the appropriate binary path for the OS):
```bash
CODEGEN=$(if [[ "$OSTYPE" == darwin* ]]; then echo out/Telegram/codegen/codegen/style/Debug/codegen_style; else echo out/Telegram/codegen/codegen/style/Debug/codegen_style.exe; fi)
$CODEGEN --render-svg Telegram/Resources/icons/menu/tag_add.svg .ai/icon_{name}/test_render.png 512
```
If works → delete test render, set `RENDER_AVAILABLE = true`. If fails → `RENDER_AVAILABLE = false`.
## Phase 1: Vectorize & Post-process
### Step 1a: Call vectosolve
Use the `mcp__vectosolve__vectorize` tool with `file_path` set to the **absolute path** of `.ai/icon_{name}/{LETTER}/source.png`.
**If this fails, STOP IMMEDIATELY.** Do NOT try to generate the SVG manually or by any other means. Report the error to the user and let them fix the issue (bad API key, no credits, network error, etc.).
Save the returned SVG content to `.ai/icon_{name}/{LETTER}/raw_vectosolve.svg`.
The MCP tool calls the vectosolve API ($0.20/call). The API key is stored in `~/.claude.json` MCP config (never in the repository).
### Step 1b: Post-process the SVG
The vectosolve SVG will have colors from the mockup, arbitrary dimensions, and possibly a non-square aspect ratio from a non-square screenshot crop. Post-processing fixes this by adjusting the **viewBox** — leave path coordinates untouched.
**Do NOT transform path coordinates.** Vectosolve's paths are correct — the only thing wrong is the framing. All geometry adjustments are done by manipulating the `viewBox` and the `width`/`height` attributes.
#### Sub-step 1: Read the request and determine parameters
Before touching the SVG, determine these from the user's request and context.md:
1. **Output size** (`OUT_W × OUT_H`): default is `24px × 24px` for menu icons. The user may request different dimensions (e.g., 36×36, 48×48, or non-square). Always check the request.
2. **Content padding**: default is ~2px equivalent on each side at the output scale (so content fills roughly (OUT_W-4) × (OUT_H-4)). The user may request different padding or edge-to-edge.
3. **Centering**: default is centered both horizontally and vertically. The user may request specific alignment (e.g., "align to bottom").
#### Sub-step 2: Parse the raw SVG
1. Extract the `viewBox`: `viewBox="VB_X VB_Y VB_W VB_H"` (typically `0 0 W H`).
2. Identify ALL paths. Classify each:
- **Background**: a rect or path spanning the full viewBox (first path that's a simple rectangle matching the viewBox bounds). **Remove it entirely.**
- **Content**: the actual icon shapes. **Keep these, paths unchanged.**
3. If paths have `transform="translate(TX,TY)"` attributes, that's fine — keep them as-is. The viewBox framing will work regardless.
#### Sub-step 3: Compute the content bounding box
Estimate the bounding box of the content paths (after removing the background). You can either:
- Eyeball it from the path coordinates (look at first/last M commands and extremes of curves)
- Or for precision, write a quick script to parse the paths and find min/max X/Y
Call the result: `CX_MIN, CY_MIN, CX_MAX, CY_MAX`. Content dimensions: `CW = CX_MAX - CX_MIN`, `CH = CY_MAX - CY_MIN`.
#### Sub-step 4: Compute the new viewBox
The viewBox determines what part of the SVG coordinate space maps to the output rectangle. By expanding the viewBox beyond the content bounds, we add padding. By making the viewBox aspect ratio match the output aspect ratio, we prevent stretching.
1. **Output aspect ratio**: `OUT_AR = OUT_W / OUT_H` (for 24×24 this is 1.0).
2. **Padding in SVG coordinates**: we want ~2px padding at output scale. The scale factor is `OUT_W / VB_CONTENT_W` approximately, so padding in SVG coords = `2 * (CW / (OUT_W - 4))` (or similar — the exact formula depends on which dimension is dominant). Simpler approach: aim for content to occupy ~83% of the viewBox (≈ 20/24), so:
- `PADDED_W = CW / 0.83`
- `PADDED_H = CH / 0.83`
3. **Match output aspect ratio**: the viewBox aspect ratio must equal `OUT_AR` to avoid stretching.
- If `PADDED_W / PADDED_H > OUT_AR`: width is dominant → `VB_W = PADDED_W`, `VB_H = VB_W / OUT_AR`
- If `PADDED_W / PADDED_H < OUT_AR`: height is dominant → `VB_H = PADDED_H`, `VB_W = VB_H * OUT_AR`
- If equal: `VB_W = PADDED_W`, `VB_H = PADDED_H`
4. **Center the content** in the new viewBox:
- `VB_X = CX_MIN - (VB_W - CW) / 2`
- `VB_Y = CY_MIN - (VB_H - CH) / 2`
- (Adjust if the user requested non-centered alignment)
The new viewBox is: `viewBox="VB_X VB_Y VB_W VB_H"`.
#### Sub-step 5: Recolor to white-on-transparent
- Replace ALL `fill` color values (anything that isn't `none`) with `#FFFFFF`.
- Remove ALL `stroke` and `stroke-width` attributes entirely.
- Remove `opacity` attributes if present.
#### Sub-step 6: Determine path composition
Look at the icon's visual structure and decide how paths should combine:
- **Outlined shape** (e.g., circle outline with something inside): combine outer + inner cutout into one `<path>` with `fill-rule="evenodd"`.
- **Separate distinct parts** (e.g., magnifying glass + checkmark): keep as separate `<path>` elements.
- **Filled shape with cutout** (e.g., filled circle with checkmark punched out): combine into one path with `fill-rule="evenodd"`.
#### Sub-step 7: Assemble final SVG
```xml
<?xml version="1.0" encoding="UTF-8"?>
<svg width="{OUT_W}px" height="{OUT_H}px" viewBox="{VB_X} {VB_Y} {VB_W} {VB_H}" xmlns="http://www.w3.org/2000/svg">
<g stroke="none" fill="none" fill-rule="evenodd">
<path d="..." fill="#FFFFFF"></path>
</g>
</svg>
```
- `width`/`height` = the output size from the request (default `24px`/`24px`).
- `viewBox` = the computed viewBox from Sub-step 4. The SVG renderer maps this coordinate region to the output size.
- Path `d` attributes are **unchanged** from vectosolve output (just background removed, colors replaced).
- No `<title>`, `id`, `xmlns:xlink`, `version`, `class`, `style`, XML comments, `<metadata>`, or `preserveAspectRatio`.
- No `<circle>`, `<rect>`, `<line>` — only `<path>`.
Write the final SVG to `.ai/icon_{name}/{LETTER}.svg`.
### Step 1c: Render
If `RENDER_AVAILABLE`:
```bash
$CODEGEN --render-svg ".ai/icon_{name}/{LETTER}.svg" ".ai/icon_{name}/render_{LETTER}.png" 512
```
Read the render to visually verify the result.
## Phase 2: Review
After rendering, assess the result:
1. **Recognizable?** The icon should be clearly identifiable as the intended symbol.
2. **Scale reasonable?** Should fill the space appropriately with ~2-3px padding.
3. **Clean lines?** No broken paths, artifacts, or unwanted elements.
4. **Correct colors?** All white on transparent (no leftover colors from the mockup).
If the result looks good → proceed to Phase 3 (Output).
If there are fixable issues (stray element, missed color, etc.) → fix the SVG directly, re-render, and re-check.
If the result is poor (vectosolve couldn't handle the input well) → report to the user and suggest:
- Trying a cleaner/larger crop of the icon
- Providing a different screenshot
- Following up: `/icon {icon_name} <description of what to change>`
## Phase 3: Output
1. Read the `Target:` line from `.ai/icon_{name}/context.md` to get the output path.
2. Copy the final SVG to that target path (e.g., `Telegram/Resources/icons/menu/{icon_name}.svg`).
3. Update `.ai/icon_{name}/context.md` — append to the end:
```
## Latest Output
Letter: {LETTER}
Written to: {target_path}
```
4. Report to the user:
- Final icon file path
- Number of vectosolve calls made (cost at $0.20/call)
- Suggest verifying visually
- Working directory `.ai/icon_{name}/` has all iterations
- Elapsed time since `$START_TIME` (format `Xm Ys`)
- Follow-up: `/icon {icon_name} <description of what to change>`
## Text-only Follow-ups (no new image)
When a follow-up has no attached image, the user wants to refine the existing SVG based on text feedback. In this case:
1. Skip Phase 1 (no vectosolve call needed).
2. Read the latest SVG (`.ai/icon_{name}/{prev_letter}.svg`).
3. Read the latest render if available.
4. Apply the user's requested changes by editing the SVG directly.
5. Save as `.ai/icon_{name}/{LETTER}.svg`.
6. Render, review, and output as normal (Phases 1c → 3).
If the changes are too complex for manual SVG editing, suggest the user provide a new screenshot instead.
## Error Handling
- If clipboard grab fails → tell user to re-copy and retry.
- If vectosolve returns an error → report it and suggest a different/cleaner screenshot.
- If vectosolve returns SVG that can't be parsed → save raw output for debugging, report to user.
- If the render helper fails → set `RENDER_AVAILABLE = false`, continue with SVG-only review.
- If post-processing produces a broken SVG → fall back to the raw vectosolve output and do lighter cleanup.
+122
View File
@@ -0,0 +1,122 @@
---
description: Plan and create a repetitive task automation (prompt.md + tasks.json pair)
allowed-tools: Read, Write, Edit, Glob, Grep, Bash(mkdir:*), Bash(ls:*), AskUserQuestion
---
# Task Planner - Create Automated Task Workflows
You are setting up a new **repetitive task automation** for Claude Code. The goal is to create a folder in `.ai/<featurename>/` containing:
- `prompt.md` - Detailed instructions for the autonomous agent
- `tasks.json` - List of tasks with completion tracking
This pair can then be executed via `.claude/iterate.ps1 <featurename>`.
## Your Workflow
### 1. Understand the Goal
First, understand what the user wants to automate. Ask clarifying questions using AskUserQuestion if needed:
- What is the overall goal/feature being implemented?
- What are the individual tasks involved?
- Are there dependencies between tasks?
- What files/areas of the codebase are involved?
- Are there any reference examples or patterns to follow?
### 2. Choose a Feature Name
The `<featurename>` should be:
- Short (1-2 words, lowercase, hyphen-separated)
- Easy to type on command line
- Descriptive of the work being done
- Not already used in `.ai/`
Check existing folders:
```bash
ls .ai/
```
Suggest a name to the user or let them specify one directly via $ARGUMENTS.
### 3. Create the Folder and Files
Create `.ai/<featurename>/`:
**prompt.md** should include:
- Overview of what we're doing
- Architecture/context needed
- Step-by-step instructions for each task type
- Code patterns and examples
- Build/test commands
- Commit message format (see below)
### Commit Message Guidelines
All prompts should specify commit message length requirements:
- **Soft limit**: ~50 characters (ideal length for first line)
- **Hard limit**: 76 characters (must not exceed)
Example instruction for prompt.md:
```
## Commit Format
First line: Short summary ending with a dot (aim for ~50 chars, max 76 chars)
<Optional body with details, also ending with a dot.>
IMPORTANT: Never try to commit files in .ai/
```
**tasks.json** format:
```json
{
"tasks": [
{
"id": "task-id",
"title": "Short task title",
"description": "Detailed description of what to do",
"started": false,
"completed": false,
"dependencies": ["other-task-id"]
}
]
}
```
### 4. Iterate with the User
After creating initial files, the user may want to:
- Add more tasks to tasks.json
- Refine the prompt with more details
- Add examples or patterns
- Clarify instructions
Keep refining until the user is satisfied.
## Arguments
If `$ARGUMENTS` is provided, it's the feature name to use:
- `$ARGUMENTS` = "$ARGUMENTS"
If empty, you'll need to determine/suggest a name based on the discussion.
## Examples
### Example 1: Settings Migration
```
/taskplanner settings-upgrade
```
Creates `.ai/settings-upgrade/` with prompt and tasks for migrating settings sections.
### Example 2: Open-ended
```
/taskplanner
```
Starts a conversation to understand what needs to be automated, then creates the appropriate folder.
## Starting Point
Let's begin! Please describe:
1. What repetitive coding task do you want to automate?
2. What is the end goal?
3. Do you have initial tasks in mind, or should we discover them together?
+136
View File
@@ -0,0 +1,136 @@
---
description: Learn from corrections — examine staged vs unstaged diffs and optionally distill insights into AGENTS.md or REVIEW.md
allowed-tools: Read, Edit, Bash(git diff:*), Bash(git status:*), Bash(git log:*), Bash(ls:*), AskUserQuestion
---
# Reflect — Learn from Corrections
You are a reflection agent. Your job is to examine the difference between what an AI agent produced (staged changes) and what the user corrected (unstaged changes), and determine whether any **general, reusable insight** can be extracted and added to the project's coding guidelines.
**CRITICAL: Use extended thinking ultrathink for your analysis. This requires deep, careful reasoning.**
## Arguments
`$ARGUMENTS` = "$ARGUMENTS"
If `$ARGUMENTS` is provided, it is a task name (project name from the `/task` workflow). This means the agent was working within `.ai/<task-name>/` and you should read the task context for deeper understanding of what the agent was trying to do.
If `$ARGUMENTS` is empty, skip the task context step — just work from the diffs alone.
## Context
The workflow is:
1. An AI agent implemented something and its changes were staged (`git add`).
2. The user reviewed and corrected the agent's work. These corrections are unstaged.
3. You are now invoked to reflect on what went wrong and whether it reveals a pattern.
## Step 1: Gather the Diffs and Task Context
Run these commands in parallel:
```bash
git diff --cached # What the agent wrote (staged)
git diff # What the user corrected (unstaged, on top of staged)
git status # Which files are involved
```
If either diff is empty, tell the user and stop. Both diffs must be non-empty for reflection to be meaningful.
### Task context (only if `$ARGUMENTS` is non-empty)
The task name is `$ARGUMENTS`. Read the task's project context:
1. Read `.ai/$ARGUMENTS/about.md` — the project-level description of what this feature does.
2. Find the latest task iteration folder: list `.ai/$ARGUMENTS/` and pick the folder with the highest letter (`a`, `b`, `c`, ...).
3. Read `.ai/$ARGUMENTS/<latest-letter>/context.md` — the detailed implementation context the agent was working from.
This helps you distinguish between:
- **Task-specific mistakes** — the agent misunderstood this particular feature's requirements or made a wrong choice within the specific problem. These are NOT documentation-worthy.
- **General convention mistakes** — the agent did something that violates a pattern the codebase follows broadly, regardless of which feature is being implemented. These ARE potentially documentation-worthy.
Having the task context makes this distinction much sharper. Without it, you might mistake a task-specific correction for a general pattern or vice versa.
## Step 2: Read the Current Guidelines
Read both files:
- `AGENTS.md` — development guidelines: build system, coding style, API usage patterns, UI styling, localization, rpl, architectural conventions, "how to do things"
- `REVIEW.md` — mechanical style and formatting rules: brace placement, operator position, type checks, variable initialization, call formatting
Read them carefully. You need to know exactly what's already documented to avoid duplicates and detect contradictions.
## Step 3: Analyze the Corrections
Now think deeply. For each correction the user made, ask yourself:
1. **What did the agent do wrong?** Understand the specific mistake.
2. **Why was it wrong?** Identify the underlying principle.
3. **Is this already covered by AGENTS.md or REVIEW.md?** Check carefully:
- If the existing rule's scope, title, and examples **clearly cover** this exact scenario and the agent just ignored it — that's not a documentation problem. Skip it.
- If the existing rule **technically applies** but its scope is too narrow, its examples don't illustrate this usage pattern, or its wording would reasonably lead an agent to think it doesn't apply here — **the rule needs improvement**. Treat this as a potential insight (broaden the scope, add examples, adjust wording). A rule that agents repeatedly violate is an ineffective rule.
4. **Is this specific to this particular task, or is it general?** Most corrections are task-specific ("wrong variable here", "this should call that function instead"). These are NOT documentation-worthy. Only patterns that would apply across many different tasks are worth capturing.
5. **Would documenting this actually help a future agent?** Some things are too context-dependent or too obvious to be useful as a written rule. Be honest about this.
## Step 4: Decision
After analysis, you MUST reach one of these conclusions:
### Conclusion A: No actionable insight
The corrections are purely task-specific, or the existing documentation clearly and specifically covers the exact scenario and the agent simply ignored it. Say what the corrections were and why no doc changes are needed. Then **stop**.
### Conclusion B: New insight found
You can articulate a **concise, general rule** that:
- Applies broadly (not just to this one task)
- Is not already documented
- Would genuinely help a future agent avoid the same class of mistake
- Can be expressed in a few sentences with a clear code example
If you have a new insight, proceed to Step 5.
### Conclusion C: Existing rule needs improvement
A rule already exists in AGENTS.md or REVIEW.md, but its **scope is too narrow**, its **examples don't cover** the pattern the agent encountered, or its **wording** would reasonably lead an agent to think the rule doesn't apply. The agent's mistake is evidence the rule isn't effective.
This is NOT the same as Conclusion A. The test: would a careful agent, reading the existing rule, clearly know it applies to this specific situation? If no — the rule needs to be broadened, its examples expanded, or its title/scope adjusted. Proceed to Step 5.
**Common signs of an ineffective rule:**
- The rule's title or scope restricts it to a context narrower than the actual principle (e.g., "in localization calls" when the pattern applies generally)
- The examples only show one usage pattern, and the agent encountered a different one
- The wording describes *what* to use but not *when* — so agents only apply it in situations that look like the examples
## Step 5: Categorize and Check for Contradictions
### Where does it belong?
- **REVIEW.md** — if it's a mechanical/style rule: formatting, naming, syntax preferences, call structure, brace/operator placement, type usage patterns. Rules that can be checked by looking at code locally without understanding the broader feature.
- **AGENTS.md** — if it's an architectural/behavioral guideline: how to use APIs, where to place code, design patterns, build conventions, module organization, reactive patterns (rpl), localization usage, style system usage. Rules that require understanding the broader context.
### Does it contradict existing content?
Read the target file again carefully. Check if:
1. The new insight **contradicts** an existing rule — if so, do NOT just append or just remove. Instead, use AskUserQuestion to present both the existing rule and the new insight to the user, explain the contradiction, and ask how to reconcile them.
2. The new insight **overlaps** with an existing rule — if so, consider whether the existing rule should be extended/refined rather than adding a separate entry.
3. The new insight is **complementary** — it adds something new without conflicting. This is the simplest case.
## Step 6: Propose the Change
**Do NOT silently edit the files.** First, present your proposed change to the user:
- Quote the exact text you want to add or modify
- Explain which file and where in the file
- Explain why this is general enough to document
- If modifying existing text, show the before and after
Use AskUserQuestion to get the user's approval before making any edit.
Only after the user approves, apply the edit using the Edit tool.
## Rules
- **Keep docs lean and high-signal.** Don't add vague or overly specific rules. But don't default to inaction either — if the user had to manually fix something that a better-worded rule would have prevented, improving that rule is high-signal work.
- **Never dump corrections verbatim.** The goal is distilled principles, not a changelog of mistakes.
- **One insight per reflection, maximum.** If you think you see multiple insights, pick the strongest one. You can always run `/reflect` again next time.
- **Keep the same style.** Match the formatting, tone, and level of detail of the target file. REVIEW.md uses specific before/after code examples. AGENTS.md uses explanatory sections with code snippets.
- **Don't add "don't do X" rules.** Frame rules positively: "do Y" is better than "don't do X." Show the right way, not just the wrong way.
- **No meta-commentary.** Don't add notes like "Added after reflection on..." — the rule should read as if it was always there.
+119
View File
@@ -0,0 +1,119 @@
---
description: Prepare changelog, set version, and commit a new release
allowed-tools: Read, Bash, Edit, Grep, AskUserQuestion
---
# Release — Changelog, Set Version, Commit
Full release flow: generate changelog entry, run `set_version`, and commit.
**Arguments:** `$ARGUMENTS` = "$ARGUMENTS"
Parse `$ARGUMENTS` for two optional parts (in any order):
- A **version number** like `6.7` or `6.7.0` — if provided, use it as the new version exactly.
- The word **"beta"** — if present, mark the release as beta.
If no version number is given, auto-increment the patch component (see step 2).
## Steps
### 1. Check git status is clean
Run `git status --porcelain`. If there are any uncommitted changes, **stop** and ask the user to commit or discard them before proceeding. Do not continue until status is clean.
### 2. Read the current changelog
Read `changelog.txt` from the repository root. Note the **latest version number** on the first line (e.g. `6.6.3 beta (12.03.26)`). Parse its major.minor.patch components.
### 3. Determine the new version number
**Important:** version numbers are shared across the beta and stable tracks — the sequence advances through both. The same `major.minor.patch` cannot be released as both beta and stable. A beta release "uses up" that number; the next stable must bump to a new patch.
- **If a version was provided in arguments**, use it directly (append `.0` if only major.minor was given). If the latest changelog entry already used this exact number (regardless of beta/stable), warn the user — they likely want a bumped patch.
- **If no version was provided**, auto-increment from the latest changelog version:
- If it was a beta, and the new release is **not** beta, bump the patch component by 1 (do **not** reuse the beta's number for stable).
- If the new release is beta and the latest was also beta with the same major.minor, bump patch.
- Otherwise bump the patch component by 1.
- Present the chosen version to the user and ask for confirmation before proceeding. If the user suggests a different version, use that instead.
### 4. Fetch tags and determine the last release tag
Run `git fetch origin --tags` first to ensure all tags from the public repository are available locally. Then run `git tag --sort=-v:refname` and find the most recent `v*` tag. This is the baseline for the diff.
### 5. Collect commits
Run `git log <last-tag>..HEAD --oneline` to get all commits since the last release.
### 6. Write the changelog entry
Analyze every commit message. Group them mentally into features, improvements, and bug fixes. Then produce **brief, user-facing bullet points** following these rules:
- **Style:** Match the existing changelog tone exactly — short, imperative sentences starting with a verb (Fix, Add, Allow, Show, Improve, Support…). Keep the trailing periods (the existing changelog uses them).
- **Brevity:** Each bullet should be one short sentence, around 80 characters when possible. No implementation details. No commit hashes.
- **Selection:** Only include changes that matter to end users. Skip CI, build infra, submodule bumps, code style, refactors, and intermediate WIP commits. Collapse many related commits (e.g. a dozen image-editor commits) into one or two bullets.
- **Ordering:** Features first, then improvements, then bug fixes.
- **Quantity:** Aim for 4-12 bullets total depending on the amount of changes.
### 7. Format and insert into changelog.txt
Use this exact format (date is today in DD.MM.YY):
```
<version> [beta ](DD.MM.YY)
- Bullet one.
- Bullet two.
```
Prepend the new entry at the very top of `changelog.txt`, separated by a blank line from the previous first entry. Use the Edit tool.
**Never delete or edit existing entries**, even if the new stable entry merges bullets from prior beta(s). Prior beta blocks remain as historical record for beta-track users.
**For stable releases spanning prior beta(s):** the entry should cover everything since the last **stable** release (not just since the last beta), including noteworthy beta-shipped features, trimmed as needed to stay within 412 bullets.
### 8. Wait for approval
After writing the entry to `changelog.txt` (step 7), tell the user the changelog has been updated and ask them to review it in the IDE. They can edit it directly and tell you to continue, or tell you what to change in chat. Do **not** print the full entry in chat — the file itself is the review surface.
**Do NOT proceed until the user explicitly approves.**
### 9. Run set_version
Once approved, run the `set_version` script from the repository root. On Windows:
```
.\Telegram\build\set_version.bat <version_arg>
```
Where `<version_arg>` is formatted as the `set_version` script expects:
- Stable: `6.7.0` or `6.7`
- Beta: `6.7.0.beta`
Verify the script exits successfully (exit code 0). If it fails, show the error and stop.
### 10. Commit
Stage all changes and create a commit. The commit message format:
**First line:**
- For stable: `Version <major>.<minor>.` if patch is 0, otherwise `Version <major>.<minor>.<patch>.`
- For beta: `Beta version <major>.<minor>.<patch>.`
**Then an empty line, then the changelog bullets.** Copy bullet lines from the changelog as-is. Only wrap lines that exceed 72 characters; shorter lines must stay on a single line. When wrapping is needed, break at logically correct places (between words/phrases) and indent continuation lines with two spaces.
Example commit message:
```
Beta version 6.6.3.
- Drawing tools in image editor
(brush, marker, eraser, arrow).
- Draw-to-reply button in media viewer.
- Trim recorded voice messages.
- Fix reorder freeze in chats list.
```
Use a HEREDOC to pass the message to `git commit -a`.
### 11. Done
Run `git log -1` to show the resulting commit and confirm success.
+506
View File
@@ -0,0 +1,506 @@
---
description: Implement a feature or fix using multi-agent workflow with fresh context at each phase
allowed-tools: Read, Write, Edit, Glob, Grep, Bash, Task, AskUserQuestion, TodoWrite
---
# Task - Multi-Agent Implementation Workflow
You orchestrate a multi-phase implementation workflow that uses fresh agent spawns to work within context window limits on a large codebase.
**Arguments:** `$ARGUMENTS` = "$ARGUMENTS"
If `$ARGUMENTS` is provided, it's the task description. If empty, ask the user what they want implemented.
## Overview
The workflow is organized around **projects**. Each project lives in `.ai/<project-name>/` and can contain multiple sequential **tasks** (labeled `a`, `b`, `c`, ... `z`).
Project structure:
```
.ai/<project-name>/
about.md # Single source of truth for the entire project
a/ # First task
context.md # Gathered codebase context for this task
plan.md # Implementation plan
review1.md # Code review documents (up to 3)
review2.md
review3.md
b/ # Follow-up task
context.md
plan.md
review1.md
c/ # Another follow-up task
...
```
- `about.md` is the project-level blueprint — a single comprehensive document describing what this project does and how it works, written as if everything is already fully implemented. It contains no temporal state ("current state", "pending changes", "not yet implemented"). It is **rewritten** (not appended to) each time a new task starts, incorporating the new task's changes as if they were always part of the design.
- Each task folder (`a/`, `b/`, ...) contains self-contained files for that task. The task's `context.md` carries all task-specific information: what specifically needs to change, the delta from the current codebase, gathered file references and code patterns. Planning, implementation, and review agents only read the current task's folder.
## Phase 0: Setup
**Record the current time now** (using `Get-Date` in PowerShell or equivalent) and store it as `$START_TIME`. You will use this at the end to display total elapsed time.
⚠️ **CRITICAL: Follow-up detection MUST happen FIRST, before anything else.**
### Step 0a: Follow-up detection (MANDATORY — do this BEFORE understanding the task)
Extract the first word/token from `$ARGUMENTS` (everything before the first space or newline). Call it `FIRST_TOKEN`.
Then run these TWO commands using the Bash tool, IN PARALLEL, right now:
1. `ls .ai/` — to see all existing project names
2. `ls .ai/<FIRST_TOKEN>/about.md` — to check if this specific project exists
**Evaluate the results:**
- If command 2 **succeeds** (the file exists): this is a **follow-up task**. The project name is `FIRST_TOKEN`. The task description is everything in `$ARGUMENTS` AFTER `FIRST_TOKEN` (strip leading whitespace).
- If command 2 **fails** (file not found): this is a **new project**. The full `$ARGUMENTS` is the task description.
**Do NOT proceed to step 0b until you have run these commands and determined follow-up vs new.**
### Step 0b: Project setup
**For new projects:**
- Using the list from command 1, pick a unique short name (1-2 lowercase words, hyphen-separated) that doesn't collide with existing projects.
- Create `.ai/<project-name>/` and `.ai/<project-name>/a/`.
- Set current task letter = `a`.
**For follow-up tasks:**
- Scan `.ai/<project-name>/` for existing task folders (`a/`, `b/`, ...). Find the latest one (highest letter).
- The previous task letter = that highest letter.
- The new task letter = next letter in sequence.
- Create `.ai/<project-name>/<new-letter>/`.
Then proceed to Phase 1 (Context Gathering) in both cases. Follow-up tasks do NOT skip context gathering — they go through a modified version of it.
## Phase 1: Context Gathering
### For New Projects (task letter = `a`)
Spawn an agent (Task tool, subagent_type=`general-purpose`) with this prompt structure:
```
You are a context-gathering agent for a large C++ codebase (Telegram Desktop).
TASK: <paste the user's task description here>
YOUR JOB: Read AGENTS.md, inspect the codebase, find ALL files and code relevant to this task, and write two documents.
Steps:
1. Read AGENTS.md for project conventions and build instructions.
2. Search the codebase for files, classes, functions, and patterns related to the task.
3. Read all potentially relevant files. Be thorough - read more rather than less.
4. For each relevant file, note:
- File path
- Relevant line ranges
- What the code does and how it relates to the task
- Key data structures, function signatures, patterns used
5. Look for similar existing features that could serve as a reference implementation.
6. Check api.tl if the task involves Telegram API.
7. Check .style files if the task involves UI.
8. Check lang.strings if the task involves user-visible text.
Write TWO files:
### File 1: .ai/<project-name>/about.md
NOTE: This file is NOT used by any agent in the current task. It exists solely as a starting point for a FUTURE follow-up task's context gatherer. No planning, implementation, or review agent will ever read it. Only the context-gathering agent of the next follow-up task reads about.md (together with the latest context.md) to produce a fresh context.md for that next task.
Write it as if the project is already fully implemented and working. It should contain:
- **Project**: What this project does (feature description, goals, scope)
- **Architecture**: High-level architectural decisions, which modules are involved, how they interact
- **Key Design Decisions**: Important choices made about the approach
- **Relevant Codebase Areas**: Which parts of the codebase this project touches, key types and APIs involved
Do NOT include temporal state like "Current State", "Pending Changes", "Not yet implemented", "TODO", or any other framing that distinguishes between "done" and "not done". Describe the project as a complete, coherent whole — as if everything is already working. This is a project overview, not a status tracker. Task-specific work belongs exclusively in context.md.
### File 2: .ai/<project-name>/a/context.md
This is the task-specific implementation context. This is the PRIMARY document — all downstream agents (planning, implementation, review) will read ONLY this file. It must be completely self-contained. It should contain:
- **Task Description**: The full task restated clearly
- **Relevant Files**: Every file path with line ranges and descriptions of what's there
- **Key Code Patterns**: How similar things are done in the codebase (with code snippets)
- **Data Structures**: Relevant types, structs, classes
- **API Methods**: Any TL schema methods involved (copied from api.tl)
- **UI Styles**: Any relevant style definitions
- **Localization**: Any relevant string keys
- **Build Info**: Build command and any special notes
- **Reference Implementations**: Similar features that can serve as templates
Be extremely thorough. Another agent with NO prior context will read this file and must be able to understand everything needed to implement the task.
```
After this agent completes, read both `about.md` and `a/context.md` to verify they were written properly.
### For Follow-up Tasks (task letter = `b`, `c`, ...)
Spawn an agent (Task tool, subagent_type=`general-purpose`) with this prompt structure:
```
You are a context-gathering agent for a follow-up task on an existing project in a large C++ codebase (Telegram Desktop).
NEW TASK: <paste the follow-up task description here>
YOUR JOB: Read the existing project state, gather any additional context needed, and produce fresh documents for the new task.
Steps:
1. Read AGENTS.md for project conventions and build instructions.
2. Read .ai/<project-name>/about.md — this is the project-level blueprint describing everything done so far.
3. Read .ai/<project-name>/<previous-letter>/context.md — this is the previous task's gathered context.
4. Understand what has already been implemented by reading the actual source files referenced in about.md and the previous context.
5. Based on the NEW TASK description, search the codebase for any ADDITIONAL files, classes, functions, and patterns that are relevant to the new task but not already covered.
6. Read all newly relevant files thoroughly.
Write TWO files:
### File 1: .ai/<project-name>/about.md (REWRITE)
NOTE: This file is NOT used by any agent in the current task. It exists solely as a starting point for a FUTURE follow-up task's context gatherer. No planning, implementation, or review agent will ever read it. You are rewriting it now so that the next follow-up has an accurate project overview to start from.
REWRITE this file (not append). The new about.md must be a single coherent document that describes the project as if everything — including this new task's changes — is already fully implemented and working.
It should incorporate:
- Everything from the old about.md that is still accurate and relevant
- The new task's functionality described as part of the project (not as "changes to make")
- Any changed design decisions or architectural updates from the new task requirements
It should NOT contain:
- Any temporal state: "Current State", "Pending Changes", "TODO", "Not yet implemented"
- History of how requirements changed between tasks
- References to "the old approach" vs "the new approach"
- Task-by-task changelog or timeline
- Any distinction between "what was done before" and "what this task adds"
- Information that contradicts the new task requirements (if the new task changes direction, the about.md should reflect the NEW direction as if it was always the plan)
Think of about.md as "the complete description of what this project does and how it works." Someone reading it should understand the full project as a finished product, without knowing it went through multiple tasks.
### File 2: .ai/<project-name>/<new-letter>/context.md
This is the PRIMARY document — all downstream agents (planning, implementation, review) will read ONLY this file. It must be completely self-contained. about.md will NOT be available to them.
It should contain:
- **Task Description**: The new task restated clearly, with enough project background (from about.md and previous context.md) that an implementation agent can understand it without reading any other .ai/ files
- **Relevant Files**: Every file path with line ranges relevant to THIS task (including files modified by previous tasks and any newly relevant files)
- **Key Code Patterns**: How similar things are done in the codebase
- **Data Structures**: Relevant types, structs, classes
- **API Methods**: Any TL schema methods involved
- **UI Styles**: Any relevant style definitions
- **Localization**: Any relevant string keys
- **Build Info**: Build command and any special notes
- **Reference Implementations**: Similar features that can serve as templates
Be extremely thorough. Another agent with NO prior context will read ONLY this file and must be able to understand everything needed to implement the new task. Do NOT assume the reader has seen about.md or any previous task files. The context.md is the single source of truth for all downstream agents — it must include all relevant project background, not just the delta.
```
After this agent completes, read both `about.md` and `<new-letter>/context.md` to verify they were written properly.
## Phase 2: Planning
Spawn an agent (Task tool, subagent_type=`general-purpose`) with this prompt structure:
```
You are a planning agent. You must create a detailed implementation plan.
Read these files:
- .ai/<project-name>/<letter>/context.md - Contains all gathered context for this task
- Then read the specific source files referenced in context.md to understand the code deeply.
Think carefully about the implementation approach.
Create a detailed plan in: .ai/<project-name>/<letter>/plan.md
The plan.md should contain:
## Task
<one-line summary>
## Approach
<high-level description of the implementation approach>
## Files to Modify
<list of files that will be created or modified>
## Files to Create
<list of new files, if any>
## Implementation Steps
Each step must be specific enough that an agent can execute it without ambiguity:
- Exact file paths
- Exact function names
- What code to add/modify/remove
- Where exactly in the file (after which function, in which class, etc.)
Number every step. Group steps into phases if there are more than ~8 steps.
### Phase 1: <name>
1. <specific step>
2. <specific step>
...
### Phase 2: <name> (if needed)
...
## Build Verification
- Build command to run
- Expected outcome
## Status
- [ ] Phase 1: <name>
- [ ] Phase 2: <name> (if applicable)
- [ ] Build verification
- [ ] Code review
```
After this agent completes, read `plan.md` to verify it was written properly.
## Phase 3: Plan Assessment
Spawn an agent (Task tool, subagent_type=`general-purpose`) with this prompt structure:
```
You are a plan assessment agent. Review and refine an implementation plan.
Read these files:
- .ai/<project-name>/<letter>/context.md
- .ai/<project-name>/<letter>/plan.md
- Then read the actual source files referenced to verify the plan makes sense.
Carefully assess the plan:
1. **Correctness**: Are the file paths and line references accurate? Does the plan reference real functions and types?
2. **Completeness**: Are there missing steps? Edge cases not handled?
3. **Code quality**: Will the plan minimize code duplication? Does it follow existing codebase patterns from AGENTS.md?
4. **Design**: Could the approach be improved? Are there better patterns already used in the codebase?
5. **Phase sizing**: Each phase should be implementable by a single agent in one session. If a phase has more than ~8-10 substantive code changes, split it further.
Update plan.md with your refinements. Keep the same structure but:
- Fix any inaccuracies
- Add missing steps
- Improve the approach if you found better patterns
- Ensure phases are properly sized for single-agent execution
- Add a line at the top of the Status section: `Phases: <N>` indicating how many implementation phases there are
- Add `Assessed: yes` at the bottom of the file
If the plan is small enough for a single agent (roughly <=8 steps), mark it as a single phase.
```
After this agent completes, read `plan.md` to verify it was assessed.
## Phase 4: Implementation
Now read `plan.md` yourself to understand the phases.
For each phase in the plan that is not yet marked as done, spawn an implementation agent (Task tool, subagent_type=`general-purpose`):
```
You are an implementation agent working on phase <N> of an implementation plan.
Read these files first:
- .ai/<project-name>/<letter>/context.md - Full codebase context
- .ai/<project-name>/<letter>/plan.md - Implementation plan
Then read the source files you'll be modifying.
YOUR TASK: Implement ONLY Phase <N> from the plan:
<paste the specific phase steps here>
Rules:
- Follow the plan precisely
- Follow AGENTS.md coding conventions (no comments except complex algorithms, use auto, empty line before closing brace, etc.)
- Do NOT modify .ai/ files except to update the Status section in plan.md
- When done, update plan.md Status section: change `- [ ] Phase <N>: ...` to `- [x] Phase <N>: ...`
- Do NOT work on other phases
When finished, report what you did and any issues encountered.
```
After each implementation agent returns:
1. Read `plan.md` to check the status was updated.
2. If more phases remain, spawn the next implementation agent.
3. If all phases are done, proceed to build verification.
## Phase 5: Build Verification
Only run this phase if the task involved modifying project source code (not just docs or config).
Spawn a build verification agent (Task tool, subagent_type=`general-purpose`):
```
You are a build verification agent.
Read these files:
- .ai/<project-name>/<letter>/context.md
- .ai/<project-name>/<letter>/plan.md
The implementation is complete. Your job is to build the project and fix any build errors.
Steps:
1. Run (from repository root): cmake --build ./out --config Debug --target Telegram
2. If the build succeeds, update plan.md: change `- [ ] Build verification` to `- [x] Build verification`
3. If the build fails:
a. Read the error messages carefully
b. Read the relevant source files
c. Fix the errors in accordance with the plan and AGENTS.md conventions
d. Rebuild and repeat until the build passes
e. Update plan.md status when done
Rules:
- Only fix build errors, do not refactor or improve code
- Follow AGENTS.md conventions
- If build fails with file-locked errors (C1041, LNK1104), STOP and report - do not retry
When finished, report the build result.
```
After the build agent returns, read `plan.md` to confirm the final status. Then proceed to Phase 6.
## Phase 6: Code Review Loop
After build verification passes, run up to 3 review-fix iterations to improve code quality. Set iteration counter `R = 1`.
### Review Loop
```
LOOP:
1. Spawn review agent (Step 6a) with iteration R
2. Read review<R>.md verdict:
- "APPROVED" → go to FINISH
- Has improvement suggestions → spawn fix agent (Step 6b)
3. After fix agent completes and build passes:
R = R + 1
If R > 3 → go to FINISH (stop iterating, accept current state)
Otherwise → go to step 1
FINISH:
- Update plan.md: change `- [ ] Code review` to `- [x] Code review`
- Proceed to Completion
```
### Step 6a: Code Review Agent
Spawn an agent (Task tool, subagent_type=`general-purpose`):
```
You are a code review agent for Telegram Desktop (C++ / Qt).
Read these files:
- .ai/<project-name>/<letter>/context.md - Codebase context
- .ai/<project-name>/<letter>/plan.md - Implementation plan
- REVIEW.md - Style and formatting rules to enforce
<if R > 1, also read:>
- .ai/<project-name>/<letter>/review<R-1>.md - Previous review (to see what was already addressed)
Then run `git diff` to see all uncommitted changes made by the implementation. Implementation agents do not commit, so `git diff` shows exactly the current feature's changes.
Then read the modified source files in full to understand changes in context.
Perform a thorough code review.
REVIEW CRITERIA (in order of importance):
1. **Correctness and safety**: Obvious logic errors, missing null checks at API boundaries, potential crashes, use-after-free, dangling references, race conditions. This is the highest priority — bugs and safety issues must be caught first. Do NOT nitpick internal code that relies on framework guarantees.
2. **Dead code**: Any code added or left behind that is never called or used, within the scope of the changes. Unused variables, unreachable branches, leftover scaffolding.
3. **Redundant changes**: Changes in the diff that have no functional effect — moving declarations or code blocks to a different location without reason, reformatting untouched code, reordering includes or fields with no purpose. Every line in the diff should serve the feature. If a file appears in `git diff` but contains only no-op rearrangements, flag it for revert.
4. **Code duplication**: Unnecessary repetition of logic that should be shared. Look for near-identical blocks that differ only in minor details and could be unified.
5. **Wrong placement**: Code added to a module where it doesn't logically belong. If another existing module is a clearly better fit for the new code, flag it. Consider the existing module boundaries and responsibilities visible in context.md.
6. **Function decomposition**: For longer functions (roughly 50+ lines), consider whether a logical sub-task could be cleanly extracted into a separate function. This is NOT a hard rule — a 100-line function that flows naturally and isn't easily divisible is perfectly fine. But sometimes even a 20-line function contains a clear isolated subtask that reads better as two 10-line functions. The key is to think about it each time: does extracting improve readability and reduce cognitive load, or does it just scatter logic across call sites for no real benefit? Only suggest extraction when there's a genuinely self-contained piece of logic with a clear name and purpose.
7. **Module structure**: Only in exceptional cases — if a large amount of newly added code (hundreds of lines) is logically distinct from the rest of its host module, suggest extracting it into a new module. But do NOT suggest new modules lightly: every module adds significant build overhead due to PCH and heavy template usage. Only suggest this when the new code is both large enough AND logically separated enough to justify it. At the same time, don't let modules grow into multi-thousand-line monoliths either.
8. **Style compliance**: Verify adherence to REVIEW.md rules (empty line before closing brace, operators at start of continuation lines, minimize type checks with direct cast instead of is+as, no if-with-initializer when simpler alternatives exist) and AGENTS.md conventions (no unnecessary comments, `auto` usage, no hardcoded sizes — must use .style definitions), etc.
IMPORTANT GUIDELINES:
- Review ONLY the changes made, not pre-existing code in the repository.
- Be pragmatic. Don't suggest changes for the sake of it. Each suggestion should have a clear, concrete benefit.
- Don't suggest adding comments, docstrings, or type annotations — the codebase style avoids these.
- Don't suggest error handling for impossible scenarios or over-engineering.
Write your review to: .ai/<project-name>/<letter>/review<R>.md
The review document should contain:
## Code Review - Iteration <R>
## Summary
<1-2 sentence overall assessment>
## Verdict: <APPROVED or NEEDS_CHANGES>
<If APPROVED, stop here. Everything looks good.>
<If NEEDS_CHANGES, continue with:>
## Changes Required
### <Issue 1 title>
- **Category**: <dead code | duplication | wrong placement | function decomposition | module structure | style | correctness>
- **File(s)**: <file paths>
- **Problem**: <clear description of what's wrong>
- **Fix**: <specific description of what to change>
### <Issue 2 title>
...
Keep the list focused. Only include issues that genuinely improve the code. If you find yourself listing more than ~5-6 issues, prioritize the most impactful ones.
When finished, report your verdict clearly as: APPROVED or NEEDS_CHANGES.
```
After the review agent returns, read `review<R>.md`. If the verdict is APPROVED, proceed to Completion. If NEEDS_CHANGES, spawn the fix agent.
### Step 6b: Review Fix Agent
Spawn an agent (Task tool, subagent_type=`general-purpose`):
```
You are a review fix agent. You implement improvements identified during code review.
Read these files:
- .ai/<project-name>/<letter>/context.md - Codebase context
- .ai/<project-name>/<letter>/plan.md - Original implementation plan
- .ai/<project-name>/<letter>/review<R>.md - Code review with required changes
Then read the source files mentioned in the review.
YOUR TASK: Implement ALL changes listed in review<R>.md.
For each issue in the review:
1. Read the relevant source file(s).
2. Make the specified change.
3. Verify the change makes sense in context.
After all changes are made:
1. Build (from repository root): cmake --build ./out --config Debug --target Telegram
2. If the build fails, fix build errors and rebuild until it passes.
3. If build fails with file-locked errors (C1041, LNK1104), STOP and report - do not retry.
Rules:
- Implement exactly the changes from the review, nothing more.
- Follow AGENTS.md coding conventions.
- Do NOT modify .ai/ files.
When finished, report what changes were made.
```
After the fix agent returns, increment R and loop back to Step 6a (unless R > 3, in which case proceed to Completion).
## Completion
When all phases including build verification and code review are done:
1. Read the final `plan.md` and report the summary to the user.
2. Show which files were modified/created.
3. Note any issues encountered during implementation.
4. Summarize code review iterations: how many rounds, what was found and fixed, or if it was approved on first pass.
5. Calculate and display the total elapsed time since `$START_TIME` (format as `Xh Ym Zs`, omitting zero components — e.g. `12m 34s` or `1h 5m 12s`).
6. Remind the user of the project name so they can use `/task <project-name> <follow-up description>` for follow-up changes.
## Error Handling
- If any agent fails or gets stuck, report the issue to the user and ask how to proceed.
- If context.md or plan.md is not written properly by an agent, re-spawn that agent with more specific instructions.
- If build errors persist after the build agent's attempts, report the remaining errors to the user.
- If a review fix agent introduces new build errors that it cannot resolve, report to the user.
+656
View File
@@ -0,0 +1,656 @@
---
description: Implement a feature using multi-agent workflow, then iteratively test and fix it in-app
allowed-tools: Read, Write, Edit, Glob, Grep, Bash, Task, AskUserQuestion, TodoWrite
---
# WithTest - Multi-Agent Implementation + Testing Workflow
You orchestrate a multi-phase implementation workflow followed by an iterative testing/fixing loop. This is an extended version of `/task` that adds in-app programmatic testing after the build succeeds.
**Arguments:** `$ARGUMENTS` = "$ARGUMENTS"
If `$ARGUMENTS` is provided, it's the task description. If empty, ask the user what they want implemented.
## Overview
The workflow produces `.ai/<feature-name>/` containing:
- `context.md` - Gathered codebase context relevant to the task
- `plan.md` - Detailed implementation plan with phases and status
- `testN.md` - Test plan for iteration N
- `resultN.md` - Test result report for iteration N
- `planN.md` - Fix plan for iteration N (if implementation bugs found)
- `screenshots/` - Screenshots captured during test runs
Two major stages:
1. **Implementation** (Phases 0-5) - same as `/task`
2. **Testing Loop** (Phase 6) - iterative test-plan → test-do → test-run → test-check cycle
---
## STAGE 1: IMPLEMENTATION (Phases 0-5)
These phases are identical to the `/task` workflow.
### Phase 0: Setup
1. Understand the task from `$ARGUMENTS` or ask the user.
2. **Follow-up detection:** Check if `$ARGUMENTS` starts with a task name (the first word/token before any whitespace or newline). Look for `.ai/<that-name>/` directory:
- If `.ai/<that-name>/` exists AND contains both `context.md` and `plan.md`, this is a **follow-up task**. Read both files. The rest of `$ARGUMENTS` (after the task name) is the follow-up task description describing what additional changes are needed.
- If no matching directory exists, this is a **new task** - proceed normally.
3. For new tasks: check existing folders in `.ai/` to pick a unique short name (1-2 lowercase words, hyphen-separated) and create `.ai/<feature-name>/`.
4. For follow-up tasks: the folder already exists, skip creation.
### Follow-up Task Flow
When a follow-up task is detected (existing `.ai/<name>/` with `context.md` and `plan.md`):
1. Skip Phase 1 (Context Gathering) - context already exists.
2. Skip Phase 2 (Planning) - original plan already exists.
3. Go directly to **Phase 2F (Follow-up Planning)** instead of Phase 3.
**Phase 2F: Follow-up Planning**
Spawn an agent (Task tool, subagent_type=`general-purpose`) with this prompt:
```
You are a planning agent for a follow-up task on an existing implementation.
Read these files:
- .ai/<feature-name>/context.md - Previously gathered codebase context
- .ai/<feature-name>/plan.md - Previous implementation plan (already completed)
Then read the source files referenced in context.md and plan.md to understand what was already implemented.
FOLLOW-UP TASK: <paste the follow-up task description here>
The previous plan was already implemented and tested. Now there are follow-up changes needed.
YOUR JOB:
1. Understand what was already done from plan.md (look at the completed phases).
2. Read the actual source files to see the current state of the code.
3. If context.md needs updates for the follow-up task (new files relevant, new patterns needed), update it with additional sections marked "## Follow-up Context (iteration 2)" or similar.
4. Create a NEW follow-up plan. Update plan.md by:
- Keep the existing content as history (do NOT delete it)
- Add a new section at the end:
---
## Follow-up Task
<description>
## Follow-up Approach
<high-level description>
## Follow-up Files to Modify
<list>
## Follow-up Implementation Steps
### Phase F1: <name>
1. <specific step>
2. ...
### Phase F2: <name> (if needed)
...
## Follow-up Status
Phases: <N>
- [ ] Phase F1: <name>
- [ ] Phase F2: <name> (if applicable)
- [ ] Build verification
- [ ] Testing
Assessed: yes
Reason carefully. The follow-up plan should be self-contained enough that an implementation agent can execute it by reading context.md and the updated plan.md.
```
After this agent completes, read `plan.md` to verify the follow-up plan was written. Then proceed to Phase 4 (Implementation), using the follow-up phases (F1, F2, etc.) instead of the original phases. After implementation and build verification, proceed to Stage 2 (Testing Loop) as normal.
### New Task Flow
When this is a new task (no existing folder), proceed with Phases 1-5 as described below.
### Phase 1: Context Gathering
Spawn an agent (Task tool, subagent_type=`general-purpose`) with this prompt structure:
```
You are a context-gathering agent for a large C++ codebase (Telegram Desktop).
TASK: <paste the user's task description here>
YOUR JOB: Read CLAUDE.md, inspect the codebase, find ALL files and code relevant to this task, and write a comprehensive context document.
Steps:
1. Read CLAUDE.md for project conventions and build instructions.
2. Search the codebase for files, classes, functions, and patterns related to the task.
3. Read all potentially relevant files. Be thorough - read more rather than less.
4. For each relevant file, note:
- File path
- Relevant line ranges
- What the code does and how it relates to the task
- Key data structures, function signatures, patterns used
5. Look for similar existing features that could serve as a reference implementation.
6. Check api.tl if the task involves Telegram API.
7. Check .style files if the task involves UI.
8. Check lang.strings if the task involves user-visible text.
Write your findings to: .ai/<feature-name>/context.md
The context.md should contain:
- **Task Description**: The full task restated clearly
- **Relevant Files**: Every file path with line ranges and descriptions of what's there
- **Key Code Patterns**: How similar things are done in the codebase (with code snippets)
- **Data Structures**: Relevant types, structs, classes
- **API Methods**: Any TL schema methods involved (copied from api.tl)
- **UI Styles**: Any relevant style definitions
- **Localization**: Any relevant string keys
- **Build Info**: Build command and any special notes
- **Reference Implementations**: Similar features that can serve as templates
Be extremely thorough. Another agent with NO prior context will read this file and must be able to understand everything needed to implement the task.
```
After this agent completes, read `context.md` to verify it was written properly.
### Phase 2: Planning
Spawn an agent (Task tool, subagent_type=`general-purpose`) with this prompt structure:
```
You are a planning agent. You must create a detailed implementation plan.
Read these files:
- .ai/<feature-name>/context.md - Contains all gathered context
- Then read the specific source files referenced in context.md to understand the code deeply.
Think carefully about the implementation approach.
Create a detailed plan in: .ai/<feature-name>/plan.md
The plan.md should contain:
## Task
<one-line summary>
## Approach
<high-level description of the implementation approach>
## Files to Modify
<list of files that will be created or modified>
## Files to Create
<list of new files, if any>
## Implementation Steps
Each step must be specific enough that an agent can execute it without ambiguity:
- Exact file paths
- Exact function names
- What code to add/modify/remove
- Where exactly in the file (after which function, in which class, etc.)
Number every step. Group steps into phases if there are more than ~8 steps.
### Phase 1: <name>
1. <specific step>
2. <specific step>
...
### Phase 2: <name> (if needed)
...
## Build Verification
- Build command to run
- Expected outcome
## Status
- [ ] Phase 1: <name>
- [ ] Phase 2: <name> (if applicable)
- [ ] Build verification
- [ ] Testing
```
After this agent completes, read `plan.md` to verify it was written properly.
### Phase 3: Plan Assessment
Spawn an agent (Task tool, subagent_type=`general-purpose`) with this prompt structure:
```
You are a plan assessment agent. Review and refine an implementation plan.
Read these files:
- .ai/<feature-name>/context.md
- .ai/<feature-name>/plan.md
- Then read the actual source files referenced to verify the plan makes sense.
Carefully assess the plan:
1. **Correctness**: Are the file paths and line references accurate? Does the plan reference real functions and types?
2. **Completeness**: Are there missing steps? Edge cases not handled?
3. **Code quality**: Will the plan minimize code duplication? Does it follow existing codebase patterns from CLAUDE.md?
4. **Design**: Could the approach be improved? Are there better patterns already used in the codebase?
5. **Phase sizing**: Each phase should be implementable by a single agent in one session. If a phase has more than ~8-10 substantive code changes, split it further.
Update plan.md with your refinements. Keep the same structure but:
- Fix any inaccuracies
- Add missing steps
- Improve the approach if you found better patterns
- Ensure phases are properly sized for single-agent execution
- Add a line at the top of the Status section: `Phases: <N>` indicating how many implementation phases there are
- Add `Assessed: yes` at the bottom of the file
If the plan is small enough for a single agent (roughly <=8 steps), mark it as a single phase.
```
After this agent completes, read `plan.md` to verify it was assessed.
### Phase 4: Implementation
Now read `plan.md` yourself to understand the phases.
For each phase in the plan that is not yet marked as done, spawn an implementation agent (Task tool, subagent_type=`general-purpose`):
```
You are an implementation agent working on phase <N> of an implementation plan.
Read these files first:
- .ai/<feature-name>/context.md - Full codebase context
- .ai/<feature-name>/plan.md - Implementation plan
Then read the source files you'll be modifying.
YOUR TASK: Implement ONLY Phase <N> from the plan:
<paste the specific phase steps here>
Rules:
- Follow the plan precisely
- Follow CLAUDE.md coding conventions (no comments except complex algorithms, use auto, empty line before closing brace, etc.)
- Do NOT modify .ai/ files except to update the Status section in plan.md
- When done, update plan.md Status section: change `- [ ] Phase <N>: ...` to `- [x] Phase <N>: ...`
- Do NOT work on other phases
When finished, report what you did and any issues encountered.
```
After each implementation agent returns:
1. Read `plan.md` to check the status was updated.
2. If more phases remain, spawn the next implementation agent.
3. If all phases are done, proceed to build verification.
### Phase 5: Build Verification
Spawn a build verification agent (Task tool, subagent_type=`general-purpose`):
```
You are a build verification agent.
Read these files:
- .ai/<feature-name>/context.md
- .ai/<feature-name>/plan.md
The implementation is complete. Your job is to build the project and fix any build errors.
Steps:
1. Run: cmake --build "c:\Telegram\tdesktop\out" --config Debug --target Telegram
2. If the build succeeds, update plan.md: change `- [ ] Build verification` to `- [x] Build verification`
3. If the build fails:
a. Read the error messages carefully
b. Read the relevant source files
c. Fix the errors in accordance with the plan and CLAUDE.md conventions
d. Rebuild and repeat until the build passes
e. Update plan.md status when done
Rules:
- Only fix build errors, do not refactor or improve code
- Follow CLAUDE.md conventions
- If build fails with file-locked errors (C1041, LNK1104), STOP and report - do not retry
When finished, report the build result.
```
After the build agent returns, read `plan.md` to confirm build verification passed. If it did, proceed to Stage 2.
---
## STAGE 2: TESTING LOOP (Phase 6)
This stage iteratively tests the implementation in-app and fixes issues. It maintains an iteration counter `N` starting at 1.
**Key concept:** Since the project has tight coupling and no unit test infrastructure, we test by injecting `#ifdef _DEBUG` blocks into the app code that perform actions, write to `log.txt`, save screenshots, and call `Core::Quit()` when done. An agent then runs the app and observes the output.
### Git Submodule Awareness
Before ANY git operation (commit, stash, stash pop), the agent must:
1. Run `git submodule status` to check for modified submodules.
2. If submodules have changes, commit/stash those submodules FIRST, individually:
```
cd <submodule-path> && git add -A && git commit -m "[wip-N] test changes" && cd <repo-root>
```
or for stash:
```
cd <submodule-path> && git stash && cd <repo-root>
```
3. Then operate on the main repo.
### Step 6a: Test Plan (test-plan agent)
Spawn an agent (Task tool, subagent_type=`general-purpose`):
```
You are a test-planning agent for Telegram Desktop (C++ / Qt).
Read these files:
- .ai/<feature-name>/context.md
- .ai/<feature-name>/plan.md
<if N > 1, also include:>
- .ai/<feature-name>/result<N-1>.md - Previous test result
<if a planN.md triggered this iteration:>
- .ai/<feature-name>/plan<trigger>.md - Fix plan that was just implemented
CURRENT ITERATION: <N>
YOUR TASKS:
1. **Commit current implementation changes.**
- Run `git submodule status` to check for modified submodules.
- If any submodules are dirty, go into each one and commit:
`cd <submodule> && git add -A && git commit -m "[wip-<N>]" && cd <repo-root>`
- Then in main repo: `git add -A && git commit -m "[wip-<N>]"`
- Do NOT add files in .ai/ to the commit.
2. <If N > 1> **Restore previous test code.**
- Run `git submodule status` and `git stash list` in any dirty submodules to check for stashed test code.
- Pop submodule stashes first: `cd <submodule> && git stash pop && cd <repo-root>`
- Then pop main repo stash: `git stash pop`
- Read the previous test<N-1>.md to understand what was tested before.
- Decide: reuse/modify existing test code or start fresh.
3. **Plan the test code.**
Carefully design test code that will verify the implementation works correctly.
The test code must:
- Be wrapped in `#ifdef _DEBUG` blocks so it only runs in Debug builds
- Be injected at appropriate points in the app lifecycle (e.g., after main window shows, after chats load, etc.)
- Write progress and results to a log file. Use a dedicated path like:
`QFile logFile("c:/Telegram/tdesktop/.ai/<feature-name>/test_log.txt");`
Open with `QIODevice::Append | QIODevice::Text`, write with QTextStream, and flush after every write.
- Save screenshots where visual verification is needed:
`widget->grab().save("c:/Telegram/tdesktop/.ai/<feature-name>/screenshots/<name>.png");`
Log each screenshot save: `"SCREENSHOT: <full-path>"`
- Use `QTimer::singleShot(...)` or deferred calls to schedule test steps after UI events settle
- Call `Core::Quit()` when all test steps complete, so the app exits cleanly
- Log `"TEST_COMPLETE"` right before `Core::Quit()` so the test-run agent knows testing finished
- Log `"TEST_STEP: <description>"` before each major step for progress tracking
- Log `"TEST_RESULT: PASS: <what>"` or `"TEST_RESULT: FAIL: <what> - <details>"` for each check
Consider what needs testing:
- Does the new UI appear correctly?
- Do interactions work (clicks, navigation)?
- Does data flow correctly?
- Are there edge cases to verify?
4. **Write the test plan** to `.ai/<feature-name>/test<N>.md` containing:
## Test Iteration <N>
## What We're Testing
<description of what this test verifies>
## Test Steps
1. <step>: what we do, what we expect, how we verify
2. ...
## Code Injection Points
- File: <path>, Location: <where in file>, Purpose: <what this block does>
- ...
## Expected Log Output
<example of what test_log.txt should contain if everything works>
## Expected Screenshots
- <name>.png: should show <description>
- ...
## Success Criteria
- <criterion 1>
- <criterion 2>
- ...
When finished, report what test plan was created.
```
### Step 6b: Test Implementation (test-do agent)
Spawn an agent (Task tool, subagent_type=`general-purpose`):
```
You are a test implementation agent for Telegram Desktop (C++ / Qt).
Read these files:
- .ai/<feature-name>/context.md
- .ai/<feature-name>/plan.md
- .ai/<feature-name>/test<N>.md - The test plan to implement
YOUR TASK: Implement the test code described in test<N>.md.
Rules:
- ALL test code MUST be inside `#ifdef _DEBUG` blocks
- Place test code at the injection points specified in the test plan
- Make sure the screenshots folder exists: create `.ai/<feature-name>/screenshots/` directory
- Delete any old test_log.txt before the test starts (in code, at the first test step)
- Use QTimer::singleShot for delayed operations to let the UI settle
- Flush log writes immediately (don't buffer)
- End with logging "TEST_COMPLETE" and calling Core::Quit()
- Follow CLAUDE.md coding conventions
- Make sure the code compiles: run `cmake --build "c:\Telegram\tdesktop\out" --config Debug --target Telegram`
- If build fails, fix errors and rebuild until it passes
- If build fails with file-locked errors (C1041, LNK1104), STOP and report
When finished, report what test code was added and where.
```
### Step 6c: Test Run (test-run agent)
Spawn an agent (Task tool, subagent_type=`general-purpose`):
```
You are a test execution agent. You run the Telegram Desktop app and observe test output.
Read these files:
- .ai/<feature-name>/test<N>.md - The test plan (so you know what to expect)
YOUR TASK: Run the built app and monitor test execution.
Steps:
1. **Prepare.**
- Delete old test_log.txt if it exists: `del "c:\Telegram\tdesktop\docs\ai\work\<feature-name>\test_log.txt" 2>nul`
- Ensure screenshots folder exists: `mkdir "c:\Telegram\tdesktop\docs\ai\work\<feature-name>\screenshots" 2>nul`
2. **Launch the app.**
- Run in background: `start "" "c:\Telegram\tdesktop\out\Debug\Telegram.exe"`
- Note the time of launch.
3. **Monitor test_log.txt in a polling loop.**
- Every 5 seconds, read the log file to check for new output.
- When you see `"SCREENSHOT: <path>"`, read the screenshot image file to visually verify it.
- Track which TEST_STEP entries appear.
- Track TEST_RESULT entries (PASS/FAIL).
4. **Detect completion or failure.**
- **Success**: Log contains `"TEST_COMPLETE"` - the app should exit on its own shortly after.
- **Crash**: The process disappears before `"TEST_COMPLETE"`. Check for crash dumps or error dialogs.
- **Hang/Timeout**: If no new log output for 120 seconds and no `"TEST_COMPLETE"`, kill the process:
`taskkill /IM Telegram.exe /F`
- **No log at all**: If no test_log.txt appears within 60 seconds of launch, kill the process.
5. **After the process exits (or is killed), wait 5 seconds, then:**
- Read the full final test_log.txt
- Read all screenshot files saved during the test
- Check for any leftover Telegram.exe processes: `tasklist /FI "IMAGENAME eq Telegram.exe"` and kill if needed
6. **Write the result report** to `.ai/<feature-name>/result<N>.md`:
## Test Result - Iteration <N>
## Outcome: <PASS / FAIL / CRASH / TIMEOUT>
## Log Output
<full contents of test_log.txt, or note that it was empty/missing>
## Screenshot Analysis
- <name>.png: <description of what you see, whether it matches expectations from test<N>.md>
- ...
## Test Results Summary
- PASS: <list>
- FAIL: <list>
## Issues Found
<any problems observed, unexpected behavior, etc.>
## Raw Details
<process exit code if available, timing information, any stderr output>
When finished, report the test outcome.
```
After the test-run agent returns, read `result<N>.md`.
### Step 6d: Test Assessment (test-check agent)
Spawn an agent (Task tool, subagent_type=`general-purpose`):
```
You are a test assessment agent. You analyze test results and decide next steps.
Read these files:
- .ai/<feature-name>/context.md
- .ai/<feature-name>/plan.md
- .ai/<feature-name>/test<N>.md
- .ai/<feature-name>/result<N>.md
<if N > 1, also read previous test/result pairs for history>
Carefully analyze the test results.
DECIDE one of three outcomes:
### Outcome A: ALL TESTS PASS
If all test results are PASS and screenshots look correct:
1. Write to result<N>.md (append): `\n## Verdict: PASS`
2. Report "ALL_TESTS_PASS" so the orchestrator knows to finish.
### Outcome B: TEST CODE NEEDS CHANGES
If the test itself was flawed (wrong assertions, bad timing, insufficient waits, screenshot taken too early, wrong injection point, etc.) but the implementation seems correct:
1. Describe what's wrong with the test and what to change.
2. Make the changes directly to the test code in the source files.
3. Rebuild: `cmake --build "c:\Telegram\tdesktop\out" --config Debug --target Telegram`
4. If build fails with file-locked errors (C1041, LNK1104), STOP and report.
5. Write the updated test description to `.ai/<feature-name>/test<N+1>.md` explaining what changed and why.
6. Report "TEST_NEEDS_RERUN" so the orchestrator goes back to step 6c.
### Outcome C: IMPLEMENTATION HAS BUGS
If the test results indicate actual bugs in the implementation (not test issues):
1. Analyze what's wrong with the implementation.
2. Write a fix plan to `.ai/<feature-name>/plan<N>.md`:
## Fix Plan - Iteration <N>
## Problem
<what the test revealed>
## Root Cause
<analysis of why the implementation is wrong>
## Fix Steps
1. <specific fix with file path, location, what to change>
2. ...
3. Stash the test code (it will be restored later):
- Run `git submodule status` and stash dirty submodules first:
`cd <submodule> && git stash && cd <repo-root>`
- Then: `git stash`
4. Report "IMPLEMENTATION_NEEDS_FIX" so the orchestrator goes to re-implementation.
When finished, report your verdict clearly as one of: ALL_TESTS_PASS, TEST_NEEDS_RERUN, IMPLEMENTATION_NEEDS_FIX.
```
### Orchestrator Loop Logic
After Phase 5 (build verification) succeeds, you (the orchestrator) run the testing loop:
```
Set N = 1
LOOP:
1. Spawn test-plan agent (Step 6a) with iteration N
2. Spawn test-do agent (Step 6b) with iteration N
3. Spawn test-run agent (Step 6c) with iteration N
4. Spawn test-check agent (Step 6d) with iteration N
5. Read the verdict:
- "ALL_TESTS_PASS" → go to FINISH
- "TEST_NEEDS_RERUN" →
N = N + 1
go to step 3 (skip 6a and 6b, test code was already updated by test-check)
- "IMPLEMENTATION_NEEDS_FIX" →
Spawn implementation fix agent (see below)
N = N + 1
go to step 1 (full restart: new commit, stash pop test code, etc.)
6. Safety: if N > 5, stop and report to user - too many iterations.
FINISH:
- Stash or revert all test code (#ifdef _DEBUG blocks):
- git submodule status, stash submodules if dirty
- git stash (to save test code separately, user may want it later)
- Update plan.md: change `- [ ] Testing` to `- [x] Testing`
- Report to user
```
### Implementation Fix Agent
When test-check reports IMPLEMENTATION_NEEDS_FIX, spawn this agent:
```
You are an implementation fix agent.
Read these files:
- .ai/<feature-name>/context.md
- .ai/<feature-name>/plan.md
- .ai/<feature-name>/plan<N>.md - The fix plan from test assessment
Then read the source files mentioned in the fix plan.
YOUR TASK: Implement the fixes described in plan<N>.md.
Steps:
1. Read and understand the fix plan.
2. Make the specified code changes.
3. Build: `cmake --build "c:\Telegram\tdesktop\out" --config Debug --target Telegram`
4. Fix any build errors.
5. If build fails with file-locked errors (C1041, LNK1104), STOP and report.
Rules:
- Only make changes specified in the fix plan
- Follow CLAUDE.md conventions
- Do NOT touch test code or .ai/ files (except plan.md status if relevant)
When finished, report what was fixed.
```
---
## Completion
When the testing loop finishes (ALL_TESTS_PASS or user stops it):
1. Read the final `plan.md` and report full summary to the user.
2. List all files modified/created by the implementation.
3. Summarize test iterations: how many rounds, what was found and fixed.
4. Note that test code is stashed (available via `git stash pop` if needed).
5. Note any remaining concerns.
## Error Handling
- If any agent fails or gets stuck, report the issue to the user and ask how to proceed.
- If context.md or plan.md is not written properly by an agent, re-spawn that agent with more specific instructions.
- If build errors persist after agent attempts, report remaining errors to the user.
- If the testing loop exceeds 5 iterations, stop and report - something fundamental may be wrong.
- If the app crashes repeatedly, report to user - may need manual investigation.
- If file-locked build errors occur at ANY point, stop immediately and ask user to close Telegram.exe.
+11
View File
@@ -0,0 +1,11 @@
param([string]$outPath)
Add-Type -AssemblyName System.Windows.Forms
$img = [System.Windows.Forms.Clipboard]::GetImage()
if ($img) {
$img.Save($outPath, [System.Drawing.Imaging.ImageFormat]::Png)
Write-Host "Saved to $outPath"
exit 0
} else {
Write-Host "No image on clipboard"
exit 1
}
+28
View File
@@ -0,0 +1,28 @@
#!/bin/bash
# Grab clipboard image on macOS and save as PNG.
outPath="$1"
if [ -z "$outPath" ]; then
echo "Usage: grab_clipboard.sh <output.png>"
exit 1
fi
osascript -e '
set theFile to POSIX file "'"$outPath"'"
try
set theImage to the clipboard as «class PNGf»
on error
return "no image"
end try
set fh to open for access theFile with write permission
write theImage to fh
close access fh
return "ok"
' 2>/dev/null | grep -q "ok"
if [ $? -eq 0 ]; then
echo "Saved to $outPath"
exit 0
else
echo "No image on clipboard"
exit 1
fi
+343
View File
@@ -0,0 +1,343 @@
#!/usr/bin/env pwsh
# Iterative Task Runner
# Runs Claude Code in a loop to complete tasks from a taskplanner-created folder
#
# Usage: .\docs\ai\iterate.ps1 <featurename> [-MaxIterations N] [-Interactive] [-DryRun] [-SingleCommit] [-NoCommit]
#
# Arguments:
# featurename Name of the folder in .ai/ containing prompt.md and tasks.json
# -MaxIterations Maximum iterations before stopping (default: 50)
# -Interactive Pause between iterations for user confirmation (default: auto/no pause)
# -DryRun Show what would be executed without running
# -SingleCommit Don't commit after each task, commit all changes at the end
# -NoCommit Don't commit at all (no per-task commits, no final commit)
param(
[Parameter(Position=0, Mandatory=$true)]
[string]$FeatureName,
[int]$MaxIterations = 50,
[switch]$Interactive,
[switch]$DryRun,
[switch]$SingleCommit,
[switch]$NoCommit
)
$ErrorActionPreference = "Stop"
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
$RepoRoot = Resolve-Path (Join-Path $ScriptDir "..\..")
$WorkDir = Join-Path $ScriptDir "work\$FeatureName"
$PromptMd = Join-Path $WorkDir "prompt.md"
$TasksJson = Join-Path $WorkDir "tasks.json"
$BuildOutputDir = Join-Path $RepoRoot "out\Debug"
$TelegramExe = Join-Path $BuildOutputDir "Telegram.exe"
$TelegramPdb = Join-Path $BuildOutputDir "Telegram.pdb"
function Format-Duration {
param([int]$Seconds)
if ($Seconds -lt 60) {
return "${Seconds}s"
} elseif ($Seconds -lt 3600) {
$min = [math]::Floor($Seconds / 60)
$sec = $Seconds % 60
return "${min}m ${sec}s"
} else {
$hr = [math]::Floor($Seconds / 3600)
$min = [math]::Floor(($Seconds % 3600) / 60)
$sec = $Seconds % 60
return "${hr}h ${min}m ${sec}s"
}
}
function Test-BuildFilesUnlocked {
$filesToCheck = @($TelegramExe, $TelegramPdb)
foreach ($file in $filesToCheck) {
if (Test-Path $file) {
try {
Remove-Item $file -Force -ErrorAction Stop
Write-Host "Removed: $file" -ForegroundColor DarkGray
}
catch {
Write-Host ""
Write-Host "========================================" -ForegroundColor Red
Write-Host " ERROR: Cannot delete build output" -ForegroundColor Red
Write-Host " File is locked: $file" -ForegroundColor Red
Write-Host "" -ForegroundColor Red
Write-Host " Please close Telegram.exe and any" -ForegroundColor Red
Write-Host " debugger, then try again." -ForegroundColor Red
Write-Host "========================================" -ForegroundColor Red
Write-Host ""
return $false
}
}
}
return $true
}
function Show-ClaudeStream {
param([string]$Line)
try {
$obj = $Line | ConvertFrom-Json -ErrorAction Stop
switch ($obj.type) {
"assistant" {
if ($obj.message.content) {
foreach ($block in $obj.message.content) {
if ($block.type -eq "text") {
Write-Host $block.text -ForegroundColor White
}
elseif ($block.type -eq "tool_use") {
$summary = ""
if ($block.input) {
if ($block.input.file_path) {
$summary = $block.input.file_path
} elseif ($block.input.pattern) {
$summary = $block.input.pattern
} elseif ($block.input.command) {
$cmd = $block.input.command
if ($cmd.Length -gt 60) { $cmd = $cmd.Substring(0, 60) + "..." }
$summary = $cmd
} else {
$inputStr = $block.input | ConvertTo-Json -Compress -Depth 1
if ($inputStr.Length -gt 60) { $inputStr = $inputStr.Substring(0, 60) + "..." }
$summary = $inputStr
}
}
Write-Host "[Tool: $($block.name)] $summary" -ForegroundColor Yellow
}
}
}
}
"user" {
# Tool results - skip verbose output
}
"result" {
Write-Host "`n--- Session Complete ---" -ForegroundColor Cyan
if ($obj.cost_usd) {
Write-Host "Cost: `$$($obj.cost_usd)" -ForegroundColor DarkCyan
}
}
"system" {
# System messages - skip
}
}
}
catch {
# Not valid JSON, skip
}
}
# Verify feature folder exists
if (-not (Test-Path $WorkDir)) {
Write-Error "Feature folder not found: $WorkDir`nRun '/taskplanner $FeatureName' first to create it."
exit 1
}
# Verify required files exist
foreach ($file in @($PromptMd, $TasksJson)) {
if (-not (Test-Path $file)) {
Write-Error "Required file not found: $file"
exit 1
}
}
if ($SingleCommit -or $NoCommit) {
$AfterImplementation = @"
- Mark the task completed in tasks.json ("completed": true)
- If new tasks emerged, add them to tasks.json
"@
$CommitRule = "- Do NOT commit changes after task is done, just mark it as done in tasks.json. Commit will be done when all tasks are complete, separately."
} else {
$AfterImplementation = @"
- Mark the task completed in tasks.json ("completed": true)
- Commit your changes
- If new tasks emerged, add them to tasks.json
"@
$CommitRule = ""
}
$Prompt = @"
You are an autonomous coding agent working on: $FeatureName
Read these files for context:
- .ai/$FeatureName/prompt.md - Detailed instructions and architecture
- .ai/$FeatureName/tasks.json - Task list with completion status
Do exactly ONE task per iteration.
## Steps
1. Read tasks.json and find the most suitable task to implement (it can be first uncompleted task or it can be some task in the middle, if it is better suited to be implemented right now, respecting dependencies)
2. Plan the implementation carefully
3. Implement that ONE task only
4. After successful implementation:
$AfterImplementation
## Critical Rules
- Only mark a task complete if you verified the work is done (build passes, etc.)
- If stuck, document the issue in the task's notes field and move on
- Do ONE task per iteration, then stop
- NEVER try to commit files in .ai/
$CommitRule
## Completion Signal
If ALL tasks in tasks.json have "completed": true, output exactly:
===ALL_TASKS_COMPLETE===
"@
$CommitPrompt = @"
You are an autonomous coding agent. All tasks for "$FeatureName" are now complete.
Your job: Create a single commit with all the changes.
## Steps
1. Run git status to see all modified files
2. Run git diff to review the changes
3. Create a commit with a short summary (aim for ~50 chars, max 76 chars) describing what was implemented
4. The commit message should describe the overall feature/fix, not list individual changes
## Critical Rules
- NEVER try to commit files in .ai/
- Use a concise commit message that captures the essence of the work done
"@
Write-Host ""
Write-Host "========================================" -ForegroundColor Cyan
Write-Host " Iterative Task Runner" -ForegroundColor Cyan
Write-Host " Feature: $FeatureName" -ForegroundColor Cyan
Write-Host " Max iterations: $MaxIterations" -ForegroundColor Cyan
Write-Host " Mode: $(if ($Interactive) { 'Interactive' } else { 'Auto' })" -ForegroundColor Cyan
Write-Host " Commit: $(if ($NoCommit) { 'None' } elseif ($SingleCommit) { 'Single (at end)' } else { 'Per task' })" -ForegroundColor Cyan
Write-Host " Working directory: $RepoRoot" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan
Write-Host ""
if ($DryRun) {
Write-Host "[DRY RUN] Would execute with prompt:" -ForegroundColor Yellow
Write-Host $Prompt
Write-Host ""
Write-Host "Feature folder: $WorkDir" -ForegroundColor Yellow
Write-Host "Prompt file: $PromptMd" -ForegroundColor Yellow
Write-Host "Tasks file: $TasksJson" -ForegroundColor Yellow
exit 0
}
Push-Location $RepoRoot
$ScriptStartTime = Get-Date
$IterationTimes = @()
try {
for ($i = 1; $i -le $MaxIterations; $i++) {
Write-Host ""
Write-Host "========================================" -ForegroundColor Yellow
Write-Host " Iteration $i of $MaxIterations" -ForegroundColor Yellow
Write-Host "========================================" -ForegroundColor Yellow
Write-Host ""
if (-not (Test-BuildFilesUnlocked)) {
exit 1
}
$IterationStartTime = Get-Date
claude --dangerously-skip-permissions --verbose -p $Prompt --output-format stream-json 2>&1 | ForEach-Object {
Show-ClaudeStream $_
}
$IterationEndTime = Get-Date
$IterationDuration = [int]($IterationEndTime - $IterationStartTime).TotalSeconds
$IterationTimes += $IterationDuration
Write-Host "Iteration time: $(Format-Duration $IterationDuration)" -ForegroundColor DarkCyan
# Check task status after each run
$tasks = Get-Content $TasksJson | ConvertFrom-Json
$incomplete = @($tasks.tasks | Where-Object { -not $_.completed })
$inProgress = @($tasks.tasks | Where-Object { $_.started -and -not $_.completed })
if ($incomplete.Count -eq 0) {
if ($SingleCommit -and -not $NoCommit) {
$i++
if ($i -le $MaxIterations) {
Write-Host ""
Write-Host "========================================" -ForegroundColor Yellow
Write-Host " Final commit iteration" -ForegroundColor Yellow
Write-Host "========================================" -ForegroundColor Yellow
Write-Host ""
$CommitStartTime = Get-Date
claude --dangerously-skip-permissions --verbose -p $CommitPrompt --output-format stream-json 2>&1 | ForEach-Object {
Show-ClaudeStream $_
}
$CommitEndTime = Get-Date
$CommitDuration = [int]($CommitEndTime - $CommitStartTime).TotalSeconds
$IterationTimes += $CommitDuration
Write-Host "Commit time: $(Format-Duration $CommitDuration)" -ForegroundColor DarkCyan
} else {
Write-Host ""
Write-Host "========================================" -ForegroundColor Red
Write-Host " Max iterations reached before commit" -ForegroundColor Red
Write-Host " Run manually: git add . && git commit" -ForegroundColor Red
Write-Host "========================================" -ForegroundColor Red
Write-Host ""
exit 1
}
}
$TotalTime = [int]((Get-Date) - $ScriptStartTime).TotalSeconds
$AvgTime = if ($IterationTimes.Count -gt 0) { [int](($IterationTimes | Measure-Object -Sum).Sum / $IterationTimes.Count) } else { 0 }
Write-Host ""
Write-Host "========================================" -ForegroundColor Green
Write-Host " ALL TASKS COMPLETE!" -ForegroundColor Green
Write-Host " Feature: $FeatureName" -ForegroundColor Green
Write-Host " Iterations: $($IterationTimes.Count)" -ForegroundColor Green
Write-Host " Total time: $(Format-Duration $TotalTime)" -ForegroundColor Green
Write-Host " Avg per iteration: $(Format-Duration $AvgTime)" -ForegroundColor Green
Write-Host "========================================" -ForegroundColor Green
Write-Host ""
exit 0
}
Write-Host ""
Write-Host "Remaining tasks: $($incomplete.Count)" -ForegroundColor Cyan
if ($inProgress.Count -gt 0) {
Write-Host "In progress: $($inProgress[0].title)" -ForegroundColor Yellow
}
if ($Interactive) {
Write-Host "Press Enter to continue, Ctrl+C to stop..." -ForegroundColor Cyan
Read-Host
} else {
Start-Sleep -Seconds 2
}
}
$TotalTime = [int]((Get-Date) - $ScriptStartTime).TotalSeconds
$AvgTime = if ($IterationTimes.Count -gt 0) { [int](($IterationTimes | Measure-Object -Sum).Sum / $IterationTimes.Count) } else { 0 }
Write-Host ""
Write-Host "========================================" -ForegroundColor Red
Write-Host " Max iterations ($MaxIterations) reached" -ForegroundColor Red
Write-Host " Check tasks.json for remaining tasks" -ForegroundColor Red
Write-Host " Total time: $(Format-Duration $TotalTime)" -ForegroundColor Red
Write-Host " Avg per iteration: $(Format-Duration $AvgTime)" -ForegroundColor Red
Write-Host "========================================" -ForegroundColor Red
Write-Host ""
exit 1
}
finally {
Pop-Location
}
-105
View File
@@ -1,105 +0,0 @@
---
description: For tasks requiring sending Telegram server API requests or working with generated API types.
globs:
alwaysApply: false
---
# Telegram Desktop API Usage
## API Schema
The API definitions are described using [TL Language]\(https:/core.telegram.org/mtproto/TL) in two main schema files:
1. **`Telegram/SourceFiles/mtproto/scheme/mtproto.tl`**
* Defines the core MTProto protocol types and methods used for basic communication, encryption, authorization, service messages, etc.
* Some fundamental types and methods from this schema (like basic types, RPC calls, containers) are often implemented directly in the C++ MTProto core (`SourceFiles/mtproto/`) and may be skipped during the C++ code generation phase.
* Other parts of `mtproto.tl` might still be processed by the code generator.
2. **`Telegram/SourceFiles/mtproto/scheme/api.tl`**
* Defines the higher-level Telegram API layer, including all the methods and types related to chat functionality, user profiles, messages, channels, stickers, etc.
* This is the primary schema used when making functional API requests within the application.
Both files use the same TL syntax to describe API methods (functions) and types (constructors).
## Code Generation
A custom code generation tool processes `api.tl` (and parts of `mtproto.tl`) to create corresponding C++ classes and types. These generated headers are typically included via the Precompiled Header (PCH) for the main `Telegram` project.
Generated types often follow the pattern `MTP[Type]` (e.g., `MTPUser`, `MTPMessage`) and methods correspond to functions within the `MTP` namespace or related classes (e.g., `MTPmessages_SendMessage`).
## Making API Requests
API requests are made using a standard pattern involving the `api()` object (providing access to the `MTP::Instance`), the generated `MTP...` request object, callback handlers for success (`.done()`) and failure (`.fail()`), and the `.send()` method.
Here's the general structure:
```cpp
// Include necessary headers if not already in PCH
// Obtain the API instance (usually via api() or MTP::Instance::Get())
api().request(MTPnamespace_MethodName(
// Constructor arguments based on the api.tl definition for the method
MTP_flags(flags_value), // Use MTP_flags if the method has flags
MTP_inputPeer(peer), // Use MTP_... types for parameters
MTP_string(messageText),
MTP_long(randomId),
// ... other arguments matching the TL definition
MTP_vector<MTPMessageEntity>() // Example for a vector argument
)).done([=]\(const MTPResponseType &result) {
// Handle the successful response (result).
// 'result' will be of the C++ type corresponding to the TL type
// specified after the '=' in the api.tl method definition.
// How to access data depends on whether the TL type has one or multiple constructors:
// 1. Multiple Constructors (e.g., User = User | UserEmpty):
// Use .match() with lambdas for each constructor:
result.match([&]\(const MTPDuser &data) {
/* use data.vfirst_name().v, etc. */
}, [&]\(const MTPDuserEmpty &data) {
/* handle empty user */
});
// Alternatively, check the type explicitly and use the constructor getter:
if (result.type() == mtpc_user) {
const auto &data = result.c_user(); // Asserts if type is not mtpc_user!
// use data.vfirst_name().v
} else if (result.type() == mtpc_userEmpty) {
const auto &data = result.c_userEmpty();
// handle empty user
}
// 2. Single Constructor (e.g., Messages = messages { msgs: vector<Message> }):
// Use .match() with a single lambda:
result.match([&]\(const MTPDmessages &data) { /* use data.vmessages().v */ });
// Or check the type explicitly and use the constructor getter:
if (result.type() == mtpc_messages) {
const auto &data = result.c_messages(); // Asserts if type is not mtpc_messages!
// use data.vmessages().v
}
// Or use the shortcut .data() for single-constructor types:
const auto &data = result.data(); // Only works for single-constructor types!
// use data.vmessages().v
}).fail([=]\(const MTP::Error &error) {
// Handle the API error (error).
// 'error' is an MTP::Error object containing the error code (error.type())
// and description (error.description()). Check for specific error strings.
if (error.type() == u"FLOOD_WAIT_X"_q) {
// Handle flood wait
} else {
Ui::show(Box<InformBox>(Lang::Hard::ServerError())); // Example generic error handling
}
}).handleFloodErrors().send(); // handleFloodErrors() is common, then send()
```
**Key Points:**
* Always refer to `Telegram/SourceFiles/mtproto/scheme/api.tl` for the correct method names, parameters (names and types), and response types.
* Use the generated `MTP...` types/classes for request parameters (e.g., `MTP_int`, `MTP_string`, `MTP_bool`, `MTP_vector`, `MTPInputUser`, etc.) and response handling.
* The `.done()` lambda receives the specific C++ `MTP...` type corresponding to the TL return type.
* For types with **multiple constructors** (e.g., `User = User | UserEmpty`), use `result.match([&]\(const MTPDuser &d){ ... }, [&]\(const MTPDuserEmpty &d){ ... })` to handle each case, or check `result.type() == mtpc_user` / `mtpc_userEmpty` and call the specific `result.c_user()` / `result.c_userEmpty()` getter (which asserts on type mismatch).
* For types with a **single constructor** (e.g., `Messages = messages{...}`), you can use `result.match([&]\(const MTPDmessages &d){ ... })` with one lambda, or check `type()` and call `c_messages()`, or use the shortcut `result.data()` to access the fields directly.
* The `.fail()` lambda receives an `MTP::Error` object. Check `error.type()` against known error strings (often defined as constants or using `u"..."_q` literals).
* Directly construct the `MTPnamespace_MethodName(...)` object inside `request()`.
* Include `.handleFloodErrors()` before `.send()` for standard flood wait handling.
-164
View File
@@ -1,164 +0,0 @@
---
description: For tasks requiring changing or adding user facing phrases and text parts.
globs:
alwaysApply: false
---
# Telegram Desktop Localization
## Coding Style Note
**Use `auto`:** In the actual codebase, variable types are almost always deduced using `auto` (or `const auto`, `const auto &`) rather than being written out explicitly. Examples in this guide may use explicit types for clarity, but prefer `auto` in practice.
```cpp
// Prefer this:
auto currentTitle = tr::lng_settings_title(tr::now);
auto nameProducer = GetNameProducer(); // Returns rpl::producer<...>
// Instead of this:
QString currentTitle = tr::lng_settings_title(tr::now);
rpl::producer<QString> nameProducer = GetNameProducer();
```
## String Resource File
Base user-facing English strings are defined in the `lang.strings` file:
`Telegram/Resources/langs/lang.strings`
This file uses a key-value format with named placeholders:
```
"lng_settings_title" = "Settings";
"lng_confirm_delete_item" = "Are you sure you want to delete {item_name}?";
"lng_files_selected" = "{count} files selected"; // Simple count example (see Pluralization)
```
Placeholders are enclosed in curly braces, e.g., `{name}`, `{user}`. A special placeholder `{count}` is used for pluralization rules.
### Pluralization
For keys that depend on a number (using the `{count}` placeholder), English typically requires two forms: singular and plural. These are defined in `lang.strings` using `#one` and `#other` suffixes:
```
"lng_files_selected#one" = "{count} file selected";
"lng_files_selected#other" = "{count} files selected";
```
While only `#one` and `#other` are defined in the base `lang.strings`, the code generation process creates C++ accessors for all six CLDR plural categories (`#zero`, `#one`, `#two`, `#few`, `#many`, `#other`) to support languages with more complex pluralization rules.
## Translation Process
While `lang.strings` provides the base English text and the keys, the actual translations are managed via Telegram's translations platform (translations.telegram.org) and loaded dynamically at runtime from the API. The keys from `lang.strings` (including the `#one`/`#other` variants) are used on the platform.
## Code Generation
A code generation tool processes `lang.strings` to create C++ structures and accessors within the `tr` namespace. These allow type-safe access to strings and handling of placeholders and pluralization. Generated keys typically follow the pattern `tr::lng_key_name`.
## String Usage in Code
Strings are accessed in C++ code using the generated objects within the `tr::` namespace. There are two main ways to use them: reactively (returning an `rpl::producer`) or immediately (returning the current value).
### 1. Reactive Usage (rpl::producer)
Calling a generated string function directly returns a reactive producer, typically `rpl::producer<QString>`. This producer automatically updates its value whenever the application language changes.
```cpp
// Key: "settings_title" = "Settings";
auto titleProducer = tr::lng_settings_title(); // Type: rpl::producer<QString>
// Key: "confirm_delete_item" = "Are you sure you want to delete {item_name}?";
auto itemNameProducer = /* ... */; // Type: rpl::producer<QString>
auto confirmationProducer = tr::lng_confirm_delete_item( // Type: rpl::producer<QString>
tr::now, // NOTE: tr::now is NOT passed here for reactive result
lt_item_name,
std::move(itemNameProducer)); // Placeholder producers should be moved
```
### 2. Immediate Usage (Current Value)
Passing `tr::now` as the first argument retrieves the string's current value in the active language (typically as a `QString`).
```cpp
// Key: "settings_title" = "Settings";
auto currentTitle = tr::lng_settings_title(tr::now); // Type: QString
// Key: "confirm_delete_item" = "Are you sure you want to delete {item_name}?";
const auto currentItemName = QString("My Document"); // Type: QString
auto currentConfirmation = tr::lng_confirm_delete_item( // Type: QString
tr::now, // Pass tr::now for immediate value
lt_item_name, currentItemName); // Placeholder value is a direct QString (or convertible)
```
### 3. Placeholders (`{tag}`)
Placeholders like `{item_name}` are replaced by providing arguments after `tr::now` (for immediate) or as the initial arguments (for reactive). A corresponding `lt_tag_name` constant is passed before the value.
* **Immediate:** Pass the direct value (e.g., `QString`, `int`).
* **Reactive:** Pass an `rpl::producer` of the corresponding type (e.g., `rpl::producer<QString>`). Remember to `std::move` the producer or use `rpl::duplicate` if you need to reuse the original producer afterwards.
### 4. Pluralization (`{count}`)
Keys using `{count}` require a numeric value for the `lt_count` placeholder. The correct plural form (`#zero`, `#one`, ..., `#other`) is automatically selected based on this value and the current language rules.
* **Immediate (`tr::now`):** Pass a `float64` or `int` (which is auto-converted to `float64`).
```cpp
int count = 1;
auto filesText = tr::lng_files_selected(tr::now, lt_count, count); // Type: QString
count = 5;
filesText = tr::lng_files_selected(tr::now, lt_count, count); // Uses "files_selected#other"
```
* **Reactive:** Pass an `rpl::producer<float64>`. Use the `tr::to_count()` helper to convert an `rpl::producer<int>` or wrap a single value.
```cpp
// From an existing int producer:
auto countProducer = /* ... */; // Type: rpl::producer<int>
auto filesTextProducer = tr::lng_files_selected( // Type: rpl::producer<QString>
lt_count,
countProducer | tr::to_count()); // Use tr::to_count() for conversion
// From a single int value wrapped reactively:
int currentCount = 5;
auto filesTextProducerSingle = tr::lng_files_selected( // Type: rpl::producer<QString>
lt_count,
rpl::single(currentCount) | tr::to_count());
// Alternative for single values (less common): rpl::single(currentCount * 1.)
```
### 5. Custom Projectors
An optional final argument can be a projector function (like `Ui::Text::Upper` or `Ui::Text::WithEntities`) to transform the output.
* If the projector returns `OutputType`, the string function returns `OutputType` (immediate) or `rpl::producer<OutputType>` (reactive).
* Placeholder values must match the projector's *input* requirements. For `Ui::Text::WithEntities`, placeholders expect `TextWithEntities` (immediate) or `rpl::producer<TextWithEntities>` (reactive).
```cpp
// Immediate with Ui::Text::WithEntities projector
// Key: "user_posted_photo" = "{user} posted a photo";
const auto userName = TextWithEntities{ /* ... */ }; // Type: TextWithEntities
auto message = tr::lng_user_posted_photo( // Type: TextWithEntities
tr::now,
lt_user,
userName, // Must be TextWithEntities
Ui::Text::WithEntities); // Projector
// Reactive with Ui::Text::WithEntities projector
auto userNameProducer = /* ... */; // Type: rpl::producer<TextWithEntities>
auto messageProducer = tr::lng_user_posted_photo( // Type: rpl::producer<TextWithEntities>
lt_user,
std::move(userNameProducer), // Move placeholder producers
Ui::Text::WithEntities); // Projector
```
## Key Summary
* Keys are defined in `Resources/langs/lang.strings` using `{tag}` placeholders.
* Plural keys use `{count}` and have `#one`/`#other` variants in `lang.strings`.
* Access keys via `tr::lng_key_name(...)` in C++.
* Call with `tr::now` as the first argument for the immediate `QString` (or projected type).
* Call without `tr::now` for the reactive `rpl::producer<QString>` (or projected type).
* Provide placeholder values (`lt_tag_name, value`) matching the usage (direct value for immediate, `rpl::producer` for reactive). Producers should typically be moved via `std::move`.
* For `{count}`:
* Immediate: Pass `int` or `float64`.
* Reactive: Pass `rpl::producer<float64>`, typically by converting an `int` producer using `| tr::to_count()`.
* Optional projector function as the last argument modifies the output type and required placeholder types.
* Actual translations are loaded at runtime from the API.
-216
View File
@@ -1,216 +0,0 @@
---
description:
globs:
alwaysApply: true
---
# RPL (Reactive Programming Library) Guide
## Coding Style Note
**Use `auto`:** In the actual codebase, variable types are almost always deduced using `auto` (or `const auto`, `const auto &`) rather than being written out explicitly. Examples in this guide may use explicit types for clarity, but prefer `auto` in practice.
```cpp
// Prefer this:
auto intProducer = rpl::single(123);
const auto &lifetime = existingLifetime;
// Instead of this:
rpl::producer<int> intProducer = rpl::single(123);
const rpl::lifetime &lifetime = existingLifetime;
// Sometimes needed if deduction is ambiguous or needs help:
auto user = std::make_shared<UserData>();
auto data = QByteArray::fromHex("...");
```
## Introduction
RPL is the reactive programming library used in this project, residing in the `rpl::` namespace. It allows handling asynchronous streams of data over time.
The core concept is the `rpl::producer`, which represents a stream of values that can be generated over a certain lifetime.
## Producers: `rpl::producer<Type, Error = no_error>`
The fundamental building block is `rpl::producer<Type, Error>`. It produces values of `Type` and can optionally signal an error of type `Error`. By default, `Error` is `rpl::no_error`, indicating that the producer does not explicitly handle error signaling through this mechanism.
```cpp
// A producer that emits integers.
auto intProducer = /* ... */; // Type: rpl::producer<int>
// A producer that emits strings and can potentially emit a CustomError.
auto stringProducerWithError = /* ... */; // Type: rpl::producer<QString, CustomError>
```
Producers are typically lazy; they don't start emitting values until someone subscribes to them.
## Lifetime Management: `rpl::lifetime`
Reactive pipelines have a limited duration, managed by `rpl::lifetime`. An `rpl::lifetime` object essentially holds a collection of cleanup callbacks. When the lifetime ends (either explicitly destroyed or goes out of scope), these callbacks are executed, tearing down the associated pipeline and freeing resources.
```cpp
rpl::lifetime myLifetime;
// ... later ...
// myLifetime is destroyed, cleanup happens.
// Or, pass a lifetime instance to manage a pipeline's duration.
rpl::lifetime &parentLifetime = /* ... get lifetime from context ... */;
```
## Starting a Pipeline: `rpl::start_...`
To consume values from a producer, you start a pipeline using one of the `rpl::start_...` methods. These methods subscribe to the producer and execute callbacks for the events they handle.
The most common method is `rpl::start_with_next`:
```cpp
auto counter = /* ... */; // Type: rpl::producer<int>
rpl::lifetime lifetime;
// Counter is consumed here, use std::move if it's an l-value.
std::move(
counter
) | rpl::start_with_next([=]\(int nextValue) {
// Process the next integer value emitted by the producer.
qDebug() << "Received: " << nextValue;
}, lifetime); // Pass the lifetime to manage the subscription.
// Note: `counter` is now in a moved-from state and likely invalid.
// If you need to start the same producer multiple times, duplicate it:
// rpl::duplicate(counter) | rpl::start_with_next(...);
// If you DON'T pass a lifetime to a start_... method:
auto counter2 = /* ... */; // Type: rpl::producer<int>
rpl::lifetime subscriptionLifetime = std::move(
counter2
) | rpl::start_with_next([=]\(int nextValue) { /* ... */ });
// The returned lifetime MUST be stored. If it's discarded immediately,
// the subscription stops instantly.
// `counter2` is also moved-from here.
```
Other variants allow handling errors (`_error`) and completion (`_done`):
```cpp
auto dataStream = /* ... */; // Type: rpl::producer<QString, Error>
rpl::lifetime lifetime;
// Assuming dataStream might be used again, we duplicate it for the first start.
// If it's the only use, std::move(dataStream) would be preferred.
rpl::duplicate(
dataStream
) | rpl::start_with_error([=]\(Error &&error) {
// Handle the error signaled by the producer.
qDebug() << "Error: " << error.text();
}, lifetime);
// Using dataStream again, perhaps duplicated again or moved if last use.
rpl::duplicate(
dataStream
) | rpl::start_with_done([=] {
// Execute when the producer signals it's finished emitting values.
qDebug() << "Stream finished.";
}, lifetime);
// Last use of dataStream, so we move it.
std::move(
dataStream
) | rpl::start_with_next_error_done(
[=]\(QString &&value) { /* handle next value */ },
[=]\(Error &&error) { /* handle error */ },
[=] { /* handle done */ },
lifetime);
```
## Transforming Producers
RPL provides functions to create new producers by transforming existing ones:
* `rpl::map`: Transforms each value emitted by a producer.
```cpp
auto ints = /* ... */; // Type: rpl::producer<int>
// The pipe operator often handles the move implicitly for chained transformations.
auto strings = std::move(
ints // Explicit move is safer
) | rpl::map([](int value) {
return QString::number(value * 2);
}); // Emits strings like "0", "2", "4", ...
```
* `rpl::filter`: Emits only the values from a producer that satisfy a condition.
```cpp
auto ints = /* ... */; // Type: rpl::producer<int>
auto evenInts = std::move(
ints // Explicit move is safer
) | rpl::filter([](int value) {
return (value % 2 == 0);
}); // Emits only even numbers.
```
## Combining Producers
You can combine multiple producers into one:
* `rpl::combine`: Combines the latest values from multiple producers whenever *any* of them emits a new value. Requires all producers to have emitted at least one value initially.
While it produces a `std::tuple`, subsequent operators like `map`, `filter`, and `start_with_next` can automatically unpack this tuple into separate lambda arguments.
```cpp
auto countProducer = rpl::single(1); // Type: rpl::producer<int>
auto textProducer = rpl::single(u"hello"_q); // Type: rpl::producer<QString>
rpl::lifetime lifetime;
// rpl::combine takes producers by const-ref internally and duplicates,
// so move/duplicate is usually not strictly needed here unless you
// want to signal intent or manage the lifetime of p1/p2 explicitly.
auto combined = rpl::combine(
countProducer, // or rpl::duplicate(countProducer)
textProducer // or rpl::duplicate(textProducer)
);
// Starting the combined producer consumes it.
// The lambda receives unpacked arguments, not the tuple itself.
std::move(
combined
) | rpl::start_with_next([=]\(int count, const QString &text) {
// No need for std::get<0>(latest), etc.
qDebug() << "Combined: Count=" << count << ", Text=" << text;
}, lifetime);
// This also works with map, filter, etc.
std::move(
combined
) | rpl::filter([=]\(int count, const QString &text) {
return count > 0 && !text.isEmpty();
}) | rpl::map([=]\(int count, const QString &text) {
return text.repeated(count);
}) | rpl::start_with_next([=]\(const QString &result) {
qDebug() << "Mapped & Filtered: " << result;
}, lifetime);
```
* `rpl::merge`: Merges the output of multiple producers of the *same type* into a single producer. It emits a value whenever *any* of the source producers emits a value.
```cpp
auto sourceA = /* ... */; // Type: rpl::producer<QString>
auto sourceB = /* ... */; // Type: rpl::producer<QString>
// rpl::merge also duplicates internally.
auto merged = rpl::merge(sourceA, sourceB);
// Starting the merged producer consumes it.
std::move(
merged
) | rpl::start_with_next([=]\(QString &&value) {
// Receives values from either sourceA or sourceB as they arrive.
qDebug() << "Merged value: " << value;
}, lifetime);
```
## Key Concepts Summary
* Use `rpl::producer<Type, Error>` to represent streams of values.
* Manage subscription duration using `rpl::lifetime`.
* Pass `rpl::lifetime` to `rpl::start_...` methods.
* If `rpl::lifetime` is not passed, **store the returned lifetime** to keep the subscription active.
* Use operators like `| rpl::map`, `| rpl::filter` to transform streams.
* Use `rpl::combine` or `rpl::merge` to combine streams.
* When starting a chain (`std::move(producer) | rpl::map(...)`), explicitly move the initial producer.
* These functions typically duplicate their input producers internally.
* Starting a pipeline consumes the producer; use `
-154
View File
@@ -1,154 +0,0 @@
---
description: For tasks requiring working with user facing UI components.
globs:
alwaysApply: false
---
# Telegram Desktop UI Styling
## Style Definition Files
UI element styles (colors, fonts, paddings, margins, icons, etc.) are defined in `.style` files using a custom syntax. These files are located alongside the C++ source files they correspond to within specific UI component directories (e.g., `Telegram/SourceFiles/ui/chat/chat.style`).
Definitions from other `.style` files can be included using the `using` directive at the top of the file:
```style
using "ui/basic.style";
using "ui/widgets/widgets.style";
```
The central definition of named colors happens in `Telegram/SourceFiles/ui/colors.palette`. This file allows for theme generation and loading colors from various sources.
### Syntax Overview
1. **Built-in Types:** The syntax recognizes several base types inferred from the value assigned:
* `int`: Integer numbers (e.g., `lineHeight: 20;`)
* `bool`: Boolean values (e.g., `useShadow: true;`)
* `pixels`: Pixel values, ending with `px` (e.g., `borderWidth: 1px;`). Generated as `int` in C++.
* `color`: Named colors defined in `colors.palette` (e.g., `background: windowBg;`)
* `icon`: Defined inline using a specific syntax (see below). Generates `style::icon`.
* `margins`: Four pixel values for margins or padding. Requires `margins(top, right, bottom, left)` syntax (e.g., `margin: margins(10px, 5px, 10px, 5px);` or `padding: margins(8px, 8px, 8px, 8px);`). Generates `style::margins` (an alias for `QMargins`).
* `size`: Two pixel values for width and height (e.g., `iconSize: size(16px, 16px);`). Generates `style::size`.
* `point`: Two pixel values for x and y coordinates (e.g., `textPos: point(5px, 2px);`). Generates `style::point`.
* `align`: Alignment keywords (e.g., `textAlign: align(center);` or `iconAlign: align(left);`). Generates `style::align`.
* `font`: Font definitions (e.g., `font: font(14px semibold);`). Generates `style::font`.
* `double`: Floating point numbers (e.g., `disabledOpacity: 0.5;`)
*Note on Borders:* Borders are typically defined using multiple fields like `border: pixels;` (for width) and `borderFg: color;` (for color), rather than a single CSS-like property.
2. **Structure Definition:** You can define complex data structures directly within the `.style` file:
```style
MyButtonStyle { // Defines a structure named 'MyButtonStyle'
textPadding: margins; // Field 'textPadding' expects margins type
icon: icon; // Field 'icon' of type icon
height: pixels; // Field 'height' of type pixels
}
```
This generates a `struct MyButtonStyle { ... };` inside the `namespace style`. Fields will have corresponding C++ types (`style::margins`, `style::icon`, `int`).
3. **Variable Definition & Inheritance:** Variables are defined using `name: value;` or `groupName { ... }`. They can be of built-in types or custom structures. Structures can be initialized inline or inherit from existing variables.
**Icon Definition Syntax:** Icons are defined inline using the `icon{...}` syntax. The generator probes for `.svg` files or `.png` files (including `@2x`, `@3x` variants) based on the provided path stem.
```style
// Single-part icon definition:
myIconSearch: icon{{ "gui/icons/search", iconColor }};
// Multi-part icon definition (layers drawn bottom-up):
myComplexIcon: icon{
{ "gui/icons/background", iconBgColor },
{ "gui/icons/foreground", iconFgColor }
};
// Icon with path modifiers (PNG only for flips, SVG only for size):
myFlippedIcon: icon{{ "gui/icons/arrow-flip_horizontal", arrowColor }};
myResizedIcon: icon{{ "gui/icons/logo-128x128", logoColor }}; // Forces 128x128 for SVG
```
**Other Variable Examples:**
```style
// Simple variables
buttonHeight: 30px;
activeButtonColor: buttonBgActive; // Named color from colors.palette
// Variable of a custom structure type, initialized inline
defaultButton: MyButtonStyle {
textPadding: margins(10px, 15px, 10px, 15px); // Use margins(...) syntax
icon: myIconSearch; // Assign the previously defined icon variable
height: buttonHeight; // Reference another variable
}
// Another variable inheriting from 'defaultButton' and overriding/adding fields
primaryButton: MyButtonStyle(defaultButton) {
icon: myComplexIcon; // Override icon with the multi-part one
backgroundColor: activeButtonColor; // Add a field not in MyButtonStyle definition
}
// Style group (often used for specific UI elements)
chatInput { // Example using separate border properties and explicit padding
border: 1px; // Border width
borderFg: defaultInputFieldBorder; // Border color (named color)
padding: margins(5px, 10px, 5px, 10px); // Use margins(...) syntax for padding field
backgroundColor: defaultChatBg; // Background color
}
```
## Code Generation
A code generation tool processes these `.style` files and `colors.palette` to create C++ objects.
- The `using` directives resolve dependencies between `.style` files.
- Custom structure definitions (like `MyButtonStyle`) generate corresponding `struct MyButtonStyle { ... };` within the `namespace style`.
- Style variables/groups (like `defaultButton`, `primaryButton`, `chatInput`) are generated as objects/structs within the `st` namespace (e.g., `st::defaultButton`, `st::primaryButton`, `st::chatInput`). These generated structs contain members corresponding to the fields defined in the `.style` file.
- Color objects are generated into the `st` namespace as well, based on their names in `colors.palette` (e.g., `st::windowBg`, `st::buttonBgActive`).
- The generated header files for styles are placed in the `Telegram/SourceFiles/styles/` directory with a `style_` prefix (e.g., `styles/style_widgets.h` for `ui/widgets/widgets.style`). You include them like `#include "styles/style_widgets.h"`.
Generated C++ types correspond to the `.style` types: `style::color`, `style::font`, `style::margins` (used for both `margin:` and `padding:` fields), `style::icon`, `style::size`, `style::point`, `style::align`, and `int` or `bool` for simple types.
## Style Usage in Code
Styles are applied in C++ code by referencing the generated `st::...` objects and their members.
```cpp
// Example: Including the generated style header
#include "styles/style_widgets.h" // For styles defined in ui/widgets/widgets.style
// ... inside some UI class code ...
// Accessing members of a generated style struct
int height = st::primaryButton.height; // Accessing the 'height' field (pixels -> int)
const style::icon &icon = st::primaryButton.icon; // Accessing the 'icon' field (st::myComplexIcon)
style::margins padding = st::primaryButton.textPadding; // Accessing 'textPadding'
style::color bgColor = st::primaryButton.backgroundColor; // Accessing the color (st::activeButtonColor)
// Applying styles (conceptual examples)
myButton->setIcon(st::primaryButton.icon);
myButton->setHeight(st::primaryButton.height);
myButton->setPadding(st::primaryButton.textPadding);
myButton->setBackgroundColor(st::primaryButton.backgroundColor);
// Using styles directly in painting
void MyWidget::paintEvent(QPaintEvent *e) {
Painter p(this);
p.fillRect(rect(), st::chatInput.backgroundColor); // Use color from chatInput style
// Border painting requires width and color
int borderWidth = st::chatInput.border; // Access border width (pixels -> int)
style::color borderColor = st::chatInput.borderFg; // Access border color
if (borderWidth > 0) {
p.setPen(QPen(borderColor, borderWidth));
// Adjust rect for pen width if needed before drawing
p.drawRect(rect().adjusted(borderWidth / 2, borderWidth / 2, -borderWidth / 2, -borderWidth / 2));
}
// Access padding (style::margins)
style::margins inputPadding = st::chatInput.padding;
// ... use inputPadding.top(), inputPadding.left() etc. for content layout ...
}
```
**Key Points:**
* Styles are defined in `.style` files next to their corresponding C++ source files.
* `using "path/to/other.style";` includes definitions from other style files.
* Named colors are defined centrally in `ui/colors.palette`.
* `.style` syntax supports built-in types (like `pixels`, `color`, `margins`, `point`, `size`, `align`, `font`, `double`), custom structure definitions (`Name { field: type; ... }`), variable definitions (`name: value;`), and inheritance (`child: Name(parent) { ... }`).
* Values must match the expected type (e.g., fields declared as `margins` type, like `margin:` or `padding:`, require `margins(...)` syntax). Borders are typically set via separate `border: pixels;` and `borderFg: color;` fields.
* Icons are defined inline using `name: icon{{ "path_stem", color }};` or `name: icon{ { "path1", c1 }, ... };` syntax, with optional path modifiers.
* Code generation creates `struct` definitions in the `style` namespace for custom types and objects/structs in the `st` namespace for defined variables/groups.
* Generated headers are in `styles/` with a `style_` prefix and must be included.
* Access style properties via the generated `st::` objects (e.g., `st::primaryButton.height`, `st::chatInput.backgroundColor`).
+4 -1
View File
@@ -49,7 +49,10 @@ body:
label: Installation source
multiple: false
options:
- Binary from GitHub / official Telegram source
- Binary from GitHub / @AyuGramReleases channel
- Arch Linux (ayugram-desktop / ayugram-desktop-git)
- Arch Linux (ayugram-desktop-bin)
- flatpak by 0FL01
- Other (unofficial) source
validations:
required: true
+1 -1
View File
@@ -7,5 +7,5 @@ contact_links:
url: https://bugs.telegram.org
about: Any bug report or feature request not about Telegram Desktop.
- name: Question
url: https://t.me/TelegramDesktopTalk
url: https://t.me/ayugramchat
about: Ask a question.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 161 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

-6
View File
@@ -1,6 +0,0 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
+328
View File
@@ -0,0 +1,328 @@
#!/usr/bin/env python3
"""Convert changelog.txt to a static HTML page for GitHub Pages."""
import re
import shutil
import sys
import html
from pathlib import Path
MONTHS = [
"", "January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December",
]
VERSION_RE = re.compile(
r"^(\d+\.\d+(?:\.\d+)?)\s*" # version number
r"(?:(alpha|beta|dev|stable)\s*)?" # optional tag
r"\((\d{2})\.(\d{2})\.(\d{2,4})\)$" # date (DD.MM.YY or DD.MM.YYYY)
)
def parse_date(day: str, month: str, year: str) -> tuple[str, str, str]:
"""Return (sort_key, raw_display, full_display) from DD, MM, YY strings."""
y = int(year)
if y < 100:
y += 2000
m = int(month)
d = int(day)
sort_key = f"{y:04d}-{m:02d}-{d:02d}"
raw_display = f"{day}.{month}.{year}"
full_display = f"{d} {MONTHS[m]} {y}"
return sort_key, raw_display, full_display
def parse_changelog(text: str) -> list[dict]:
entries = []
current = None
for raw_line in text.splitlines():
line = raw_line.rstrip()
m = VERSION_RE.match(line)
if m:
if current:
entries.append(current)
version, tag, day, month, year = m.groups()
sort_key, raw_date, full_date = parse_date(day, month, year)
current = {
"version": version,
"tag": tag or "",
"date": raw_date,
"full_date": full_date,
"sort_key": sort_key,
"lines": [],
}
elif current is not None:
# Skip blank lines at the start
if not line and not current["lines"]:
continue
# Skip stray artifact lines
if line.strip() in ("),", "),"):
continue
current["lines"].append(line)
if current:
entries.append(current)
# Trim trailing blank lines from each entry
for entry in entries:
while entry["lines"] and not entry["lines"][-1]:
entry["lines"].pop()
return entries
def render_entry(entry: dict) -> str:
version = html.escape(entry["version"])
tag = entry["tag"]
date = html.escape(entry["date"])
anchor = f"v{version}"
tag_html = ""
if tag and tag not in ("stable",):
tag_html = f' {html.escape(tag)}'
parts = [
f'<article class="entry" id="{anchor}">',
f' <h2><a class="anchor" href="#{anchor}"></a>'
f'{version}{tag_html}'
f' <time>{date}</time></h2>',
]
in_list = False
for line in entry["lines"]:
stripped = line.lstrip()
if stripped.startswith("- ") or stripped.startswith("\u2014 "):
# Bullet point (- or em dash)
if not in_list:
parts.append(" <ul>")
in_list = True
bullet_text = stripped[2:]
parts.append(f" <li>{html.escape(bullet_text)}</li>")
else:
if in_list:
parts.append(" </ul>")
in_list = False
if stripped:
parts.append(f" <p>{html.escape(stripped)}</p>")
if in_list:
parts.append(" </ul>")
parts.append("</article>")
return "\n".join(parts)
def build_html(entries: list[dict]) -> str:
count = len(entries)
first_date = entries[-1]["full_date"] if entries else ""
latest_version = entries[0]["version"] if entries else ""
entries_html = "\n\n".join(render_entry(e) for e in entries)
return f"""<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Version history</title>
<link rel="icon" type="image/png" sizes="32x32" href="icon32.png">
<link rel="icon" type="image/png" sizes="16x16" href="icon16.png">
<style>
* {{ margin: 0; padding: 0; box-sizing: border-box; }}
body {{
font: 12px / 18px "Lucida Grande", "Lucida Sans Unicode", Arial,
Helvetica, Verdana, sans-serif;
background: #fff;
color: #000;
}}
header {{
background: #1d98dc;
color: #fff;
padding: 2rem 1.5rem;
text-align: center;
}}
header h1 {{ font-size: 18px; font-weight: 700; }}
header p {{ opacity: .85; margin-top: 4px; font-size: 12px; }}
.container {{
max-width: 600px;
margin: 0 auto;
padding: 20px 15px;
}}
.search-box {{
position: sticky;
top: 0;
z-index: 10;
background: #fff;
padding: 8px 0 12px;
}}
.search-box input {{
width: 100%;
padding: 6px 10px;
font: 12px / 18px "Lucida Grande", "Lucida Sans Unicode", Arial,
Helvetica, Verdana, sans-serif;
border: 1px solid #ccc;
border-radius: 4px;
background: #fff;
color: #000;
outline: none;
}}
.search-box input:focus {{ border-color: #1d98dc; }}
.entry {{
padding: 14px 0 4px;
scroll-margin-top: 48px;
}}
.entry h2 {{
font-size: 16px;
font-weight: 700;
line-height: 22px;
margin-bottom: 6px;
position: relative;
}}
.entry h2 .anchor {{
position: absolute;
left: -24px;
top: 0;
width: 24px;
height: 22px;
display: block;
opacity: 0;
transition: opacity .15s;
background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 16 16'%3E%3Cpath fill='%23168acd' d='M7.775 3.275a.75.75 0 0 0 1.06 1.06l1.25-1.25a2 2 0 1 1 2.83 2.83l-2.5 2.5a2 2 0 0 1-2.83 0 .75.75 0 0 0-1.06 1.06 3.5 3.5 0 0 0 4.95 0l2.5-2.5a3.5 3.5 0 0 0-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 0 1 0-2.83l2.5-2.5a2 2 0 0 1 2.83 0 .75.75 0 0 0 1.06-1.06 3.5 3.5 0 0 0-4.95 0l-2.5 2.5a3.5 3.5 0 0 0 4.95 4.95l1.25-1.25a.75.75 0 0 0-1.06-1.06l-1.25 1.25a2 2 0 0 1-2.83 0z'/%3E%3C/svg%3E") 0 center / 18px no-repeat;
cursor: pointer;
}}
.entry h2:hover .anchor {{ opacity: .6; }}
.entry h2 .anchor:hover {{ opacity: 1; }}
.entry h2 time {{
font-size: 12px;
font-weight: 400;
color: #999;
margin-left: 6px;
}}
.entry ul {{
margin: 0 0 4px 8px;
padding: 0;
list-style: none;
}}
.entry li {{
padding: 2px 0 2px 16px;
position: relative;
color: #333;
}}
.entry li::before {{
content: "";
position: absolute;
left: 0;
top: 9px;
width: 6px;
height: 6px;
border-radius: 50%;
background: #009be1;
}}
.entry p {{
margin: 4px 0;
color: #555;
font-style: italic;
}}
.hidden {{ display: none; }}
footer {{
text-align: center;
padding: 24px 15px;
font-size: 11px;
color: #999;
}}
footer a {{ color: #168acd; text-decoration: none; }}
footer a:hover {{ text-decoration: underline; }}
</style>
</head>
<body>
<header>
<h1>Version history</h1>
<p>{count} releases since {first_date} &middot; latest: {latest_version}</p>
</header>
<div class="container">
<div class="search-box">
<input type="text" id="search" placeholder="Search versions and changes\u2026"
autocomplete="off" spellcheck="false">
</div>
<div id="entries">
{entries_html}
</div>
</div>
<footer>
Auto-generated from
<a href="https://github.com/telegramdesktop/tdesktop/blob/dev/changelog.txt">changelog.txt</a>.
Source code is published under
<a href="https://github.com/telegramdesktop/tdesktop">GPL v3</a>.
</footer>
<script>
(function() {{
var input = document.getElementById('search');
var entries = document.querySelectorAll('.entry');
var timer;
input.addEventListener('input', function() {{
clearTimeout(timer);
timer = setTimeout(function() {{
var q = input.value.toLowerCase().trim();
entries.forEach(function(el) {{
if (!q) {{
el.classList.remove('hidden');
}} else {{
el.classList.toggle('hidden', el.textContent.toLowerCase().indexOf(q) === -1);
}}
}});
}}, 150);
}});
// Anchor links: copy URL on click
document.addEventListener('click', function(e) {{
var anchor = e.target.closest('.anchor');
if (!anchor) return;
e.preventDefault();
var url = location.origin + location.pathname + anchor.getAttribute('href');
history.replaceState(null, '', anchor.getAttribute('href'));
if (navigator.clipboard) {{
navigator.clipboard.writeText(url);
}}
}});
}})();
</script>
</body>
</html>"""
def main():
repo = Path(__file__).resolve().parent.parent.parent
src = repo / "changelog.txt"
if len(sys.argv) > 1:
src = Path(sys.argv[1])
out = repo / "docs" / "changelog" / "index.html"
if len(sys.argv) > 2:
out = Path(sys.argv[2])
text = src.read_text(encoding="utf-8")
entries = parse_changelog(text)
html_content = build_html(entries)
out.parent.mkdir(parents=True, exist_ok=True)
out.write_text(html_content, encoding="utf-8")
# Copy favicon files from resources
icons_src = repo / "Telegram" / "Resources" / "art"
for name in ("icon16.png", "icon32.png"):
icon = icons_src / name
if icon.exists():
shutil.copy2(icon, out.parent / name)
print(f"Generated {out} ({len(entries)} entries, {out.stat().st_size:,} bytes)")
if __name__ == "__main__":
main()
+17
View File
@@ -54,5 +54,22 @@ stage
.idea/
cmake-build-debug/
# Local configuration files
settings.local.json
*.local.json
.env
.env.local
.env.*.local
# Cursor IDE local settings (but keep .cursor/rules/)
.cursor/*
!.cursor/rules/
# AI work folder (session-specific, not for version control)
.ai
# Generated changelog page (built by CI, deployed to GitHub Pages)
/docs/changelog/
# Project specific
Telegram/SourceFiles/_other/packer_private.h
+6 -6
View File
@@ -1,6 +1,3 @@
[submodule "Telegram/ThirdParty/libtgvoip"]
path = Telegram/ThirdParty/libtgvoip
url = https://github.com/telegramdesktop/libtgvoip
[submodule "Telegram/ThirdParty/GSL"]
path = Telegram/ThirdParty/GSL
url = https://github.com/Microsoft/GSL.git
@@ -76,9 +73,6 @@
[submodule "Telegram/lib_webview"]
path = Telegram/lib_webview
url = https://github.com/desktop-app/lib_webview.git
[submodule "Telegram/ThirdParty/jemalloc"]
path = Telegram/ThirdParty/jemalloc
url = https://github.com/jemalloc/jemalloc
[submodule "Telegram/ThirdParty/dispatch"]
path = Telegram/ThirdParty/dispatch
url = https://github.com/apple/swift-corelibs-libdispatch
@@ -97,3 +91,9 @@
[submodule "Telegram/ThirdParty/xdg-desktop-portal"]
path = Telegram/ThirdParty/xdg-desktop-portal
url = https://github.com/flatpak/xdg-desktop-portal.git
[submodule "Telegram/lib_translate"]
path = Telegram/lib_translate
url = https://github.com/desktop-app/lib_translate
[submodule "Telegram/lib_icu"]
path = Telegram/lib_icu
url = https://github.com/AyuGram/lib_icu.git
+344
View File
@@ -0,0 +1,344 @@
# Agent Guide for Telegram Desktop
This guide defines repository-wide instructions for coding agents working with the Telegram Desktop codebase.
Avoid building the project.
If you're asked to create a Pull Request, then clearly state in PR description that it was AI generated.
# Development Guidelines
## Coding Style
**Do NOT write comments in code:**
This is important! Do not write single-line comments that describe what the next line does - they are bloat. Comments are allowed ONLY to describe complex algorithms in detail, when the explanation requires at least 4-5 lines. Self-documenting code with clear variable and function names is preferred.
```cpp
// BAD - don't do this:
// Get the user's name
auto name = user->name();
// Check if premium
if (user->isPremium()) {
// GOOD - no comments needed, code is self-explanatory:
auto name = user->name();
if (user->isPremium()) {
// ACCEPTABLE - complex algorithm explanation (4+ lines):
// The algorithm works by first collecting all visible messages
// in the viewport, then calculating their intersection with
// the clip rectangle. Messages are grouped by date headers,
// and we need to account for sticky headers that may overlap
// with the first message in each group.
```
**Style and formatting rules** are in `REVIEW.md` — see that file for empty-line-before-closing-brace, operator placement in multi-line expressions, if-with-initializer, and other mechanical style rules.
**Use `auto` for type deduction:**
Prefer `auto` (or `const auto`, `const auto &`) instead of explicit types:
```cpp
// Prefer this:
auto currentTitle = tr::lng_settings_title(tr::now);
auto nameProducer = GetNameProducer();
// Instead of this:
QString currentTitle = tr::lng_settings_title(tr::now);
rpl::producer<QString> nameProducer = GetNameProducer();
```
## API Usage
### API Schema Files
API definitions use [TL Language](https://core.telegram.org/mtproto/TL):
1. **`Telegram/SourceFiles/mtproto/scheme/mtproto.tl`** - MTProto protocol (encryption, auth, etc.)
2. **`Telegram/SourceFiles/mtproto/scheme/api.tl`** - Telegram API (messages, users, chats, etc.)
### Making API Requests
Standard pattern using `api()`, generated `MTP...` types, and callbacks:
```cpp
api().request(MTPnamespace_MethodName(
MTP_flags(flags_value),
MTP_inputPeer(peer),
MTP_string(messageText),
MTP_long(randomId),
MTP_vector<MTPMessageEntity>()
)).done([=](const MTPResponseType &result) {
// Handle successful response
// Multiple constructors - use .match() or check type:
result.match([&](const MTPDuser &data) {
// use data.vfirst_name().v
}, [&](const MTPDuserEmpty &data) {
// handle empty user
});
// Single constructor - use .data() shortcut:
const auto &data = result.data();
// use data.vmessages().v
}).fail([=](const MTP::Error &error) {
// Handle API error
if (error.type() == u"FLOOD_WAIT_X"_q) {
// Handle flood wait
}
}).handleFloodErrors().send();
```
**Key points:**
- Always refer to `api.tl` for method signatures and return types
- Use generated `MTP...` types for parameters (`MTP_int`, `MTP_string`, etc.)
- For multiple constructors, use `.match()` or check `.type()` against `mtpc_` constants then call `.c_constructorName()`:
```cpp
// Using match:
result.match([&](const MTPDuser &data) { ... }, [&](const MTPDuserEmpty &data) { ... });
// Or explicit type check:
if (result.type() == mtpc_user) {
const auto &data = result.c_user(); // asserts on type mismatch
}
```
- For single constructors, use `.data()` shortcut
- Include `.handleFloodErrors()` before `.send()` in rare cases where you want special case flood error handling
- Silently ignore HTTP 406 errors in UI: the server uses 406 to mean "show nothing to the user". Guard toasts with `MTP::IgnoreError(error)` or use `MTP::ShowErrorFallback(show, error)` (both in `mtproto/mtproto_response.h`) which shows `error.type()` as a toast unless the error should be ignored.
## UI Styling
### Style Files
UI styles are defined in `.style` files using custom syntax:
```style
using "ui/basic.style";
using "ui/widgets/widgets.style";
MyButtonStyle {
textPadding: margins;
icon: icon;
height: pixels;
}
defaultButton: MyButtonStyle {
textPadding: margins(10px, 15px, 10px, 15px);
icon: icon{{ "gui/icons/search", iconColor }};
height: 30px;
}
primaryButton: MyButtonStyle(defaultButton) {
icon: icon{{ "gui/icons/check", iconColor }};
}
```
**Built-in types:**
- `int` - Integer numbers (e.g., `maxLines: 3;`)
- `bool` - Boolean values (e.g., `useShadow: true;`)
- `pixels` - Pixel values with `px` suffix (e.g., `10px`)
- `color` - Named colors from `ui/colors.palette`
- `icon` - Inline icon definition: `icon{{ "path/stem", color }}`
- `margins` - Four values: `margins(top, right, bottom, left)`
- `size` - Two values: `size(width, height)`
- `point` - Two values: `point(x, y)`
- `align` - Alignment: `align(center)`, `align(left)`
- `font` - Font: `font(14px semibold)`
- `double` - Floating point
**Multi-part icons** (layers drawn bottom-up):
```style
myComplexIcon: icon{
{ "gui/icons/background", iconBgColor },
{ "gui/icons/foreground", iconFgColor }
};
```
**Borders** are typically separate fields, not a single property:
```style
chatInput {
border: 1px; // width
borderFg: defaultInputFieldBorder; // color
}
```
**Never hardcode sizes in code:**
The app supports different interface scale options. Style `px` values are automatically scaled at runtime, but raw integer constants in code are not. Never use hardcoded numbers for margins, paddings, spacing, sizes, coordinates, or any other dimensional values. Always define them in `.style` files and reference via `st::`.
```cpp
// BAD - breaks at non-100% interface scale:
p.drawText(10, 20, text);
widget->setFixedHeight(48);
auto margin = 8;
auto iconSize = QSize(24, 24);
// GOOD - define in .style file and reference:
p.drawText(st::myWidgetTextLeft, st::myWidgetTextTop, text);
widget->setFixedHeight(st::myWidgetHeight);
auto margin = st::myWidgetMargin;
auto iconSize = st::myWidgetIconSize;
```
**Duration constants**: Animation durations should NOT go in `.style` files, this is a legacy approach. Prefer `constexpr auto kName = crl::time(N)` in an anonymous namespace in the relevant `.cpp` file.
### Usage in Code
```cpp
#include "styles/style_widgets.h"
// Access style members
int height = st::primaryButton.height;
const style::icon &icon = st::primaryButton.icon;
style::margins padding = st::primaryButton.textPadding;
// Use in painting
void MyWidget::paintEvent(QPaintEvent *e) {
Painter p(this);
p.fillRect(rect(), st::chatInput.backgroundColor);
}
```
## Localization
### String Definitions
Strings are defined in `Telegram/Resources/langs/lang.strings`:
```
"lng_settings_title" = "Settings";
"lng_confirm_delete_item" = "Are you sure you want to delete {item_name}?";
"lng_files_selected#one" = "{count} file selected";
"lng_files_selected#other" = "{count} files selected";
```
### Usage in Code
**Immediate (current value):**
```cpp
auto currentTitle = tr::lng_settings_title(tr::now);
auto currentConfirmation = tr::lng_confirm_delete_item(
tr::now,
lt_item_name, currentItemName);
auto filesText = tr::lng_files_selected(tr::now, lt_count, count);
```
**Reactive (rpl::producer):**
```cpp
auto titleProducer = tr::lng_settings_title();
auto confirmationProducer = tr::lng_confirm_delete_item(
lt_item_name,
std::move(itemNameProducer));
auto filesTextProducer = tr::lng_files_selected(
lt_count,
countProducer | tr::to_count());
```
**Key points:**
- Pass `tr::now` as first argument for immediate `QString`
- Omit `tr::now` for reactive `rpl::producer<QString>`
- Placeholders use `lt_tag_name, value` pattern
- For `{count}`: immediate uses `int`, reactive uses `rpl::producer<float64>` with `| tr::to_count()`
- Move producers with `std::move` when passing to placeholders
- Rich text projectors — these `tr::` helpers serve double duty: as the **last argument** (projector) they set the return type to `TextWithEntities`, and as **placeholder values** they wrap individual substitutions in formatting. Always prefer them over `Ui::Text::Bold()`, `Ui::Text::RichLangValue`, etc. — see REVIEW.md for the full mapping.
- `tr::marked` — basic projection, converts `QString` to `TextWithEntities`
- `tr::rich` — interprets `**bold**`/`__italic__` markup in the string
- `tr::bold`, `tr::italic`, `tr::underline` — wrap text in that formatting
- `tr::link` — wrap as a clickable link
- `tr::url(u"https://..."_q)` — returns a projection that converts text to a link pointing to the given URL; can be passed to `rpl::map` or directly to a `tr::lng_...` call
```cpp
// As last argument (projector):
auto title = tr::lng_export_progress_title(tr::now, tr::bold);
auto text = tr::lng_proxy_incorrect_secret(tr::now, tr::rich);
// As placeholder value wrapper + projector:
auto desc = tr::lng_some_key(
tr::now,
lt_name,
tr::bold(userName),
lt_group,
tr::bold(groupName),
tr::rich);
// Nested tr::lng as placeholder:
auto linked = tr::lng_settings_birthday_contacts(
lt_link,
tr::lng_settings_birthday_contacts_link(tr::url(link)),
tr::marked);
```
## RPL (Reactive Programming Library)
### Core Concepts
**Producers** represent streams of values over time:
```cpp
auto intProducer = rpl::single(123); // Emits single value
auto lifetime = rpl::lifetime(); // Manages subscription lifetime
```
### Starting Pipelines
```cpp
std::move(counter) | rpl::on_next([=](int value) {
qDebug() << "Received: " << value;
}, lifetime);
// Without lifetime parameter - MUST store returned lifetime:
auto subscriptionLifetime = std::move(counter) | rpl::on_next([=](int value) {
// process value
});
```
### Transforming Producers
```cpp
auto strings = std::move(ints) | rpl::map([](int value) {
return QString::number(value * 2);
});
auto evenInts = std::move(ints) | rpl::filter([](int value) {
return (value % 2 == 0);
});
```
### Combining Producers
**`rpl::combine`** - combines latest values (lambdas receive unpacked arguments):
```cpp
auto combined = rpl::combine(countProducer, textProducer);
std::move(combined) | rpl::on_next([=](int count, const QString &text) {
qDebug() << "Count=" << count << ", Text=" << text;
}, lifetime);
```
**`rpl::merge`** - merges producers of same type:
```cpp
auto merged = rpl::merge(sourceA, sourceB);
std::move(merged) | rpl::on_next([=](QString &&value) {
qDebug() << "Merged value: " << value;
}, lifetime);
```
**Other pipeline starters** — besides `rpl::on_next`, there are:
- `rpl::on_error([=](Error &&e) { ... }, lifetime)` — handle errors
- `rpl::on_done([=] { ... }, lifetime)` — handle stream completion
- `rpl::on_next_error_done(nextCb, errorCb, doneCb, lifetime)` — handle all three
The `Error` template parameter defaults to `rpl::no_error`: `rpl::producer<Type, Error = no_error>`.
**Key points:**
- Explicitly `std::move` producers when starting pipelines
- Pass `rpl::lifetime` to `on_...` methods or store returned lifetime
- Use `rpl::duplicate(producer)` to reuse a producer multiple times
- Combined producers automatically unpack tuples in lambdas (works with `rpl::map`, `rpl::filter`, and `rpl::on_next`)
+3
View File
@@ -0,0 +1,3 @@
# Claude Code Pointer
Read `AGENTS.md` and treat it as the canonical repository-wide instructions.
+14 -8
View File
@@ -12,19 +12,27 @@ include(cmake/validate_special_target.cmake)
include(cmake/version.cmake)
desktop_app_parse_version(Telegram/build/version)
set(project_langs C CXX)
if (APPLE)
list(APPEND project_langs OBJC OBJCXX)
elseif (LINUX)
list(APPEND project_langs ASM)
if (NOT DEFINED CMAKE_CONFIGURATION_TYPES)
set(configuration_types_init 1)
endif()
project(Telegram
LANGUAGES ${project_langs}
LANGUAGES C CXX
VERSION ${desktop_app_version_cmake}
DESCRIPTION "AyuGram Desktop"
HOMEPAGE_URL "https://ayugram.one"
)
if (APPLE)
enable_language(OBJC OBJCXX)
endif()
if (configuration_types_init
AND CMAKE_CONFIGURATION_TYPES
AND NOT MinSizeRel IN_LIST CMAKE_CONFIGURATION_TYPES)
set(CMAKE_CONFIGURATION_TYPES "${CMAKE_CONFIGURATION_TYPES};MinSizeRel" CACHE STRING "" FORCE)
endif()
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT Telegram)
get_filename_component(third_party_loc "Telegram/ThirdParty" REALPATH)
@@ -39,9 +47,7 @@ include(cmake/variables.cmake)
include(cmake/nice_target_sources.cmake)
include(cmake/target_compile_options_if_exists.cmake)
include(cmake/target_link_frameworks.cmake)
include(cmake/target_link_optional_libraries.cmake)
include(cmake/target_link_options_if_exists.cmake)
include(cmake/target_link_static_libraries.cmake)
include(cmake/init_target.cmake)
include(cmake/generate_target.cmake)
include(cmake/nuget.cmake)
+1 -1
View File
@@ -1,7 +1,7 @@
This file is part of Telegram Desktop,
the official desktop application for the Telegram messaging service.
Copyright (c) 2014-2025 The Telegram Desktop Authors.
Copyright (c) 2014-2026 The Telegram Desktop Authors.
Telegram Desktop is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+68 -9
View File
@@ -11,6 +11,7 @@
- Кастомизация шрифта
- Режим Стримера
- Локальный телеграм премиум
- Переводчик
- Превью медиа и быстрая реакция при сильном нажатии на тачпад (macOS)
- Улучшенный вид
@@ -18,11 +19,18 @@
<h3>
<details>
<summary>Скриншоты настроек</summary>
<img src='.github/demos/demo1.png' width='268'>
<img src='.github/demos/demo2.png' width='268'>
<img src='.github/demos/demo3.png' width='268'>
<img src='.github/demos/demo4.png' width='268'>
<summary>Превью</summary>
<table>
<tr>
<td><img src='.github/demos/demo1.png' width='268' alt='Preferences'></td>
<td><img src='.github/demos/demo2.png' width='268' alt='AyuGram Options'></td>
<td><img src='.github/demos/demo3.png' width='268' alt='Message Filters'></td>
</tr>
<tr>
<td><img src='.github/demos/demo4.png' width='268' alt='Appearance'></td>
<td><img src='.github/demos/demo5.png' width='268' alt='Chats'></td>
</tr>
</table>
</details>
</h3>
@@ -30,7 +38,7 @@
### Windows
#### Официальный вариант
#### Официальная версия
Вы можете скачать готовый бинарный файл со вкладки [Releases](https://github.com/AyuGram/AyuGramDesktop/releases) или из
[Телеграм канала](https://t.me/AyuGramReleases).
@@ -55,19 +63,66 @@ scoop install ayugram
### macOS
#### Официальная версия
Вы можете скачать подписанный пакет со вкладки [Releases](https://github.com/AyuGram/AyuGramDesktop/releases).
#### Homebrew
```bash
brew install --cask ayugram
```
### Arch Linux
Вы можете установить `ayugram-desktop` из [AUR](https://aur.archlinux.org/packages?O=0&K=ayugram).
#### Из исходников (рекомендованный способ)
Установите `ayugram-desktop` из [AUR](https://aur.archlinux.org/packages/ayugram-desktop).
#### Готовые бинарники
Установите `ayugram-desktop-bin` из [AUR](https://aur.archlinux.org/packages/ayugram-desktop-bin).
Примечание: данный пакет собирается не нами.
### NixOS
Попробуйте [этот репозиторий](https://github.com/ayugram-port/ayugram-desktop).
#### Флейк (рекомендуется)
Установите `ayugram-desktop` из [ndfined-crp/ayugram-desktop](https://github.com/ndfined-crp/ayugram-desktop)
#### Nixpkgs
Установите `ayugram-desktop` из [nixpkgs](https://search.nixos.org/packages?channel=unstable&show=ayugram-desktop)
### ALT Linux
[Sisyphus](https://packages.altlinux.org/en/sisyphus/srpms/ayugram-desktop/)
### Gentoo Linux
Инструкцию по установке можно найти в [этом репозитории](https://codeberg.org/OverLessArtem/ayugram-ebuild-gentoo).
### Void Linux
Инструкцию по установке можно найти в [этом репозитории](https://codeberg.org/OverLessArtem/ayugram-template-void)
### EPM
`epm play ayugram`
### Fedora
Из репозитория [RPM Fusion](https://admin.rpmfusion.org/pkgdb/package/free/ayugram-desktop/).
```bash
dnf install ayugram-desktop
```
### Любой другой Линукс дистрибутив
Следуйте [официальному руководству](https://github.com/AyuGram/AyuGramDesktop/blob/dev/docs/building-linux.md).
Flatpak: https://github.com/0FL01/AyuGramDesktop-flatpak
Или следуйте [официальному руководству](https://github.com/AyuGram/AyuGramDesktop/blob/dev/docs/building-linux.md).
### Примечания для Windows
@@ -101,3 +156,7 @@ scoop install ayugram
### Иконки
- [Solar Icon Set](https://www.figma.com/community/file/1166831539721848736)
### Боты
- [TelegramDB](https://t.me/tgdatabase) для получения юзернейма по ID (до закрытия бесплатной версии 2 апреля 2026)
+68 -8
View File
@@ -12,6 +12,7 @@
- Font customization
- Streamer mode
- Local Telegram Premium
- Translator
- Media preview & quick reaction on force click (macOS)
- Enhanced appearance
@@ -19,11 +20,18 @@ And many more. Check out our [Documentation](https://docs.ayugram.one/desktop/).
<h3>
<details>
<summary>Preferences screenshots</summary>
<img src='.github/demos/demo1.png' width='268'>
<img src='.github/demos/demo2.png' width='268'>
<img src='.github/demos/demo3.png' width='268'>
<img src='.github/demos/demo4.png' width='268'>
<summary>Preview</summary>
<table>
<tr>
<td><img src='.github/demos/demo1.png' width='268' alt='Preferences'></td>
<td><img src='.github/demos/demo2.png' width='268' alt='AyuGram Options'></td>
<td><img src='.github/demos/demo3.png' width='268' alt='Message Filters'></td>
</tr>
<tr>
<td><img src='.github/demos/demo4.png' width='268' alt='Appearance'></td>
<td><img src='.github/demos/demo5.png' width='268' alt='Chats'></td>
</tr>
</table>
</details>
</h3>
@@ -56,19 +64,66 @@ build by yourself.
### macOS
#### Official
You can download prebuilt macOS package from [Releases tab](https://github.com/AyuGram/AyuGramDesktop/releases).
#### Homebrew
```bash
brew install --cask ayugram
```
### Arch Linux
You can install `ayugram-desktop` from [AUR](https://aur.archlinux.org/packages?O=0&K=ayugram).
#### From source (recommended)
Install `ayugram-desktop` from [AUR](https://aur.archlinux.org/packages/ayugram-desktop).
#### Prebuilt binaries
Install `ayugram-desktop-bin` from [AUR](https://aur.archlinux.org/packages/ayugram-desktop-bin).
Note: these binaries aren't officially maintained by us.
### NixOS
See [this repository](https://github.com/ayugram-port/ayugram-desktop) for installation manual.
#### Flake (recommended)
Install `ayugram-desktop` from [ndfined-crp/ayugram-desktop](https://github.com/ndfined-crp/ayugram-desktop)
#### Nixpkgs
Install `ayugram-desktop` from [nixpkgs](https://search.nixos.org/packages?channel=unstable&show=ayugram-desktop)
### ALT Linux
[Sisyphus](https://packages.altlinux.org/en/sisyphus/srpms/ayugram-desktop/)
### Gentoo Linux
See [this repository](https://codeberg.org/OverLessArtem/ayugram-ebuild-gentoo) for installation manual.
### Void Linux
See [this repository](https://codeberg.org/OverLessArtem/ayugram-template-void) for installation manual.
### EPM
`epm play ayugram`
### Fedora
From [RPM Fusion](https://admin.rpmfusion.org/pkgdb/package/free/ayugram-desktop/) repository.
```bash
dnf install ayugram-desktop
```
### Any other Linux distro
Follow the [official guide](https://github.com/AyuGram/AyuGramDesktop/blob/dev/docs/building-linux.md).
Flatpak: https://github.com/0FL01/AyuGramDesktop-flatpak
Or follow the [official guide](https://github.com/AyuGram/AyuGramDesktop/blob/dev/docs/building-linux.md).
### Remarks for Windows
@@ -98,7 +153,12 @@ Enjoy using **AyuGram**? Consider sending us a tip!
- [JSON for Modern C++](https://github.com/nlohmann/json)
- [SQLite](https://github.com/sqlite/sqlite)
- [sqlite_orm](https://github.com/fnc12/sqlite_orm)
- [androidx sources](https://github.com/androidx/androidx)
### Icons
- [Solar Icon Set](https://www.figma.com/community/file/1166831539721848736)
### Bots
- [TelegramDB](https://t.me/tgdatabase) for username lookup by ID (until closing free inline mode at 2 April 2026)
+514
View File
@@ -0,0 +1,514 @@
# Code Review Style Guide
This file contains style and formatting rules that the review subagent must check and fix. These are mechanical issues that should always be caught during code review.
## Empty line before closing brace
Always add an empty line before the closing brace of a **class** (which has one or more sections like `public:` / `private:`). Plain **structs** with just data members do NOT get a trailing empty line — they are compact: `struct Foo { data lines; };`.
```cpp
// BAD:
class MyClass {
public:
void foo();
private:
int _value = 0;
};
// GOOD:
class MyClass {
public:
void foo();
private:
int _value = 0;
};
```
## Multi-line expressions — operators at the start of continuation lines
When splitting an expression across multiple lines, place operators (like `&&`, `||`, `;`, `+`, etc.) at the **beginning** of continuation lines, not at the end of the previous line. This makes it immediately obvious from the left edge whether a line is a continuation or new code.
```cpp
// BAD - continuation looks like scope code:
if (const auto &lottie = animation->lottie;
lottie && lottie->valid() && lottie->framesCount() > 1) {
lottie->animate([=] {
// GOOD - semicolon at start signals continuation:
if (const auto &lottie = animation->lottie
; lottie && lottie->valid() && lottie->framesCount() > 1) {
lottie->animate([=] {
// BAD - trailing && makes next line look like independent code:
if (veryLongExpression() &&
anotherLongExpression() &&
anotherOne()) {
doSomething();
// GOOD - leading && clearly marks continuation:
if (veryLongExpression()
&& anotherLongExpression()
&& anotherOne()) {
doSomething();
```
## Minimize type checks — prefer direct cast over is + as
Don't check a type and then cast — just cast and check for null. `asUser()` already returns `nullptr` when the peer is not a user, so calling `isUser()` first is redundant. The same applies to `asChannel()`, `asChat()`, etc.
```cpp
// BAD - redundant isUser() check, then asUser():
if (peer && peer->isUser()) {
peer->asUser()->setNoForwardFlags(
// GOOD - just cast and null-check:
if (const auto user = peer->asUser()) {
user->setNoForwardFlags(
```
When you need a specific subtype, look up the specific subtype directly instead of loading a generic type and then casting:
```cpp
// BAD - loads generic peer, then casts:
if (const auto peer = session().data().peerLoaded(peerId)
; peer && peer->isUser()) {
peer->asUser()->setNoForwardFlags(
// GOOD - look up the specific subtype directly:
const auto userId = peerToUser(peerId);
if (const auto user = session().data().userLoaded(userId)) {
user->setNoForwardFlags(
```
Avoid C++17 `if` with initializer (`;` inside the condition) when the code can be written more clearly with simple nested `if` statements or by extracting the value beforehand:
```cpp
// BAD - complex if-with-initializer:
if (const auto peer = session().data().peerLoaded(peerId)
; peer && peer->isUser()) {
// GOOD - simple nested ifs when direct lookup isn't available:
if (const auto peer = session().data().peerLoaded(peerId)) {
if (const auto user = peer->asUser()) {
## Always initialize variables of basic types
Never leave variables of basic types (`int`, `float`, `bool`, pointers, etc.) uninitialized. Custom types with constructors are fine they initialize themselves. But for any basic type, always provide a default value (`= 0`, `= false`, `= nullptr`, etc.). This applies especially to class fields, where uninitialized members are a persistent source of bugs.
The only exception is performance-critical hot paths where you can prove no read-from-uninitialized-memory occurs. For class fields there is no such exception always initialize.
```cpp
// BAD:
int _bulletLeft;
int _bulletTop;
bool _expanded;
SomeType *_pointer;
// GOOD:
int _bulletLeft = 0;
int _bulletTop = 0;
bool _expanded = false;
SomeType *_pointer = nullptr;
```
## Use tr:: projections for TextWithEntities
Inside `tr::lng_...()` calls, always use the `tr::` projection helpers instead of their `Ui::Text::` equivalents. The `tr::` helpers are shorter and work uniformly as both placeholder wrappers and final projectors.
| Instead of | Use |
|---|---|
| `Ui::Text::Bold(x)` | `tr::bold(x)` |
| `Ui::Text::Italic(x)` | `tr::italic(x)` |
| `Ui::Text::RichLangValue` | `tr::rich` |
| `Ui::Text::WithEntities` | `tr::marked` |
```cpp
// BAD - verbose Ui::Text:: functions:
tr::lng_some_key(
tr::now,
lt_name,
Ui::Text::Bold(name),
lt_group,
Ui::Text::Bold(group),
Ui::Text::RichLangValue)
// GOOD - concise tr:: helpers:
tr::lng_some_key(
tr::now,
lt_name,
tr::bold(name),
lt_group,
tr::bold(group),
tr::rich)
```
Also use `tr::marked()` as the standard way to create `TextWithEntities` — not just as a projector:
```cpp
// BAD - verbose constructor:
auto text = TextWithEntities();
auto text = TextWithEntities{ u"hello"_q };
auto text = TextWithEntities().append(u"hello"_q);
// GOOD - concise:
auto text = tr::marked();
auto text = tr::marked(u"hello"_q);
```
## Multi-line calls — one argument per line
When a function call doesn't fit on one line, put each argument on its own line. Don't group "logical pairs" on the same line — it creates inconsistent line lengths and makes diffs noisier.
```cpp
// BAD - pairs of arguments sharing lines:
tr::lng_some_key(
tr::now,
lt_name, tr::bold(name),
lt_group, tr::bold(group),
tr::rich)
// GOOD - one argument per line:
tr::lng_some_key(
tr::now,
lt_name,
tr::bold(name),
lt_group,
tr::bold(group),
tr::rich)
// Single-line is fine when everything fits:
auto text = tr::lng_settings_title(tr::now);
```
## std::optional access — avoid value()
Do not call `std::optional::value()` because it throws an exception that is not available on older macOS targets. Use `has_value()`, `value_or()`, `operator bool()`, or `operator*` instead.
## Sort includes alphabetically, nested folders first
After the file's own header, sort `#include` directives alphabetically with two special rules:
1. **Nested folders before files** in the same directory — like Finder / File Explorer (folders first, then files). E.g. `ui/controls/button.h` sorts before `ui/abstract_button.h`.
2. **Style includes (`styles/style_*.h`) always go last**, separated from the rest.
```cpp
// BAD - arbitrary order, style mixed in:
#include "media/audio/media_audio.h"
#include "styles/style_media_player.h"
#include "data/data_document.h"
#include "apiwrap.h"
// GOOD - alphabetical, folders first, styles last:
#include "apiwrap.h"
#include "data/data_document.h"
#include "media/audio/media_audio.h"
#include "styles/style_media_player.h"
```
## Use C++17 nested namespace syntax
Use `namespace A::B {` instead of nesting `namespace A { namespace B {`. The closing comment mirrors the opening: `} // namespace A::B`.
```cpp
// BAD - old-style nesting:
namespace Media {
namespace Player {
...
} // namespace Player
} // namespace Media
// GOOD - C++17 nested:
namespace Media::Player {
...
} // namespace Media::Player
```
## Merge consecutive branches with identical bodies
When two or more consecutive `if` / `else if` branches execute the same code, combine their conditions into a single branch.
```cpp
// BAD - duplicated body:
if (!document) {
finalize();
return;
}
if (!document->isSong()) {
finalize();
return;
}
// GOOD - combined:
if (!document || !document->isSong()) {
finalize();
return;
}
```
## Use base::take for read-and-reset
When you need to read a variable's current value and reset it in one step, use `base::take(var)` instead of manually copying and clearing. `base::take` returns the old value and resets the variable to its default-constructed state.
```cpp
// BAD - manual read + reset:
if (_playing) {
_listenedMs += crl::now() - _playStartedAt;
_playing = false;
}
// GOOD:
if (base::take(_playing)) {
_listenedMs += crl::now() - _playStartedAt;
}
// BAD - copy fields then clear them one by one:
const auto document = _document;
const auto contextId = _contextId;
_document = nullptr;
_listenedMs = 0;
if (!document) {
return;
}
// GOOD - take everything upfront, then validate:
const auto document = base::take(_document);
const auto contextId = base::take(_contextId);
const auto duration = static_cast<int>(base::take(_listenedMs) / 1000);
if (!document || duration <= 0) {
return;
}
```
## Don't wrap tr:: lang keys in rpl::single
`tr::lng_*()` (without `tr::now`) already returns an `rpl::producer`. Wrapping a snapshot in `rpl::single()` defeats live language switching — the value is captured once and never updates. Just call the lang key without `tr::now`.
```cpp
// BAD - frozen snapshot, won't update on language change:
rpl::single(tr::lng_ai_compose_title(tr::now))
// GOOD - live producer that updates automatically:
tr::lng_ai_compose_title()
```
## Extract method definitions from local classes
When defining local classes (e.g. in anonymous namespaces), keep the class body compact — only declarations. Put all method definitions **after** all class definitions. This avoids unnecessary nesting inside the class body and keeps methods at the same indentation level as free functions.
```cpp
// BAD - methods defined inline, adding a nesting level:
class MyWidget final : public Ui::RpWidget {
public:
MyWidget(QWidget *parent)
: RpWidget(parent) {
// ... 20 lines of setup
}
void setActive(bool active) {
_active = active;
update();
}
protected:
void paintEvent(QPaintEvent *e) override {
// ... 30 lines of painting
}
private:
bool _active = false;
};
// GOOD - class is a compact declaration, methods defined after:
class MyWidget final : public Ui::RpWidget {
public:
MyWidget(QWidget *parent, QString label);
void setActive(bool active);
protected:
void paintEvent(QPaintEvent *e) override;
private:
bool _active = false;
};
MyWidget::MyWidget(QWidget *parent, QString label)
: RpWidget(parent) {
// ... 20 lines of setup
}
void MyWidget::setActive(bool active) {
_active = active;
update();
}
void MyWidget::paintEvent(QPaintEvent *e) {
// ... 30 lines of painting
}
```
When there are multiple local classes, put **all class definitions first**, then **all method definitions** after. This keeps the declarations readable as an overview.
## Use RAII for resource cleanup
When working with raw resources (Win32 HANDLEs, file descriptors, COM objects), use `gsl::finally` or a dedicated RAII wrapper for cleanup instead of calling release functions manually. Manual cleanup breaks when early returns are added later.
```cpp
// BAD - manual cleanup, fragile with early returns:
const auto snapshot = CreateToolhelp32Snapshot(...);
if (snapshot != INVALID_HANDLE_VALUE) {
// ... logic that might grow early returns ...
CloseHandle(snapshot);
}
// GOOD - RAII guard, cleanup runs on any exit path:
const auto snapshot = CreateToolhelp32Snapshot(...);
if (snapshot == INVALID_HANDLE_VALUE) {
return;
}
const auto guard = gsl::finally([&] {
CloseHandle(snapshot);
});
// ... logic, early returns are safe ...
```
## Extract substantial logic from lambdas
When a lambda grows beyond a few lines of self-contained logic, extract it into a named function (free function in anonymous namespace, or a private method). Lambdas should primarily be glue — captures, dispatch, short transforms. This applies when the lambda's captures are minimal and can easily become function parameters. When a lambda captures many variables from its surrounding context, it may be cleaner to keep it inline.
```cpp
// BAD - substantial logic buried in a lambda:
crl::async([=] {
auto found = false;
auto pe = PROCESSENTRY32();
pe.dwSize = sizeof(PROCESSENTRY32);
const auto snapshot = CreateToolhelp32Snapshot(...);
if (snapshot != INVALID_HANDLE_VALUE) {
for (...) {
if (/* match */) {
found = true;
break;
}
}
CloseHandle(snapshot);
}
crl::on_main(weak, [=] { handle(found); });
});
// GOOD - logic extracted, lambda is just glue:
crl::async([=] {
const auto found = FindRunningReader();
crl::on_main(weak, [=] { handle(found); });
});
```
## Data-driven matching over chained conditions
When comparing a value against multiple known constants, store them in a collection and loop instead of chaining `||` conditions. Easier to extend, less repetition, and reads as data rather than logic.
```cpp
// BAD - repetitive chain, hard to extend:
if (_wcsicmp(name, L"Narrator.exe") == 0
|| _wcsicmp(name, L"nvda.exe") == 0
|| _wcsicmp(name, L"jfw.exe") == 0
|| _wcsicmp(name, L"Zt.exe") == 0) {
// GOOD - data-driven, easy to extend:
const auto list = std::array{
L"Narrator.exe",
L"nvda.exe",
L"jfw.exe",
L"Zt.exe",
};
for (const auto &entry : list) {
if (_wcsicmp(name, entry) == 0) {
return true;
}
}
```
## Use !isHidden() for logic checks, not isVisible()
When you call `show()` / `hide()` / `setVisible()` on a widget and later branch on that state, always check `!isHidden()` (the widget's own flag) — never `isVisible()`. `isVisible()` returns `true` only when the widget **and every ancestor** are visible, so it silently returns `false` during parent show-animations, before the parent is laid out, etc. `isHidden()` reflects exactly the flag you set.
```cpp
// BAD — breaks when parent is still animating / not yet shown:
child->setVisible(true);
// ... later, in resizeGetHeight or similar:
if (child->isVisible()) { // false if parent isn't visible yet!
child->moveToRight(x, y, w);
}
// GOOD — checks the widget's own state:
if (!child->isHidden()) {
child->moveToRight(x, y, w);
}
```
The same applies to any logic that depends on a previous `show()`/`hide()` call: skip blocks, layout branches, opacity decisions, etc.
## Consolidate make_state calls into a single State struct
Every `make_state` is a separate heap allocation. When a function needs multiple pieces of lambda-captured mutable state, define a local `struct State` with all fields and call `make_state<State>()` once, then capture the resulting pointer everywhere.
```cpp
// BAD - two allocations:
const auto shown = lifetime.make_state<bool>(false);
const auto count = lifetime.make_state<int>(0);
// GOOD - one allocation:
struct State {
bool shown = false;
int count = 0;
};
const auto state = lifetime.make_state<State>();
```
## Use trailing return type when the return type doesn't fit on one line
When a function's return type is long enough that the declaration would need a line break between the return type and the function name, use trailing return type syntax (`auto ... -> Type`) to keep the function name on the opening line.
```cpp
// BAD - return type orphaned on its own line:
not_null<HistoryView::Controls::ComposeAiButton*>
SetupCaptionAiButton(SetupCaptionAiButtonArgs &&args);
// GOOD - trailing return type keeps name visible:
auto SetupCaptionAiButton(SetupCaptionAiButtonArgs &&args)
-> not_null<HistoryView::Controls::ComposeAiButton*>;
```
## Mind data structure sizes and alignment
When adding fields to a class or struct, consider the memory layout. A standalone `bool` between two pointer-sized fields wastes 7 bytes to alignment padding. Review new fields for packing opportunities:
- If the struct already has bitfields, pack new boolean flags as `: 1` members rather than standalone `bool`.
- If alignment leaves a gap (e.g., an `int` followed by a pointer), consider whether a new small field can fill it.
- For classes instantiated in large quantities (per-message, per-element, per-row), every wasted byte is multiplied thousands of times.
```cpp
// BAD - standalone bool adds 8 bytes (1 + 7 padding) before the next pointer:
mutable bool _myFlag = false;
mutable std::unique_ptr<Foo> _foo;
// GOOD - packed into existing bitfield group, no extra bytes:
mutable uint32 _myFlag : 1 = 0;
```
## Static member functions use PascalCase
Non-static member functions use camelCase (`startBatch`, `finalize`). Static member functions use PascalCase (`ShouldTrack`, `Parse`, `Create`), matching the convention for free functions.
```cpp
// BAD - camelCase for static method:
[[nodiscard]] static bool shouldTrack(not_null<HistoryItem*> item);
// GOOD - PascalCase for static method:
[[nodiscard]] static bool ShouldTrack(not_null<HistoryItem*> item);
```
+523 -111
View File
File diff suppressed because it is too large Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.5 KiB

+20
View File
@@ -0,0 +1,20 @@
<svg width="1200" height="1200" viewBox="0 0 1200 1200" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1177_97)">
<rect width="1200" height="1200" rx="600" fill="#9570FF"/>
<g opacity="0.07">
<path d="M806.896 -279.064C785.598 -313.026 733.108 -291.661 741.582 -252.479L1066.32 1248.94C1069.88 1265.41 1084.45 1277.16 1101.31 1277.16H1718.15C1746.29 1277.16 1763.42 1246.19 1748.47 1222.35L806.896 -279.064Z" fill="white"/>
<path d="M669.079 1606.13C669.079 1640.4 712.592 1655.08 733.354 1627.82L935.184 1362.81C941.526 1354.48 943.905 1343.8 941.696 1333.57L739.866 399.014C730.809 357.077 669.079 363.667 669.079 406.57L669.079 1606.13Z" fill="white"/>
<path d="M392.104 -279.064C413.403 -313.026 465.892 -291.661 457.418 -252.479L132.68 1248.94C129.117 1265.41 114.546 1277.16 97.692 1277.16H-519.146C-547.286 1277.16 -564.423 1246.19 -549.473 1222.35L392.104 -279.064Z" fill="white"/>
<path d="M529.921 1606.13C529.921 1640.4 486.408 1655.08 465.646 1627.82L263.816 1362.81C257.474 1354.48 255.095 1343.8 257.304 1333.57L459.134 399.014C468.191 357.077 529.921 363.667 529.921 406.57V1606.13Z" fill="white"/>
</g>
<path d="M672.345 264.951C664.864 253.017 646.428 260.525 649.404 274.293L763.463 801.88C764.715 807.668 769.833 811.799 775.752 811.799H992.407C1002.29 811.799 1008.31 800.915 1003.06 792.538L672.345 264.951Z" fill="white"/>
<path d="M623.939 927.397C623.939 939.438 639.222 944.597 646.514 935.018L717.404 841.895C719.631 838.969 720.467 835.214 719.691 831.618L648.801 503.223C645.62 488.487 623.939 490.802 623.939 505.878L623.939 927.397Z" fill="white"/>
<path d="M526.655 264.951C534.136 253.017 552.572 260.525 549.596 274.293L435.537 801.88C434.285 807.668 429.167 811.799 423.248 811.799H206.593C196.709 811.799 190.69 800.915 195.941 792.538L526.655 264.951Z" fill="white"/>
<path d="M575.061 927.397C575.061 939.438 559.778 944.597 552.486 935.018L481.596 841.895C479.369 838.969 478.533 835.214 479.309 831.618L550.199 503.223C553.38 488.487 575.061 490.802 575.061 505.878V927.397Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0_1177_97">
<rect width="1200" height="1200" rx="600" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

+82
View File
@@ -0,0 +1,82 @@
<svg width="1200" height="1200" viewBox="0 0 1200 1200" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1177_56)">
<rect width="1200" height="1200" rx="600" fill="#FDFDFD"/>
<path d="M806.896 -279.064C785.598 -313.026 733.108 -291.661 741.582 -252.479L1066.32 1248.94C1069.88 1265.41 1084.45 1277.16 1101.31 1277.16H1718.15C1746.29 1277.16 1763.42 1246.19 1748.47 1222.35L806.896 -279.064Z" fill="url(#paint0_radial_1177_56)" fill-opacity="0.04"/>
<path d="M669.079 1606.13C669.079 1640.4 712.592 1655.08 733.354 1627.82L935.184 1362.81C941.526 1354.48 943.905 1343.8 941.696 1333.57L739.866 399.014C730.809 357.077 669.079 363.667 669.079 406.57L669.079 1606.13Z" fill="url(#paint1_radial_1177_56)" fill-opacity="0.04"/>
<path d="M392.104 -279.064C413.403 -313.026 465.892 -291.661 457.418 -252.479L132.68 1248.94C129.117 1265.41 114.546 1277.16 97.692 1277.16H-519.146C-547.286 1277.16 -564.423 1246.19 -549.473 1222.35L392.104 -279.064Z" fill="url(#paint2_radial_1177_56)" fill-opacity="0.04"/>
<path d="M529.921 1606.13C529.921 1640.4 486.408 1655.08 465.646 1627.82L263.816 1362.81C257.474 1354.48 255.095 1343.8 257.304 1333.57L459.134 399.014C468.191 357.077 529.921 363.667 529.921 406.57V1606.13Z" fill="url(#paint3_radial_1177_56)" fill-opacity="0.04"/>
<path d="M672.345 264.951C664.864 253.017 646.428 260.525 649.404 274.293L763.463 801.88C764.715 807.668 769.833 811.799 775.752 811.799H992.407C1002.29 811.799 1008.31 800.915 1003.06 792.538L672.345 264.951Z" fill="url(#paint4_radial_1177_56)"/>
<path d="M623.939 927.397C623.939 939.438 639.222 944.597 646.514 935.018L717.404 841.895C719.631 838.969 720.467 835.214 719.691 831.618L648.801 503.223C645.62 488.487 623.939 490.802 623.939 505.878L623.939 927.397Z" fill="url(#paint5_radial_1177_56)"/>
<path d="M526.655 264.951C534.136 253.017 552.572 260.525 549.596 274.293L435.537 801.88C434.285 807.668 429.167 811.799 423.248 811.799H206.593C196.709 811.799 190.69 800.915 195.941 792.538L526.655 264.951Z" fill="url(#paint6_radial_1177_56)"/>
<path d="M575.061 927.397C575.061 939.438 559.778 944.597 552.486 935.018L481.596 841.895C479.369 838.969 478.533 835.214 479.309 831.618L550.199 503.223C553.38 488.487 575.061 490.802 575.061 505.878V927.397Z" fill="url(#paint7_radial_1177_56)"/>
</g>
<defs>
<radialGradient id="paint0_radial_1177_56" cx="0" cy="0" r="1" gradientTransform="matrix(755.281 3220.39 -3836.69 634.576 -633.706 -1346.76)" gradientUnits="userSpaceOnUse">
<stop stop-color="#1BA1E3"/>
<stop offset="0.0001" stop-color="#1BA1E3"/>
<stop offset="0.300221" stop-color="#5489D6"/>
<stop offset="0.545524" stop-color="#9B72CB"/>
<stop offset="0.825372" stop-color="#D96570"/>
<stop offset="1" stop-color="#F49C46"/>
</radialGradient>
<radialGradient id="paint1_radial_1177_56" cx="0" cy="0" r="1" gradientTransform="matrix(755.281 3220.39 -3836.69 634.576 -633.706 -1346.76)" gradientUnits="userSpaceOnUse">
<stop stop-color="#1BA1E3"/>
<stop offset="0.0001" stop-color="#1BA1E3"/>
<stop offset="0.300221" stop-color="#5489D6"/>
<stop offset="0.545524" stop-color="#9B72CB"/>
<stop offset="0.825372" stop-color="#D96570"/>
<stop offset="1" stop-color="#F49C46"/>
</radialGradient>
<radialGradient id="paint2_radial_1177_56" cx="0" cy="0" r="1" gradientTransform="matrix(755.281 3220.39 -3836.69 634.576 -633.706 -1346.76)" gradientUnits="userSpaceOnUse">
<stop stop-color="#1BA1E3"/>
<stop offset="0.0001" stop-color="#1BA1E3"/>
<stop offset="0.300221" stop-color="#5489D6"/>
<stop offset="0.545524" stop-color="#9B72CB"/>
<stop offset="0.825372" stop-color="#D96570"/>
<stop offset="1" stop-color="#F49C46"/>
</radialGradient>
<radialGradient id="paint3_radial_1177_56" cx="0" cy="0" r="1" gradientTransform="matrix(755.281 3220.39 -3836.69 634.576 -633.706 -1346.76)" gradientUnits="userSpaceOnUse">
<stop stop-color="#1BA1E3"/>
<stop offset="0.0001" stop-color="#1BA1E3"/>
<stop offset="0.300221" stop-color="#5489D6"/>
<stop offset="0.545524" stop-color="#9B72CB"/>
<stop offset="0.825372" stop-color="#D96570"/>
<stop offset="1" stop-color="#F49C46"/>
</radialGradient>
<radialGradient id="paint4_radial_1177_56" cx="0" cy="0" r="1" gradientTransform="matrix(274.644 1185.23 -1411.16 229.793 166.356 -110.23)" gradientUnits="userSpaceOnUse">
<stop stop-color="#22B1F8"/>
<stop offset="0.242027" stop-color="#1BA1E3"/>
<stop offset="0.381789" stop-color="#5489D6"/>
<stop offset="0.648677" stop-color="#9B72CB"/>
<stop offset="0.866975" stop-color="#D96570"/>
<stop offset="1" stop-color="#F49C46"/>
</radialGradient>
<radialGradient id="paint5_radial_1177_56" cx="0" cy="0" r="1" gradientTransform="matrix(274.644 1185.23 -1411.16 229.793 166.356 -110.23)" gradientUnits="userSpaceOnUse">
<stop stop-color="#22B1F8"/>
<stop offset="0.242027" stop-color="#1BA1E3"/>
<stop offset="0.381789" stop-color="#5489D6"/>
<stop offset="0.648677" stop-color="#9B72CB"/>
<stop offset="0.866975" stop-color="#D96570"/>
<stop offset="1" stop-color="#F49C46"/>
</radialGradient>
<radialGradient id="paint6_radial_1177_56" cx="0" cy="0" r="1" gradientTransform="matrix(274.644 1185.23 -1411.16 229.793 166.356 -110.23)" gradientUnits="userSpaceOnUse">
<stop stop-color="#22B1F8"/>
<stop offset="0.242027" stop-color="#1BA1E3"/>
<stop offset="0.381789" stop-color="#5489D6"/>
<stop offset="0.648677" stop-color="#9B72CB"/>
<stop offset="0.866975" stop-color="#D96570"/>
<stop offset="1" stop-color="#F49C46"/>
</radialGradient>
<radialGradient id="paint7_radial_1177_56" cx="0" cy="0" r="1" gradientTransform="matrix(274.644 1185.23 -1411.16 229.793 166.356 -110.23)" gradientUnits="userSpaceOnUse">
<stop stop-color="#22B1F8"/>
<stop offset="0.242027" stop-color="#1BA1E3"/>
<stop offset="0.381789" stop-color="#5489D6"/>
<stop offset="0.648677" stop-color="#9B72CB"/>
<stop offset="0.866975" stop-color="#D96570"/>
<stop offset="1" stop-color="#F49C46"/>
</radialGradient>
<clipPath id="clip0_1177_56">
<rect width="1200" height="1200" rx="600" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.9 KiB

@@ -0,0 +1,20 @@
<svg width="1200" height="1200" viewBox="0 0 1200 1200" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1177_50)">
<rect width="1200" height="1200" rx="600" fill="#2B2242"/>
<g opacity="0.07">
<path d="M806.896 -279.064C785.598 -313.026 733.108 -291.661 741.582 -252.479L1066.32 1248.94C1069.88 1265.41 1084.45 1277.16 1101.31 1277.16H1718.15C1746.29 1277.16 1763.42 1246.19 1748.47 1222.35L806.896 -279.064Z" fill="#C3AEFF"/>
<path d="M669.079 1606.13C669.079 1640.4 712.592 1655.08 733.354 1627.82L935.184 1362.81C941.526 1354.48 943.905 1343.8 941.696 1333.57L739.866 399.014C730.809 357.077 669.079 363.667 669.079 406.57L669.079 1606.13Z" fill="#C3AEFF"/>
<path d="M392.104 -279.064C413.403 -313.026 465.892 -291.661 457.418 -252.479L132.68 1248.94C129.117 1265.41 114.546 1277.16 97.692 1277.16H-519.146C-547.286 1277.16 -564.423 1246.19 -549.473 1222.35L392.104 -279.064Z" fill="#C3AEFF"/>
<path d="M529.921 1606.13C529.921 1640.4 486.408 1655.08 465.646 1627.82L263.816 1362.81C257.474 1354.48 255.095 1343.8 257.304 1333.57L459.134 399.014C468.191 357.077 529.921 363.667 529.921 406.57V1606.13Z" fill="#C3AEFF"/>
</g>
<path d="M672.345 264.951C664.864 253.017 646.428 260.525 649.404 274.293L763.463 801.88C764.715 807.668 769.833 811.799 775.752 811.799H992.407C1002.29 811.799 1008.31 800.915 1003.06 792.538L672.345 264.951Z" fill="#C3AEFF"/>
<path d="M623.939 927.397C623.939 939.438 639.222 944.597 646.514 935.018L717.404 841.895C719.631 838.969 720.467 835.214 719.691 831.618L648.801 503.223C645.62 488.487 623.939 490.802 623.939 505.878L623.939 927.397Z" fill="#DCCFFF"/>
<path d="M526.655 264.951C534.136 253.017 552.572 260.525 549.596 274.293L435.537 801.88C434.285 807.668 429.167 811.799 423.248 811.799H206.593C196.709 811.799 190.69 800.915 195.941 792.538L526.655 264.951Z" fill="#F5F5F5"/>
<path d="M575.061 927.397C575.061 939.438 559.778 944.597 552.486 935.018L481.596 841.895C479.369 838.969 478.533 835.214 479.309 831.618L550.199 503.223C553.38 488.487 575.061 490.802 575.061 505.878V927.397Z" fill="#F5F5F5"/>
</g>
<defs>
<clipPath id="clip0_1177_50">
<rect width="1200" height="1200" rx="600" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

@@ -0,0 +1,20 @@
<svg width="1200" height="1200" viewBox="0 0 1200 1200" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1177_53)">
<rect width="1200" height="1200" rx="600" fill="#5865F2"/>
<g opacity="0.13">
<path d="M806.896 -279.064C785.598 -313.026 733.108 -291.661 741.582 -252.479L1066.32 1248.94C1069.88 1265.41 1084.45 1277.16 1101.31 1277.16H1718.15C1746.29 1277.16 1763.42 1246.19 1748.47 1222.35L806.896 -279.064Z" fill="#C3AEFF"/>
<path d="M669.079 1606.13C669.079 1640.4 712.592 1655.08 733.354 1627.82L935.184 1362.81C941.526 1354.48 943.905 1343.8 941.696 1333.57L739.866 399.014C730.809 357.077 669.079 363.667 669.079 406.57L669.079 1606.13Z" fill="#C3AEFF"/>
<path d="M392.104 -279.064C413.403 -313.026 465.892 -291.661 457.418 -252.479L132.68 1248.94C129.117 1265.41 114.546 1277.16 97.692 1277.16H-519.146C-547.286 1277.16 -564.423 1246.19 -549.473 1222.35L392.104 -279.064Z" fill="#C3AEFF"/>
<path d="M529.921 1606.13C529.921 1640.4 486.408 1655.08 465.646 1627.82L263.816 1362.81C257.474 1354.48 255.095 1343.8 257.304 1333.57L459.134 399.014C468.191 357.077 529.921 363.667 529.921 406.57V1606.13Z" fill="#C3AEFF"/>
</g>
<path d="M672.345 264.951C664.864 253.017 646.428 260.525 649.404 274.293L763.463 801.88C764.715 807.668 769.833 811.799 775.752 811.799H992.407C1002.29 811.799 1008.31 800.915 1003.06 792.538L672.345 264.951Z" fill="white"/>
<path d="M623.939 927.397C623.939 939.438 639.222 944.597 646.514 935.018L717.404 841.895C719.631 838.969 720.467 835.214 719.691 831.618L648.801 503.223C645.62 488.487 623.939 490.802 623.939 505.878L623.939 927.397Z" fill="white"/>
<path d="M526.655 264.951C534.136 253.017 552.572 260.525 549.596 274.293L435.537 801.88C434.285 807.668 429.167 811.799 423.248 811.799H206.593C196.709 811.799 190.69 800.915 195.941 792.538L526.655 264.951Z" fill="white"/>
<path d="M575.061 927.397C575.061 939.438 559.778 944.597 552.486 935.018L481.596 841.895C479.369 838.969 478.533 835.214 479.309 831.618L550.199 503.223C553.38 488.487 575.061 490.802 575.061 505.878V927.397Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0_1177_53">
<rect width="1200" height="1200" rx="600" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

+36
View File
@@ -0,0 +1,36 @@
<svg width="1200" height="1200" viewBox="0 0 1200 1200" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1177_68)">
<rect width="1200" height="1200" rx="600" fill="#E83030"/>
<g opacity="0.09">
<path d="M806.896 -279.064C785.598 -313.026 733.108 -291.661 741.582 -252.479L1066.32 1248.94C1069.88 1265.41 1084.45 1277.16 1101.31 1277.16H1718.15C1746.29 1277.16 1763.42 1246.19 1748.47 1222.35L806.896 -279.064Z" fill="#F6F6F6"/>
<path d="M669.079 1606.13C669.079 1640.4 712.592 1655.08 733.354 1627.82L935.184 1362.81C941.526 1354.48 943.905 1343.8 941.696 1333.57L739.866 399.014C730.809 357.077 669.079 363.667 669.079 406.57L669.079 1606.13Z" fill="#F6F6F6"/>
<path d="M392.104 -279.064C413.403 -313.026 465.892 -291.661 457.418 -252.479L132.68 1248.94C129.117 1265.41 114.546 1277.16 97.692 1277.16H-519.146C-547.286 1277.16 -564.423 1246.19 -549.473 1222.35L392.104 -279.064Z" fill="#F6F6F6"/>
<path d="M529.921 1606.13C529.921 1640.4 486.408 1655.08 465.646 1627.82L263.816 1362.81C257.474 1354.48 255.095 1343.8 257.304 1333.57L459.134 399.014C468.191 357.077 529.921 363.667 529.921 406.57V1606.13Z" fill="#F6F6F6"/>
</g>
<path d="M672.345 264.951C664.864 253.017 646.428 260.525 649.404 274.293L763.463 801.88C764.715 807.668 769.833 811.799 775.752 811.799H992.407C1002.29 811.799 1008.31 800.915 1003.06 792.538L672.345 264.951Z" fill="url(#paint0_linear_1177_68)" fill-opacity="0.9"/>
<path d="M623.939 927.397C623.939 939.438 639.222 944.597 646.514 935.018L717.404 841.895C719.631 838.969 720.467 835.214 719.691 831.618L648.801 503.223C645.62 488.487 623.939 490.802 623.939 505.878L623.939 927.397Z" fill="url(#paint1_linear_1177_68)" fill-opacity="0.9"/>
<path d="M526.655 264.951C534.136 253.017 552.572 260.525 549.596 274.293L435.537 801.88C434.285 807.668 429.167 811.799 423.248 811.799H206.593C196.709 811.799 190.69 800.915 195.941 792.538L526.655 264.951Z" fill="url(#paint2_linear_1177_68)" fill-opacity="0.9"/>
<path d="M575.061 927.397C575.061 939.438 559.778 944.597 552.486 935.018L481.596 841.895C479.369 838.969 478.533 835.214 479.309 831.618L550.199 503.223C553.38 488.487 575.061 490.802 575.061 505.878V927.397Z" fill="url(#paint3_linear_1177_68)" fill-opacity="0.9"/>
</g>
<defs>
<linearGradient id="paint0_linear_1177_68" x1="599.5" y1="259" x2="599.5" y2="940" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0.6"/>
</linearGradient>
<linearGradient id="paint1_linear_1177_68" x1="599.5" y1="259" x2="599.5" y2="940" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0.6"/>
</linearGradient>
<linearGradient id="paint2_linear_1177_68" x1="599.5" y1="259" x2="599.5" y2="940" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0.6"/>
</linearGradient>
<linearGradient id="paint3_linear_1177_68" x1="599.5" y1="259" x2="599.5" y2="940" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0.6"/>
</linearGradient>
<clipPath id="clip0_1177_68">
<rect width="1200" height="1200" rx="600" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Some files were not shown because too many files have changed in this diff Show More