Compare commits

...

337 Commits

Author SHA1 Message Date
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
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
AlexeyZavar b59115e27c fix: make it compile on macOS & fix warnings 2025-10-31 12:01:53 +03:00
bleizix 4af1ca65ed fix: ghost toggles 2025-10-31 09:06:18 +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
Ilya Fedin 147439ad34 Add missed ConnectionState member variable to operator== 2025-10-06 21:05:19 +04: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
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
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
494 changed files with 17328 additions and 3159 deletions
+70 -38
View File
@@ -39,7 +39,7 @@ include(cmake/td_mtproto.cmake)
include(cmake/td_scheme.cmake)
include(cmake/td_tde2e.cmake)
include(cmake/td_ui.cmake)
include(cmake/generate_appdata_changelog.cmake)
include(cmake/generate_appstream_changelog.cmake)
if (DESKTOP_APP_TEST_APPS)
include(cmake/tests.cmake)
@@ -139,6 +139,8 @@ set(ayugram_files
ayu/ui/utils/color_utils.h
ayu/ui/utils/palette.cpp
ayu/ui/utils/palette.h
ayu/ui/utils/itunes_search.cpp
ayu/ui/utils/itunes_search.h
ayu/ui/settings/settings_appearance.cpp
ayu/ui/settings/settings_appearance.h
ayu/ui/settings/settings_ayu_utils.cpp
@@ -189,8 +191,8 @@ set(ayugram_files
ayu/ui/components/image_view.h
ayu/ui/components/icon_picker.cpp
ayu/ui/components/icon_picker.h
ayu/ui/components/now_playing.cpp
ayu/ui/components/now_playing.h
ayu/ui/components/saved_music.cpp
ayu/ui/components/saved_music.h
ayu/libs/json.hpp
ayu/libs/json_ext.hpp
ayu/libs/sqlite/sqlite3.c
@@ -510,6 +512,14 @@ PRIVATE
calls/group/calls_group_members_row.h
calls/group/calls_group_menu.cpp
calls/group/calls_group_menu.h
calls/group/calls_group_message_encryption.cpp
calls/group/calls_group_message_encryption.h
calls/group/calls_group_message_field.cpp
calls/group/calls_group_message_field.h
calls/group/calls_group_messages.cpp
calls/group/calls_group_messages.h
calls/group/calls_group_messages_ui.cpp
calls/group/calls_group_messages_ui.h
calls/group/calls_group_panel.cpp
calls/group/calls_group_panel.h
calls/group/calls_group_rtmp.cpp
@@ -922,6 +932,8 @@ PRIVATE
history/view/controls/history_view_voice_record_bar.h
history/view/controls/history_view_webpage_processor.cpp
history/view/controls/history_view_webpage_processor.h
history/view/media/history_view_birthday_suggestion.cpp
history/view/media/history_view_birthday_suggestion.h
history/view/media/history_view_call.cpp
history/view/media/history_view_call.h
history/view/media/history_view_contact.cpp
@@ -1055,6 +1067,8 @@ PRIVATE
history/view/history_view_schedule_box.h
history/view/history_view_scheduled_section.cpp
history/view/history_view_scheduled_section.h
history/view/history_view_self_forwards_tagger.cpp
history/view/history_view_self_forwards_tagger.h
history/view/history_view_send_action.cpp
history/view/history_view_send_action.h
history/view/history_view_service_message.cpp
@@ -1099,6 +1113,8 @@ PRIVATE
history/history_inner_widget.h
history/history_location_manager.cpp
history/history_location_manager.h
history/history_streamed_drafts.cpp
history/history_streamed_drafts.h
history/history_translation.cpp
history/history_translation.h
history/history_unread_things.cpp
@@ -1191,8 +1207,6 @@ PRIVATE
info/profile/info_profile_members_controllers.h
info/profile/info_profile_phone_menu.cpp
info/profile/info_profile_phone_menu.h
info/profile/info_profile_text.cpp
info/profile/info_profile_text.h
info/profile/info_profile_values.cpp
info/profile/info_profile_values.h
info/profile/info_profile_widget.cpp
@@ -1942,44 +1956,60 @@ if (WIN32)
if (QT_VERSION LESS 6)
target_link_libraries(Telegram PRIVATE desktop-app::win_directx_helper)
endif()
target_link_options(Telegram PRIVATE /PDBPAGESIZE:8192)
elseif (APPLE)
if (NOT DESKTOP_APP_USE_PACKAGED)
target_link_libraries(Telegram PRIVATE desktop-app::external_iconv)
endif()
set(icons_path ${CMAKE_CURRENT_SOURCE_DIR}/Telegram/Images.xcassets)
# find_program(ACTOOL_EXECUTABLE actool)
# if(NOT ACTOOL_EXECUTABLE)
# message(FATAL_ERROR "actool not found.")
# endif()
if (CMAKE_GENERATOR STREQUAL Xcode)
target_add_resource(Telegram ${icons_path})
else()
set(icon_path ${icons_path}/Icon.iconset)
find_program(ICONUTIL iconutil)
find_program(PNG2ICNS png2icns)
if (ICONUTIL)
add_custom_command(
OUTPUT Icon.icns
COMMAND ${ICONUTIL}
ARGS
--convert icns
--output Icon.icns
${icon_path}
set(ayugram_icons
Default
Alt
Discord
Spotify
Extera
Nothing
Bard
Yaplus
Win95
Chibi
Chibi2
Extera2
)
# set(ICON_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/IconOutput")
foreach (icon ${ayugram_icons})
# add_custom_command(TARGET Telegram
# PRE_LINK
# COMMAND mkdir -p "${ICON_OUTPUT_DIR}"
# COMMAND ${ACTOOL_EXECUTABLE}
# "${CMAKE_CURRENT_SOURCE_DIR}/Telegram/AppIcon-${icon}.icon"
# --compile "${ICON_OUTPUT_DIR}"
# --app-icon AppIcon-${icon}
# --enable-on-demand-resources NO
# --development-region en
# --target-device mac
# --platform macosx
# --minimum-deployment-target 10.13
# --output-partial-info-plist /dev/null
# --output-format human-readable-text
# COMMENT "Compiling icon ${icon}"
# COMMAND cp "${ICON_OUTPUT_DIR}/AppIcon-${icon}.icns" "$<TARGET_FILE_DIR:Telegram>/../Resources"
# )
# create resulting Assets.car with all icons
target_add_resource(Telegram "${CMAKE_CURRENT_SOURCE_DIR}/Telegram/AppIcon-${icon}.icon")
set_source_files_properties("${CMAKE_CURRENT_SOURCE_DIR}/Telegram/AppIcon-${icon}.icon" PROPERTIES
XCODE_EXPLICIT_FILE_TYPE "folder.iconcomposer.icon"
)
elseif (PNG2ICNS)
add_custom_command(
OUTPUT Icon.icns
COMMAND ${PNG2ICNS}
ARGS
Icon.icns
${icon_path}/icon_16x16.png
${icon_path}/icon_32x32.png
${icon_path}/icon_128x128.png
${icon_path}/icon_256x256.png
${icon_path}/icon_512x512.png
)
endif()
if (ICONUTIL OR PNG2ICNS)
set_source_files_properties(Icon.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
target_add_resource(Telegram Icon.icns)
endif()
endforeach()
endif()
set(lang_packs
@@ -2072,7 +2102,9 @@ set_target_properties(Telegram PROPERTIES
XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER ${bundle_identifier}
XCODE_ATTRIBUTE_CURRENT_PROJECT_VERSION ${desktop_app_version_string}
XCODE_ATTRIBUTE_PRODUCT_NAME ${output_name}
XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME AppIcon
XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME AppIcon-Default
XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_ALTERNATE_APPICON_NAMES AppIcon-Alt AppIcon-Discord AppIcon-Spotify AppIcon-Extera AppIcon-Nothing AppIcon-Bard AppIcon-Yaplus AppIcon-Win95 AppIcon-Chibi AppIcon-Chibi2 AppIcon-Extera2
XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS YES
XCODE_ATTRIBUTE_ENABLE_HARDENED_RUNTIME YES
XCODE_ATTRIBUTE_COMBINE_HIDPI_IMAGES YES
XCODE_ATTRIBUTE_COPY_PHASE_STRIP NO
@@ -2278,7 +2310,7 @@ if (LINUX AND DESKTOP_APP_USE_PACKAGED)
include(GNUInstallDirs)
configure_file("../lib/xdg/com.ayugram.desktop.service" "${CMAKE_CURRENT_BINARY_DIR}/com.ayugram.desktop.service" @ONLY)
configure_file("../lib/xdg/com.ayugram.desktop.metainfo.xml" "${CMAKE_CURRENT_BINARY_DIR}/com.ayugram.desktop.metainfo.xml" @ONLY)
generate_appdata_changelog(Telegram "${CMAKE_SOURCE_DIR}/changelog.txt" "${CMAKE_CURRENT_BINARY_DIR}/com.ayugram.desktop.metainfo.xml")
generate_appstream_changelog(Telegram "${CMAKE_SOURCE_DIR}/changelog.txt" "${CMAKE_CURRENT_BINARY_DIR}/com.ayugram.desktop.metainfo.xml")
install(TARGETS Telegram RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" BUNDLE DESTINATION "${CMAKE_INSTALL_BINDIR}")
install(FILES "Resources/art/icon16.png" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/16x16/apps" RENAME "com.ayugram.desktop.png")
install(FILES "Resources/art/icon32.png" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/32x32/apps" RENAME "com.ayugram.desktop.png")
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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 KiB

@@ -0,0 +1,10 @@
<svg width="1200" height="1200" viewBox="0 0 1200 1200" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="1200" height="1200" rx="600" fill="#E83030"/>
<path d="M479.041 720.27C521.627 762.855 561.526 834.716 591.838 898.874C612.184 941.936 679.015 940.278 694.085 895.099L850.177 427.151C866.118 379.362 820.637 333.894 772.852 349.849L305.497 505.897C260.276 520.996 258.687 587.983 301.805 608.324C365.513 638.379 436.671 677.9 479.041 720.27Z" fill="url(#paint0_linear_1622_21)" fill-opacity="0.9"/>
<defs>
<linearGradient id="paint0_linear_1622_21" x1="527.775" y1="311.105" x2="527.775" y2="1033.51" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0.6"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 766 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 18 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: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

@@ -0,0 +1,18 @@
<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_94)">
<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="#F7F7F7" fill-opacity="0.8"/>
<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="#F7F7F7" fill-opacity="0.8"/>
<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="#F7F7F7" fill-opacity="0.8"/>
<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="#F7F7F7" fill-opacity="0.8"/>
<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="#D71A21"/>
<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="#1C1D1F"/>
<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="#1C1D1F"/>
<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="#1C1D1F"/>
</g>
<defs>
<clipPath id="clip0_1177_94">
<rect width="1200" height="1200" rx="600" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 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_59)">
<rect width="1200" height="1200" rx="600" fill="black"/>
<g opacity="0.1">
<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="#1ED760"/>
<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="#1ED760"/>
<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="#1ED760"/>
<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="#1ED760"/>
</g>
<defs>
<clipPath id="clip0_1177_59">
<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: 30 KiB

After

Width:  |  Height:  |  Size: 26 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: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

+64
View File
@@ -0,0 +1,64 @@
<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_62)">
<rect width="1200" height="1200" rx="600" fill="#FDFDFD"/>
<g opacity="0.04">
<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_linear_1177_62)"/>
<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_linear_1177_62)"/>
<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_linear_1177_62)"/>
<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_linear_1177_62)"/>
</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="#D9D9D9"/>
<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_linear_1177_62)"/>
<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="#D9D9D9"/>
<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_linear_1177_62)"/>
<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="#D9D9D9"/>
<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_linear_1177_62)"/>
<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="#D9D9D9"/>
<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_linear_1177_62)"/>
</g>
<defs>
<linearGradient id="paint0_linear_1177_62" x1="-555" y1="543.798" x2="1754" y2="543.798" gradientUnits="userSpaceOnUse">
<stop stop-color="#FF5C4D"/>
<stop offset="0.4" stop-color="#EB469F"/>
<stop offset="1" stop-color="#8341EF"/>
</linearGradient>
<linearGradient id="paint1_linear_1177_62" x1="-555" y1="543.798" x2="1754" y2="543.798" gradientUnits="userSpaceOnUse">
<stop stop-color="#FF5C4D"/>
<stop offset="0.4" stop-color="#EB469F"/>
<stop offset="1" stop-color="#8341EF"/>
</linearGradient>
<linearGradient id="paint2_linear_1177_62" x1="-555" y1="543.798" x2="1754" y2="543.798" gradientUnits="userSpaceOnUse">
<stop stop-color="#FF5C4D"/>
<stop offset="0.4" stop-color="#EB469F"/>
<stop offset="1" stop-color="#8341EF"/>
</linearGradient>
<linearGradient id="paint3_linear_1177_62" x1="-555" y1="543.798" x2="1754" y2="543.798" gradientUnits="userSpaceOnUse">
<stop stop-color="#FF5C4D"/>
<stop offset="0.4" stop-color="#EB469F"/>
<stop offset="1" stop-color="#8341EF"/>
</linearGradient>
<linearGradient id="paint4_linear_1177_62" x1="194" y1="554.099" x2="1005" y2="554.099" gradientUnits="userSpaceOnUse">
<stop stop-color="#FF5C4D"/>
<stop offset="0.4" stop-color="#EB469F"/>
<stop offset="1" stop-color="#8341EF"/>
</linearGradient>
<linearGradient id="paint5_linear_1177_62" x1="194" y1="554.099" x2="1005" y2="554.099" gradientUnits="userSpaceOnUse">
<stop stop-color="#FF5C4D"/>
<stop offset="0.4" stop-color="#EB469F"/>
<stop offset="1" stop-color="#8341EF"/>
</linearGradient>
<linearGradient id="paint6_linear_1177_62" x1="194" y1="554.099" x2="1005" y2="554.099" gradientUnits="userSpaceOnUse">
<stop stop-color="#FF5C4D"/>
<stop offset="0.4" stop-color="#EB469F"/>
<stop offset="1" stop-color="#8341EF"/>
</linearGradient>
<linearGradient id="paint7_linear_1177_62" x1="194" y1="554.099" x2="1005" y2="554.099" gradientUnits="userSpaceOnUse">
<stop stop-color="#FF5C4D"/>
<stop offset="0.4" stop-color="#EB469F"/>
<stop offset="1" stop-color="#8341EF"/>
</linearGradient>
<clipPath id="clip0_1177_62">
<rect width="1200" height="1200" rx="600" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 692 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Icon / Menu / new_topic</title>
<g id="Icon-/-Menu-/-new_topic" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<path d="M12,3.15416667 C12.3865993,3.15416667 12.7,3.46756734 12.7,3.85416667 C12.7,4.24076599 12.3865993,4.55416667 12,4.55416667 L7.24826389,4.55416667 C5.76035508,4.55416667 4.55416667,5.76035508 4.55416667,7.24826389 L4.55416667,16.7517361 C4.55416667,18.2396449 5.76035508,19.4458333 7.24826389,19.4458333 L16.7517361,19.4458333 C18.2396449,19.4458333 19.4458333,18.2396449 19.4458333,16.7517361 L19.4458333,12 C19.4458333,11.6134007 19.759234,11.3 20.1458333,11.3 C20.5324327,11.3 20.8458333,11.6134007 20.8458333,12 L20.8458333,16.7517361 C20.8458333,19.0128436 19.0128436,20.8458333 16.7517361,20.8458333 L7.24826389,20.8458333 C4.98715643,20.8458333 3.15416667,19.0128436 3.15416667,16.7517361 L3.15416667,7.24826389 C3.15416667,4.98715643 4.98715643,3.15416667 7.24826389,3.15416667 L12,3.15416667 Z" id="Path" fill="#FFFFFF" fill-rule="nonzero"></path>
<path d="M19.3511597,5.34872828 C20.2469248,6.24449337 20.2469248,7.69681554 19.3511597,8.59258064 L12.7489306,15.1948097 C12.4577752,15.4859651 12.0995331,15.7011118 11.7057162,15.8213249 L10.029497,16.3329929 C9.10119412,16.6163585 8.11894274,16.0935336 7.83557714,15.1652307 C7.71876473,14.7825544 7.73602986,14.3714738 7.88451862,13.99994 L8.70227653,11.9538276 C8.8286621,11.6375983 9.01800726,11.3503585 9.2588125,11.1095532 L15.5634724,4.80489335 C16.4592375,3.90912826 17.9115597,3.90912826 18.8073247,4.80489335 L19.3511597,5.34872828 Z M18.3612102,6.33867777 L17.8173753,5.79484285 C17.4683442,5.44581176 16.902453,5.44581176 16.5534219,5.79484285 L10.248762,12.0995027 C10.1421189,12.2061458 10.0582655,12.3333529 10.0022944,12.4733983 L9.18453646,14.5195106 C9.15433809,14.59507 9.15082685,14.678672 9.17458316,14.7564974 C9.23221162,14.9452877 9.43197346,15.0516153 9.62076372,14.9939869 L11.296983,14.4823189 C11.4713888,14.4290813 11.63004,14.3338014 11.7589811,14.2048602 L18.3612102,7.60263114 C18.7102413,7.25360006 18.7102413,6.68770886 18.3612102,6.33867777 Z" id="Shape" fill="#FFFFFF" fill-rule="nonzero"></path>
<polygon id="Path" fill="#FFFFFF" fill-rule="nonzero" points="15.5907211 6.54669192 17.5755336 8.53150439 16.5855841 9.52145388 14.6007716 7.53664141"></polygon>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Icon / Menu / reorder</title>
<g id="Icon-/-Menu-/-reorder" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<path d="M20.4060728,15.0078431 C21.2543281,15.0078431 21.9419748,15.6954899 21.9419748,16.5437451 L21.9419748,19.064098 C21.9419748,19.9123532 21.2543281,20.6 20.4060728,20.6 L17.9103341,20.6 C17.0620789,20.6 16.3744321,19.9123532 16.3744321,19.064098 L16.3744321,16.5437451 C16.3744321,15.6954899 17.0620789,15.0078431 17.9103341,15.0078431 L20.4060728,15.0078431 Z M16.6624648,3.4 C18.1998993,3.4 19.4462362,4.64633689 19.4462362,6.18377135 L19.446,10.561 L21.5745455,8.42203928 C21.782239,8.21317523 22.105482,8.18912467 22.339778,8.35046222 L22.4230702,8.41965499 C22.6580423,8.65331023 22.6591098,9.03320772 22.4254545,9.26817977 L19.3380547,12.3729793 C19.0636746,12.6458372 18.6245193,12.6446032 18.3544177,12.3729793 L15.2670178,9.26817977 C15.0333625,9.03320772 15.03443,8.65331023 15.2694021,8.41965499 C15.5043741,8.18599974 15.8842716,8.18706723 16.1179268,8.42203928 L18.246,10.563 L18.2462362,6.18377135 C18.2462362,5.30907859 17.5371576,4.6 16.6624648,4.6 L6.36754271,4.6 C5.49284994,4.6 4.78377135,5.30907859 4.78377135,6.18377135 L4.783,15.007 L5.4316407,15.0078431 C6.27989595,15.0078431 6.96754271,15.6954899 6.96754271,16.5437451 L6.96754271,19.064098 C6.96754271,19.9123532 6.27989595,20.6 5.4316407,20.6 L2.93590201,20.6 C2.08764675,20.6 1.4,19.9123532 1.4,19.064098 L1.4,16.5437451 C1.4,15.6954899 2.08764675,15.0078431 2.93590201,15.0078431 L3.583,15.007 L3.58377135,6.18377135 C3.58377135,4.64633689 4.83010824,3.4 6.36754271,3.4 L16.6624648,3.4 Z M12.9188568,15.0078431 C13.767112,15.0078431 14.4547588,15.6954899 14.4547588,16.5437451 L14.4547588,19.064098 C14.4547588,19.9123532 13.767112,20.6 12.9188568,20.6 L10.4231181,20.6 C9.57486282,20.6 8.88721607,19.9123532 8.88721607,19.064098 L8.88721607,16.5437451 C8.88721607,15.6954899 9.57486282,15.0078431 10.4231181,15.0078431 L12.9188568,15.0078431 Z M20.4060728,16.2078431 L17.9103341,16.2078431 C17.7248206,16.2078431 17.5744321,16.3582316 17.5744321,16.5437451 L17.5744321,19.064098 C17.5744321,19.2496115 17.7248206,19.4 17.9103341,19.4 L20.4060728,19.4 C20.5915864,19.4 20.7419748,19.2496115 20.7419748,19.064098 L20.7419748,16.5437451 C20.7419748,16.3582316 20.5915864,16.2078431 20.4060728,16.2078431 Z M5.4316407,16.2078431 L2.93590201,16.2078431 C2.75038845,16.2078431 2.6,16.3582316 2.6,16.5437451 L2.6,19.064098 C2.6,19.2496115 2.75038845,19.4 2.93590201,19.4 L5.4316407,19.4 C5.61715425,19.4 5.76754271,19.2496115 5.76754271,19.064098 L5.76754271,16.5437451 C5.76754271,16.3582316 5.61715425,16.2078431 5.4316407,16.2078431 Z M12.9188568,16.2078431 L10.4231181,16.2078431 C10.2376045,16.2078431 10.0872161,16.3582316 10.0872161,16.5437451 L10.0872161,19.064098 C10.0872161,19.2496115 10.2376045,19.4 10.4231181,19.4 L12.9188568,19.4 C13.1043703,19.4 13.2547588,19.2496115 13.2547588,19.064098 L13.2547588,16.5437451 C13.2547588,16.3582316 13.1043703,16.2078431 12.9188568,16.2078431 Z" id="Shape" fill="#FFFFFF" fill-rule="nonzero"></path>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Icon / Menu / birthday_add</title>
<g id="Icon-/-Menu-/-birthday_add" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<path d="M19.4857266,16.2888889 C19.8170975,16.2888889 20.0857266,16.557518 20.0857266,16.8888889 L20.0856667,18.7328889 L21.9305556,18.7333333 C22.2287893,18.7333333 22.4762023,18.9509229 22.5227026,19.2360102 L22.5305556,19.3333333 C22.5305556,19.6647042 22.2619264,19.9333333 21.9305556,19.9333333 L20.0856667,19.9328889 L20.0857266,21.7777778 C20.0857266,22.0760115 19.868137,22.3234245 19.5830498,22.3699248 L19.4857266,22.3777778 C19.1543558,22.3777778 18.8857266,22.1091486 18.8857266,21.7777778 L18.8856667,19.9328889 L17.0416667,19.9333333 C16.7434329,19.9333333 16.4960199,19.7157437 16.4495197,19.4306564 L16.4416667,19.3333333 C16.4416667,19.0019625 16.7102958,18.7333333 17.0416667,18.7333333 L18.8856667,18.7328889 L18.8857266,16.8888889 C18.8857266,16.5906551 19.1033163,16.3432421 19.3884035,16.2967419 L19.4857266,16.2888889 Z M8.41204757,10.3213892 C8.4968615,10.6417222 8.30593555,10.9701587 7.98560254,11.0549726 C6.00141779,11.5803212 4.96111111,12.4866846 4.96111111,13.4472478 C4.96111111,13.5837542 4.98907974,13.7199344 5.04305686,13.8546242 C5.05815315,13.8780132 5.06968916,13.9034625 5.07949993,13.9299664 C5.67337842,15.1862671 8.51737301,16.291625 12,16.291625 C15.9250424,16.291625 19.0388889,14.8875907 19.0388889,13.4472478 C19.0388889,12.5127848 18.0774561,11.638341 16.2036879,11.1068602 C15.8848931,11.0164364 15.6997618,10.684699 15.7901857,10.3659042 C15.8806095,10.0471093 16.2123468,9.86197804 16.5311417,9.95240189 C18.8627692,10.6137512 20.2388889,11.8653615 20.2388889,13.4472478 C20.2388889,13.979393 20.0501074,14.4768826 19.7060685,14.9283577 C19.6140075,14.9115452 19.5205276,14.9027778 19.425,14.9027778 C18.6281077,14.9027778 17.9737164,15.5128973 17.9034658,16.2914966 L17.9034247,16.3114033 C16.4008483,17.0540936 14.3028164,17.491625 12,17.491625 C9.47842329,17.491625 7.20238688,16.967017 5.68481102,16.0915954 L6.42111111,18.7214444 L6.44,18.7222222 L6.44511111,18.8074444 L6.45530551,18.8430624 L6.4709096,18.9292533 C6.76328017,19.9158038 9.09544378,20.8722222 12,20.8722222 C13.262879,20.8722222 14.4175503,20.6914166 15.3434009,20.4059417 C15.6196573,20.6869274 16.004765,20.8611111 16.4305556,20.8611111 L17.2836209,20.8606349 C16.0386964,21.6207641 14.1238391,22.0722222 12,22.0722222 C8.52835644,22.0722222 5.61510021,20.8659524 5.27347003,19.0770457 L3.95558458,14.3602924 C3.82830877,14.0698882 3.76111111,13.7647359 3.76111111,13.4472478 C3.76111111,11.8222874 5.22885268,10.5435228 7.67846416,9.89494413 C7.99879717,9.81013021 8.32723365,10.0010562 8.41204757,10.3213892 Z M12.4583333,7.42777778 C13.380342,7.42777778 14.1277778,8.17521351 14.1277778,9.09722222 L14.1277778,13.0694444 C14.1277778,13.9914532 13.380342,14.7388889 12.4583333,14.7388889 L11.8472222,14.7388889 C10.9252135,14.7388889 10.1777778,13.9914532 10.1777778,13.0694444 L10.1777778,9.09722222 C10.1777778,8.17521351 10.9252135,7.42777778 11.8472222,7.42777778 L12.4583333,7.42777778 Z M12.4583333,8.62777778 L11.8472222,8.62777778 C11.5879552,8.62777778 11.3777778,8.83795521 11.3777778,9.09722222 L11.3777778,13.0694444 C11.3777778,13.3287115 11.5879552,13.5388889 11.8472222,13.5388889 L12.4583333,13.5388889 C12.7176003,13.5388889 12.9277778,13.3287115 12.9277778,13.0694444 L12.9277778,9.09722222 C12.9277778,8.83795521 12.7176003,8.62777778 12.4583333,8.62777778 Z M12.0207549,1.46944444 C12.8988738,1.46944444 14.1277778,3.40600437 14.1277778,4.64408449 C14.1277778,6.06372135 13.4385567,6.82401696 12,6.82401696 C10.3912998,6.82401696 9.40287158,5.20228362 10.2271046,3.79129771 L10.3125678,3.6554701 C10.6068441,3.21972221 11.1748869,2.01278865 11.1599792,2.03824823 C11.3659094,1.68655903 11.6259528,1.46944444 12.0207549,1.46944444 Z M12.1011111,2.85144444 L12.0713457,2.91751396 L11.8811707,3.30172279 L11.6899023,3.66987931 C11.557639,3.91763569 11.4205876,4.1589191 11.3070312,4.32706715 C10.8867233,4.94943561 11.2769618,5.62401696 12,5.62401696 C12.7481114,5.62401696 12.9277778,5.42582286 12.9277778,4.64408449 C12.9277778,4.29594473 12.7310746,3.77237759 12.4219529,3.28525029 C12.3528553,3.1763634 12.281237,3.07447531 12.2108288,2.98385177 L12.1011111,2.85144444 Z" id="Shape" fill="#FFFFFF" fill-rule="nonzero"></path>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.4 KiB

+70 -6
View File
@@ -22,6 +22,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_menu_my_stories" = "My Stories";
"lng_menu_my_groups" = "My Groups";
"lng_menu_my_channels" = "My Channels";
"lng_open_menu" = "Open navigation menu";
"lng_disable_notifications_from_tray" = "Disable notifications";
"lng_enable_notifications_from_tray" = "Enable notifications";
@@ -127,6 +128,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_cancel" = "Cancel";
"lng_continue" = "Continue";
"lng_close" = "Close";
"lng_minimize_window" = "Minimize";
"lng_maximize_window" = "Maximize";
"lng_restore_window" = "Restore";
"lng_go_back" = "Go back";
"lng_connecting" = "Connecting...";
"lng_reconnecting#one" = "Reconnect in {count} s...";
"lng_reconnecting#other" = "Reconnect in {count} s...";
@@ -388,6 +393,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_country_ph" = "Search";
"lng_country_none" = "Country not found";
"lng_country_select" = "Select Country";
"lng_phone_number" = "Phone number";
"lng_code_ph" = "Code";
"lng_code_desc" = "We've sent an activation code to your phone.\nPlease enter it below.";
@@ -522,6 +528,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_settings_use_native_notifications" = "Use native notifications";
"lng_settings_notifications_position" = "Location on the screen";
"lng_settings_notifications_count" = "Notifications count";
"lng_settings_notifications_display" = "Display for notifications";
"lng_settings_notifications_display_default" = "Default";
"lng_settings_sound_allowed" = "Allow sound";
"lng_settings_alert_windows" = "Flash the taskbar icon";
"lng_settings_alert_mac" = "Bounce the Dock icon";
@@ -777,6 +785,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_settings_birthday_contacts" = "Only your contacts can see your birthday. {link}";
"lng_settings_birthday_contacts_link" = "Change >";
"lng_settings_birthday_saved" = "Your date of birth was updated.";
"lng_settings_birthday_suggested" = "Date of birth was suggested to {user}";
"lng_settings_birthday_reset" = "Remove";
"lng_settings_channel_label" = "Personal channel";
"lng_settings_channel_add" = "Add";
@@ -984,6 +993,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_settings_color_subscribe" = "Subscribe to {link} to choose a custom color for your name.";
"lng_settings_color_changed" = "Your name color has been updated!";
"lng_settings_color_changed_channel" = "Your channel color has been updated!";
"lng_settings_color_apply" = "Apply Style";
"lng_suggest_hide_new_title" = "Hide new chats?";
"lng_suggest_hide_new_about" = "You are receiving lots of new chats from users who are not in your Contact List.\n\nDo you want to have such chats **automatically muted** and **archived**?";
@@ -1602,6 +1612,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_info_birthday_today_years#other" = "{date}\n({count} years old)";
"lng_info_birthday_today_label" = "Birthday today";
"lng_info_birthday_today" = "{emoji} {date}";
"lng_info_notes_label" = "Notes";
"lng_info_notes_private" = "only visible to you";
"lng_edit_note" = "Edit Note";
"lng_delete_note" = "Delete Note";
"lng_info_bio_label" = "Bio";
"lng_info_link_label" = "Link";
"lng_info_location_label" = "Location";
@@ -1625,6 +1639,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_info_group_title" = "Group Info";
"lng_info_channel_title" = "Channel Info";
"lng_info_topic_title" = "Topic Info";
"lng_info_thread_title" = "Thread Info";
"lng_profile_enable_notifications" = "Notifications";
"lng_profile_send_message" = "Send Message";
"lng_profile_open_app" = "Open App";
@@ -1639,7 +1654,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_profile_suggest_photo_from_clipboard" = "Suggest From Clipboard";
"lng_profile_set_photo_for" = "Set Profile Photo";
"lng_profile_set_photo_for_from_clipboard" = "Set From Clipboard";
"lng_profile_set_photo_for_about" = "You can replace {user}'s photo with another photo that only you will see.";
"lng_profile_photo_reset" = "Reset to Original";
"lng_profile_photo_reset_sure" = "Are you sure you want to reset {user}'s photo to the original?";
"lng_profile_photo_from_clipboard" = "From clipboard";
"lng_profile_suggest_sure" = "You can suggest {user} to set this photo for their Telegram profile.";
"lng_profile_suggest_button" = "Suggest";
@@ -2222,6 +2239,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_action_gift_transferred_unknown" = "Someone transferred you a gift";
"lng_action_gift_transferred_unknown_channel" = "Someone transferred a gift to {channel}";
"lng_action_gift_transferred_self" = "You transferred a unique collectible";
"lng_action_gift_displayed_self" = "You've started displaying {name} on your Telegram profile page.";
"lng_action_gift_transferred_self_channel" = "You transferred a gift to {channel}";
"lng_action_gift_transferred_mine" = "You transferred a gift to {user}";
"lng_action_gift_received_anonymous" = "Unknown user sent you a gift for {cost}";
@@ -2262,6 +2280,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_action_suggested_video_me" = "You suggested this photo for {user}'s Telegram profile.";
"lng_action_suggested_video" = "{user} suggests this photo for your Telegram profile.";
"lng_action_suggested_video_button" = "View Photo";
"lng_action_suggested_birthday_me" = "You suggest {user} add a date of birth:";
"lng_action_suggested_birthday" = "{user} suggests you add your date of birth:";
"lng_action_suggested_birtday_button" = "View";
"lng_action_attach_menu_bot_allowed" = "You allowed this bot to message you when you added it to your attachment menu.";
"lng_action_webapp_bot_allowed" = "You allowed this bot to message you in its web-app.";
"lng_action_set_wallpaper_me" = "You set a new wallpaper for this chat";
@@ -2282,6 +2303,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_action_topic_hidden" = "\"{topic}\" was hidden";
"lng_action_topic_unhidden" = "\"{topic}\" was unhidden";
"lng_action_topic_placeholder" = "topic";
"lng_action_topic_bot_thread" = "thread";
"lng_action_topic_renamed" = "{from} renamed the {link} to \"{title}\"";
"lng_action_topic_icon_changed" = "{from} changed the {link} icon to {emoji}";
"lng_action_topic_icon_removed" = "{from} removed the {link} icon";
@@ -2579,6 +2601,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_bot_allow_write_title" = "Allow messaging";
"lng_bot_allow_write" = "Do you want to allow this bot to send you messages?";
"lng_bot_allow_write_confirm" = "Allow";
"lng_bot_new_chat" = "New Chat";
"lng_bot_new_thread_title" = "New Thread";
"lng_bot_new_thread_about" = "Type any message to create a new thread.";
"lng_bot_show_threads_list" = "Show Threads List";
"lng_attach_failed" = "Failed";
"lng_attach_file" = "File";
@@ -3583,17 +3609,19 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_gift_premium_by_stars" = "or {amount}";
"lng_gift_stars_subtitle" = "Gift Stars";
"lng_gift_stars_about" = "Give {name} gifts that can be kept on your profile or converted to Stars. {link}";
"lng_gift_stars_about_collectibles" = "Collectible gifts are unique digital items you can exchange or sell. {link}";
"lng_gift_stars_link" = "What are Stars >";
"lng_gift_stars_limited" = "limited";
"lng_gift_stars_sold_out" = "sold out";
"lng_gift_stars_resale" = "resale";
"lng_gift_stars_on_sale" = "on sale";
"lng_gift_stars_premium" = "premium";
"lng_gift_stars_your_left#one" = "{count} left";
"lng_gift_stars_your_left#other" = "{count} left";
"lng_gift_stars_your_finished" = "none left";
"lng_gift_stars_tabs_all" = "All Gifts";
"lng_gift_stars_tabs_my" = "My Gifts";
"lng_gift_stars_tabs_limited" = "Limited";
"lng_gift_stars_tabs_in_stock" = "In Stock";
"lng_gift_stars_tabs_resale" = "Resale";
"lng_gift_stars_tabs_collectibles" = "Collectibles";
"lng_gift_send_title" = "Send a Gift";
"lng_gift_send_message" = "Enter Message";
"lng_gift_send_anonymous" = "Hide My Name";
@@ -3662,9 +3690,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_gift_self_about" = "Buy yourself a gift to display on your page or reserve for later.\n\nLimited-edition gifts upgraded to collectibles can be gifted to others later.";
"lng_gift_channel_title" = "Send a Gift";
"lng_gift_channel_about" = "Select a gift to show appreciation for {name}.";
"lng_gift_released_by" = "Released by {name}";
"lng_gift_released_by" = "released by {name}";
"lng_gift_unique_owner" = "Owner";
"lng_gift_unique_address_copied" = "Address copied to clipboard.";
"lng_gift_unique_telegram" = "Telegram";
"lng_gift_unique_status" = "Status";
"lng_gift_unique_status_non" = "Non-Unique";
"lng_gift_unique_upgrade" = "Upgrade";
@@ -3686,6 +3715,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_gift_unique_info_sender_comment" = "Gifted by {from} to {recipient} on {date} with the comment \"{text}\".";
"lng_gift_unique_info_reciever" = "Gifted to {recipient} on {date}.";
"lng_gift_unique_info_reciever_comment" = "Gifted to {recipient} on {date} with the comment \"{text}\".";
"lng_gift_unique_info_remove_title" = "Remove Description";
"lng_gift_unique_info_remove_text" = "Do you want to permanently remove this description from your gift?";
"lng_gift_unique_info_remove_confirm" = "Remove for {cost}";
"lng_gift_unique_info_removed" = "Removed {name}'s Description!";
"lng_gift_availability_left#one" = "{count} of {amount} left";
"lng_gift_availability_left#other" = "{count} of {amount} left";
"lng_gift_availability_none" = "None of {amount} left";
@@ -3750,6 +3783,11 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_gift_upgrade_tradable_about_user" = "{name} will be able to sell the gift on Telegram and NFT marketplaces.";
"lng_gift_upgrade_tradable_about_channel" = "Admins of {name} will be able to sell the gift on Telegram and NFT marketplaces.";
"lng_gift_upgrade_button" = "Upgrade for {price}";
"lng_gift_upgrade_decreases" = "Price decreases in {time}";
"lng_gift_upgrade_see_table" = "See how this price will decrease {arrow}";
"lng_gift_upgrade_prices_about" = "Upgrade cost drops every minute.";
"lng_gift_upgrade_prices_title" = "Upgrade Cost";
"lng_gift_upgrade_prices_subtitle" = "Users who upgrade their gifts first get collectibles with shorter numbers.";
"lng_gift_upgrade_free" = "Upgrade for Free";
"lng_gift_upgrade_confirm" = "Confirm";
"lng_gift_upgrade_add_my" = "Add my name to the gift";
@@ -3794,6 +3832,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_gift_transfer_sell" = "Sell";
"lng_gift_transfer_update" = "Change Price";
"lng_gift_transfer_unlist" = "Unlist";
"lng_gift_transfer_locked_title" = "Action Locked";
"lng_gift_transfer_locked_text" = "Transfer this gift to your Telegram account on Fragment to unlock this action.";
"lng_gift_sell_unlist_title" = "Unlist {name}";
"lng_gift_sell_unlist_sure" = "Are you sure you want to unlist your gift?";
"lng_gift_sell_title" = "Price in Stars";
@@ -3872,6 +3912,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_gift_collection_delete_sure" = "Are you sure you want to delete this collection?";
"lng_gift_collection_delete_button" = "Delete";
"lng_gift_collection_add_to" = "Add to Collection";
"lng_gift_collection_reorder" = "Reorder";
"lng_gift_collection_reorder_exit" = "Apply Reorder";
"lng_gift_collection_remove_from" = "Remove from Collection";
"lng_gift_locked_title" = "Gift Locked";
"lng_accounts_limit_title" = "Limit Reached";
@@ -4357,6 +4400,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_context_view_group" = "View group info";
"lng_context_view_channel" = "View channel info";
"lng_context_view_topic" = "View topic info";
"lng_context_view_thread" = "View thread info";
"lng_context_hide_psa" = "Hide this announcement";
"lng_context_pin_to_top" = "Pin";
"lng_context_unpin_from_top" = "Unpin";
@@ -4493,6 +4537,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_add_tag_phrase" = "to messages {arrow}";
"lng_add_tag_phrase_long" = "to your Saved Messages {arrow}";
"lng_unlock_tags" = "Unlock";
"lng_add_tag_selector#one" = "You can add a tag to the message";
"lng_add_tag_selector#other" = "You can add a tag to the messages";
"lng_message_tagged_with" = "Message tagged with {emoji}";
"lng_tagged_view_saved" = "View";
"lng_context_animated_emoji" = "This message contains emoji from **{name} pack**.";
"lng_context_animated_emoji_many#one" = "This message contains emoji from **{count} pack**.";
@@ -4774,6 +4822,16 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_contact_phone_after" = "Phone number will be visible once {user} adds you as a contact.";
"lng_contact_share_phone" = "Share my phone number";
"lng_contact_phone_will_be_shared" = "You can make your phone visible to {user}.";
"lng_contact_add_notes" = "Note";
"lng_contact_add_notes_about" = "Notes are only visible to you.";
"lng_contact_notes_limit_reached#one" = "You've reached the contact note limit. Please make the note shorter by {count} character.";
"lng_contact_notes_limit_reached#other" = "You've reached the contact note limit. Please make the note shorter by {count} characters.";
"lng_suggest_photo_for" = "Suggest Photo for {user}";
"lng_suggest_birthday" = "Suggest Date of Birth";
"lng_suggest_birthday_box_title" = "{user}'s Date of Birth";
"lng_suggest_birthday_box_confirm" = "Suggest";
"lng_set_photo_for_user" = "Set Photo for {user}";
"lng_contact_photo_replace_info" = "You can replace {user}'s photo with another photo that only you will see.";
"lng_edit_contact_title" = "Edit contact";
"lng_edit_channel_title" = "Edit channel";
"lng_edit_bot_title" = "Edit bot";
@@ -5009,8 +5067,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_payments_webview_no_use" = "Unfortunately, you can't use payments with current system configuration.";
"lng_payments_webview_install_edge" = "Please install {link}.";
"lng_payments_webview_install_webkit" = "Please install WebKitGTK (webkit2gtk-4.1/webkit2gtk-4.0) using your package manager.";
"lng_payments_webview_enable_opengl" = "Please enable OpenGL in application settings.";
"lng_payments_webview_switch_x11" = "Unsupported display server. Please switch to X11.";
"lng_payments_webview_update_windows" = "Please update your system to Windows 8.1 or later.";
"lng_payments_sure_close" = "Are you sure you want to close this payment form? The changes you made will be lost.";
"lng_payments_receipt_label" = "Receipt";
@@ -5161,6 +5217,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_group_call_raised_hand_status" = "wants to speak";
"lng_group_call_settings" = "Settings";
"lng_group_call_video" = "Video";
"lng_group_call_message" = "Message";
"lng_group_call_screen_share_start" = "Share Screen";
"lng_group_call_screen_share_stop" = "Stop Sharing";
"lng_group_call_screen_title" = "Screen {index}";
@@ -5222,6 +5279,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_group_call_invite_search_results" = "Search results";
"lng_group_call_invite_limit" = "This is currently the maximum allowed number of participants.";
"lng_group_call_new_muted" = "Mute new participants";
"lng_group_call_enable_messages" = "Enable messages";
"lng_group_call_speakers" = "Speakers";
"lng_group_call_microphone" = "Microphone";
"lng_group_call_push_to_talk" = "Push-to-Talk Shortcut";
@@ -6175,6 +6233,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_todo_title" = "Checklist";
"lng_todo_title_group" = "Group Checklist";
"lng_todo_title_user" = "Checklist";
"lng_todo_completed#one" = "{count} of {total} completed";
"lng_todo_completed#other" = "{count} of {total} completed";
"lng_todo_completed_none" = "None of {total} completed";
@@ -6442,6 +6501,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_ringtones_error_max_size" = "Sorry, but your file is too big. The maximum size for ringtones is {size}.";
"lng_ringtones_error_max_duration" = "Sorry, but your file is too long. The maximum duration for ringtones is {duration}.";
"lng_bot_thread_edit" = "Edit Thread";
"lng_bot_thread_title" = "Thread Name";
"lng_bot_thread_choose_title_and_icon" = "Choose a thread name and icon";
"lng_forum_topic_new" = "New Topic";
"lng_forum_topic_edit" = "Edit Topic";
"lng_forum_topic_title" = "Topic Name";
@@ -7399,6 +7462,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"ayu_IDCopiedToast" = "ID copied to clipboard.";
"ayu_ContextHideMessage" = "Hide";
"ayu_ContextCopyCallbackData" = "Copy Callback Data";
"ayu_RepeatMessage" = "Repeat Message";
"ayu_RegisterURLScheme" = "Register URL Scheme";
"ayu_SessionTerminated" = "Session **{item}** was terminated. You may still browse cached messages.";
"ayu_LocalPremiumNotice" = "You're using **local** Telegram Premium.\nIt **won't** give you any benefits.\n**Enjoy the star near your nickname!**";
+9 -37
View File
@@ -1,56 +1,28 @@
<RCC>
<qresource prefix="/gui">
<file alias="art/ayu/alt/app.png">../../art/ayu/alt/app.png</file>
<file alias="art/ayu/alt/app_preview.png">../../art/ayu/alt/app_preview.png</file>
<file alias="art/ayu/alt/app_macos.png">../../art/ayu/alt/app_macos.png</file>
<file alias="art/ayu/alt/app.svg">../../art/ayu/alt/app.svg</file>
<file alias="art/ayu/alt/app_icon.ico">../../art/ayu/alt/app_icon.ico</file>
<file alias="art/ayu/bard/app.png">../../art/ayu/bard/app.png</file>
<file alias="art/ayu/bard/app_preview.png">../../art/ayu/bard/app_preview.png</file>
<file alias="art/ayu/bard/app_macos.png">../../art/ayu/bard/app_macos.png</file>
<file alias="art/ayu/bard/app.svg">../../art/ayu/bard/app.svg</file>
<file alias="art/ayu/bard/app_icon.ico">../../art/ayu/bard/app_icon.ico</file>
<file alias="art/ayu/chibi/app.png">../../art/ayu/chibi/app.png</file>
<file alias="art/ayu/chibi/app_preview.png">../../art/ayu/chibi/app_preview.png</file>
<file alias="art/ayu/chibi/app_macos.png">../../art/ayu/chibi/app_macos.png</file>
<file alias="art/ayu/chibi/app_icon.ico">../../art/ayu/chibi/app_icon.ico</file>
<file alias="art/ayu/chibi2/app.png">../../art/ayu/chibi2/app.png</file>
<file alias="art/ayu/chibi2/app_preview.png">../../art/ayu/chibi2/app_preview.png</file>
<file alias="art/ayu/chibi2/app_macos.png">../../art/ayu/chibi2/app_macos.png</file>
<file alias="art/ayu/chibi2/app_icon.ico">../../art/ayu/chibi2/app_icon.ico</file>
<file alias="art/ayu/default/app.png">../../art/ayu/default/app.png</file>
<file alias="art/ayu/default/app_preview.png">../../art/ayu/default/app_preview.png</file>
<file alias="art/ayu/default/app_macos.png">../../art/ayu/default/app_macos.png</file>
<file alias="art/ayu/default/app.svg">../../art/ayu/default/app.svg</file>
<file alias="art/ayu/default/app_icon.ico">../../art/ayu/default/app_icon.ico</file>
<file alias="art/ayu/discord/app.png">../../art/ayu/discord/app.png</file>
<file alias="art/ayu/discord/app_preview.png">../../art/ayu/discord/app_preview.png</file>
<file alias="art/ayu/discord/app_macos.png">../../art/ayu/discord/app_macos.png</file>
<file alias="art/ayu/discord/app.svg">../../art/ayu/discord/app.svg</file>
<file alias="art/ayu/discord/app_icon.ico">../../art/ayu/discord/app_icon.ico</file>
<file alias="art/ayu/extera/app.png">../../art/ayu/extera/app.png</file>
<file alias="art/ayu/extera/app_preview.png">../../art/ayu/extera/app_preview.png</file>
<file alias="art/ayu/extera/app_macos.png">../../art/ayu/extera/app_macos.png</file>
<file alias="art/ayu/extera/app.svg">../../art/ayu/extera/app.svg</file>
<file alias="art/ayu/extera/app_icon.ico">../../art/ayu/extera/app_icon.ico</file>
<file alias="art/ayu/extera2/app.png">../../art/ayu/extera2/app.png</file>
<file alias="art/ayu/extera2/app_preview.png">../../art/ayu/extera2/app_preview.png</file>
<file alias="art/ayu/extera2/app_macos.png">../../art/ayu/extera2/app_macos.png</file>
<file alias="art/ayu/extera2/app.svg">../../art/ayu/extera2/app.svg</file>
<file alias="art/ayu/extera2/app_icon.ico">../../art/ayu/extera2/app_icon.ico</file>
<file alias="art/ayu/macos/app.png">../../art/ayu/macos/app.png</file>
<file alias="art/ayu/macos/app_preview.png">../../art/ayu/macos/app_preview.png</file>
<file alias="art/ayu/macos/app_macos.png">../../art/ayu/macos/app_macos.png</file>
<file alias="art/ayu/macos/app_icon.ico">../../art/ayu/macos/app_icon.ico</file>
<file alias="art/ayu/nothing/app.png">../../art/ayu/nothing/app.png</file>
<file alias="art/ayu/nothing/app_preview.png">../../art/ayu/nothing/app_preview.png</file>
<file alias="art/ayu/nothing/app_macos.png">../../art/ayu/nothing/app_macos.png</file>
<file alias="art/ayu/nothing/app.svg">../../art/ayu/nothing/app.svg</file>
<file alias="art/ayu/nothing/app_icon.ico">../../art/ayu/nothing/app_icon.ico</file>
<file alias="art/ayu/spotify/app.png">../../art/ayu/spotify/app.png</file>
<file alias="art/ayu/spotify/app_preview.png">../../art/ayu/spotify/app_preview.png</file>
<file alias="art/ayu/spotify/app_macos.png">../../art/ayu/spotify/app_macos.png</file>
<file alias="art/ayu/spotify/app.svg">../../art/ayu/spotify/app.svg</file>
<file alias="art/ayu/spotify/app_icon.ico">../../art/ayu/spotify/app_icon.ico</file>
<file alias="art/ayu/win95/app.png">../../art/ayu/win95/app.png</file>
<file alias="art/ayu/win95/app_preview.png">../../art/ayu/win95/app_preview.png</file>
<file alias="art/ayu/win95/app_macos.png">../../art/ayu/win95/app_macos.png</file>
<file alias="art/ayu/win95/app_icon.ico">../../art/ayu/win95/app_icon.ico</file>
<file alias="art/ayu/yaplus/app.png">../../art/ayu/yaplus/app.png</file>
<file alias="art/ayu/yaplus/app_preview.png">../../art/ayu/yaplus/app_preview.png</file>
<file alias="art/ayu/yaplus/app_macos.png">../../art/ayu/yaplus/app_macos.png</file>
<file alias="art/ayu/yaplus/app.svg">../../art/ayu/yaplus/app.svg</file>
<file alias="art/ayu/yaplus/app_icon.ico">../../art/ayu/yaplus/app_icon.ico</file>
<file alias="icons/ayu/nocover.svg">../../icons/ayu/nocover.svg</file>
<file alias="icons/ayu/donates/boosty.svg">../../icons/ayu/donates/boosty.svg</file>
@@ -40,6 +40,11 @@
<file alias="direct_messages.tgs">../../animations/edit_peers/direct_messages.tgs</file>
<file alias="no_chats.tgs">../../animations/no_chats.tgs</file>
<file alias="transcribe_loading.tgs">../../animations/transcribe_loading.tgs</file>
<file alias="cake.tgs">../../animations/cake.tgs</file>
<file alias="camera_outline.tgs">../../animations/camera_outline.tgs</file>
<file alias="photo_suggest_icon.tgs">../../animations/photo_suggest_icon.tgs</file>
<file alias="toast/saved_messages.tgs">../../animations/toast/saved_messages.tgs</file>
<file alias="toast/tagged.tgs">../../animations/toast/tagged.tgs</file>
<file alias="dice_idle.tgs">../../animations/dice/dice_idle.tgs</file>
<file alias="dart_idle.tgs">../../animations/dice/dart_idle.tgs</file>
+1 -1
View File
@@ -10,7 +10,7 @@
<Identity Name="TelegramMessengerLLP.TelegramDesktop"
ProcessorArchitecture="ARCHITECTURE"
Publisher="CN=536BC709-8EE1-4478-AF22-F0F0F26FF64A"
Version="6.1.3.0" />
Version="6.2.4.0" />
<Properties>
<DisplayName>Telegram Desktop</DisplayName>
<PublisherDisplayName>Telegram Messenger LLP</PublisherDisplayName>
+4 -4
View File
@@ -44,8 +44,8 @@ IDI_ICON1 ICON "..\\art\\icon256.ico"
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 6,1,3,0
PRODUCTVERSION 6,1,3,0
FILEVERSION 6,2,4,0
PRODUCTVERSION 6,2,4,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -62,10 +62,10 @@ BEGIN
BEGIN
VALUE "CompanyName", "Radolyn Labs"
VALUE "FileDescription", "AyuGram Desktop"
VALUE "FileVersion", "6.1.3.0"
VALUE "FileVersion", "6.2.4.0"
VALUE "LegalCopyright", "Copyright (C) 2014-2025"
VALUE "ProductName", "AyuGram Desktop"
VALUE "ProductVersion", "6.1.3.0"
VALUE "ProductVersion", "6.2.4.0"
END
END
BLOCK "VarFileInfo"
+4 -4
View File
@@ -35,8 +35,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 6,1,3,0
PRODUCTVERSION 6,1,3,0
FILEVERSION 6,2,4,0
PRODUCTVERSION 6,2,4,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -53,10 +53,10 @@ BEGIN
BEGIN
VALUE "CompanyName", "Radolyn Labs"
VALUE "FileDescription", "AyuGram Desktop Updater"
VALUE "FileVersion", "6.1.3.0"
VALUE "FileVersion", "6.2.4.0"
VALUE "LegalCopyright", "Copyright (C) 2014-2025"
VALUE "ProductName", "AyuGram Desktop"
VALUE "ProductVersion", "6.1.3.0"
VALUE "ProductVersion", "6.2.4.0"
END
END
BLOCK "VarFileInfo"
@@ -98,7 +98,7 @@ Authorizations::Authorizations(not_null<ApiWrap*> api)
api->session().saveSettingsDelayed();
}) {
_unreviewed = api->session().settings().unreviewed();
removeExpiredUnreviewed();
crl::on_main(&api->session(), [=] { removeExpiredUnreviewed(); });
Core::App().settings().deviceModelChanges(
) | rpl::start_with_next([=](const QString &model) {
auto changed = false;
@@ -159,6 +159,7 @@ void MessagesSearch::searchReceived(
// Don't apply cached data!
owner.processUsers(data.vusers());
owner.processChats(data.vchats());
_history->peer->processTopics(data.vtopics());
}
auto items = HistoryItemsFromTL(&owner, data.vmessages().v);
const auto total = int(data.vmessages().v.size());
@@ -168,6 +169,7 @@ void MessagesSearch::searchReceived(
// Don't apply cached data!
owner.processUsers(data.vusers());
owner.processChats(data.vchats());
_history->peer->processTopics(data.vtopics());
}
auto items = HistoryItemsFromTL(&owner, data.vmessages().v);
// data.vnext_rate() is used only in global search.
@@ -178,17 +180,14 @@ void MessagesSearch::searchReceived(
// Don't apply cached data!
owner.processUsers(data.vusers());
owner.processChats(data.vchats());
}
if (const auto channel = _history->peer->asChannel()) {
channel->ptsReceived(data.vpts().v);
if (_requestId != 0) {
// Don't apply cached data!
channel->processTopics(data.vtopics());
if (const auto channel = _history->peer->asChannel()) {
channel->ptsReceived(data.vpts().v);
} else {
LOG(("API Error: "
"received messages.channelMessages when no channel "
"was passed!"));
}
} else {
LOG(("API Error: "
"received messages.channelMessages when no channel "
"was passed!"));
_history->peer->processTopics(data.vtopics());
}
auto items = HistoryItemsFromTL(&owner, data.vmessages().v);
const auto total = int(data.vcount().v);
-7
View File
@@ -27,13 +27,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
namespace Api {
namespace {
[[nodiscard]] TimeId UnixtimeFromMsgId(mtpMsgId msgId) {
return TimeId(msgId >> 32);
}
} // namespace
Polls::Polls(not_null<ApiWrap*> api)
: _session(&api->session())
+15
View File
@@ -23,6 +23,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "main/main_app_config.h"
#include "main/main_session.h"
#include "payments/payments_form.h"
#include "ui/chat/chat_style.h" // ColorCollectible
#include "ui/text/format_values.h"
namespace Api {
@@ -865,6 +866,7 @@ std::optional<Data::StarGift> FromTL(
.lastSaleDate = data.vlast_sale_date().value_or_empty(),
.lockedUntilDate = data.vlocked_until_date().value_or_empty(),
.requirePremium = data.is_require_premium(),
.peerColorAvailable = data.is_peer_color_available(),
.upgradable = data.vupgrade_stars().has_value(),
.birthday = data.is_birthday(),
.soldOut = data.is_sold_out(),
@@ -900,6 +902,12 @@ std::optional<Data::StarGift> FromTL(
const auto themeUser = themeUserId
? session->data().peer(themeUserId).get()
: nullptr;
const auto colorCollectible = (data.vpeer_color()
&& data.vpeer_color()->type() == mtpc_peerColorCollectible)
? std::make_shared<Ui::ColorCollectible>(
Data::ParseColorCollectible(
data.vpeer_color()->c_peerColorCollectible()))
: nullptr;
auto result = Data::StarGift{
.id = data.vid().v,
.unique = std::make_shared<Data::UniqueGift>(Data::UniqueGift{
@@ -907,11 +915,15 @@ std::optional<Data::StarGift> FromTL(
.initialGiftId = data.vgift_id().v,
.slug = qs(data.vslug()),
.title = qs(data.vtitle()),
.giftAddress = qs(data.vgift_address().value_or_empty()),
.ownerAddress = qs(data.vowner_address().value_or_empty()),
.ownerName = qs(data.vowner_name().value_or_empty()),
.ownerId = (data.vowner_id()
? peerFromMTP(*data.vowner_id())
: PeerId()),
.hostId = (data.vhost_id()
? peerFromMTP(*data.vhost_id())
: PeerId()),
.releasedBy = releasedBy,
.themeUser = themeUser,
.nanoTonForResale = FindTonForResale(data.vresell_amount()),
@@ -930,6 +942,7 @@ std::optional<Data::StarGift> FromTL(
data.vvalue_amount().value_or_empty()),
})
: nullptr),
.peerColor = colorCollectible,
}),
.document = model->document,
.releasedBy = releasedBy,
@@ -986,6 +999,8 @@ std::optional<Data::SavedStarGift> FromTL(
.starsConverted = int64(data.vconvert_stars().value_or_empty()),
.starsUpgradedBySender = int64(
data.vupgrade_stars().value_or_empty()),
.starsForDetailsRemove = int64(
data.vdrop_original_details_stars().value_or_empty()),
.giftPrepayUpgradeHash = qs(
data.vprepaid_upgrade_hash().value_or_empty()),
.fromId = (data.vfrom_id()
@@ -25,10 +25,6 @@ namespace {
constexpr auto kSendTogglesDelay = 3 * crl::time(1000);
[[nodiscard]] TimeId UnixtimeFromMsgId(mtpMsgId msgId) {
return TimeId(msgId >> 32);
}
} // namespace
TodoLists::TodoLists(not_null<ApiWrap*> api)
+29 -11
View File
@@ -51,6 +51,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "history/history.h"
#include "history/history_item.h"
#include "history/history_item_helpers.h"
#include "history/history_streamed_drafts.h"
#include "history/history_unread_things.h"
#include "core/application.h"
#include "storage/storage_account.h"
@@ -1104,6 +1105,9 @@ void Updates::handleSendActionUpdate(
const auto from = (fromId == session().userPeerId())
? session().user().get()
: session().data().peerLoaded(fromId);
const auto when = requestingDifference()
? 0
: base::unixtime::now();
if (action.type() == mtpc_speakingInGroupCallAction) {
handleSpeakingInCall(peer, fromId, from);
}
@@ -1116,10 +1120,11 @@ void Updates::handleSendActionUpdate(
const auto &data = action.c_sendMessageEmojiInteractionSeen();
handleEmojiInteraction(peer, qs(data.vemoticon()));
return;
} else if (action.type() == mtpc_sendMessageTextDraftAction) {
const auto &data = action.c_sendMessageTextDraftAction();
history->streamedDrafts().apply(rootId, fromId, when, data);
return;
}
const auto when = requestingDifference()
? 0
: base::unixtime::now();
session().data().sendActionManager().registerFor(
history,
rootId,
@@ -1630,6 +1635,17 @@ void Updates::feedUpdate(const MTPUpdate &update) {
auto &d = update.c_updateNewChannelMessage();
auto channel = session().data().channelLoaded(peerToChannel(PeerFromMessage(d.vmessage())));
const auto isDataLoaded = AllDataLoadedForMessage(&session(), d.vmessage());
{
// Todo delete.
const auto messageId = IdFromMessage(d.vmessage());
if (const auto history = channel ? session().data().historyLoaded(channel) : nullptr) {
if (history->isUnknownMessageDeleted(messageId)) {
LOG(("Unknown message deleted detected for channel %1, message %2")
.arg(channel->id.value & PeerId::kChatTypeMask)
.arg(messageId.bare));
}
}
}
if (!requestingDifference() && (!channel || isDataLoaded != DataIsLoadedResult::Ok)) {
MTP_LOG(0, ("getDifference "
"{ good - after not all data loaded in updateNewChannelMessage }%1"
@@ -1959,7 +1975,7 @@ void Updates::feedUpdate(const MTPUpdate &update) {
auto &d = update.c_updateUserTyping();
handleSendActionUpdate(
peerFromUser(d.vuser_id()),
0,
d.vtop_msg_id().value_or_empty(),
peerFromUser(d.vuser_id()),
d.vaction());
} break;
@@ -2131,7 +2147,9 @@ void Updates::feedUpdate(const MTPUpdate &update) {
case mtpc_updateGroupCallParticipants:
case mtpc_updateGroupCallChainBlocks:
case mtpc_updateGroupCallConnection:
case mtpc_updateGroupCall: {
case mtpc_updateGroupCall:
case mtpc_updateGroupCallMessage:
case mtpc_updateGroupCallEncryptedMessage: {
Core::App().calls().handleUpdate(&session(), update);
} break;
@@ -2492,9 +2510,9 @@ void Updates::feedUpdate(const MTPUpdate &update) {
}
} break;
case mtpc_updateChannelPinnedTopic: {
const auto &d = update.c_updateChannelPinnedTopic();
const auto peerId = peerFromChannel(d.vchannel_id());
case mtpc_updatePinnedForumTopic: {
const auto &d = update.c_updatePinnedForumTopic();
const auto peerId = peerFromMTP(d.vpeer());
if (const auto peer = session().data().peerLoaded(peerId)) {
const auto rootId = d.vtopic_id().v;
if (const auto topic = peer->forumTopicFor(rootId)) {
@@ -2505,9 +2523,9 @@ void Updates::feedUpdate(const MTPUpdate &update) {
}
} break;
case mtpc_updateChannelPinnedTopics: {
const auto &d = update.c_updateChannelPinnedTopics();
const auto peerId = peerFromChannel(d.vchannel_id());
case mtpc_updatePinnedForumTopics: {
const auto &d = update.c_updatePinnedForumTopics();
const auto peerId = peerFromMTP(d.vpeer());
if (const auto peer = session().data().peerLoaded(peerId)) {
if (const auto forum = peer->forum()) {
const auto done = [&] {
+6 -4
View File
@@ -134,7 +134,7 @@ rpl::producer<rpl::no_value, Usernames::Error> Usernames::toggle(
if (list.empty()) {
if (error == Error::Unknown) {
it->second.done.fire_done();
} else if (error == Error::TooMuch) {
} else {
it->second.done.fire_error_copy(error);
}
_toggleRequests.remove(peerId);
@@ -149,6 +149,8 @@ rpl::producer<rpl::no_value, Usernames::Error> Usernames::toggle(
const auto type = error.type();
if (type == u"USERNAMES_ACTIVE_TOO_MUCH"_q) {
pop(Error::TooMuch);
} else if (type.startsWith(u"FLOOD_WAIT_"_q)) {
pop(Error::Flood);
} else {
pop(Error::Unknown);
}
@@ -158,19 +160,19 @@ rpl::producer<rpl::no_value, Usernames::Error> Usernames::toggle(
_api.request(MTPaccount_ToggleUsername(
MTP_string(username),
MTP_bool(active)
)).done(done).fail(fail).send();
)).done(done).fail(fail).handleFloodErrors().send();
} else if (const auto channel = peer->asChannel()) {
_api.request(MTPchannels_ToggleUsername(
channel->inputChannel,
MTP_string(username),
MTP_bool(active)
)).done(done).fail(fail).send();
)).done(done).fail(fail).handleFloodErrors().send();
} else if (const auto botUserInput = BotUserInput(peer)) {
_api.request(MTPbots_ToggleUsername(
*botUserInput,
MTP_string(username),
MTP_bool(active)
)).done(done).fail(fail).send();
)).done(done).fail(fail).handleFloodErrors().send();
} else {
return rpl::never<rpl::no_value, Error>();
}
@@ -23,6 +23,7 @@ class Usernames final {
public:
enum class Error {
TooMuch,
Flood,
Unknown,
};
@@ -652,6 +652,22 @@ QString FormatReadDate(TimeId date, const QDateTime &now) {
const auto parsed = base::unixtime::parse(date);
const auto readDate = parsed.date();
const auto nowDate = now.date();
if (readDate.year() < nowDate.year()) {
return tr::lng_mediaview_date_time(
tr::now,
lt_date,
tr::lng_month_day_year(
tr::now,
lt_month,
Lang::MonthDay(readDate.month())(tr::now),
lt_day,
QString::number(readDate.day()),
lt_year,
QString::number(readDate.year())),
lt_time,
QLocale().toString(parsed.time(), "HH:mm:ss"));
}
if (readDate == nowDate) {
return tr::lng_mediaview_today(
tr::now,
+59 -19
View File
@@ -114,10 +114,6 @@ using PhotoFileLocationId = Data::PhotoFileLocationId;
using DocumentFileLocationId = Data::DocumentFileLocationId;
using UpdatedFileReferences = Data::UpdatedFileReferences;
[[nodiscard]] TimeId UnixtimeFromMsgId(mtpMsgId msgId) {
return TimeId(msgId >> 32);
}
[[nodiscard]] std::shared_ptr<ChatHelpers::Show> ShowForPeer(
not_null<PeerData*> peer) {
if (const auto window = Core::App().windowFor(peer)) {
@@ -162,6 +158,14 @@ void ShowChannelsLimitBox(not_null<PeerData*> peer) {
} // namespace
namespace Api {
TimeId UnixtimeFromMsgId(mtpMsgId msgId) {
return TimeId(msgId >> 32);
}
} // namespace Api
ApiWrap::ApiWrap(not_null<Main::Session*> session)
: MTP::Sender(&session->account().mtp())
, _session(session)
@@ -212,6 +216,27 @@ ApiWrap::ApiWrap(not_null<Main::Session*> session)
ApiWrap::~ApiWrap() = default;
void ApiWrap::ProcessRecentSelfForwards(
not_null<Main::Session*> session,
const MTPUpdates &updates,
PeerId targetPeerId,
PeerId fromPeerId) {
auto newIds = MessageIdsList();
updates.match([&](const MTPDupdates &data) {
for (const auto &update : data.vupdates().v) {
update.match([&](const MTPDupdateMessageID &d) {
newIds.push_back(FullMsgId(targetPeerId, d.vid().v));
}, [](const auto &) {});
}
}, [](const auto &) {});
if (!newIds.empty()) {
session->data().addRecentSelfForwards({
.fromPeerId = fromPeerId,
.ids = newIds,
});
}
}
Main::Session &ApiWrap::session() const {
return *_session;
}
@@ -382,9 +407,9 @@ void ApiWrap::savePinnedOrder(not_null<Data::Forum*> forum) {
order,
ranges::back_inserter(topics),
input);
request(MTPchannels_ReorderPinnedForumTopics(
MTP_flags(MTPchannels_ReorderPinnedForumTopics::Flag::f_force),
forum->channel()->inputChannel,
request(MTPmessages_ReorderPinnedForumTopics(
MTP_flags(MTPmessages_ReorderPinnedForumTopics::Flag::f_force),
forum->peer()->input,
MTP_vector(topics)
)).done([=](const MTPUpdates &result) {
applyUpdates(result);
@@ -1107,6 +1132,8 @@ void ApiWrap::requestWallPaper(
void ApiWrap::requestFullPeer(not_null<PeerData*> peer) {
if (_fullPeerRequests.contains(peer)) {
return;
} else if (!peer->isUser() && !peer->barSettings().has_value()) {
requestPeerSettings(peer);
}
const auto requestId = [&] {
@@ -1926,7 +1953,7 @@ void ApiWrap::sendNotifySettingsUpdates() {
for (const auto topic : base::take(_updateNotifyTopics)) {
request(MTPaccount_UpdateNotifySettings(
MTP_inputNotifyForumTopic(
topic->channel()->input,
topic->peer()->input,
MTP_int(topic->rootId())),
topic->notify().serialize()
)).afterDelay(kSmallDelayMs).send();
@@ -2219,7 +2246,7 @@ void ApiWrap::saveDraftsToCloud() {
history->finishSavingCloudDraft(
topicRootId,
monoforumPeerId,
UnixtimeFromMsgId(response.outerMsgId));
Api::UnixtimeFromMsgId(response.outerMsgId));
const auto cloudDraft = history->cloudDraft(
topicRootId,
monoforumPeerId);
@@ -2240,7 +2267,7 @@ void ApiWrap::saveDraftsToCloud() {
history->finishSavingCloudDraft(
topicRootId,
monoforumPeerId,
UnixtimeFromMsgId(response.outerMsgId));
Api::UnixtimeFromMsgId(response.outerMsgId));
const auto cloudDraft = history->cloudDraft(
topicRootId,
monoforumPeerId);
@@ -3091,18 +3118,20 @@ void ApiWrap::requestMessageAfterDate(
return &messages.vmessages().v;
};
const auto list = result.match([&](
const MTPDmessages_messages &data) {
const MTPDmessages_messages &data) {
peer->processTopics(data.vtopics());
return handleMessages(data);
}, [&](const MTPDmessages_messagesSlice &data) {
peer->processTopics(data.vtopics());
return handleMessages(data);
}, [&](const MTPDmessages_channelMessages &data) {
if (const auto channel = peer->asChannel()) {
channel->ptsReceived(data.vpts().v);
channel->processTopics(data.vtopics());
} else {
LOG(("API Error: received messages.channelMessages when "
"no channel was passed! (ApiWrap::jumpToDate)"));
}
peer->processTopics(data.vtopics());
return handleMessages(data);
}, [&](const MTPDmessages_messagesNotModified &) {
LOG(("API Error: received messages.messagesNotModified! "
@@ -3577,6 +3606,13 @@ void ApiWrap::forwardMessages(
}
finish();
if (peer->isSelf() && session().premium()) {
ProcessRecentSelfForwards(
_session,
result,
peer->id,
forwardFrom->id);
}
}).fail([=](const MTP::Error &error) {
if (idsCopy) {
for (const auto &[randomId, itemId] : *idsCopy) {
@@ -3952,7 +3988,9 @@ void ApiWrap::sendShortcutMessages(
}).send();
}
void ApiWrap::sendMessage(MessageToSend &&message) {
void ApiWrap::sendMessage(
MessageToSend &&message,
std::optional<MsgId> localMessageId) {
const auto history = message.action.history;
const auto peer = history->peer;
auto &textWithTags = message.textWithTags;
@@ -3978,7 +4016,7 @@ void ApiWrap::sendMessage(MessageToSend &&message) {
? Data::CanSendTexts(topic)
: Data::CanSendTexts(peer);
if (!canSendTexts && !AyuForward::isForwarding(peer->id) || Api::SendDice(message)) {
if ((!canSendTexts && !AyuForward::isForwarding(peer->id)) || Api::SendDice(message)) {
return;
}
local().saveRecentSentHashtags(textWithTags.text);
@@ -4006,7 +4044,9 @@ void ApiWrap::sendMessage(MessageToSend &&message) {
auto newId = FullMsgId(
peer->id,
_session->data().nextLocalMessageId());
localMessageId
? std::exchange(localMessageId, std::nullopt).value()
: _session->data().nextLocalMessageId());
auto randomId = base::RandomValue<uint64>();
TextUtilities::Trim(sending);
@@ -4132,7 +4172,7 @@ void ApiWrap::sendMessage(MessageToSend &&message) {
history->finishSavingCloudDraft(
draftTopicRootId,
draftMonoforumPeerId,
UnixtimeFromMsgId(response.outerMsgId));
Api::UnixtimeFromMsgId(response.outerMsgId));
}
AyuWorker::markAsOnline(_session);
@@ -4149,7 +4189,7 @@ void ApiWrap::sendMessage(MessageToSend &&message) {
history->finishSavingCloudDraft(
draftTopicRootId,
draftMonoforumPeerId,
UnixtimeFromMsgId(response.outerMsgId));
Api::UnixtimeFromMsgId(response.outerMsgId));
}
};
const auto mtpShortcut = Data::ShortcutIdToMTP(
@@ -4353,7 +4393,7 @@ void ApiWrap::sendInlineResult(
history->finishSavingCloudDraft(
topicRootId,
monoforumPeerId,
UnixtimeFromMsgId(response.outerMsgId));
Api::UnixtimeFromMsgId(response.outerMsgId));
if (done) {
done(true);
}
@@ -4362,7 +4402,7 @@ void ApiWrap::sendInlineResult(
history->finishSavingCloudDraft(
topicRootId,
monoforumPeerId,
UnixtimeFromMsgId(response.outerMsgId));
Api::UnixtimeFromMsgId(response.outerMsgId));
if (done) {
done(false);
}
+11 -1
View File
@@ -129,6 +129,8 @@ QString RequestKey(Types &&...values) {
return result;
}
[[nodiscard]] TimeId UnixtimeFromMsgId(mtpMsgId msgId);
} // namespace Api
class ApiWrap final : public MTP::Sender {
@@ -363,7 +365,9 @@ public:
void sendShortcutMessages(
not_null<PeerData*> peer,
BusinessShortcutId id);
void sendMessage(MessageToSend &&message);
void sendMessage(
MessageToSend &&message,
std::optional<MsgId> localMessageId = std::nullopt);
void sendBotStart(
std::shared_ptr<Ui::Show> show,
not_null<UserData*> bot,
@@ -428,6 +432,12 @@ public:
static constexpr auto kJoinErrorDuration = 5 * crl::time(1000);
static void ProcessRecentSelfForwards(
not_null<Main::Session*> session,
const MTPUpdates &updates,
PeerId targetPeerId,
PeerId fromPeerId);
[[nodiscard]] std::unique_ptr<TaskQueue> &fileLoader() {
return _fileLoader;
}
+19 -5
View File
@@ -20,6 +20,15 @@ std::map<QString, QString> langMapping = {
{"zh-hant-raw", "zh-hant"},
};
constexpr auto postfixes = {
"zero",
"one",
"two",
"few",
"many",
"other"
};
AyuLanguage *AyuLanguage::instance = nullptr;
AyuLanguage::AyuLanguage() = default;
@@ -109,14 +118,19 @@ void AyuLanguage::applyLanguageJson(QJsonDocument doc) {
auto key = qsl("ayu_") + brokenKey;
auto val = json.value(brokenKey).toString().replace(qsl("&amp;"), qsl("&"));
if (key.endsWith("_zero") || key.endsWith("_two") || key.endsWith("_few") || key.endsWith("_many")) {
if (key.endsWith("_Android")) {
continue;
}
if (key.endsWith("_one")) {
key = key.replace("_one", "#one");
} else if (key.endsWith("_other")) {
key = key.replace("_other", "#other");
for (const auto &postfix : postfixes) {
if (key.endsWith(qsl("_") + postfix)) {
key = key.replace(qsl("_") + postfix, qsl("#") + postfix);
break;
}
}
if (key.endsWith("_PC")) {
key = key.replace("_PC", "");
}
if (val.contains(qsl("%1$d")) && !val.contains(qsl("%2$d"))) {
+10 -7
View File
@@ -144,6 +144,10 @@ void postinitialize() {
translationProviderReactive = settings->translationProvider;
ghostModeEnabled = ghostModeEnabled_util(settings.value());
if (settings->appIcon == QString("macos")) {
settings->appIcon = AyuAssets::DEFAULT_ICON;
}
}
AyuGramSettings &getInstance() {
@@ -252,13 +256,7 @@ AyuGramSettings::AyuGramSettings() {
showGroupReactions = true;
// ~ Customization
appIcon =
#ifdef Q_OS_MAC
AyuAssets::DEFAULT_MACOS_ICON
#else
AyuAssets::DEFAULT_ICON
#endif
;
appIcon = AyuAssets::DEFAULT_ICON;
simpleQuotesAndReplies = false;
hideFastShare = false;
replaceBottomInfoWithIcons = true;
@@ -275,6 +273,7 @@ AyuGramSettings::AyuGramSettings() {
showHideMessageInContextMenu = 0;
showUserMessagesInContextMenu = 2;
showMessageDetailsInContextMenu = 2;
showRepeatMessageInContextMenu = 0;
showAddFilterInContextMenu = 1;
showAttachButtonInMessageField = true;
@@ -527,6 +526,10 @@ void set_showMessageDetailsInContextMenu(int val) {
settings->showMessageDetailsInContextMenu = val;
}
void set_showRepeatMessageInContextMenu(int val) {
settings->showRepeatMessageInContextMenu = val;
}
void set_showAddFilterInContextMenu(int val) {
settings->showAddFilterInContextMenu = val;
}
+4
View File
@@ -99,6 +99,7 @@ public:
int showHideMessageInContextMenu;
int showUserMessagesInContextMenu;
int showMessageDetailsInContextMenu;
int showRepeatMessageInContextMenu;
int showAddFilterInContextMenu;
bool showAttachButtonInMessageField;
@@ -205,6 +206,7 @@ void set_showViewsPanelInContextMenu(int val);
void set_showHideMessageInContextMenu(int val);
void set_showUserMessagesInContextMenu(int val);
void set_showMessageDetailsInContextMenu(int val);
void set_showRepeatMessageInContextMenu(int val);
void set_showAddFilterInContextMenu(int val);
void set_showAttachButtonInMessageField(bool val);
@@ -297,6 +299,7 @@ inline void to_json(nlohmann::json &nlohmann_json_j, const AyuGramSettings &nloh
NLOHMANN_JSON_TO(showHideMessageInContextMenu)
NLOHMANN_JSON_TO(showUserMessagesInContextMenu)
NLOHMANN_JSON_TO(showMessageDetailsInContextMenu)
NLOHMANN_JSON_TO(showRepeatMessageInContextMenu)
NLOHMANN_JSON_TO(showAddFilterInContextMenu)
NLOHMANN_JSON_TO(showAttachButtonInMessageField)
NLOHMANN_JSON_TO(showCommandsButtonInMessageField)
@@ -381,6 +384,7 @@ inline void from_json(const nlohmann::json &nlohmann_json_j, AyuGramSettings &nl
NLOHMANN_JSON_FROM_WITH_DEFAULT(showHideMessageInContextMenu)
NLOHMANN_JSON_FROM_WITH_DEFAULT(showUserMessagesInContextMenu)
NLOHMANN_JSON_FROM_WITH_DEFAULT(showMessageDetailsInContextMenu)
NLOHMANN_JSON_FROM_WITH_DEFAULT(showRepeatMessageInContextMenu)
NLOHMANN_JSON_FROM_WITH_DEFAULT(showAddFilterInContextMenu)
NLOHMANN_JSON_FROM_WITH_DEFAULT(showAttachButtonInMessageField)
NLOHMANN_JSON_FROM_WITH_DEFAULT(showCommandsButtonInMessageField)
@@ -80,7 +80,7 @@ bool ResolveChat(
}
const auto peer = controller->session().data().peerLoaded(static_cast<PeerId>(chatId));
if (peer != nullptr) {
controller->showPeerInfo(peer);
controller->showPeerHistory(peer);
return true;
}
@@ -90,7 +90,7 @@ bool ResolveChat(
[=](const QString &title, PeerData *data)
{
if (data) {
controller->showPeerInfo(data);
controller->showPeerHistory(data);
return;
}
@@ -59,7 +59,7 @@ std::optional<bool> isFiltered(const QString &str, uint64 dialogId) {
const auto reversed = pattern.reversed;
if (!reversed && match || reversed && !match) {
if ((!reversed && match) || (reversed && !match)) {
return true;
}
return false;
@@ -89,7 +89,7 @@ std::optional<bool> isFiltered(const QString &str, uint64 dialogId) {
bool isEnabled(not_null<PeerData*> peer) {
const auto &settings = AyuSettings::getInstance();
return settings.filtersEnabled && (settings.filtersEnabledInChats || !peer->isMegagroup() && !peer->isGigagroup());
return settings.filtersEnabled && (settings.filtersEnabledInChats || (!peer->isMegagroup() && !peer->isGigagroup() && !peer->isUser()));
}
bool isBlocked(const not_null<HistoryItem*> item) {
@@ -115,8 +115,8 @@ bool isBlocked(const not_null<HistoryItem*> item) {
return settings.filtersEnabled &&
(
item->from()->isUser() && ShadowBanUtils::isShadowBanned(getDialogIdFromPeer(item->from())) ||
settings.hideFromBlocked && blocked
(item->from()->isUser() && ShadowBanUtils::isShadowBanned(getDialogIdFromPeer(item->from()))) ||
(settings.hideFromBlocked && blocked)
);
}
@@ -145,7 +145,8 @@ bool FilterUtils::importFromJson(const QByteArray &json) {
const auto changes = prepareChanges(document.object());
if (changes == ApplyChanges{}) {
Ui::Toast::Show(tr::ayu_FiltersToastFailImport(tr::now));
Ui::Toast::Show(tr::ayu_FiltersToastFailNoChanges(tr::now));
LOG(("FilterUtils: received empty changes"));
return false;
}
@@ -278,7 +279,7 @@ int typeOfMessage(const HistoryItem *item) {
if (media->giveawayResults()) {
return 28; // TYPE_GIVEAWAY_RESULTS
}
if (const auto dice = dynamic_cast<Data::MediaDice*>(media)) {
if (dynamic_cast<Data::MediaDice*>(media)) {
return 15; // TYPE_ANIMATED_STICKER
}
if (media->photo()) {
@@ -26,7 +26,7 @@ struct ApplyChanges
std::map<long long, QString> peersToBeResolved;
auto operator<=>(const ApplyChanges&) const = default;
bool operator==(const ApplyChanges&) const = default;
};
@@ -38,8 +38,7 @@ bool isForwarding(const PeerId &id) {
return state.state != ForwardState::State::Finished
&& state.currentChunk < state.totalChunks
&& !state.stopRequested
&& state.totalChunks
&& state.totalMessages;
&& ((state.totalChunks && state.totalMessages) || state.state == ForwardState::State::Downloading);
}
return false;
}
@@ -85,7 +84,7 @@ std::pair<QString, QString> stateName(const PeerId &id) {
if (state->state == ForwardState::State::Preparing) {
status = tr::ayu_AyuForwardStatusPreparing(tr::now);
} else if (state->state == ForwardState::State::Downloading) {
status = tr::ayu_AyuForwardStatusLoadingMedia(tr::now);
return std::make_pair(tr::ayu_AyuForwardStatusLoadingMedia(tr::now), "");
} else if (state->state == ForwardState::State::Sending) {
status = tr::ayu_AyuForwardStatusForwarding(tr::now);
} else {
@@ -367,6 +366,7 @@ void forwardMessages(
}
auto message = Api::MessageToSend(Api::SendAction(session->data().history(peer->id)));
message.action.options.invertCaption = item->invertMedia();
message.action.replyTo = action.replyTo;
if (draft.options != Data::ForwardOptions::NoNamesAndCaptions) {
@@ -399,9 +399,9 @@ void forwardMessages(
auto &file = preparedMedia.files[j];
QFile f(file.path);
if (groupMedia[j]->photo() && f.size() < groupMedia[j]->photo()->imageByteSize(Data::PhotoSize::Large)
||
groupMedia[j]->document() && f.size() < groupMedia[j]->document()->size
if (
(groupMedia[j]->photo() && f.size() < groupMedia[j]->photo()->imageByteSize(Data::PhotoSize::Large)) ||
(groupMedia[j]->document() && f.size() < groupMedia[j]->document()->size)
) {
preparedMedia.files.erase(preparedMedia.files.begin() + j);
}
@@ -21,37 +21,6 @@
#include "storage/file_download_mtproto.h"
#include "storage/localimageloader.h"
class TimedCountDownLatch
{
public:
explicit TimedCountDownLatch(int count)
: count_(count) {
}
void countDown() {
std::unique_lock lock(mutex_);
if (count_ > 0) {
count_--;
}
if (count_ == 0) {
cv_.notify_all();
}
}
bool await(std::chrono::milliseconds timeout) {
std::unique_lock lock(mutex_);
if (count_ == 0) {
return true;
}
return cv_.wait_for(lock, timeout, [this] { return count_ == 0; });
}
private:
std::mutex mutex_;
std::condition_variable cv_;
int count_;
};
namespace AyuSync {
QString pathForSave(not_null<Main::Session*> session) {
@@ -85,6 +54,16 @@ QString filePath(not_null<Main::Session*> session, const Data::Media *media) {
return pathForSave(session) + "round_" + QString::number(document->getDC()) + "_" +
QString::number(document->id) + ".mp4";
}
// media without any file name
if (document->isGifv()) {
return pathForSave(session) + "gif_" + QString::number(document->getDC()) + "_" +
QString::number(document->id) + ".gif";
}
if (document->isVideoFile()) {
return pathForSave(session) + "video_" + QString::number(document->getDC()) + "_" +
QString::number(document->id) + ".mp4";
}
} else if (const auto photo = media->photo()) {
return pathForSave(session) + QString::number(photo->getDC()) + "_" + QString::number(photo->id) + ".jpg";
}
@@ -140,9 +119,8 @@ void loadDocumentSync(not_null<Main::Session*> session, DocumentData *data, not_
{
data->save(Data::FileOriginMessage(item->fullId()), path);
rpl::single() | rpl::then(
session->downloaderTaskFinished()
) | rpl::filter([&]
session->downloaderTaskFinished() | rpl::filter([&]
{
return data->status == FileDownloadFailed || fileSize(item) == data->size;
}) | rpl::start_with_next([&]() mutable
@@ -290,13 +268,13 @@ void sendDocumentSync(not_null<Main::Session*> session,
SendMediaType type,
TextWithTags &&caption,
const Api::SendAction &action) {
auto groupId = std::make_shared<SendingAlbum>();
groupId->groupId = base::RandomValue<uint64>();
crl::on_main([=, lst = std::move(group.list), caption = std::move(caption)]() mutable
{
session->api().sendFiles(std::move(lst), type, std::move(caption), groupId, action);
auto size = lst.files.size();
session->api().sendFiles(std::move(lst), type, std::move(caption), size > 1 ? groupId : nullptr, action);
});
waitForMsgSync(session, action);
@@ -27,7 +27,7 @@ namespace Ayu::Translator {
TranslateManager::Builder::Builder(
TranslateManager &manager,
Main::Session &session,
Main::Session *session,
const MTPflags<MTPmessages_translateText::Flags> &flags,
const MTPInputPeer &peer,
const MTPVector<MTPint> &id,
@@ -35,7 +35,7 @@ TranslateManager::Builder::Builder(
const MTPstring &to_lang
)
: _manager(&manager)
, _session(&session)
, _session(session)
, _flags(flags)
, _peer(peer)
, _idList(id)
@@ -43,12 +43,12 @@ TranslateManager::Builder::Builder(
, _toLang(to_lang) {
}
TranslateManager::Builder &TranslateManager::Builder::done(std::function < void(const Result &) > cb) {
TranslateManager::Builder &TranslateManager::Builder::done(std::function<void(const Result &)> cb) {
_done = std::move(cb);
return *this;
}
TranslateManager::Builder &TranslateManager::Builder::fail(std::function < void(const MTP::Error &) > cb) {
TranslateManager::Builder &TranslateManager::Builder::fail(std::function<void(const MTP::Error &)> cb) {
_fail = std::move(cb);
return *this;
}
@@ -73,7 +73,7 @@ void TranslateManager::Builder::cancel() {
}
TranslateManager::Builder TranslateManager::request(
Main::Session &session,
Main::Session *session,
const MTPflags<MTPmessages_translateText::Flags> &flags,
const MTPInputPeer &peer,
const MTPVector<MTPint> &id,
@@ -242,7 +242,8 @@ bool TranslateManager::cancel(mtpRequestId requestId) {
if (it->second.cancel) {
it->second.cancel();
}
_pending.erase(it);
// already erased by `triggerFail`
// _pending.erase(it);
return true;
}
@@ -329,4 +330,4 @@ void TranslateManager::removeLeastRecentlyUsed() {
_cacheList.pop_back();
}
}
}
@@ -34,7 +34,7 @@ public:
public:
Builder(
TranslateManager &manager,
Main::Session &session,
Main::Session *session,
const MTPflags<MTPmessages_translateText::Flags> &flags,
const MTPInputPeer &peer,
const MTPVector<MTPint> &id,
@@ -52,7 +52,7 @@ public:
mtpRequestId send();
void cancel();
[[nodiscard]] const auto &session() const { return _session; }
[[nodiscard]] auto *session() const { return _session; }
[[nodiscard]] const auto &flags() const { return _flags; }
[[nodiscard]] const auto &peer() const { return _peer; }
[[nodiscard]] const auto &ids() const { return _idList; }
@@ -61,7 +61,7 @@ public:
private:
TranslateManager *_manager = nullptr;
not_null<Main::Session*> _session;
Main::Session* _session;
mtpRequestId _id = 0;
MTPflags<MTPmessages_translateText::Flags> _flags;
@@ -80,7 +80,7 @@ public:
~TranslateManager() = default;
Builder request(
Main::Session &session,
Main::Session *session,
const MTPflags<MTPmessages_translateText::Flags> &flags,
const MTPInputPeer &peer,
const MTPVector<MTPint> &id,
@@ -4,8 +4,6 @@
// but be respectful and credit the original author.
//
// Copyright @Radolyn, 2025
#pragma once
#include <QtCore/QJsonArray>
#include <QtCore/QJsonDocument>
#include <QtCore/QJsonObject>
@@ -8,17 +8,60 @@
#include <memory>
#include <QtCore/QJsonArray>
#include <QtCore/QJsonDocument>
#include <QtCore/QJsonObject>
#include <QtCore/QJsonValue>
#include <QtCore/QPointer>
#include <QtCore/QStringList>
#include <QtCore/QTimer>
#include <QtNetwork/QNetworkRequest>
#include <QtNetwork/QNetworkReply>
#include <QtCore/QUrl>
#include <QtCore/QUrlQuery>
#include <QtGui/QTextDocument>
#include "ayu/features/translator/html_parser.h"
namespace Ayu::Translator {
namespace {
constexpr auto kGoogleTranslateUrl = "https://translate-pa.googleapis.com/v1/translateHtml";
constexpr auto kGoogleContentType = "application/json+protobuf";
constexpr auto kGoogleDefaultApiKey = "AIzaSyATBXajvzQLTDHEQbcpq0Ihe0vWDHmO520";
QString decodeHtmlEntities(const QString &text) {
QTextDocument doc;
doc.setHtml(text);
return doc.toPlainText();
}
QStringList collectStrings(const QJsonValue &value) {
QStringList result;
if (value.isString()) {
result.push_back(value.toString());
return result;
}
if (value.isArray()) {
const auto arr = value.toArray();
for (const auto &item : arr) {
result.append(collectStrings(item));
}
return result;
}
if (value.isObject()) {
const auto obj = value.toObject();
if (obj.contains(QStringLiteral("text"))) {
result.append(collectStrings(obj.value(QStringLiteral("text"))));
}
if (obj.contains(QStringLiteral("trans"))) {
result.append(collectStrings(obj.value(QStringLiteral("trans"))));
}
}
return result;
}
} // namespace
GoogleTranslator &GoogleTranslator::instance() {
static GoogleTranslator inst;
return inst;
@@ -45,24 +88,29 @@ QPointer<QNetworkReply> GoogleTranslator::startSingleTranslation(
const auto from = fromLang.trimmed().isEmpty() ? QStringLiteral("auto") : fromLang.trimmed();
const auto to = toLang.trimmed();
QUrl url(QStringLiteral("https://translate.googleapis.com/translate_a/single"));
QUrlQuery query;
query.addQueryItem(QStringLiteral("dj"), QStringLiteral("1"));
query.addQueryItem(QStringLiteral("q"), shouldWrapInHtml() ? Html::entitiesToHtml(text) : text.text);
query.addQueryItem(QStringLiteral("sl"), from);
query.addQueryItem(QStringLiteral("tl"), to);
query.addQueryItem(QStringLiteral("ie"), QStringLiteral("UTF-8"));
query.addQueryItem(QStringLiteral("oe"), QStringLiteral("UTF-8"));
query.addQueryItem(QStringLiteral("client"), QStringLiteral("at"));
query.addQueryItem(QStringLiteral("dt"), QStringLiteral("t"));
query.addQueryItem(QStringLiteral("otf"), QStringLiteral("2"));
url.setQuery(query);
auto textToTranslate = text.text;
textToTranslate = textToTranslate.replace(qsl("\n"), qsl("<br>"));
QNetworkRequest req(url);
const auto preparedText = textToTranslate;
QJsonArray requestRoot;
QJsonArray requestPayload;
QJsonArray requestText;
requestText.append(preparedText);
requestPayload.append(requestText);
requestPayload.append(from);
requestPayload.append(to);
requestRoot.append(requestPayload);
requestRoot.append(QStringLiteral("wt_lib"));
const auto body = QJsonDocument(requestRoot).toJson(QJsonDocument::Compact);
QNetworkRequest req(QUrl(QString::fromLatin1(kGoogleTranslateUrl)));
const auto userAgent = randomDesktopUserAgent();
req.setHeader(QNetworkRequest::UserAgentHeader, userAgent);
req.setHeader(QNetworkRequest::ContentTypeHeader, QString::fromLatin1(kGoogleContentType));
req.setRawHeader(QByteArrayLiteral("Accept"), QByteArrayLiteral("application/json"));
req.setRawHeader(QByteArrayLiteral("X-Goog-Api-Key"), QByteArray(kGoogleDefaultApiKey));
QPointer<QNetworkReply> reply = _nam.get(req);
QPointer<QNetworkReply> reply = _nam.post(req, body);
auto timer = new QTimer(reply);
timer->setSingleShot(true);
@@ -92,15 +140,27 @@ QPointer<QNetworkReply> GoogleTranslator::startSingleTranslation(
return;
}
const auto body = reply->readAll();
bool ok = false;
const auto textOut = parseJsonPath(body, QStringLiteral("sentences"), &ok);
if (!ok) {
QJsonParseError parseError{};
const auto doc = QJsonDocument::fromJson(body, &parseError);
if (parseError.error != QJsonParseError::NoError || !doc.isArray()) {
if (onFail) onFail();
return;
}
const auto root = doc.array();
if (root.isEmpty()) {
if (onFail) onFail();
return;
}
const auto translatedItems = collectStrings(root.at(0));
const auto textOutCombined = translatedItems.join(QStringLiteral(" "));
if (textOutCombined.trimmed().isEmpty()) {
if (onFail) onFail();
return;
}
const auto decodedText = decodeHtmlEntities(textOutCombined);
if (onSuccess) onSuccess(shouldWrapInHtml()
? Html::htmlToEntities(textOut)
: TextWithEntities{textOut});
? Html::htmlToEntities(decodedText)
: TextWithEntities{decodedText});
});
return reply;
+64 -12
View File
@@ -5,11 +5,16 @@
//
// Copyright @Radolyn, 2025
#include "ayu_logo.h"
#include <QSvgRenderer>
#include "ayu/ayu_settings.h"
#include "styles/style_ayu_styles.h"
#include "ui/rect.h"
static QString LAST_LOADED_NAME;
static QImage LAST_LOADED;
static QImage LAST_LOADED_NO_MARGIN;
static QImage LAST_LOADED_PAD;
namespace AyuAssets {
@@ -29,22 +34,69 @@ void loadAppIco() {
QFile::copy(qsl(":/gui/art/ayu/%1/app_icon.ico").arg(settings.appIcon), tempIconPath);
}
QImage CreateImage(const QString &name, const QSize resultImageSize, const int padding = 0) {
const auto iconSize = resultImageSize.shrunkBy(QMargins(padding, padding, padding, padding));
const auto pngPath = qsl(":/gui/art/ayu/%1/app.png").arg(name);
if (QFile::exists(pngPath)) {
const auto loaded = QImage(pngPath).scaled(iconSize, Qt::KeepAspectRatio, Qt::SmoothTransformation);
auto res = QImage(
resultImageSize * style::DevicePixelRatio(),
QImage::Format_ARGB32_Premultiplied);
res.setDevicePixelRatio(style::DevicePixelRatio());
res.fill(Qt::transparent);
{
auto p = QPainter(&res);
p.drawImage(QRect(padding, padding, iconSize.width(), iconSize.height()), loaded);
}
return res;
}
const auto svgPath = qsl(":/gui/art/ayu/%1/app.svg").arg(name);
if (!QFile::exists(svgPath)) {
return {};
}
auto svg = QSvgRenderer(svgPath);
auto image = QImage(
resultImageSize * style::DevicePixelRatio(),
QImage::Format_ARGB32_Premultiplied);
image.setDevicePixelRatio(style::DevicePixelRatio());
image.fill(Qt::transparent);
{
auto p = QPainter(&image);
QPainterPath path;
path.addRoundedRect(
QRect(padding, padding, iconSize.width(), iconSize.height()),
iconSize.width() / 2.0f,
iconSize.height() / 2.0f
);
p.save();
p.setRenderHint(QPainter::Antialiasing, true);
p.setClipPath(path);
p.setRenderHint(QPainter::Antialiasing, false);
svg.render(&p, QRect(padding, padding, iconSize.width(), iconSize.height()));
p.restore();
}
return image;
}
void loadIcons() {
const auto &settings = AyuSettings::getInstance();
if (LAST_LOADED_NAME != settings.appIcon) {
LAST_LOADED_NAME = settings.appIcon;
#ifdef Q_OS_MAC
LAST_LOADED = QImage(qsl(":/gui/art/ayu/%1/app_macos.png").arg(settings.appIcon));
#else
LAST_LOADED = QImage(qsl(":/gui/art/ayu/%1/app.png").arg(settings.appIcon));
#endif
LAST_LOADED_NO_MARGIN = QImage(qsl(":/gui/art/ayu/%1/app_preview.png").arg(settings.appIcon));
LAST_LOADED = CreateImage(settings.appIcon, Size(256));
LAST_LOADED_PAD = CreateImage(settings.appIcon, Size(256), 12);
}
}
QImage loadPreview(const QString& name) {
return QImage(qsl(":/gui/art/ayu/%1/app_preview.png").arg(name));
QImage loadPreview(const QString &name) {
return CreateImage(name, Size(st::cpIconSize), st::cpImagePadding);
}
QString currentAppLogoName() {
@@ -56,9 +108,9 @@ QImage currentAppLogo() {
return LAST_LOADED;
}
QImage currentAppLogoNoMargin() {
QImage currentAppLogoPad() {
loadIcons();
return LAST_LOADED_NO_MARGIN;
return LAST_LOADED_PAD;
}
}
+1 -2
View File
@@ -11,7 +11,6 @@
namespace AyuAssets {
ICON(DEFAULT, "default");
ICON(DEFAULT_MACOS, "macos");
ICON(ALT, "alt");
ICON(DISCORD, "discord");
ICON(SPOTIFY, "spotify");
@@ -30,6 +29,6 @@ QImage loadPreview(const QString& name);
QString currentAppLogoName();
QImage currentAppLogo();
QImage currentAppLogoNoMargin();
QImage currentAppLogoPad();
}
+1 -1
View File
@@ -63,7 +63,7 @@ topBarRecentActions: IconButton {
}
exteraBadgeToast: Toast(defaultToast) {
minWidth: msgMinWidth;
minWidth: 40px;
maxWidth: 480px;
padding: margins(54px, 13px, 19px, 12px);
icon: icon {{ "ayu/extera_badge", toastFg }};

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