Compare commits

..

657 Commits

Author SHA1 Message Date
John Preston
75fd2d0257 Version 1.7.13.
- Send ultra-lightweight high-quality animated stickers
to express emotion with motion.
- Receive animated stickers instantly on any connection
at just 20-30 KB per sticker.
- Enjoy smooth animations at 60 frames per second.
- Create new animated sets and upload them to @stickers
for everybody to use.
- Try out these sample stickers: t.me/addstickers/hotcherry
- Use strikethrough and underline formatting.
2019-07-06 15:27:31 +02:00
John Preston
4e595d5cef Fix GIFs preview. 2019-07-06 15:24:23 +02:00
23rd
8486ad368e Fixed restrictions for channels.
- Regression was introduced in 567bf60644.
2019-07-06 10:58:10 +03:00
John Preston
ae075e9b90 Beta version 1.7.12: Fix build for old OS X. 2019-07-05 23:13:31 +02:00
John Preston
86d7143d94 Beta version 1.7.12.
- Bug fixes and other minor improvements.
2019-07-05 22:55:09 +02:00
John Preston
4e52da91c7 Fix animation stopping in chat. 2019-07-05 19:47:40 +02:00
John Preston
198de85ce5 Limit to 30 FPS in small stickers. 2019-07-05 19:15:25 +02:00
John Preston
72a9d61b97 Fix glitches on macOS stickers. 2019-07-05 18:13:27 +02:00
John Preston
96a26b44a9 Fix build for Xcode. 2019-07-05 17:08:33 +02:00
John Preston
f19ff1f9b2 Correctly start lottie animations. 2019-07-05 16:43:21 +02:00
John Preston
4bd0683e91 Guard UpdateRequest handling. 2019-07-05 16:29:02 +02:00
John Preston
567bf60644 Use getters in MTP classes. 2019-07-05 16:23:07 +02:00
John Preston
3ca28c0cf9 Fix crash in unsupported message with buttons.
Fixes #6212.
2019-07-05 09:42:51 +02:00
John Preston
4a12e9798a Beta version 1.7.11.
- Use strikethrough and underline formatting.
- Bug fixes and other minor improvements.
2019-07-04 17:27:30 +02:00
John Preston
5c6515febb Fix strike-through text font selection. 2019-07-04 17:27:18 +02:00
23rd
ca5fee6db9 Added issue templates for feature requests and questions. 2019-07-04 16:41:46 +02:00
23rd
4ac3aef600 Added ability to cancel reply with Ctrl + Arrow Down.
- Fixed #4636.
2019-07-04 16:41:46 +02:00
23rd
1963fca7d3 Fixed media overlay closing with Back mouse button.
- Fixed #2998.
2019-07-04 16:41:46 +02:00
23rd
5e233dab47 Fixed height of thumb in EditCaptionBox when media changes to photo. 2019-07-04 16:41:46 +02:00
23rd
cf8a06302f Fixed position of unread mentions button when field changes height. 2019-07-04 16:41:46 +02:00
23rd
9c9ea8c2c0 Added ability to change order of pinned dialogs from touchbar. 2019-07-04 16:41:03 +02:00
23rd
bb9e6e7b5f Added ability to display media preview from touchbar. 2019-07-04 16:28:58 +02:00
23rd
7c98f64cdb Slightly refactored display of media preview.
- Removed showMediaPreview from facades.
2019-07-04 16:28:58 +02:00
23rd
da6baeb1a7 Added notifier of archiving pinned dialog to update touchbar. 2019-07-04 16:27:33 +02:00
23rd
26569683ca Refactored pinned buttons in touchbar. 2019-07-04 16:27:33 +02:00
23rd
821bd3c65b Added buttons for Underline and Strike-through text to touchbar. 2019-07-04 16:27:33 +02:00
John Preston
2d62c9b083 Prefer animated stickers in suggestion by emoji. 2019-07-04 16:26:53 +02:00
John Preston
9d09cee1cc Unblock bots without restarting from Settings. 2019-07-04 16:26:53 +02:00
John Preston
0e964b06dc Hook main queue processing to update requests. 2019-07-04 16:26:13 +02:00
John Preston
b1807938ad Remove legacy langpacks. 2019-07-04 14:25:16 +02:00
John Preston
b96b801b22 Disable ownership transfer to myself. 2019-07-04 14:02:25 +02:00
John Preston
58d4b763b6 Allow 6-digit support phone numbers. 2019-07-04 14:00:40 +02:00
John Preston
f1518af8b3 Mark mentions as read on reply-from-notification. 2019-07-04 13:56:28 +02:00
John Preston
d228495550 Allow replacing emoji by Tab in support mode. 2019-07-04 13:26:39 +02:00
John Preston
226ca6d117 Clear 'Cancelled' flag on download start.
Fixes #6123.
2019-07-04 13:21:43 +02:00
John Preston
556f36ba7e Fix transparent animated GIFs. 2019-07-04 13:12:58 +02:00
John Preston
c8b61366d3 Fix blurred document thumbnails. 2019-07-04 12:22:07 +02:00
John Preston
729da4a6b4 Move 'Add to contacts' button up in Info. 2019-07-04 12:21:52 +02:00
John Preston
dd38da7737 Allow markdown to intersect with previewed links. 2019-07-04 11:51:41 +02:00
John Preston
306b87dd39 Disable double click reply in a created group. 2019-07-04 11:37:05 +02:00
John Preston
826d229c1a Clear 'Find in Files' search by lang key results. 2019-07-04 11:36:27 +02:00
John Preston
89fb121caf Show URL tooltip in inline bot results. 2019-07-04 11:23:39 +02:00
John Preston
d479442a63 Fix local thumbnail saving for stickers. 2019-07-04 11:04:12 +02:00
John Preston
10ee81f466 Copy shared contact number from the context menu.
Fixes #6147.
2019-07-04 10:36:48 +02:00
John Preston
0a63eac4f6 Generate good thumbnail for animated stickers. 2019-07-04 10:20:36 +02:00
John Preston
7034df49e9 Fix sending of .tgs stickers. 2019-07-03 13:03:01 +02:00
John Preston
da48a78f7c Revert "Hide new formatting for now."
This reverts commit 99aa1fc556.
2019-07-03 12:08:28 +02:00
John Preston
0109ee2758 Fix build for Linux. 2019-07-03 00:20:59 +02:00
John Preston
ae152d28be Closed alpha version 1.7.10.1. 2019-07-02 22:42:00 +02:00
John Preston
dd1bca1769 Remove profiling logs. 2019-07-02 22:40:10 +02:00
John Preston
a4fbbc06d1 Use Lottie::MultiPlayer in StickerSetBox. 2019-07-02 22:38:23 +02:00
John Preston
0dd1b4eae6 Support animated stickers in suggestions. 2019-07-02 17:21:52 +02:00
John Preston
848ea16eef Support animated stickers in inline results. 2019-07-02 15:46:26 +02:00
John Preston
76630528f7 Show animated thumbnails in sets box. 2019-07-02 15:20:04 +02:00
John Preston
3b645422ff Implement animated stickerset thumbnails. 2019-07-02 14:43:17 +02:00
John Preston
db2d24ff32 Clear lottie on panel hide. 2019-07-01 17:57:40 +02:00
John Preston
a10b91fe1a Don't load bad image infinitely. 2019-07-01 17:57:40 +02:00
John Preston
ead212f31b Fix lottie caching. 2019-07-01 17:57:40 +02:00
John Preston
37689affc5 Clear far enough animated sticker sets. 2019-07-01 17:57:39 +02:00
John Preston
5375e7958c Implement pause/unpause for Lottie::MultiPlayer. 2019-07-01 17:57:39 +02:00
John Preston
1da5d1c64f Fix multi player with same frame rates. 2019-07-01 17:57:39 +02:00
John Preston
f6bfbbb805 Add some profiling logs to lottie player. 2019-07-01 17:57:39 +02:00
John Preston
2c461b9df3 Remove profiling logs. 2019-07-01 17:57:39 +02:00
John Preston
53a3d0038c Fix build for Xcode. 2019-07-01 17:57:38 +02:00
John Preston
ad1816cb7c Use Lottie::MultiPlayer in StickersListWidget. 2019-07-01 17:57:38 +02:00
John Preston
09c9f4ef9a Implement Lottie::MultiPlayer. 2019-07-01 17:57:38 +02:00
John Preston
cbffeca8d5 Extract some Lottie::Animation code to Lottie::Player. 2019-07-01 17:57:37 +02:00
John Preston
4a7b5a8e01 Fix caching for large sticker area. 2019-07-01 17:57:37 +02:00
John Preston
808583c5ae Store cached frames in media local cache. 2019-07-01 17:57:37 +02:00
John Preston
5628c1eee6 Encode cached frames to YUV420P. 2019-07-01 17:57:36 +02:00
John Preston
0b8aa880e5 Decide if we XOR frames for each frame. 2019-07-01 17:57:36 +02:00
John Preston
059a24bcdf Use lz4 compression for cached frames. 2019-07-01 17:57:36 +02:00
John Preston
df8625345b Add lz4 as a submodule. 2019-07-01 17:57:35 +02:00
John Preston
a026aec786 Trivial in-memory frame caching. 2019-07-01 17:57:35 +02:00
John Preston
56e137b20f Move some common code to lib_ffmpeg. 2019-07-01 17:57:35 +02:00
John Preston
10772f4ac5 Started Lottie::CacheState class. 2019-07-01 17:57:34 +02:00
John Preston
35bc2cc2a5 Prepare lottie animations caching. 2019-07-01 17:57:34 +02:00
John Preston
f20d9395d1 Unpack lottie gzip to std::string for rlottie. 2019-07-01 17:57:34 +02:00
John Preston
aa3a079853 Remove QtLottie and rapidjson. 2019-07-01 17:57:34 +02:00
John Preston
e43fcc0e5f rlottie: Fix build for macOS with static Qt. 2019-07-01 17:57:33 +02:00
John Preston
b10e6b3508 Render animated stickers using rlottie. 2019-07-01 17:57:33 +02:00
John Preston
b36f7dfdb1 Build rlottie as a dependency. 2019-07-01 17:57:33 +02:00
John Preston
f08d913175 Add rlottie submodule. 2019-07-01 17:57:33 +02:00
John Preston
21dfb310f3 Optimize animated sticker preview. 2019-07-01 17:57:32 +02:00
John Preston
0d6ee3929d Show animated stickers in the panel. 2019-07-01 17:57:32 +02:00
John Preston
040cae6a9a Show animated sticker preview. 2019-07-01 17:57:32 +02:00
John Preston
8f3f898c47 Show animated stickers in StickerSetBox. 2019-07-01 17:57:32 +02:00
John Preston
10910588a0 Update API scheme to layer 103. 2019-07-01 17:57:31 +02:00
John Preston
adf5c8ec71 Version 1.7.10: Fix group location display. 2019-06-24 15:31:23 +02:00
John Preston
f77b11975b Version 1.7.10: Ownership transfer flood errors. 2019-06-24 15:14:32 +02:00
John Preston
84aaec30a1 Version 1.7.10: Ownership transfer in admin log. 2019-06-24 15:08:19 +02:00
John Preston
764490b4a9 Version 1.7.10: Add share phone confirmation. 2019-06-24 14:49:53 +02:00
John Preston
022fb0c81b Version 1.7.10: Fix sticker set title.
Fixes #6169.
2019-06-24 14:32:43 +02:00
John Preston
d5497c3105 Version 1.7.10: Don't load OpenSSL config on Win. 2019-06-24 14:23:08 +02:00
John Preston
09162e6f19 Version 1.7.10.
- Bug fixes and other minor improvements.
2019-06-24 14:16:19 +02:00
John Preston
f46189041c Use non-installed OpenSSL in Windows. 2019-06-24 13:43:42 +02:00
John Preston
7c2f114330 Force OpenSSL not loading local config. 2019-06-24 12:49:37 +02:00
John Preston
a04247a893 Show archive2mainmenu tooltip for 5 seconds. 2019-06-24 11:14:19 +02:00
John Preston
3a8a74f063 QtLottie: Fix easing curve segment selection. 2019-06-24 11:09:00 +02:00
John Preston
9c85d58235 Fix crash in closing export panel. 2019-06-24 10:59:21 +02:00
John Preston
e5cfa3fdc9 Fix adding to contacts + closing box crash.
Regression was introduced in b9d1d8519c.
2019-06-24 10:07:32 +02:00
John Preston
5c49701603 Fix 2SV setup.
Regression was introduced in 0dddb7694f.
2019-06-24 09:55:12 +02:00
John Preston
978a4ac0ad Version 1.7.9.
- You can now add any users to your contacts,
even if their phone numbers are not visible.
- Transfer ownership of group chats and channels
by granting full rights to another admin.
Useful when switching jobs or if you just want to retire as creator.
- Hide archived chats to the main menu.
- See who is online straight from the chat list.
- Use the MacBook Pro TouchBar to apply formatting to selected text,
insert emoji, and send stickers.
2019-06-23 16:49:31 +02:00
John Preston
8a7980ca7b Fix build for old OS X versions. 2019-06-23 16:49:21 +02:00
John Preston
29532f8232 Remove GPL and GitHub from translations. 2019-06-23 16:43:43 +02:00
23rd
ee4501810c Added restriction info of posting stickers to touchbar. 2019-06-23 16:36:22 +02:00
John Preston
99aa1fc556 Hide new formatting for now. 2019-06-23 16:10:53 +02:00
John Preston
8741266819 Add support for Underline and Strike-through text. 2019-06-23 15:40:59 +02:00
John Preston
d864ebd695 Fix private channel phrase in Discuss. 2019-06-23 14:34:48 +02:00
John Preston
352839337d Add SCAM badge for users and channels. 2019-06-23 14:18:33 +02:00
John Preston
88b7387a40 Closed alpha version 1.7.8.1: Fix build for Xcode. 2019-06-22 22:42:30 +02:00
John Preston
d0cf39f8ed Closed alpha version 1.7.8.1. 2019-06-22 22:13:06 +02:00
23rd
d57b8d2ec7 Added preload of stickers in touchbar. 2019-06-22 22:13:06 +02:00
23rd
8de3826c9e Disabled posting stickers with touchbar in groups with restrictions. 2019-06-22 22:13:06 +02:00
23rd
3ea0247a3e Slightly refactored touchbar. 2019-06-22 22:13:06 +02:00
23rd
bebf58ea8d Fixed display of online badge in pinned Saved Messages in touchbar.
- Fixed #6162.
2019-06-22 22:13:06 +02:00
23rd
7489f2297f Fixed title of favorite stickers in touchbar. 2019-06-22 22:13:06 +02:00
23rd
c7526ae1cd Fixed title of recently used emoji in touchbar.
- Added "No found" title if sticker list is empty.
2019-06-22 22:13:06 +02:00
23rd
07a063e19e Refactored formatter buttons in touchbar. 2019-06-22 22:13:06 +02:00
23rd
3727c8c865 Grouped sticker and emoji buttons in touchbar. 2019-06-22 22:13:06 +02:00
23rd
662d0d0764 Added emoji picker to touchbar.
- Added independent size of emoji for touchbar.
 - Added rpl::event_stream for recent emoji updates.
2019-06-22 22:13:06 +02:00
23rd
dcba07b9b7 Added sticker picker to touchbar. 2019-06-22 22:13:06 +02:00
John Preston
a4d83b679a Allow searching USA by 'United States'. 2019-06-22 22:12:47 +02:00
John Preston
dc102bd9e8 Finish working with localstorage before ~AuthSession. 2019-06-22 12:36:35 +02:00
23rd
f877bf7a46 Fixed display of views count. 2019-06-22 11:53:23 +02:00
John Preston
a0171cb144 Fix crash in MainWindow destruction. 2019-06-22 11:52:41 +02:00
John Preston
7d585ab72f Handle located groups as public. 2019-06-21 14:27:46 +02:00
John Preston
6537e524b8 Fix build for GCC. 2019-06-21 11:06:52 +02:00
John Preston
4917ca7b32 Remove all legacy global namespace langs. 2019-06-21 11:06:52 +02:00
John Preston
edcd09c29f Remove LangKey. 2019-06-21 11:06:51 +02:00
John Preston
87fc066e67 Use tr:: instead of lang(). 2019-06-21 11:06:51 +02:00
John Preston
d3ca6b96a1 Use tr:: instead of __generic. 2019-06-21 11:06:50 +02:00
John Preston
52e40cbc6e Improve non-authed language switch. 2019-06-21 11:06:50 +02:00
John Preston
a7c8feaecb Use tr:: instead of langFactory and __rich. 2019-06-21 11:06:50 +02:00
John Preston
d1d98c3bb1 Use tr:: instead of langFactory in box titles. 2019-06-21 11:06:50 +02:00
John Preston
8ed433cc01 Use tr:: instead of langFactory in input fields. 2019-06-21 11:06:49 +02:00
John Preston
7af0dd105e Use tr:: instead of Lang::Viewer. 2019-06-21 11:06:49 +02:00
John Preston
f35085800a Fix build in GCC. 2019-06-21 11:06:49 +02:00
John Preston
366413a0a6 Fix build in Xcode. 2019-06-21 11:06:48 +02:00
John Preston
faa42110ac Remove Info::Profile::ToUpperValue. 2019-06-21 11:06:48 +02:00
John Preston
87cb0ada98 Allow skipping archive results in messages search. 2019-06-21 11:06:48 +02:00
John Preston
6a1abe8767 Add transfer ownership description box. 2019-06-21 11:06:48 +02:00
John Preston
7f96a185cf Add rpl interface for Lang in tr:: namespace. 2019-06-21 11:06:48 +02:00
John Preston
91c57f2035 Support intersecting links with entities. 2019-06-21 11:06:48 +02:00
John Preston
522e66b2db Make Ui::Text::Parser methods non-inclass. 2019-06-21 11:06:48 +02:00
John Preston
2d10e3e432 Show toast notification on ownership transfer. 2019-06-21 11:06:47 +02:00
John Preston
d23fd3559a Refresh participants after transfer. 2019-06-21 11:06:47 +02:00
John Preston
3c11eda611 Allow transfer of legacy groups. 2019-06-21 11:06:47 +02:00
John Preston
b9d1d8519c Use need_contacts_exception flag in add contact. 2019-06-21 11:06:47 +02:00
John Preston
8f3f072b50 Implement channel ownership transfer. 2019-06-21 11:06:47 +02:00
John Preston
a68a53d768 Prepare PasscodeBox for generic 2sv checking. 2019-06-21 11:06:47 +02:00
John Preston
0dddb7694f Show transfer community button, set 2sv password. 2019-06-21 11:06:47 +02:00
John Preston
ca7c50fbcd Remove pseudo-HTML from langpacks and Ui::Text::String. 2019-06-21 11:06:46 +02:00
John Preston
9066acd2dd Use new box for editing contact name. 2019-06-21 11:06:46 +02:00
John Preston
2162aa8df0 Rename Text to Ui::Text::String. 2019-06-21 11:06:46 +02:00
John Preston
e9677779b8 Show phone number only in the chat top bar. 2019-06-21 11:06:46 +02:00
John Preston
aca3ec0ab8 Implement block + clear from ContactStatus bar. 2019-06-21 11:06:46 +02:00
John Preston
3a34b15841 Add 'Share my phone number' click handler. 2019-06-21 11:06:45 +02:00
John Preston
08d4715ad6 Implement a new AddToContactBox. 2019-06-21 11:06:45 +02:00
John Preston
213a8d888a Implement report spam from ContactStatus bar. 2019-06-21 11:06:45 +02:00
John Preston
f49c7ba7ee Allow hiding contact status bar. 2019-06-21 11:06:45 +02:00
John Preston
984f19b1e9 Implement adaptive ContactStatus buttons. 2019-06-21 11:06:45 +02:00
John Preston
5e3734d7bf ReportSpamPanel -> HistoryView::ContactStatus. 2019-06-21 11:06:45 +02:00
John Preston
30dea3a2e7 Use isConstant bool instead of ContactStatus enum. 2019-06-21 11:06:45 +02:00
John Preston
14b82698f8 Update API scheme to layer 102. 2019-06-21 11:06:44 +02:00
John Preston
37df26fc34 QtLottie: Fix easing curve segment selection. 2019-06-19 15:16:59 +02:00
John Preston
42798d466f Fix crash in theme changing. 2019-06-19 15:16:59 +02:00
John Preston
9ca4f0975a Use 'ms' restriction tag for Windows Store build. 2019-06-18 15:45:09 +02:00
John Preston
26da5c5339 Beta version 1.7.8.
- Hide archived chats in the main menu.
- See who is online straight from the chat list.
- Apply formatting to selected text parts
from the MacBook Pro TouchBar.
2019-06-17 18:35:03 +02:00
John Preston
d0b86e1229 Optimize online dots + add animations. 2019-06-17 18:13:05 +02:00
John Preston
61c66994a2 Optimize online dot painting. 2019-06-17 16:33:28 +02:00
John Preston
034bee8fc3 Optimize Folder::paintUserpic. 2019-06-17 15:30:46 +02:00
23rd
734ecc070b Refactored skipping of rows in Dialogs::InnerWidget. 2019-06-17 15:30:46 +02:00
23rd
ece315f3c5 Added ability to move archive in main menu.
- Added Folder::paintUserpic overload for custom color.
 - Reduced size of _cloudButton.
2019-06-17 15:30:46 +02:00
23rd
484ecffb66 Slightly refactored touchbar. 2019-06-17 14:36:25 +02:00
23rd
77a216cbca Added online badges to touchbar. 2019-06-17 14:36:19 +02:00
23rd
d9426413dd Added online badges to chats list. 2019-06-17 14:36:14 +02:00
23rd
859cfe4cbb Added formatting buttons to touchbar. 2019-06-17 14:35:51 +02:00
23rd
d4976dda6c Migrated Appveyor CI build to VS2019. 2019-06-17 14:32:12 +02:00
John Preston
e7c40ff2a8 Return 'View info' to right-click menu. 2019-06-17 14:28:16 +02:00
John Preston
90ecec1d2e Add more assertions in online update. 2019-06-17 14:23:50 +02:00
John Preston
d9e93fb5cc Fix possible crash in auth session destruction. 2019-06-17 14:23:50 +02:00
John Preston
e7bdcc4155 Add more assertions to animations engine. 2019-06-17 14:23:50 +02:00
John Preston
fa3bf11a7f Fix possible crash in corrupt media files. 2019-06-17 14:23:50 +02:00
John Preston
3013301a91 Version 1.7.7.
- Download video files while watching them using streaming.
- Set EOL for Windows XP / Vista and OS X 10.6 to 10.9 at September 1.
2019-06-10 10:21:15 +02:00
John Preston
96acecc35b Remove newline in support mode message edit. 2019-06-08 18:19:20 +03:00
John Preston
f8d900d7fb Fix freezes in support mode message edit. 2019-06-08 18:19:20 +03:00
John Preston
ce760f0534 Comment out App type in SpecialConfigRequest. 2019-06-07 18:43:06 +03:00
John Preston
1225c9194a Fix window title on Windows 7.
Regression was introduced in dd68c7e90.

Fixes #6106.
2019-06-07 14:46:07 +03:00
John Preston
abfe685697 Beta version 1.7.6.
- Bug fixes and other minor improvements.
2019-06-06 16:08:46 +03:00
John Preston
37ff1bde31 QtLottie: Fix spatial property interpolation. 2019-06-06 16:04:10 +03:00
John Preston
b674003868 Fix build for Xcode. 2019-06-06 15:07:34 +03:00
John Preston
0868a9f7b9 Use Controller::account in MainWindow. 2019-06-06 14:59:00 +03:00
John Preston
1e861f79f0 Use range-v3 0.5.0 in instructions.
Fixes #6097.
2019-06-06 14:48:20 +03:00
23rd
ae3fae44b2 Fix build on macOS. 2019-06-06 14:21:31 +03:00
John Preston
dd68c7e90d Use Window::Controller to manage MainWindow. 2019-06-06 14:20:21 +03:00
John Preston
a547f80ae9 Rename Window::Controller to Window::SessionController. 2019-06-06 13:21:40 +03:00
John Preston
263bbf1788 Move _authSession to Main::Account. 2019-06-06 12:37:12 +03:00
John Preston
94c4ea6174 Access _authSession through activeAccount(). 2019-06-05 23:41:51 +03:00
John Preston
bd2e1ceb02 Wrap AuthSession in a new Main::Account object. 2019-06-05 22:47:54 +03:00
John Preston
8c67a4b991 Strip auto-hashtag in support mode message editing. 2019-06-05 21:40:21 +03:00
John Preston
126ffc8769 Show user profile from Removed Users. 2019-06-05 21:30:34 +03:00
John Preston
4379fa2297 Handle PHONE_NUMBER_BANNED in ChangePhoneBox. 2019-06-05 20:43:33 +03:00
John Preston
b9bd937aaa Treat url auth button as an url button. 2019-06-05 20:42:10 +03:00
John Preston
351ba3a912 Allow adding bots as admins when creating a channel. 2019-06-05 20:15:17 +03:00
John Preston
c2b2236e64 Show error-by-privacy in adding user as admin. 2019-06-05 19:47:08 +03:00
John Preston
6f4e31c9c3 Allow resending auth code in case of FLOOD_WAIT error. 2019-06-05 18:50:42 +03:00
John Preston
1290cda830 Fix theme preview layout. 2019-06-05 18:42:46 +03:00
John Preston
a27a80351a Fix clearing history with local messages. 2019-06-05 18:15:49 +03:00
John Preston
e53f4a5450 Close streamed video on Escape. 2019-06-05 17:54:12 +03:00
John Preston
65b949d36b Fix crash in lottie animations. 2019-06-05 17:49:12 +03:00
John Preston
a8d3951116 Beta version 1.7.5.
- Crash fix.
2019-06-05 15:15:50 +03:00
John Preston
f91e11efc9 Fix crash in absent file reading. 2019-06-05 14:27:33 +03:00
23rd
ed7a88ca17 Fixed display of update checking when autoupdate is toggled. 2019-06-05 01:09:31 +03:00
John Preston
dcdaee3db2 Beta version 1.7.4: Fix build for Xcode. 2019-06-04 21:13:47 +03:00
John Preston
c7b1683f6e Beta version 1.7.4: Use loadedInMediaCache for songs. 2019-06-04 18:59:26 +03:00
John Preston
961fd1dbab Beta version 1.7.4.
- Download video files while watching them using streaming.
- Set EOL for Windows XP / Vista and OS X 10.6 to 10.9 at September 1.
2019-06-04 18:59:05 +03:00
John Preston
2f963d7f12 Fix default broadcast notification settings. 2019-06-04 16:40:24 +03:00
John Preston
5be9ce0cf0 Update some icons. 2019-06-04 16:30:39 +03:00
John Preston
04e3b250e7 Keep track of fully cached media files. 2019-06-04 14:30:44 +03:00
John Preston
2255eb2c68 Show loaded till in playback slider. 2019-06-04 14:30:44 +03:00
John Preston
0ce5405eef Show download progress in playback controls. 2019-06-04 14:30:43 +03:00
John Preston
46d8d9f97a Remove CancelledFileLoader hack. 2019-06-04 14:30:43 +03:00
John Preston
274fed3cb0 Move several fields to bit flags in DocumentData. 2019-06-04 14:30:43 +03:00
John Preston
021ada5e9e Hide save button in media viewer when downloading. 2019-06-04 14:30:43 +03:00
John Preston
6f2a04e5ae Add ordering to file location types. 2019-06-04 14:30:43 +03:00
John Preston
eb438e35ee Remove old download priority arguments. 2019-06-04 14:30:43 +03:00
John Preston
b2895a39ed Register streaming loaders in Storage::Downloader. 2019-06-04 14:30:43 +03:00
John Preston
cca906d383 Use ready parts from loader in streaming. 2019-06-04 14:30:43 +03:00
John Preston
8704f6efd0 Use simple loader for non-streamable file types. 2019-06-04 14:30:43 +03:00
John Preston
e1114530ab Working code for streaming downloader. 2019-06-04 14:30:43 +03:00
John Preston
27018d94ee Load file parts even when not streaming. 2019-06-04 14:30:43 +03:00
John Preston
1ee4dac4f3 Parse cache entries async. 2019-06-04 14:30:43 +03:00
John Preston
fe15ee742d Track in Reader if it is used in streaming. 2019-06-04 14:30:43 +03:00
John Preston
ebf2a678b1 Use a special FileLoader for streamed documents. 2019-06-04 14:30:43 +03:00
John Preston
8c0cd9b9e9 Prepare Media::Streaming::Reader to be shared. 2019-06-04 14:30:43 +03:00
John Preston
8e15e71fd5 Set EOL for OS X 10.6-10.9 version at September 1. 2019-06-04 14:29:35 +03:00
John Preston
1fb529803e Add an 'Update your OS' top bar.
Set EOL for Windows XP / Vista version at September 1, 2019.
2019-06-04 14:28:13 +03:00
John Preston
3355e6da0c Use 0.5.0 version of range-v3. 2019-06-04 14:23:14 +03:00
John Preston
1331e7089e Try building snap version with GCC 8. 2019-06-04 14:23:14 +03:00
John Preston
9c613fe2f7 Move system versions to platform/platform_info. 2019-06-04 14:23:14 +03:00
23rd
0467401635 Fixed missing bracket in Qt patch. 2019-06-03 21:01:11 +03:00
John Preston
4fd6a85861 Add app manifest for Windows version. 2019-06-03 16:20:59 +03:00
John Preston
3d38abce97 Differentiate Windows Store and Mac Store. 2019-06-03 13:54:25 +03:00
John Preston
271d929ad6 Use VersionHelper API for Windows version. 2019-06-03 13:48:57 +03:00
paulkim3151
ef364e998f Enable to handle .pptx .xlsx .docx extensions 2019-06-03 13:48:49 +03:00
John Preston
53ba300d7e Version 1.7.3: Fix checkbox in url auth. 2019-06-01 12:44:13 +03:00
John Preston
caf1af8963 Version 1.7.3: Fix possible stack overflow. 2019-06-01 12:30:45 +03:00
John Preston
9fce11b672 Version 1.7.3.
- Bug fixes and other minor improvements.
2019-06-01 11:29:58 +03:00
John Preston
f7cb38c36a Allow admins to see the linked chat. 2019-06-01 11:27:05 +03:00
John Preston
d7ab7aed62 Fix crash in unlinking discussion group. 2019-06-01 11:13:40 +03:00
John Preston
ea61211a61 Version 1.7.2: Mix peer to grouped_id. 2019-06-01 00:51:57 +03:00
John Preston
c560f327cd Version 1.7.2: Update version in code. 2019-05-31 21:17:08 +03:00
John Preston
030b298a7d Version 1.7.2.
- Choose who can see your phone number with granular precision
in Privacy & Security settings.
- Add group chats to "Always/Never Share" exceptions for any privacy
setting. Permissions will update as users leave and join the groups.
- Connect a discussion group to your channel,
subscribers will see a "Discuss" button.
- Integrate bots seamlessly with web services.
For example, see t.me/DiscussThis/1
- Use TouchBar on MacBooks Pro to control music playback
and switch between pinned chats.
2019-05-31 21:15:55 +03:00
23rd
b45705f39d Returned render color theme in main menu when background is filled. 2019-05-31 21:10:53 +03:00
John Preston
9871184953 Fix discussion group unlinking. 2019-05-31 19:47:48 +03:00
John Preston
7f74084237 Update some more phrases. 2019-05-31 19:47:31 +03:00
John Preston
0fc1a40b42 Update phrases. 2019-05-31 16:02:53 +03:00
John Preston
45a6985df5 Force GTK file chooser only in the official builds. 2019-05-31 12:03:10 +03:00
John Preston
619aca04f9 Don't show report spam over the chat history. 2019-05-30 21:53:13 +03:00
John Preston
a968e112e8 Fix crash on invalid lottie file selection. 2019-05-30 18:09:44 +03:00
John Preston
325323e0b3 QtLottie: Fix assertion violation. 2019-05-30 18:05:23 +03:00
John Preston
b012847017 Fix storage location serialization. 2019-05-30 18:05:23 +03:00
John Preston
56d3e69399 Auto-convert legacy groups for discussions. 2019-05-30 18:05:23 +03:00
John Preston
f1c7409980 Enable history visibility when linking chat. 2019-05-30 18:05:23 +03:00
John Preston
33ea5ad297 Allow searching in link group to channel box. 2019-05-30 18:05:23 +03:00
23rd
a5ea13f248 Changed background color of Saved Messages button in main menu. 2019-05-29 20:11:47 +03:00
23rd
8796572704 Renamed touchbar files to mac_touchbar. 2019-05-29 00:15:36 +03:00
John Preston
8829b742fd Beta version 1.7.1.
- Disabled pinned messages notifications in Settings.
2019-05-28 18:45:27 +02:00
John Preston
a2b0631932 Hide linked chat button for now. 2019-05-28 17:47:36 +02:00
John Preston
8b804d1995 Allow sending animated stickers. 2019-05-28 17:45:30 +02:00
John Preston
af85aec33b Allow disabling pinned messages notifications.
Fixes #1864.
2019-05-28 16:59:35 +02:00
John Preston
e0d4884351 Fix possible crash in animations. 2019-05-28 14:46:18 +02:00
John Preston
b3f5973329 Fix possible crash in calendar box. 2019-05-28 14:33:42 +02:00
John Preston
f0ed5640db Fix sending messages with links. 2019-05-28 14:33:35 +02:00
John Preston
39a80e9de7 Fix warning when building for macOS. 2019-05-28 13:40:04 +02:00
John Preston
ff0ff1d99c Fix stickers lagging on macOS. 2019-05-28 13:39:38 +02:00
23rd
ab16c88473 Fixed crash from touchbar after logout. 2019-05-28 01:28:49 +03:00
23rd
26ec440a13 Implemented unread badges in touchbar. 2019-05-28 01:22:58 +03:00
John Preston
fa245099b6 Fix build with GCC 8. 2019-05-27 17:32:06 +02:00
John Preston
ea644a3f81 Fix Release build in Xcode. 2019-05-27 17:32:01 +02:00
John Preston
9b6d41a0aa Closed alpha version 1.7.0.1.
- Discussion groups in channels.
- Animated stickers.
- Touchbar support.
- Chat background in the main menu.
2019-05-27 17:24:40 +02:00
23rd
7798f88c6f Moved vars from interface to implementation in touchbar. 2019-05-27 17:01:47 +02:00
23rd
2c1e3cd094 Added theme change event handler to touchbar. 2019-05-27 17:01:41 +02:00
John Preston
f1e3d2f513 Disable touchbar on macOS < 10.13. 2019-05-27 17:01:29 +02:00
John Preston
0f08342533 Fix QtLottie build for old OS X versions. 2019-05-27 16:54:28 +02:00
John Preston
2a96f358f6 Fix build in Xcode. 2019-05-27 15:56:33 +02:00
23rd
bafa838afc Refactored code in touchbar.
- Refactored variables.
 - Moved TouchBarType to Platform namespace.
2019-05-27 15:35:04 +02:00
23rd
de3cc76468 Fixed position of Saved Messages in touchbar when user unpins it. 2019-05-27 15:35:04 +02:00
23rd
b4df7b4efd Replaced observable updatedNotifier() with rpl. 2019-05-27 15:35:03 +02:00
23rd
26be382b02 Refactored touchbar code.
- Moved item identifiers.
 - Deleted once called methods.
 - Moved commands of buttons to its tag.
 - Moved some methods to namespace.
2019-05-27 15:35:03 +02:00
23rd
7dff10f6fd Refactored code for lifetimes in touchbar. 2019-05-27 15:35:03 +02:00
23rd
71f6dd85c2 Fixed showing empty button in touchbar when archive is not ready. 2019-05-27 15:35:02 +02:00
23rd
abd55679af Added archived button to touchbar. 2019-05-27 15:35:02 +02:00
23rd
c90e803f1b Added handler of logout to touchbar. 2019-05-27 15:35:02 +02:00
23rd
c89a21ef5e Refactored touchbar code. 2019-05-27 15:35:02 +02:00
23rd
04843ebdd8 Fixed duplicate of Saved Messages in touchbar when it is pinned.
- Moved updating of pinned dialogs order from PinnedDialogButton to TouchBar class.
2019-05-27 15:35:01 +02:00
23rd
60cf1b6490 Fixed drawing of self userpic. 2019-05-27 15:35:01 +02:00
23rd
a80f7c53ea Replaced Apple icons for touchbar with custom icons in audio player. 2019-05-27 15:35:01 +02:00
23rd
757e0e6335 Slightly refactored, removed archive button. 2019-05-27 15:35:00 +02:00
23rd
09b5055fac Enabled audio player in touchbar only for songs. 2019-05-27 15:35:00 +02:00
23rd
ba1691bf7e Added custom close icon to touchbar
- Slightly refactored.
2019-05-27 15:35:00 +02:00
23rd
9873e6d75c Fixed seeking of slider from audio player in touchbar. 2019-05-27 15:34:59 +02:00
23rd
62a6812259 Added ability to update pinned dialogs. 2019-05-27 15:34:59 +02:00
23rd
c424607603 Added passcode lock handler for touchbar. 2019-05-27 15:34:58 +02:00
23rd
92ff237c2d Refactored code. 2019-05-27 15:34:58 +02:00
23rd
9059b2e617 Fixes for Audio Player in touchbar.
- Removed unused Platform::SetTouchBar.
 - Added rpl::event_stream in Media Player Instance for handle closing player.
 - Fixed hiding of touchbar when last track is ended.
 - Fixed display of time when last track is ended.
 - Slightly refactored.
2019-05-27 15:34:58 +02:00
23rd
2b8e76a060 Replaced Auth.lifetime() in buttons with internal lifetime. 2019-05-27 15:34:58 +02:00
23rd
9c60d2be80 Updated for archive support. 2019-05-27 15:34:58 +02:00
23rd
3b7123d159 Added auto updating of button images when peer changed userpic. 2019-05-27 15:34:57 +02:00
23rd
2f2847bfdf Moved Saved Messages button to subclass. 2019-05-27 15:34:57 +02:00
23rd
8099305c53 Added buttons of pinned dialogs in main touch bar. 2019-05-27 15:34:56 +02:00
23rd
3eadc62cd5 Added close player button, slightly improved switching of touch bar. 2019-05-27 15:34:55 +02:00
23rd
c9f56abce5 Added initial implementation of switching between touch bars. 2019-05-27 15:34:55 +02:00
23rd
58604406f8 Added initial implementation touchbar. 2019-05-27 15:34:54 +02:00
John Preston
a49806bf79 Only admin can unlink channel from the group. 2019-05-27 15:30:23 +02:00
John Preston
65a36e49bd Support custom forwarded text in url auth button. 2019-05-27 15:26:12 +02:00
John Preston
db66e93258 Allow to return to the original chat on forward. 2019-05-27 15:10:11 +02:00
John Preston
2f1b029ec9 Don't suggest emoji on :[non-letter]. 2019-05-27 15:10:08 +02:00
John Preston
0eb975e679 Allow disabling first-word emoji suggestions. 2019-05-27 15:10:06 +02:00
John Preston
a49a96ba33 Fix archive search input field focus. 2019-05-27 15:10:04 +02:00
John Preston
d2d51cc883 Fix field showing on write access enabling. 2019-05-27 15:09:59 +02:00
John Preston
e8a99a854d Add unread badge to Discuss button. 2019-05-27 15:09:57 +02:00
John Preston
a64c8c52b4 Correctly display discussion posts sender. 2019-05-27 15:09:56 +02:00
John Preston
01054858a4 Url auth checkboxes checked by default. 2019-05-27 15:09:53 +02:00
John Preston
87caa58456 Forward some inline keyboards. 2019-05-27 15:09:52 +02:00
John Preston
6b9675a5b1 Correctly display discussion posts. 2019-05-27 15:09:50 +02:00
John Preston
371f1a51c3 Preload blocked users slice in Settings. 2019-05-27 15:09:47 +02:00
John Preston
8aaaef3ff4 Show 'channel' badge for discussed messages. 2019-05-27 15:09:45 +02:00
John Preston
7fbec0dbca Show admin log events for linked chats. 2019-05-27 15:09:43 +02:00
John Preston
0a86e732cd Add a footer to EditLinkedChatBox. 2019-05-27 15:09:42 +02:00
John Preston
4e10552c12 Add a confirmation for linking a discussion group. 2019-05-27 15:09:41 +02:00
John Preston
0eae8fe6a0 Hide date from archive dialog. 2019-05-27 15:09:39 +02:00
John Preston
ee2c7fad78 Allow creating discussion groups for channels. 2019-05-27 15:09:37 +02:00
John Preston
b9d89cb4a0 Allow unlinking the discussion group. 2019-05-27 15:09:35 +02:00
John Preston
f0eba3e283 Show Discuss button in channels. 2019-05-27 15:09:32 +02:00
John Preston
801b500aa6 Use session() instead of Auth() in HistoryWidget. 2019-05-27 15:09:30 +02:00
John Preston
9c1ce702bb Display channel posts in discussion groups. 2019-05-27 15:09:28 +02:00
John Preston
50778790fe Start supporting channel discussion groups. 2019-05-27 15:09:25 +02:00
John Preston
b05bf049bc Fix add member icon position. 2019-05-27 15:09:23 +02:00
John Preston
b9c24a1fe8 Backport OpenAL capture init fix. 2019-05-27 15:09:20 +02:00
John Preston
c92a798e1b Support url authorizations. 2019-05-27 15:09:18 +02:00
John Preston
8660f976a9 Add phone number privacy.
Also move calls peer-to-peer privacy inside calls privacy.
2019-05-27 15:09:15 +02:00
John Preston
f5c79cb1b6 Use new next_rate field for global search. 2019-05-27 15:09:13 +02:00
John Preston
6b80ff4bcc Support groups in privacy settings. 2019-05-27 15:09:12 +02:00
John Preston
3556fbf702 Pause animated stickers as GIFs. 2019-05-27 15:09:09 +02:00
John Preston
3577e71782 Validate mime type of animated stickers. 2019-05-27 15:09:07 +02:00
John Preston
c4aac5fa0e Update API scheme to layer 100. 2019-05-27 15:09:06 +02:00
John Preston
68fb9b8b67 Remove benchmarks. 2019-05-27 14:11:27 +02:00
John Preston
630c07391c QtLottie: Fix gradients. 2019-05-27 14:11:27 +02:00
John Preston
4ab3c2dfcb Add support for gzip-ed animated stickers. 2019-05-27 14:11:27 +02:00
John Preston
973c3f8838 QtLottie: Migrate from Qt JSON to rapidjson. 2019-05-27 14:11:27 +02:00
John Preston
a03d42daa8 Add rapidjson submodule. 2019-05-27 14:11:27 +02:00
John Preston
0c84fc1271 QtLottie: Remove unnecessary includes. 2019-05-27 14:11:27 +02:00
John Preston
0f25638545 QtLottie: Don't build JSON to parse shapes. 2019-05-27 14:11:27 +02:00
John Preston
f58efd7ee3 QtLottie: Allow building properties from data. 2019-05-27 14:11:27 +02:00
John Preston
26c29f6af7 QtLottie: Move everything to Lottie namespace. 2019-05-27 14:11:27 +02:00
John Preston
ab82ff0fb7 QtLottie: Completely detach from upstream. 2019-05-27 14:11:27 +02:00
John Preston
12a4a849ca QtLottie: Make property parsing non-virtual. 2019-05-27 14:11:27 +02:00
John Preston
38e2837cb6 Remove MOC for QtLottie. 2019-05-27 14:11:27 +02:00
John Preston
0e7cefb69c QtLottie: Use QStringLiteral instead of QLatin1String. 2019-05-27 14:11:27 +02:00
John Preston
21eaa35d8c QtLottie: Drop expressions. 2019-05-27 14:11:27 +02:00
John Preston
c1ae825d98 Add some benchmarks. 2019-05-27 14:11:27 +02:00
John Preston
fbc206ebee QtLottie: Enforce BM nodes parent. 2019-05-27 14:11:27 +02:00
John Preston
67739ae3fd Don't try to keep up if animation got late. 2019-05-27 14:11:27 +02:00
John Preston
7ee16ba45c Clear hidden animated stickers. 2019-05-27 14:11:26 +02:00
John Preston
236513943c Fix animated sticker selection. 2019-05-27 14:11:26 +02:00
John Preston
cfff744cb1 Parse and render lottie in the background. 2019-05-27 14:11:26 +02:00
John Preston
61b6effccc View some more files as stickers. 2019-05-27 14:11:26 +02:00
John Preston
642deecbbb Allow loading lottie animations from memory. 2019-05-27 14:11:26 +02:00
John Preston
707aa88974 Animated stickers proof of concept. 2019-05-27 14:11:26 +02:00
John Preston
5b04698f5f QtLottie: Suboptimal fix for spatial properties. 2019-05-27 14:11:26 +02:00
John Preston
246e4e45bd QtLottie: Add partial support for masksProperties. 2019-05-27 14:11:26 +02:00
John Preston
f2ef2fab4f QtLottie: Support many geometry shapes in a group. 2019-05-27 14:11:26 +02:00
John Preston
1a2755f126 QtLottie: Ignore opacity in null layer transform. 2019-05-27 14:11:26 +02:00
John Preston
801580c46f QtLottie: Apply even inactive parent transforms. 2019-05-27 14:11:26 +02:00
John Preston
3f1ec52e6c QtLottie: Fix precomp layer start time. 2019-05-27 14:11:26 +02:00
John Preston
2c422dcd73 QtLottie: Add BMScene root class. 2019-05-27 14:11:26 +02:00
John Preston
6abf74530d QtLottie: Check each layer for visibility by frame. 2019-05-27 14:11:26 +02:00
John Preston
08ad74da8f QtLottie: Fix parent transform in precomp layers. 2019-05-27 14:11:26 +02:00
John Preston
38427aa52a Fix build in Xcode. 2019-05-27 14:11:26 +02:00
John Preston
68eb48be8d QtLottie: Fix scaling in some animations. 2019-05-27 14:11:26 +02:00
John Preston
5e5b4197e9 QtLottie: Apply opacity in BMFill and BMStroke. 2019-05-27 14:11:26 +02:00
John Preston
48eb5dd112 QtLottie: Bug fixes. 2019-05-27 14:11:26 +02:00
John Preston
9b7e3dc3ec QtLottie: Fix SpatialProperty interpolation. 2019-05-27 14:11:26 +02:00
John Preston
d1518da1ad Provide animation duration. 2019-05-27 14:11:26 +02:00
John Preston
2f02198ac7 QtLottie: Add support for precomp layer. 2019-05-27 14:11:26 +02:00
John Preston
da845a089e QtLottie: Rebase onto upstream/dev. 2019-05-27 14:11:26 +02:00
John Preston
2caa3e3def QtLottie: Add precomp assets parsing. 2019-05-27 14:11:26 +02:00
John Preston
f9a32dc70f QtLottie: Add support for null layer. 2019-05-27 14:11:26 +02:00
John Preston
8dc7f8b8a1 QtLottie: Fix prepending mask layer. 2019-05-27 14:11:26 +02:00
John Preston
78d3bdfe3a Fix build in Xcode. 2019-05-27 14:11:26 +02:00
John Preston
fbfd3ddd68 Partially support new spec keyframes parsing. 2019-05-27 14:11:26 +02:00
John Preston
33b3fa68f0 QtLottie: Rebase onto upstream/dev. 2019-05-27 14:11:26 +02:00
John Preston
2fae2278f7 QtLottie: Fix UB in last keyframe easing point.
Example: https://lottiefiles.com/427-happy-birthday

The present box top was rendered below the body or not depending on
the uninitialized bytes from QBezier.
2019-05-27 14:11:26 +02:00
John Preston
f073963582 Preview lottie animations in media viewer. 2019-05-27 14:11:26 +02:00
John Preston
22c2054dcf First attempt to use QtLottie. 2019-05-27 14:11:26 +02:00
23rd
b2e5ab36d4 Moved shadow drawing from paintEvent in MainMenu::refreshBackground. 2019-05-27 14:10:36 +02:00
23rd
159f90a42c Added background analysis in main menu for better readability. 2019-05-27 14:10:36 +02:00
23rd
08a3a5747a Added custom background to top of main menu. 2019-05-27 14:10:36 +02:00
23rd
47910b2ae1 Added '-scale' command-line argument for custom scale.
- Fixed #5272.
 - Fixed #5365.
 - Fixed #6055.
2019-05-27 14:10:36 +02:00
23rd
5f97b3bc22 Added ability to open links without confirmation with Ctrl key.
- Fixed #6051.
2019-05-27 14:10:35 +02:00
23rd
cf45b0d317 Added ability to send not loaded GIFs with Ctrl key. 2019-05-27 14:10:35 +02:00
23rd
1dd461b24a Moved left elision of counters to Dialogs::Layout::paintUnreadCount. 2019-05-27 14:10:35 +02:00
John Preston
626e7c1f76 Workaround MSVC 16.1 bugs. 2019-05-27 14:10:35 +02:00
udf
288b7ba100 Actually fix display SendFilesBox via historyAttach button. 2019-05-26 14:23:37 +02:00
udf
2b8951b2ac Revert "Fixed display SendFilesBox via historyAttach button."
This reverts commit a0926f2d70 because it
doesn't do what it should do :(
2019-05-26 14:23:37 +02:00
Konstantin Tcepliaev
48cee21b9f Re-enable integrated GPU on macOS.
This limits the fix introduced in a058e75a to just 10.14.4,
as #5858 seems to be fixed in 10.14.5.
2019-05-20 20:22:36 +03:00
23rd
b2f821d3de Updated version of GCC to 8. 2019-05-20 15:59:06 +03:00
23rd
911f138bf8 Updated building-cmake.md
- Added "-y" parameters to make installation of dependencies non-interactive.
 - Changed order of installation for correct linking of GCC.
2019-05-20 15:59:06 +03:00
Vitaly Zaitsev
bb528eaa9c Fixed AppData validation error: tags cannot be empty.
Signed-off-by: Vitaly Zaitsev <vitaly@easycoding.org>
2019-05-20 15:53:27 +03:00
Vitaly Zaitsev
3d3d024878 Fixed building of PCH using Clang compiler.
Signed-off-by: Vitaly Zaitsev <vitaly@easycoding.org>
2019-05-20 15:46:27 +03:00
John Preston
9a4fdb1530 Use only lt_count in langpacks. 2019-05-20 15:44:51 +03:00
23rd
63a6893fda Excluded ability to display 0 views in channel posts. 2019-05-20 15:44:51 +03:00
23rd
dcd5aa83da Fixed choosing of plural when number should be shortened. 2019-05-20 15:44:51 +03:00
23rd
5901b42a83 Added generation of string with decimal separated numbers.
- Added new plural tag "kPluralDecimalSeparationTag".
 - Added Lang::PluralType for default, shorted and decimal separated numbers.
 - Replaced members and votes count with decimal separated type.
2019-05-20 15:44:51 +03:00
23rd
5d321f7c59 Moved generation of short string for large numbers in one place.
- Added new plural tag "kPluralShortTag".
 - Added support of new plural tag to code generator.
 - Removed FormatViewsCount from history_message.
 - Removed FormatLargeNumber from history_media_poll.
 - Added FormatCountToShort to lang_tag.
2019-05-20 15:44:51 +03:00
John Preston
996bd942eb Fix appveyor build. 2019-05-20 13:19:01 +02:00
23rd
dc27bfff2d Fixed elision of user name in side menu. 2019-05-16 11:58:28 +03:00
23rd
63fc552636 Fixed inability to close folder with Back mouse button.
- Fixed #5997.
2019-05-12 22:30:19 +03:00
John Preston
0659822ac9 Add Flathub to the README list. 2019-05-10 12:39:27 +03:00
Stepan Skryabin
f9f1826f34 Update supported Ubuntu and Fedora versions 2019-05-10 12:39:08 +03:00
Vitaly Zaitsev
ddb9c84a1d Allow GNU/Linux maintainers to forward launcher name.
Use optional compiler directive -DTDESKTOP_LAUNCHER_FILENAME to forward
required XDG desktop file name.

If not specified, fallback to default value will be used.

Signed-off-by: Vitaly Zaitsev <vitaly@easycoding.org>
2019-05-10 12:08:58 +03:00
John Preston
69960a47da Apply telegram-wayland-icon.patch from Flatpak version. 2019-05-10 09:22:21 +03:00
John Preston
f8740c5894 Apply some patches from Flatpak version. 2019-05-09 20:14:54 +03:00
John Preston
58aaed4c0f Fix build script for Mac App Store. 2019-05-09 18:45:18 +03:00
John Preston
8af684f7f7 Version 1.7.
Introducing Archived Chats:

- Archive any chat from the right-click menu.
- Chats with enabled notifications will pop out of the archive
when a notification arrives.
- Muted chats will stay in the archive.
- Pin an unlimited number of chats in your archive.
2019-05-08 23:55:33 +03:00
John Preston
0fe0311b45 Fix chats list accidental scrolling. 2019-05-08 23:48:04 +03:00
23rd
89a0cd3e81 Fixed closing folder by Escape when opened dialog in one column mode.
Dialog should be opened by shortcut.
2019-05-08 23:47:39 +03:00
John Preston
6de30b1137 Closed alpha version 1.6.7.3. 2019-05-08 12:44:01 +03:00
John Preston
d26924dd6b Allow multiline no-newline input fields.
Fixes poll option limit warning.
2019-05-08 12:36:13 +03:00
John Preston
4293a4857f Show user profile from channel Removed Users.
Fixes #5974.
2019-05-08 12:25:16 +03:00
John Preston
aec6e17b5d Allow revoking any messages in private chats. 2019-05-08 12:14:42 +03:00
John Preston
64dd5139da Show unread archive chat names in bold. 2019-05-08 12:05:15 +03:00
John Preston
e55e46a0f0 Show last chats in archive dialog row. 2019-05-08 11:50:39 +03:00
John Preston
4f65d0469c Use dedicated color for archive title. 2019-05-08 11:07:21 +03:00
John Preston
a0e2a925ee Filter command line arguments passed to Qt.
See https://www.bleepingcomputer.com/news/security/
qt5-based-gui-apps-susceptible-to-remote-code-execution/

This RCE exploit doesn't affect Telegram Desktop directly, because
Telegram Desktop uses statically linked Qt and does not load any
plugins from external shared libraries. But in any case it's better
to control how command line arguments can affect the app behaviour.

For now pass only the first command line part, the executable path.
2019-05-06 12:40:04 +02:00
John Preston
8bfef7d873 Improve collapsed rows in small chats list. 2019-05-03 17:02:00 +04:00
John Preston
2d4a743231 Update some icons. 2019-05-03 15:35:22 +04:00
John Preston
0247e876df Remove locally saved empty histories. 2019-05-03 15:18:18 +04:00
John Preston
39b7f307a4 Show muted mention icon in archive. 2019-05-03 15:12:48 +04:00
John Preston
4356b1c193 Allow collapsing archive in the chats list. 2019-05-03 15:08:53 +04:00
John Preston
6f885fb6cc Fix creating dialog rows for new groups. 2019-05-02 22:30:52 +04:00
John Preston
5f1cb9d31c Put archive action on top of the menu. 2019-05-01 17:10:11 +04:00
John Preston
9b430147c0 Remove some unused langpack keys. 2019-05-01 16:43:37 +04:00
John Preston
4e8c57a861 Fix assertion violation in marking history as read. 2019-05-01 16:43:19 +04:00
John Preston
d9ad3a4bbe Jump to chats list top on folder change. 2019-05-01 16:11:47 +04:00
John Preston
4ad8c4877c Close archive by escape even if chat is shown. 2019-05-01 16:11:47 +04:00
John Preston
edf4180d11 Don't suggest to archive Saved Messages. 2019-05-01 16:11:47 +04:00
John Preston
d48cafe1a3 Improve manage group box styles. 2019-05-01 16:11:47 +04:00
John Preston
aede79640d Ctrl+1..5 always activate pinned from main chats list. 2019-05-01 16:11:47 +04:00
John Preston
4dae89310d In archive allow scroll-down-by-pinned-drag. 2019-05-01 16:11:46 +04:00
John Preston
6102795856 Fix proxy promoted channel chats-list position. 2019-05-01 16:11:46 +04:00
John Preston
7669b8e12b Don't suggest to archive proxy sponsor. 2019-05-01 16:11:45 +04:00
John Preston
5c9a907c88 Closed alpha version 1.6.7.2. 2019-05-01 16:11:45 +04:00
John Preston
116b5d006a Divide public/private phrases for groups/channels. 2019-05-01 16:11:45 +04:00
John Preston
db35c3de3b Fix block chat list loading by date. 2019-05-01 16:11:45 +04:00
John Preston
be64f18e96 Fix dialogs list creation in support mode. 2019-05-01 16:11:45 +04:00
John Preston
39008bf6fe Fix reading of client side unread messages. 2019-05-01 16:11:44 +04:00
John Preston
c9552390e7 Fix stack overflow crash in emoji panel hiding.
A call to hideChildren before setting _hiding to the desired value
could lead through leaveEvent to a recursive call to hideAnimated.
2019-05-01 16:11:44 +04:00
John Preston
5c3f93eee1 Fix crash in replies.
Regression was introduced in b1df3c0ec4.
2019-05-01 16:11:44 +04:00
John Preston
cf0d4a0559 Improve design of video download state. 2019-05-01 16:11:44 +04:00
John Preston
ee5c819cef Fix render glitch in archive top bar. 2019-05-01 16:11:43 +04:00
John Preston
ca548a11d7 Fix assertion violation in History::inboxRead(). 2019-05-01 16:11:43 +04:00
John Preston
0b26475300 Fix render glitches in passcodebox. 2019-05-01 16:11:43 +04:00
John Preston
d74992b85b Closed alpha version 1.6.7.1. 2019-05-01 16:11:42 +04:00
John Preston
08bddc5579 Move messages data to AuthSession. 2019-05-01 16:11:42 +04:00
John Preston
cb3e649e61 Correctly handle cloud archive unread state. 2019-05-01 16:11:42 +04:00
John Preston
accb20a571 Improve archived toast notification. 2019-05-01 16:11:41 +04:00
John Preston
08101ba666 Forbid to archive Telegram Notifications. 2019-05-01 16:11:41 +04:00
John Preston
430a3c2cec Fix important switch hiding in folders. 2019-05-01 16:11:41 +04:00
John Preston
48ad171a29 Clear chats list context menu a bit. 2019-05-01 16:11:41 +04:00
John Preston
5f62c2100c Count unread marks in non-fully loaded folders. 2019-05-01 16:11:40 +04:00
John Preston
4c571f5bff Fix adding first chat to archive. 2019-05-01 16:11:40 +04:00
John Preston
52b9212625 Display top bar in archive. 2019-05-01 16:11:40 +04:00
John Preston
f56df0e1d9 Show folder using slide animation. 2019-05-01 16:11:39 +04:00
John Preston
6dd8f32f66 Fix build on Xcode. 2019-05-01 16:11:39 +04:00
John Preston
5ab1cd405a Fix nice vote percents. 2019-05-01 16:11:39 +04:00
John Preston
3dd2a6bb5b Update archive row on chat list name change. 2019-05-01 16:11:39 +04:00
John Preston
9ff02707bf Improve archive chat list entry layout. 2019-05-01 16:11:38 +04:00
John Preston
2d1dcb36cb Use folder_id / still_unread_count from updates. 2019-05-01 16:11:38 +04:00
John Preston
01d5589594 Add archived results in chats search. 2019-05-01 16:11:38 +04:00
John Preston
40532e32ab Enforce changelog message visibility. 2019-05-01 16:11:38 +04:00
John Preston
ceec71d3e6 Track real latest message in the folder. 2019-05-01 16:11:37 +04:00
John Preston
8fd811517b Count unread correctly in folders. 2019-05-01 16:11:37 +04:00
John Preston
58519300ea Support pinned chats in folders. 2019-05-01 16:11:37 +04:00
John Preston
607655941d Improve Ui::Menu interface. 2019-05-01 16:11:37 +04:00
John Preston
9acdc4eac1 Show folder bar on top when folder is opened. 2019-05-01 16:11:36 +04:00
John Preston
518ff146b2 Don't allow reordering of the archive. 2019-05-01 16:11:36 +04:00
John Preston
74c65f30f7 Load folder dialogs while scrolling. 2019-05-01 16:11:36 +04:00
John Preston
83306bb01f Replace QList with std::deque in notifications. 2019-05-01 16:11:36 +04:00
John Preston
f3ed7a674a Create dialog rows only with known folders. 2019-05-01 16:11:35 +04:00
John Preston
854870683b Add ability to archive/unarchive the chats. 2019-05-01 16:11:35 +04:00
John Preston
c58f097535 Correctly move histories between chat lists. 2019-05-01 16:11:35 +04:00
John Preston
0367319934 Load folder dialogs list. 2019-05-01 16:11:35 +04:00
John Preston
be0cf8d379 Use std::vector in rpl::lifetime. 2019-05-01 16:11:34 +04:00
John Preston
305a611211 Load dialogs list in ApiWrap and Data::Session. 2019-05-01 16:11:34 +04:00
John Preston
927735dff2 Start showing folder chats list. 2019-05-01 16:11:34 +04:00
John Preston
0c0d6bc411 Move chats / contacts lists to Data::Session. 2019-05-01 16:11:33 +04:00
John Preston
2862070348 Use vector instead of custom linked list. 2019-05-01 16:11:20 +04:00
John Preston
58d86af399 Remove SplittedWidget paint optimization.
It doesn't work with dialogs-to-top button anyway.
2019-05-01 16:11:16 +04:00
John Preston
76c3e9a529 Display title and userpic of archived chats. 2019-05-01 16:11:14 +04:00
John Preston
9bf8a8108d Comment out non-folder feed code. 2019-04-25 14:16:30 +04:00
John Preston
905a024aed Update API scheme to layer 99. 2019-04-25 14:16:29 +04:00
23rd
e1000b79a3 Fixed display of file sizes with invalid dimensions when edit media. 2019-04-25 14:11:07 +04:00
John Zimmermann
c2a10f9c56 Linux: manually set desktop file name
resolves #5180
2019-04-25 13:41:19 +04:00
John Zimmermann
4d42e7e5b9 Correctly set _desktopFile to Telegram.desktop if Telegram.desktop was found 2019-04-25 13:39:40 +04:00
Amos Bird
e200a7d502 Do not break type aliasing rule 2019-04-25 13:38:39 +04:00
23rd
55a6e70f74 Updated building-xcode.md. Moved number of threads into variable. 2019-04-24 23:32:50 +03:00
John Preston
6f242f284f Notarize update builds. 2019-04-23 19:24:36 +04:00
John Preston
25471f3952 Add notarization to build script. 2019-04-23 19:24:36 +04:00
John Preston
72690ee106 Enable hardened runtime on macOS build. 2019-04-23 19:24:36 +04:00
John Preston
edc8c23772 Fix custom download path in Mac App Store build.
Fixes #5903.
2019-04-13 19:49:13 +04:00
John Preston
0023fdc707 Version 1.6.7.
- Replace media when editing messages with media content.
- Jump quickly to the top of your chats list.
- Get emoji suggestions for the first word you type in a message.
- Help Telegram improve emoji suggestions in your language
using this interface https://translations.telegram.org/en/emoji
2019-04-13 10:46:58 +04:00
John Preston
2518250ae0 Fix wronly marking channel as forbidden.
Regression was introduced in 826d6011a1.

Fixes #5923.
2019-04-13 10:34:35 +04:00
John Preston
08cd46cd4c Fix crash in streaming caching. 2019-04-12 18:49:37 +04:00
John Preston
12614ab68c Fix possible crash with nullptr screen. 2019-04-12 17:30:43 +04:00
John Preston
7cfb122dea Fix crash with event loop nesting tracking. 2019-04-12 17:30:43 +04:00
John Preston
cc8f4aa24f Fix crash in history clear. 2019-04-12 17:30:42 +04:00
23rd
60e36b1411 Left animation to top only for dialogs up button. 2019-04-12 16:32:36 +04:00
John Preston
8aa0b31c1a Beta version 1.6.6: Fix removing saved peers from chats list.
Regression was introduced in a7f67c4bc9.
2019-04-11 11:46:54 +04:00
John Preston
56b6673e17 Beta version 1.6.6: Fix animations engine. 2019-04-11 10:43:13 +04:00
John Preston
c310cdbb8c Beta version 1.6.6.
- Bug fixes and other minor improvements.
2019-04-11 10:20:30 +04:00
John Preston
71f340d9b5 Revert "Don't restart animations timer."
This reverts commit 392d90dc1d.

Otherwise scrolling while typing animates lags terribly on macOS.
2019-04-11 10:16:02 +04:00
23rd
5187e6dc58 Added display of image dimensions instead of 0 bytes when is doc. 2019-04-11 10:11:09 +04:00
23rd
c21f5712f8 Disabled pasting images with bad size from clipboard for albums.
- Slightly refactored.
2019-04-11 10:10:25 +04:00
23rd
c6eccc655f Disabled sending images with bad size from remoteContent for albums. 2019-04-10 11:40:16 +04:00
23rd
3767483977 Added filename generation when edit media with non-local file. 2019-04-10 11:34:43 +04:00
Vitaly Zaitsev
14ad7a2479 Fixed "Show in Folder" feature on Gnome 3.30+.
Parameter --no-desktop is deprecated and should not be used.

Closes #5896.
2019-04-10 11:20:01 +04:00
23rd
ba8257ce64 Fixed top bar glitch when returning dialog back too fast. 2019-04-09 17:10:58 +03:00
John Preston
9bfa6d7cf4 Make animation tick less, almost like before.
Unfortunately otherwise animations look not smooth.

Fixes #5897.
2019-04-09 17:21:29 +04:00
John Preston
826d6011a1 Mask channel as forbidden on CHANNEL_PRIVATE error.
Fixes #5902.
2019-04-09 17:19:43 +04:00
23rd
fb847135b5 Added ability to edit GIFs.
- Added to Media::Clip::MakeReader new constructor to create
 animated preview with remoteContent.
2019-04-09 17:17:31 +04:00
23rd
49681525ed Added alignment of unread badge with userpic in history widget. 2019-04-09 17:16:46 +04:00
23rd
839feed329 Added delay for clicked callback of edit media button. 2019-04-09 17:15:48 +04:00
John Preston
392d90dc1d Don't restart animations timer. 2019-04-09 17:12:16 +04:00
John Preston
7808620764 Queue only one update call in animations manager. 2019-04-09 17:10:45 +04:00
John Preston
fe3181649b Fix build on macOS and Linux. 2019-04-09 17:10:44 +04:00
John Preston
b5be6df5e2 Copy text with expanded links only to external.
Paste valid custom links in message field if copied from messages.
2019-04-08 19:10:06 +04:00
John Preston
0f0c3b7461 Remove FlatLabel::_contextExpandLinksMode. 2019-04-08 16:22:07 +04:00
John Preston
ff51423125 Remove ExpandLinksNone, rename Text::originalText. 2019-04-08 15:53:11 +04:00
John Preston
cc2fd51097 Fix video thumbnails in video overview. 2019-04-08 14:35:25 +04:00
John Preston
321e4ffe9c Don't auto-resume video when seeking. 2019-04-08 14:34:31 +04:00
John Preston
fb244c00b9 Fix local history clearing. 2019-04-08 13:16:45 +04:00
John Preston
f980023f49 Update Xcode version to 10.2 in GYP script. 2019-04-07 11:18:38 +04:00
John Preston
6c17ed2242 Fix crash in event loop nesting. 2019-04-07 11:18:38 +04:00
23rd
a0926f2d70 Fixed display SendFilesBox via historyAttach button. 2019-04-06 22:15:39 +04:00
John Preston
d9a14e1227 Beta version 1.6.5.
- Bug fixes and other minor improvements.
2019-04-06 12:32:24 +04:00
John Preston
1ab4dbe466 Fix crash in application closing. 2019-04-06 12:12:24 +04:00
23rd
37af963717 Fixed work with _msgIdToEdit in FileLoadTask.
- Added check is allowed media editing in paintEvent.
 - Fixes #5885.
2019-04-06 11:24:11 +04:00
23rd
3744bdcbe7 Fixed redrawing of shadows when box size decreases. 2019-04-06 11:22:31 +04:00
23rd
4ad293e2ae Added alignment of dialogs up button with connecting button. 2019-04-06 11:20:02 +04:00
23rd
be89a0bf7e Fixed dialogs up button when column of dialogs is small. 2019-04-06 11:19:39 +04:00
John Preston
14de1fe485 Fix crash in shared links. 2019-04-05 22:45:57 +04:00
John Preston
bec39d89e1 Beta version 1.6.4: Fix dialogs up button glitch. 2019-04-05 19:52:45 +04:00
23rd
467f1449ab Beta version 1.6.4: Update dialogs up button position when resize. 2019-04-05 18:42:25 +03:00
John Preston
53c659cbda Beta version 1.6.4.
- Replace media when editing messages with media content.
- Jump quickly to the top of your chats list.
- Get emoji suggestions for the first word you type in a message.
- Help Telegram improve emoji suggestions in your language
using this interface https://translations.telegram.org/en/emoji
2019-04-05 15:53:46 +04:00
John Preston
5deee18247 Use channels.exportMessageLink to check links. 2019-04-05 15:50:16 +04:00
John Preston
60a991bcb0 Fix typing / send action updates handling. 2019-04-05 15:17:34 +04:00
John Preston
d3c5ed08ab Add qt_signal_producer.h to git. 2019-04-05 14:41:06 +04:00
John Preston
2bdce7dce6 Fix window activations handling without event loop nesting.
This was causing an assertion violation in Ui::PostponeCall.

- Add a generic Core::QtSignalProducer to convert Qt signals to rpl::producer.
- Track event loop nesting inside QtSignalProducer.
- Use QtSignalProducer for QWindow::activeChanged tracking.
2019-04-05 14:13:54 +04:00
23rd
41b2e7c9c7 Added floating button in dialog list to jump to top. 2019-04-05 14:13:18 +04:00
John Preston
6021923bf1 Closed alpha version 1.6.3.6: Fix instructions. 2019-04-04 21:51:06 +04:00
John Preston
839cedde65 Closed alpha version 1.6.3.6: Update to VS 2019. 2019-04-04 20:51:42 +04:00
23rd
92d10fd34c Redesigned edit media button. Slightly refactored.
- Added minimal height of thumbs.
 - Removed unused _statusw.
2019-04-04 20:51:00 +04:00
23rd
25e0e4b5d3 Fixed edit single media to photo with bad dimensions. 2019-04-04 20:23:44 +04:00
John Preston
43cc2145a8 Don't update radial animations in cycle. 2019-04-04 19:31:07 +04:00
John Preston
c3c46f8e29 Fix new animations engine bug. 2019-04-04 19:31:03 +04:00
John Preston
0744f43a0e Create private channel post links. 2019-04-04 19:31:02 +04:00
John Preston
73470c3a95 Handle private channel post links. 2019-04-04 19:30:59 +04:00
23rd
a6d0fa433e Refactored variables for edit media in HistoryItem.
- Replaced _isLocalUpdateMedia with client flag.
 - Removed _isEditingMedia.
2019-04-04 13:23:14 +03:00
23rd
a9fa49e372 Disabled edit media with gif files. 2019-04-04 11:02:42 +03:00
23rd
2cb69f0c2b Added ability to edit album items with remoteContent. 2019-04-04 11:01:10 +03:00
23rd
1da9bfc643 Removed unnecessary making thumbnail of remoteContent. 2019-04-04 10:13:13 +03:00
23rd
78227cd947 Fixed MIME checking for files when edit media. 2019-04-04 10:13:11 +03:00
John Preston
456a949d01 Fix working with document thumbnails. 2019-04-04 00:08:05 +04:00
John Preston
7f598e358a Fix edit media preview for Retina screen. 2019-04-04 00:08:05 +04:00
John Preston
a058e75a6d Fix crashes on macOS 10.14.4 by disabling GPU switches.
Fixes macOS regression when OpenGL apps crash on GPU switches.
See https://bugreports.qt.io/browse/QTCREATORBUG-22215

Fixes #5858.
2019-04-04 00:08:05 +04:00
23rd
48362cd4bc Added more appropriate phrase for invalid files in edit media. 2019-04-03 20:08:27 +03:00
23rd
bd653dfdff Refactored ApiWrap.
- Joined editUploadedPhoto with editUploadedDocument.
2019-04-03 20:00:12 +03:00
John Preston
bc03c80d8d Closed alpha version 1.6.3.6. 2019-04-03 16:57:49 +04:00
John Preston
2dcbe15f8b Ignore tab key in emoji suggestions for Support mode. 2019-04-03 16:57:48 +04:00
John Preston
b364cbbd69 Improve support accounts presentation.
- Change "Bot Info" to "User Info".
- Remove "Block user" and "Add to Group" buttons from profile page.
- Allow revoking messages from support chats.
2019-04-03 16:50:38 +04:00
John Preston
3e374eda51 Fix video messages with disabled autoplay. 2019-04-03 16:50:38 +04:00
John Preston
0ae63b072c Update some icons. 2019-04-03 16:50:38 +04:00
John Preston
f718410df3 Improve sticker sending by drag-n-drop preview. 2019-04-03 16:50:38 +04:00
John Preston
74e120bc7b Don't show digits in first word emoji suggestions. 2019-04-03 16:50:38 +04:00
John Preston
5f8ede194b Fix rendering of large images on macOS. 2019-04-03 16:42:08 +04:00
John Preston
4d321b1cf0 Fix crash in Clang in Xcode 10.2. 2019-04-03 13:09:49 +04:00
23rd
84858b8940 Added MEDIA_NEW_INVALID error handler. Disabled edit media with webp. 2019-04-02 20:28:54 +03:00
23rd
92f95fa9eb Fixed crash when edit album item with photo with invalid dimensions.
- Added InformBox for invalid files.
2019-04-02 18:14:12 +04:00
23rd
5d8888bb8b Refactored code.
- Refactored passing message id to edit media.
 - Removed get/setEditMedia from mainwidget.
 - Combined onEditMedia and onSendFileConfirm in single method.
 - Added argument in FileLoadTask to pass message id to edit media.
 - Renamed flags in apiwrap.
 - Added check for allowing edit media when use clipboard.
 - Removed unused fileIsValidForAlbum.
 - Removed LOGs.
 - Replaced _isNotAlbum with _isAlbum.
 - Removed _viaRemoteContent.
 - Removed _newMediaPath.
 - Added empty() to MessageGroupId.
2019-04-02 18:14:12 +04:00
23rd
4988d21819 Added ability to edit media via clipboard and remoteContent.
- Moved thumb updating to updateEditPreview() method.
 - Added _viaRemoteContent var to check when we use remoteContent.
 - Added setMimeDataHook to handle clipboard content.
2019-04-02 18:14:12 +04:00
23rd
94964c35ce Fixed false definition FileMediaInformation as Image. 2019-04-02 18:14:12 +04:00
23rd
d605b18ec0 Fixed checking for song without file path. 2019-04-02 18:14:12 +04:00
23rd
590e6c8e9d Fixed ability to cancel edit media in albums. 2019-04-02 18:14:12 +04:00
23rd
67572b0d9a Added canceling upload edit media to Data::Media destructors.
- We should stop upload media if message was deleted from other client.
2019-04-02 18:14:12 +04:00
23rd
5554867553 Fixed editing other messages when media is edited.
- Added new condition for skipping message in History::lastSentMessage.
 - Added reset of _savedMedia in HistoryMessage destructor.
2019-04-02 18:14:12 +04:00
23rd
f3102573ea Improved applying edition.
- Fixed cancel single media.
2019-04-02 18:14:12 +04:00
23rd
0e7ce97da7 Refacotred HistoryWidget::sendFileConfirmed.
- New way to edit media in message.
 - Added some "const".
 - Fixed uploading state in albums when edit media.
2019-04-02 18:14:12 +04:00
23rd
9d789c2657 Fixed sending groupId when edit media. 2019-04-02 18:14:12 +04:00
23rd
468975e9f3 Added to AbstractBox ability to center box when changing dimensions.
- Added using of force center for edit_caption_box.
2019-04-02 18:14:12 +04:00
23rd
145dda843e Added initial local reference for edited media. 2019-04-02 18:14:12 +04:00
23rd
6e69069ba2 Added Ctrl+E and Ctrl+O shortcut to edit media. 2019-04-02 18:14:12 +04:00
23rd
be2b2cbf7e Refactored ApiWrap::editMedia.
- Slightly refactored checkEntitiesAndViewsUpdate.
 - Slightly refactored HistoryMessage.
2019-04-02 18:14:12 +04:00
23rd
0e4d85a5e5 Added handler for MESSAGE_NOT_MODIFIED error when edit media. 2019-04-02 18:14:12 +04:00
23rd
653fd1bb63 Added initial implementation of cancel of media uploading for editing. 2019-04-02 18:14:12 +04:00
23rd
741501d1d9 Removed sending gif attributes when edit media.
- Removed handling gif for render animated preview.
2019-04-02 18:14:12 +04:00
23rd
89e1291d86 Added confirming only images and videos when edit album item.
- Added hiding of checkbox when edit album item.
2019-04-02 18:14:12 +04:00
23rd
25e3674819 Added allowsEditMedia() to Media. Slightly refactored. 2019-04-02 18:14:12 +04:00
23rd
c84f99cf3a Fixed uploading edit media with thumbnails. 2019-04-02 18:14:12 +04:00
23rd
820c7ba84e Added checkbox to send photo as file for edit media. 2019-04-02 18:14:12 +04:00
23rd
6735605f21 Added animated gif preview when users edits media. 2019-04-02 18:14:12 +04:00
23rd
d5a2daa8c9 Refactored edit_caption_box. 2019-04-02 18:14:12 +04:00
23rd
25177d9022 Added updating of thumbnails when user edits media. 2019-04-02 18:14:12 +04:00
23rd
f24ce584db Fixed item updating when upload editing media. 2019-04-02 18:14:12 +04:00
23rd
1ed83cf193 Fixed subscribeToUploader. 2019-04-02 18:14:12 +04:00
23rd
aaf61dfbad Fixed NewUnread message type. 2019-04-02 18:14:11 +04:00
23rd
be58e23775 Init edit media. 2019-04-02 18:14:11 +04:00
John Preston
db631acf80 Remove old animations code. 2019-04-02 14:33:54 +04:00
John Preston
74dc4e0c62 Allow disabling new animations. 2019-04-02 14:33:54 +04:00
John Preston
99bb09374d Use new animations engine everywhere. 2019-04-02 14:33:53 +04:00
John Preston
a6e96f9a28 Use new animations engine in all Basic-s. 2019-04-02 14:33:53 +04:00
John Preston
cd3c1c6dc0 Use new animations engine for typings. 2019-04-02 14:33:53 +04:00
John Preston
3971f27c66 Closed alpha version 1.6.3.4. 2019-04-02 14:33:53 +04:00
John Preston
c4357c7ad3 Animate suggestions select-by-keyboard. 2019-04-02 14:33:53 +04:00
John Preston
1da9385fe2 Scroll suggestions by dragging. 2019-04-02 14:33:53 +04:00
John Preston
9ba65e9ca0 Skip flags and some other suggestions. 2019-04-02 14:33:53 +04:00
John Preston
a12bc60ef5 Redesign emoji suggestions widget. 2019-04-02 14:33:53 +04:00
John Preston
f76dc74040 Show emoji by first word after a delay. 2019-04-02 14:33:53 +04:00
John Preston
932ed20c4b Refresh emoji after server responds. 2019-04-02 14:33:53 +04:00
John Preston
b353af00c9 Fix crash in login. 2019-04-02 14:33:53 +04:00
John Preston
ce2204e120 Add caching for emoji keywords. 2019-04-02 14:33:53 +04:00
John Preston
4b3a9fac67 Use several LRU input languages. 2019-04-02 14:33:53 +04:00
John Preston
54ca5772f8 Closed alpha version 1.6.3.3. 2019-04-02 14:33:53 +04:00
John Preston
2dacf1b2ef Accept any characters for suggestions. 2019-04-02 14:33:53 +04:00
John Preston
817e9aa43d Fix crash in emoji keywords init. 2019-04-02 14:33:53 +04:00
John Preston
dba677dcc7 Filter emoji languages by server. 2019-04-02 14:33:53 +04:00
John Preston
24dcde2f87 Closed alpha version 1.6.3.2. 2019-04-02 14:33:53 +04:00
John Preston
77fbf19a72 Use serverside keywords for emoji suggestions. 2019-04-02 14:33:53 +04:00
John Preston
3cd9d4b5ec Fix video messages playback on Retina. 2019-04-02 14:33:53 +04:00
John Preston
d3bf489bea Improve base::binary_guard interface. 2019-04-02 14:33:52 +04:00
John Preston
efb2972d28 Move delete-from-ToS to AuthSession. 2019-04-02 14:33:52 +04:00
23rd
3fa3428b4b Added ability to go to top of media panel by clicking on selected tab. 2019-04-02 14:33:52 +04:00
John Preston
84e9e37353 Closed alpha version 1.6.3.1: Fix build for Xcode. 2019-03-29 14:24:08 +04:00
John Preston
5c0f278775 Closed alpha version 1.6.3.1. 2019-03-29 14:24:08 +04:00
John Preston
8759d637ff Use StorageFileLocation in mtpFileLoader. 2019-03-29 14:24:07 +04:00
John Preston
95023ca770 Use StorageFileLocation in streaming loader. 2019-03-29 14:24:07 +04:00
John Preston
3f49796c43 Fix file reference updating. 2019-03-29 14:24:07 +04:00
John Preston
aa8f62da9d Support new ('modern') API file locations. 2019-03-29 14:24:07 +04:00
John Preston
eba2a98703 Add general StorageFileLocation abstraction. 2019-03-29 14:24:06 +04:00
John Preston
d36f6a0322 Update API scheme to layer 98. 2019-03-29 14:24:06 +04:00
John Preston
9ec3d24fec Send ImageSize instead of Video for image/gif. 2019-03-26 17:40:40 +04:00
John Preston
bf182697b9 Use streaming player speed in 2x playback. 2019-03-26 16:51:40 +04:00
John Preston
e87084715d Fix song / voice playback. 2019-03-26 16:51:40 +04:00
John Preston
3bd1bbc77a Use Streaming::Player in video messages playback. 2019-03-26 16:51:39 +04:00
John Preston
8aaa70a05a Fix infinite group set requests on bad API responses. 2019-03-26 16:51:10 +04:00
826 changed files with 43757 additions and 34789 deletions

View File

@@ -25,9 +25,11 @@ GOTO:EOF
:getDependencies
call:logInfo "Clone dependencies repository"
git clone -q --depth 1 --branch=master https://github.com/telegramdesktop/dependencies_windows.git %LIB_DIR%
git clone -q --depth 1 --branch master https://github.com/telegramdesktop/dependencies_windows.git %LIB_DIR%
cd %LIB_DIR%
git clone https://github.com/ericniebler/range-v3
git clone --depth 1 --branch 0.5.0 https://github.com/ericniebler/range-v3
if exist prepare.bat (
call prepare.bat
) else (
@@ -40,9 +42,9 @@ GOTO:EOF
:setupGYP
call:logInfo "Setup GYP/Ninja and generate VS solution"
cd %LIB_DIR%
git clone https://chromium.googlesource.com/external/gyp
git clone https://github.com/telegramdesktop/gyp.git
cd gyp
git checkout a478c1ab51
git checkout tdesktop
SET PATH=%PATH%;%BUILD_DIR%\Libraries\gyp;%BUILD_DIR%\Libraries\ninja;
cd %SRC_DIR%
git submodule init

View File

@@ -1,3 +1,9 @@
---
name: Bug report
about: Report errors or unexpected behavior.
---
<!--
Thanks for reporting issues of Telegram Desktop!

View File

@@ -0,0 +1,18 @@
---
name: Feature request
about: Suggest an idea.
title: "[Feature Request] "
---
### Is your feature request related to a problem?
A clear and concise description of what the problem is.
### Describe the solution you'd like
A clear and concise description of what you want to happen.
### Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
### Additional context
Add any other context or screenshots about the feature request here.

8
.github/ISSUE_TEMPLATE/QUESTION.md vendored Normal file
View File

@@ -0,0 +1,8 @@
---
name: Question
about: Ask a question.
title: "[Question] "
labels: 'question'
assignees: ''
---

6
.gitmodules vendored
View File

@@ -16,3 +16,9 @@
[submodule "Telegram/ThirdParty/xxHash"]
path = Telegram/ThirdParty/xxHash
url = https://github.com/Cyan4973/xxHash.git
[submodule "Telegram/ThirdParty/rlottie"]
path = Telegram/ThirdParty/rlottie
url = https://github.com/john-preston/rlottie
[submodule "Telegram/ThirdParty/lz4"]
path = Telegram/ThirdParty/lz4
url = https://github.com/lz4/lz4.git

View File

@@ -31,8 +31,8 @@ addons:
- dpatch
- equivs
- fakeroot
- g++-7
- gcc-7
- g++-8
- gcc-8
- git
- gnome-common
- gobject-introspection
@@ -56,8 +56,8 @@ addons:
- yasm
before_install:
- export CXX="g++-7" CC="gcc-7"
- sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 60 --slave /usr/bin/g++ g++ /usr/bin/g++-7
- export CXX="g++-8" CC="gcc-8"
- sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 60 --slave /usr/bin/g++ g++ /usr/bin/g++-8
- sudo update-alternatives --config gcc
- g++ --version

View File

@@ -28,7 +28,7 @@ GYP_CACHE_VERSION="3"
GYP_PATCH="$UPSTREAM/Telegram/Patches/gyp.diff"
RANGE_PATH="$BUILD/range-v3"
RANGE_CACHE_VERSION="3"
RANGE_CACHE_VERSION="4"
VA_PATH="$BUILD/libva"
VA_CACHE_VERSION="3"
@@ -216,7 +216,7 @@ buildRange() {
rm -rf *
cd "$EXTERNAL"
git clone --depth=1 https://github.com/ericniebler/range-v3
git clone --depth 1 --branch 0.5.0 https://github.com/ericniebler/range-v3
cd "$EXTERNAL/range-v3"
cp -r * "$RANGE_PATH/"

View File

@@ -15,9 +15,10 @@ The source code is published under GPLv3 with OpenSSL exception, the license is
* Windows XP - Windows 10 (**not** RT)
* Mac OS X 10.8 - Mac OS X 10.11
* Mac OS X 10.6 - Mac OS X 10.7 (separate build)
* Ubuntu 12.04 - Ubuntu 18.10
* Fedora 22 - Fedora 29
* Ubuntu 12.04 - Ubuntu 19.04
* Fedora 22 - Fedora 30
* [Snappy](https://snapcraft.io/telegram-desktop)
* [Flathub](https://flathub.org/apps/details/org.telegram.desktop)
## Third-party
@@ -44,7 +45,7 @@ The source code is published under GPLv3 with OpenSSL exception, the license is
## Build instructions
* [Visual Studio 2017][msvc]
* [Visual Studio 2019][msvc]
* [Xcode 10][xcode]
* [GYP/CMake on GNU/Linux][cmake]

View File

@@ -1,8 +1,8 @@
diff --git a/pylib/gyp/generator/cmake.py b/pylib/gyp/generator/cmake.py
index a2b9629..ac59461 100644
index 4a2041cf..e5333926 100644
--- a/pylib/gyp/generator/cmake.py
+++ b/pylib/gyp/generator/cmake.py
@@ -1070,6 +1070,23 @@ def WriteTarget(namer, qualified_target, target_dicts, build_dir, config_to_use,
@@ -1078,6 +1078,23 @@ def WriteTarget(namer, qualified_target, target_dicts, build_dir, config_to_use,
output.write(')\n')
@@ -26,7 +26,7 @@ index a2b9629..ac59461 100644
UnsetVariable(output, 'TOOLSET')
UnsetVariable(output, 'TARGET')
@@ -1112,6 +1129,8 @@ def GenerateOutputForConfig(target_list, target_dicts, data,
@@ -1120,6 +1137,8 @@ def GenerateOutputForConfig(target_list, target_dicts, data,
SetVariable(output, 'configuration', config_to_use)
ar = None
@@ -35,7 +35,7 @@ index a2b9629..ac59461 100644
cc = None
cxx = None
@@ -1121,17 +1140,27 @@ def GenerateOutputForConfig(target_list, target_dicts, data,
@@ -1129,17 +1148,27 @@ def GenerateOutputForConfig(target_list, target_dicts, data,
for key, value in make_global_settings:
if key == 'AR':
ar = os.path.join(build_to_top, value)
@@ -64,48 +64,63 @@ index a2b9629..ac59461 100644
SetVariable(output, 'CMAKE_C_COMPILER', cc)
if cxx:
diff --git a/pylib/gyp/generator/xcode.py b/pylib/gyp/generator/xcode.py
index db99d6a..8d56baf 100644
index 8bc22bed..24bee427 100644
--- a/pylib/gyp/generator/xcode.py
+++ b/pylib/gyp/generator/xcode.py
@@ -72,6 +72,10 @@ generator_additional_non_configuration_keys = [
@@ -74,6 +74,12 @@ generator_additional_non_configuration_keys = [
'ios_app_extension',
'ios_watch_app',
'ios_watchkit_extension',
+
+ 'mac_sandbox', # sandbox support
+ 'mac_sandbox_development_team',
+
+ 'mac_hardened_runtime', # hardened runtime support
+
'mac_bundle',
'mac_bundle_resources',
'mac_framework_headers',
@@ -772,6 +776,26 @@ def GenerateOutput(target_list, target_dicts, data, params):
@@ -774,6 +780,39 @@ def GenerateOutput(target_list, target_dicts, data, params):
xcode_targets[qualified_target] = xct
xcode_target_to_target_dict[xct] = spec
+ # sandbox support
+ # sandbox and hardened runtime support
+ is_sandbox = int(spec.get('mac_sandbox', 0))
+ is_hardened_runtime = int(spec.get('mac_hardened_runtime', 0))
+ if is_sandbox or is_hardened_runtime:
+ try:
+ tmp = pbxp._properties['attributes']['TargetAttributes']
+ except KeyError:
+ pbxp._properties['attributes']['TargetAttributes'] = {}
+ try:
+ tmp = pbxp._properties['attributes']['TargetAttributes'][xct]
+ except KeyError:
+ pbxp._properties['attributes']['TargetAttributes'][xct] = {}
+ try:
+ tmp = pbxp._properties['attributes']['TargetAttributes'][xct]['SystemCapabilities']
+ except KeyError:
+ pbxp._properties['attributes']['TargetAttributes'][xct]['SystemCapabilities'] = {}
+
+ if is_sandbox:
+ dev_team = spec.get('mac_sandbox_development_team', '%%ERROR%%')
+ assert dev_team != '%%ERROR%%', (
+ 'mac_sandbox must be accompanied by mac_sandbox_development_team (target "%s")' %
+ target_name)
+ try:
+ tmp = pbxp._properties['attributes']['TargetAttributes']
+ except KeyError:
+ pbxp._properties['attributes']['TargetAttributes'] = {}
+ pbxp._properties['attributes']['TargetAttributes'][xct] = {
+ 'DevelopmentTeam': dev_team,
+ 'SystemCapabilities': {
+ 'com.apple.Sandbox': {
+ 'enabled': 1,
+ },
+ },
+ pbxp._properties['attributes']['TargetAttributes'][xct]['DevelopmentTeam'] = dev_team
+ pbxp._properties['attributes']['TargetAttributes'][xct]['SystemCapabilities']['com.apple.Sandbox'] = {
+ 'enabled': 1,
+ }
+
+ # hardened runtime support
+ if is_hardened_runtime:
+ pbxp._properties['attributes']['TargetAttributes'][xct]['SystemCapabilities']['com.apple.HardenedRuntime'] = {
+ 'enabled': 1,
+ }
+
spec_actions = spec.get('actions', [])
spec_rules = spec.get('rules', [])
@@ -1141,7 +1165,8 @@ exit 1
@@ -1132,7 +1171,8 @@ exit 1
groups = [x for x in groups if not x.endswith('_excluded')]
for group in groups:
for item in rule.get(group, []):

View File

@@ -252,6 +252,24 @@ index 41834b21ae..8cdf4ab145 100644
if (value == WSAEADDRNOTAVAIL) {
setError(QAbstractSocket::NetworkError, AddressNotAvailableErrorString);
socketState = QAbstractSocket::UnconnectedState;
diff --git a/src/platformsupport/cglconvenience/cglconvenience.mm b/src/platformsupport/cglconvenience/cglconvenience.mm
index fb609ae485..7cca45ded4 100644
--- a/src/platformsupport/cglconvenience/cglconvenience.mm
+++ b/src/platformsupport/cglconvenience/cglconvenience.mm
@@ -128,7 +128,12 @@ void *qcgl_createNSOpenGLPixelFormat(const QSurfaceFormat &format)
if (format.stereo())
attrs << NSOpenGLPFAStereo;
- attrs << NSOpenGLPFAAllowOfflineRenderers;
+ // Patch: Fix macOS regression. On 10.14.4, it crashes on GPU switches.
+ // See https://bugreports.qt.io/browse/QTCREATORBUG-22215
+ static const QAppleOperatingSystemVersion version = qt_apple_os_version();
+ if (!(version.major == 10 && version.minor == 14 && version.patch == 4)) {
+ attrs << NSOpenGLPFAAllowOfflineRenderers;
+ }
QByteArray useLayer = qgetenv("QT_MAC_WANTS_LAYER");
if (!useLayer.isEmpty() && useLayer.toInt() > 0) {
diff --git a/src/platformsupport/dbustray/qdbustrayicon.cpp b/src/platformsupport/dbustray/qdbustrayicon.cpp
index 4d6e70720d..9bdb0beb67 100644
--- a/src/platformsupport/dbustray/qdbustrayicon.cpp

View File

@@ -294,4 +294,7 @@ notifyFadeRight: icon {{ "fade_horizontal", notificationBg }};
stickerIconLeft: icon {{ "fade_horizontal-flip_horizontal", emojiPanCategories }};
stickerIconRight: icon {{ "fade_horizontal", emojiPanCategories }};
emojiSuggestionsFadeLeft: icon {{ "fade_horizontal-flip_horizontal", boxBg }};
emojiSuggestionsFadeRight: icon {{ "fade_horizontal", boxBg }};
transparentPlaceholderSize: 4px;

View File

@@ -193,6 +193,9 @@ dialogsSentIconFg: #5dc452; // chat list sent message tick / double tick icon
dialogsUnreadBg: windowBgActive; // chat list unread badge background for not muted chat
dialogsUnreadBgMuted: #bbbbbb; // chat list unread badge background for muted chat
dialogsUnreadFg: windowFgActive; // chat list unread badge text
dialogsArchiveFg: #525252 | dialogsNameFg; // chat list archive name text
dialogsOnlineBadgeFg: #4dc920 | dialogsUnreadBg; // chat list online status
dialogsScamFg: dialogsDraftFg; // chat list scam label
dialogsBgOver: windowBgOver; // chat list background with mouse over
dialogsNameFgOver: windowBoldFgOver; // chat list name text with mouse over
@@ -208,6 +211,8 @@ dialogsSentIconFgOver: dialogsSentIconFg; // chat list sent message tick / doubl
dialogsUnreadBgOver: dialogsUnreadBg; // chat list unread badge background for not muted chat with mouse over
dialogsUnreadBgMutedOver: dialogsUnreadBgMuted; // chat list unread badge background for muted chat with mouse over
dialogsUnreadFgOver: dialogsUnreadFg; // chat list unread badge text with mouse over
dialogsArchiveFgOver: #525252 | dialogsNameFgOver; // chat list archive name text with mouse over
dialogsScamFgOver: dialogsDraftFgOver; // chat list scam label with mouse over
dialogsBgActive: #419fd9; // chat list background for current (active) chat
dialogsNameFgActive: windowFgActive; // chat list name text for current (active) chat
@@ -223,6 +228,8 @@ dialogsSentIconFgActive: dialogsTextFgActive; // chat list sent message tick / d
dialogsUnreadBgActive: dialogsTextFgActive; // chat list unread badge background for not muted chat for current (active) chat
dialogsUnreadBgMutedActive: dialogsDraftFgActive; // chat list unread badge background for muted chat for current (active) chat
dialogsUnreadFgActive: dialogsBgActive; // chat list unread badge text for current (active) chat
dialogsOnlineBadgeFgActive: #ffffff; // chat list online status for current (active) chat
dialogsScamFgActive: dialogsDraftFgActive; // chat list scam label for current (active) chat
dialogsRippleBg: windowBgRipple; // chat list background ripple effect
dialogsRippleBgActive: activeButtonBgRipple; // chat list background ripple effect for current (active) chat
@@ -304,6 +311,7 @@ historyPeer8NameFgSelected: historyPeer8NameFg; // orange group member name in a
historyPeer8UserpicBg: #faa774; // orange userpic background
historyPeerUserpicFg: windowFgActive; // default userpic initials
historyPeerSavedMessagesBg: historyPeer4UserpicBg; // saved messages userpic background
historyPeerArchiveUserpicBg: dialogsUnreadBgMuted; // archive folder userpic background
// Some values are marked as (adjusted), it means they're adjusted by
// hue and saturation of the average background color if user chooses
@@ -550,3 +558,7 @@ callBarFg: dialogsNameFgActive; // phone call bar text and icons
importantTooltipBg: toastBg;
importantTooltipFg: toastFg;
importantTooltipFgLink: mediaviewTextLinkFg;
outdatedFg: #ffffff;
outdateSoonBg: #e08543;
outdatedBg: #e05745;

Binary file not shown.

After

Width:  |  Height:  |  Size: 449 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 814 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 307 B

After

Width:  |  Height:  |  Size: 387 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 541 B

After

Width:  |  Height:  |  Size: 638 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 792 B

After

Width:  |  Height:  |  Size: 907 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 343 B

After

Width:  |  Height:  |  Size: 367 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 660 B

After

Width:  |  Height:  |  Size: 1013 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 838 B

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 807 B

After

Width:  |  Height:  |  Size: 327 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 655 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 946 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 572 B

After

Width:  |  Height:  |  Size: 456 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 551 B

After

Width:  |  Height:  |  Size: 399 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 829 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 225 B

After

Width:  |  Height:  |  Size: 341 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 424 B

After

Width:  |  Height:  |  Size: 650 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 680 B

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 872 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 337 B

After

Width:  |  Height:  |  Size: 395 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 486 B

After

Width:  |  Height:  |  Size: 737 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 933 B

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 234 B

After

Width:  |  Height:  |  Size: 364 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 458 B

After

Width:  |  Height:  |  Size: 763 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 923 B

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 512 B

After

Width:  |  Height:  |  Size: 833 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 444 B

After

Width:  |  Height:  |  Size: 452 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 855 B

After

Width:  |  Height:  |  Size: 884 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 714 B

After

Width:  |  Height:  |  Size: 781 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 557 B

After

Width:  |  Height:  |  Size: 812 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 716 B

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 438 B

After

Width:  |  Height:  |  Size: 251 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 747 B

After

Width:  |  Height:  |  Size: 528 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 722 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 517 B

After

Width:  |  Height:  |  Size: 401 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 905 B

After

Width:  |  Height:  |  Size: 877 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 939 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 715 B

After

Width:  |  Height:  |  Size: 599 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 586 B

After

Width:  |  Height:  |  Size: 470 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 727 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -77,6 +77,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_month_year" = "{month} {year}";
"lng_box_ok" = "OK";
"lng_box_done" = "Done";
"lng_cancel" = "Cancel";
"lng_continue" = "Continue";
@@ -118,11 +119,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_channel_status" = "channel";
"lng_group_status" = "group";
"lng_channel_members_link#one" = "{count} member";
"lng_channel_members_link#other" = "{count} members";
"lng_channel_admins_link#one" = "{count} administrator";
"lng_channel_admins_link#other" = "{count} administrators";
"lng_scam_badge" = "SCAM";
"lng_flood_error" = "Too many tries. Please try again later.";
"lng_gif_error" = "An error has occurred while reading GIF animation :(";
@@ -141,6 +138,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_error_cant_ban_admin" = "Sorry, you can't ban this user because they are an admin in this group and you are not allowed to demote them.";
"lng_error_admin_limit" = "Sorry, you've reached the maximum number of admins for this group.";
"lng_error_admin_limit_channel" = "Sorry, you've reached the maximum number of admins for this channel.";
"lng_error_post_link_invalid" = "Unfortunately, you can't access this message. You are not a member of the chat where it was posted.";
"lng_sure_add_admin_invite" = "This user is not a member of this group. Add them to the group and promote them to admin?";
"lng_sure_add_admin_invite_channel" = "This user is not a subscriber of this channel. Add them to the channel and promote them to admin?";
"lng_sure_add_admin_unremove" = "This user is currently restricted or removed. Are you sure you want to promote them?";
@@ -162,6 +160,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_pinned_unpin" = "Unpin";
"lng_pinned_notify" = "Notify all members";
"lng_edit_media_album_error" = "This file cannot be saved as a part of an album.";
"lng_edit_media_invalid_file" = "Sorry, no way to use this file.";
"lng_intro_about" = "Welcome to the official Telegram Desktop app.\nIt's fast and secure.";
"lng_start_msgs" = "START MESSAGING";
@@ -174,7 +175,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_phone_title" = "Your Phone Number";
"lng_phone_desc" = "Please confirm your country code and\nenter your mobile phone number.";
"lng_phone_notreg" = "If you don't have a Telegram account yet,\nplease [b]sign up[/b] with {link_start}Android / iPhone{link_end} or {signup_start}here{signup_end}";
"lng_country_code" = "Country Code";
"lng_bad_country_code" = "Invalid Country Code";
"lng_country_ph" = "Search";
@@ -183,7 +183,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_code_ph" = "Your code";
"lng_code_desc" = "We have sent you a message with activation\ncode to your phone. Please enter it below.";
"lng_code_telegram" = "Please enter the code you've just received\nin your previous [b]Telegram[/b] app.";
"lng_code_from_telegram" = "Please enter the code you've just received\nin your previous **Telegram** app.";
"lng_code_no_telegram" = "Send code via SMS";
"lng_code_call" = "Telegram will call you in {minutes}:{seconds}";
"lng_code_calling" = "Requesting a call from Telegram...";
@@ -289,6 +289,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_settings_count_unread" = "Count unread messages";
"lng_settings_events_title" = "Events";
"lng_settings_events_joined" = "Contact joined Telegram";
"lng_settings_events_pinned" = "Pinned messages";
"lng_notification_preview" = "You have a new message";
"lng_notification_reply" = "Reply";
@@ -356,9 +357,11 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_settings_privacy_title" = "Privacy";
"lng_settings_last_seen" = "Last seen";
"lng_settings_calls" = "Voice calls";
"lng_settings_calls_peer_to_peer" = "Peer-to-peer in calls";
"lng_settings_calls_peer_to_peer_title" = "Peer-to-peer";
"lng_settings_calls_peer_to_peer_button" = "Use peer-to-peer with";
"lng_settings_groups_invite" = "Groups";
"lng_settings_group_privacy_about" = "Change who can add you to groups and channels.";
"lng_settings_phone_number_privacy" = "Phone number";
"lng_settings_forwards_privacy" = "Forwarded messages";
"lng_settings_profile_photo_privacy" = "Profile photo";
"lng_settings_sessions_about" = "Control your sessions on other devices.";
@@ -589,12 +592,15 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_blocked_list_title" = "Blocked users";
"lng_blocked_list_unknown_phone" = "unknown phone number";
"lng_blocked_list_unblock" = "Unblock";
"lng_blocked_list_restart" = "Restart";
"lng_blocked_list_add" = "Block user";
"lng_blocked_list_add_title" = "Select user to block";
"lng_blocked_list_already_blocked" = "blocked already";
"lng_blocked_list_about" = "Blocked users can't send you messages or add you to groups. They will not see your profile pictures, online and last seen status.";
"lng_blocked_list_not_found" = "No users found.";
"lng_blocked_list_confirm_title" = "Block {name}";
"lng_blocked_list_confirm_text" = "Do you want to block {name} from messaging and calling you on Telegram?";
"lng_blocked_list_confirm_clear" = "Delete this chat";
"lng_blocked_list_confirm_ok" = "Block";
"lng_edit_privacy_everyone" = "Everybody";
"lng_edit_privacy_contacts" = "My contacts";
@@ -603,7 +609,16 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_edit_privacy_exceptions_count#one" = "{count} user";
"lng_edit_privacy_exceptions_count#other" = "{count} users";
"lng_edit_privacy_exceptions_add" = "Add users";
"lng_edit_privacy_exceptions_add" = "Add users or groups";
"lng_edit_privacy_phone_number_title" = "Phone number privacy";
"lng_edit_privacy_phone_number_header" = "Who can see your phone number";
"lng_edit_privacy_phone_number_warning" = "Users who already have your number saved in the contacts will also see it on Telegram.";
"lng_edit_privacy_phone_number_always_empty" = "Always share with";
"lng_edit_privacy_phone_number_never_empty" = "Never share with";
"lng_edit_privacy_phone_number_exceptions" = "These settings will override the values above.";
"lng_edit_privacy_phone_number_always_title" = "Always share with";
"lng_edit_privacy_phone_number_never_title" = "Never share with";
"lng_edit_privacy_lastseen_title" = "Last seen privacy";
"lng_edit_privacy_lastseen_header" = "Who can see your last seen time";
@@ -671,7 +686,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_self_destruct_years#other" = "{count} years";
"lng_change_phone_title" = "Change phone number";
"lng_change_phone_description" = "You can change your Telegram number\nhere. Your account and all your cloud data\n— messages, media, contacts, etc. will be\nmoved to the new number.\n\n[b]Important[/b]: all your Telegram contacts will\nget your [b]new number[/b] added to their address\nbook, provided they had your old number and\nyou haven't blocked them in Telegram.";
"lng_change_phone_about" = "You can change your Telegram number\nhere. Your account and all your cloud data\n— messages, media, contacts, etc. will be\nmoved to the new number.\n\n**Important**: all your Telegram contacts will\nget your **new number** added to their address\nbook, provided they had your old number and\nyou haven't blocked them in Telegram.";
"lng_change_phone_warning" = "All your Telegram contacts will get your new number added to their address book, provided they had your old number and you haven't blocked them in Telegram.";
"lng_change_phone_occupied" = "The number {phone} is already connected to a Telegram account. Please delete that account before migrating to the new number.";
"lng_change_phone_button" = "Change number";
@@ -762,9 +777,11 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_profile_info_section" = "Info";
"lng_info_tab_media" = "Media";
"lng_info_mobile_label" = "Mobile";
"lng_info_mobile_hidden" = "Hidden";
"lng_info_username_label" = "Username";
"lng_info_bio_label" = "Bio";
"lng_info_link_label" = "Link";
"lng_info_location_label" = "Location";
"lng_info_about_label" = "About";
"lng_info_user_title" = "User Info";
"lng_info_bot_title" = "Bot Info";
@@ -772,7 +789,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_info_channel_title" = "Channel Info";
"lng_profile_enable_notifications" = "Notifications";
"lng_profile_send_message" = "Send Message";
"lng_info_add_as_contact" = "Add as contact";
"lng_info_add_as_contact" = "Add to contacts";
"lng_profile_shared_media" = "Shared media";
"lng_media_type_photos" = "Photos";
"lng_media_type_videos" = "Videos";
@@ -829,9 +846,34 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_manage_peer_group_type" = "Group type";
"lng_manage_peer_channel_type" = "Channel type";
"lng_manage_peer_link_type" = "Link type";
"lng_manage_peer_link_permanent" = "Permanent link";
"lng_manage_peer_link_invite" = "Invite link";
"lng_manage_private_group_title" = "Private";
"lng_manage_public_group_title" = "Public";
"lng_manage_private_peer_title" = "Private";
"lng_manage_public_peer_title" = "Public";
"lng_manage_discussion_group" = "Discussion";
"lng_manage_discussion_group_add" = "Add a group";
"lng_manage_linked_channel" = "Linked channel";
"lng_manage_linked_channel_restore" = "Restore linked channel";
"lng_manage_discussion_group_about" = "Select a group chat for discussion that will be displayed in your channel.";
"lng_manage_discussion_group_about_chosen" = "A link to {group} is shown to all subscribers in the bottom panel.";
"lng_manage_discussion_group_create" = "Create a new group";
"lng_manage_discussion_group_unlink" = "Unlink group";
"lng_manage_discussion_group_posted" = "Everything you post in the channel is forwarded to this group.";
"lng_manage_discussion_group_sure" = "Do you want to make {group} the discussion board for {channel}?";
"lng_manage_linked_channel_private" = "Any member of this group will be able to see messages in the channel.";
"lng_manage_discussion_group_private" = "Anyone from the channel will be able to see messages in this group.";
"lng_manage_discussion_group_link" = "Link group";
"lng_manage_linked_channel_private_status" = "private channel";
"lng_manage_discussion_group_private_status" = "private group";
"lng_manage_linked_channel_about" = "{channel} is linking the group as its discussion board.";
"lng_manage_linked_channel_unlink" = "Unlink channel";
"lng_manage_linked_channel_posted" = "All new messages posted in this channel are forwarded to the group.";
"lng_manage_discussion_group_warning" = "\"Chat history for new members\" will be switched to **Visible**.";
"lng_manage_history_visibility_title" = "Chat history for new members";
"lng_manage_history_visibility_shown" = "Visible";
"lng_manage_history_visibility_shown_about" = "New members will see messages that were sent before they joined.";
@@ -888,6 +930,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_create_public_group_about" = "Anyone can find the group in search and join, chat history is available to everybody";
"lng_create_private_group_title" = "Private Group";
"lng_create_private_group_about" = "People can only join if they were invited or have an invite link";
"lng_create_permanent_link_title" = "Permanent link";
"lng_create_invite_link_title" = "Invite link";
"lng_create_invite_link_about" = "People can join if they were invited, have an invite link, or from \"Groups nearby\"";
"lng_create_group_skip" = "Skip";
"lng_create_channel_link_about" = "You can use a-z, 0-9 and underscores.\nMinimum length is 5 characters.";
@@ -1011,6 +1057,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_channels_too_much_public_revoke_confirm_group" = "Are you sure you want to revoke the link {link}?\n\nThe group «{group}» will become private.";
"lng_channels_too_much_public_revoke_confirm_channel" = "Are you sure you want to revoke the link {link}?\n\nThe channel «{group}» will become private.";
"lng_channels_too_much_public_revoke" = "Revoke";
"lng_channels_too_much_public_other" = "Sorry, the target user has too many public groups or channels already. Please ask them to make one of their existing groups or channels private first.";
"lng_channels_too_much_located_other" = "Sorry, the target user has too many location-based groups already. Please ask them to delete or transfer one of their existing ones first.";
"lng_group_invite_bad_link" = "This invite link is broken or has expired.";
"lng_group_invite_join" = "Join";
@@ -1027,6 +1075,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_group_invite_no_room" = "Unable to join this group because there are too many members in it already.";
"lng_channel_public_link_copied" = "Link copied to clipboard.";
"lng_context_about_private_link" = "This link will only work for members of this chat.";
"lng_forwarded" = "Forwarded from {user}";
"lng_forwarded_date" = "Original: {date}";
@@ -1040,6 +1089,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_edited" = "edited";
"lng_edited_date" = "Edited: {date}";
"lng_admin_badge" = "admin";
"lng_channel_badge" = "channel";
"lng_fast_reply" = "Reply";
"lng_cancel_edit_post_sure" = "Cancel editing?";
"lng_cancel_edit_post_yes" = "Yes";
@@ -1154,12 +1204,19 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_ban_user" = "Ban User";
"lng_delete_all_from" = "Delete all from this user";
"lng_report_spam" = "Report Spam";
"lng_report_spam_hide" = "Hide";
"lng_report_spam_thanks" = "Thank you for your report!";
"lng_report_spam_sure" = "Are you sure you want to report spam from this user?";
"lng_report_spam_and_leave" = "Report spam and leave";
"lng_report_spam_done" = "Thank you for your report.";
"lng_report_spam_sure_group" = "Are you sure you want to report spam in this group?";
"lng_report_spam_sure_channel" = "Are you sure you want to report spam in this channel?";
"lng_report_spam_ok" = "Report";
"lng_new_contact_block" = "Block user";
"lng_new_contact_block_done" = "{user} is now blocked.";
"lng_new_contact_add" = "Add contact";
"lng_new_contact_share" = "Share my phone number";
"lng_new_contact_share_sure" = "Are you sure you want to share your phone number {phone} with {user}?";
"lng_new_contact_share_done" = "{user} can now see your phone number.";
"lng_new_contact_add_name" = "Add {user} to contacts";
"lng_new_contact_add_done" = "{user} is now in your contact list.";
"lng_cant_send_to_not_contact" = "Sorry, you can only send messages to\nmutual contacts at the moment.\n{more_info}";
"lng_cant_invite_not_contact" = "Sorry, you can only add mutual contacts\nto groups at the moment.\n{more_info}";
"lng_cant_more_info" = "More info »";
@@ -1186,21 +1243,36 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_restart_button" = "Restart";
"lng_channel_mute" = "Mute";
"lng_channel_unmute" = "Unmute";
"lng_channel_discuss" = "Discuss";
"lng_saved_messages" = "Saved Messages";
"lng_saved_short" = "Save";
"lng_saved_forward_here" = "Forward messages here for quick access";
"lng_archived_name" = "Archived chats";
"lng_archived_add" = "Archive";
"lng_archived_remove" = "Unarchive";
"lng_archived_added" = "Chat archived.\nMuted chats will stay archived after new messages arrive.";
"lng_archived_removed" = "Chat restored from your archive.";
"lng_archived_last_list" = "{accumulated}, {chat}";
"lng_archived_last#one" = "{chats} and {count} more chat";
"lng_archived_last#other" = "{chats} and {count} more chats";
"lng_dialogs_text_with_from" = "{from_part} {message}";
"lng_dialogs_text_from_wrapped" = "{from}:";
"lng_dialogs_text_media" = "{media_part} {caption}";
"lng_dialogs_text_media_wrapped" = "{media},";
"lng_dialogs_show_all_chats" = "Show all chats";
"lng_dialogs_hide_muted_chats" = "Hide muted chats";
"lng_dialogs_skip_archive_in_search" = "Skip results from archive";
"lng_dialogs_show_archive_in_search" = "With results from archive";
"lng_open_this_link" = "Open this link?";
"lng_open_link" = "Open";
"lng_allow_bot_pass" = "Allow {bot_name} to pass your Telegram name and ID to the web pages you open via this bot?";
"lng_allow_bot" = "Allow";
"lng_url_auth_open_confirm" = "Do you want to open {link}?";
"lng_url_auth_login_option" = "Log in to {domain} as {user}";
"lng_url_auth_allow_messages" = "Allow {bot} to send me messages";
"lng_bot_start" = "Start";
"lng_bot_choose_group" = "Select a Group";
@@ -1242,7 +1314,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_user_action_upload_file" = "{user} is sending a file";
"lng_unread_bar#one" = "{count} unread message";
"lng_unread_bar#other" = "{count} unread messages";
"lng_unread_bar_some" = "Unread messages";
//"lng_unread_bar_some" = "Unread messages";
"lng_maps_point" = "Location";
"lng_save_photo" = "Save image";
@@ -1255,17 +1327,23 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_duration_played" = "{played} / {duration}";
"lng_date_and_duration" = "{date}, {duration}";
"lng_choose_image" = "Choose an image";
"lng_choose_file" = "Choose a file";
"lng_choose_files" = "Choose files";
"lng_game_tag" = "Game";
"lng_context_view_profile" = "View profile";
"lng_context_view_group" = "View group info";
"lng_context_view_channel" = "View channel info";
"lng_context_view_feed_info" = "View feed info";
//"lng_context_view_feed_info" = "View feed info";
"lng_context_pin_to_top" = "Pin to top";
"lng_context_unpin_from_top" = "Unpin from top";
"lng_context_mark_unread" = "Mark as unread";
"lng_context_mark_read" = "Mark as read";
"lng_context_archive_expand" = "Expand";
"lng_context_archive_collapse" = "Collapse";
"lng_context_archive_to_menu" = "Move to main menu";
"lng_context_archive_to_list" = "Move to chats list";
"lng_context_archive_to_menu_info" = "Archive moved to the main menu!\nYou can return it from the context menu of the archive button.";
"lng_context_promote_admin" = "Promote to admin";
"lng_context_edit_permissions" = "Edit permissions";
@@ -1353,6 +1431,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_contact_phone" = "Phone Number";
"lng_enter_contact_data" = "New Contact";
"lng_contact_mobile_hidden" = "Mobile hidden";
"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_edit_contact_title" = "Edit contact name";
"lng_edit_channel_title" = "Edit channel";
"lng_edit_sign_messages" = "Sign messages";
@@ -1404,9 +1486,11 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_box_leave" = "Leave";
"lng_about_version" = "version {version}";
"lng_about_text_1" = "Official free messaging app based on [a href=\"https://core.telegram.org/api\"]Telegram API[/a]\nfor speed and security.";
"lng_about_text_2" = "This software is licensed under [a href=\"https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE\"]GNU GPL[/a] version 3.\nSource code is available on [a href=\"https://github.com/telegramdesktop/tdesktop\"]GitHub[/a].";
"lng_about_text_3" = "Visit {faq_open}Telegram FAQ{faq_close} for more info.";
"lng_about_text1" = "Official free messaging app based on {api_link}\nfor speed and security.";
"lng_about_text1_api" = "Telegram API";
"lng_about_text2" = "This software is licensed under {gpl_link} version 3.\nSource code is available on {github_link}.";
"lng_about_text3" = "Visit {faq_link} for more info.";
"lng_about_text3_faq" = "Telegram FAQ";
"lng_about_done" = "Done";
"lng_search_no_results" = "No messages found";
@@ -1426,14 +1510,16 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_mediaview_group_photo" = "Group Photo";
"lng_mediaview_channel_photo" = "Channel Photo";
"lng_mediaview_profile_photo" = "Profile Photo";
"lng_mediaview_file_n_of_count" = "{file} {n} of {count}";
"lng_mediaview_n_of_count" = "Photo {n} of {count}";
"lng_mediaview_file_n_of_amount" = "{file} {n} of {amount}";
"lng_mediaview_n_of_amount" = "Photo {n} of {amount}";
"lng_mediaview_doc_image" = "File";
"lng_mediaview_today" = "today at {time}";
"lng_mediaview_yesterday" = "yesterday at {time}";
"lng_mediaview_date_time" = "{date} at {time}";
"lng_mediaview_saved" = "Image was saved to your [c]Downloads[/c] folder";
"lng_mediaview_saved_to" = "Image was saved to your {downloads} folder";
"lng_mediaview_downloads" = "Downloads";
"lng_mediaview_video_loading" = "Loading - {percent}";
"lng_theme_preview_title" = "Theme Preview";
"lng_theme_preview_generating" = "Generating color theme preview...";
@@ -1449,6 +1535,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_menu_formatting" = "Formatting";
"lng_menu_formatting_bold" = "Bold";
"lng_menu_formatting_italic" = "Italic";
"lng_menu_formatting_underline" = "Underline";
"lng_menu_formatting_strike_out" = "Strike-through";
"lng_menu_formatting_monospace" = "Monospace";
"lng_menu_formatting_link_create" = "Create link";
"lng_menu_formatting_link_edit" = "Edit link";
@@ -1514,7 +1602,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_call_box_status_today" = "{time}";
"lng_call_box_status_yesterday" = "Yesterday at {time}";
"lng_call_box_status_date" = "{date} at {time}";
"lng_call_box_status_group" = "({count}) {status}";
"lng_call_box_status_group" = "({amount}) {status}";
"lng_call_outgoing" = "Outgoing call";
"lng_call_incoming" = "Incoming call";
@@ -1533,7 +1621,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_player_message_yesterday" = "Yesterday at {time}";
"lng_player_message_date" = "{date} at {time}";
//"lng_player_cant_stream" = "This file can't be played before it is fully downloaded.\n\nWould you like to download it?";
"lng_player_download" = "Download";
//"lng_player_download" = "Download";
"lng_rights_edit_admin" = "Manage permissions";
"lng_rights_edit_admin_header" = "What can this admin do?";
@@ -1577,6 +1665,21 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_rights_chat_banned_custom" = "Custom";
"lng_rights_chat_banned_custom_date" = "Until {date}";
"lng_rights_transfer_group" = "Transfer group ownership";
"lng_rights_transfer_channel" = "Transfer channel ownership";
"lng_rights_transfer_check" = "Security check";
"lng_rights_transfer_check_about" = "You can transfer this group to {user} only if you have:";
"lng_rights_transfer_check_password" = "• Enabled **2-Step Verification** more than **7 days** ago.";
"lng_rights_transfer_check_session" = "• Logged in on this device more than **24 hours** ago.";
"lng_rights_transfer_check_later" = "Please come back later.";
"lng_rights_transfer_set_password" = "Set password";
"lng_rights_transfer_about" = "This will transfer the full **owner rights** for {group} to {user}.";
"lng_rights_transfer_sure" = "Change owner";
"lng_rights_transfer_password_title" = "Two-step verification";
"lng_rights_transfer_password_description" = "Please enter your password to complete the transfer.";
"lng_rights_transfer_done_group" = "{user} is now the owner of the group.";
"lng_rights_transfer_done_channel" = "{user} is now the owner of the channel.";
"lng_restricted_send_message" = "The admins of this group restricted you from writing here.";
"lng_restricted_send_media" = "The admins of this group restricted you from posting media content here.";
"lng_restricted_send_stickers" = "The admins of this group restricted you from posting stickers here.";
@@ -1657,10 +1760,17 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_admin_log_banned" = "banned {user}";
"lng_admin_log_restricted" = "changed restrictions for {user} {until}";
"lng_admin_log_promoted" = "changed privileges for {user}";
"lng_admin_log_transferred" = "transferred ownership to {user}";
"lng_admin_log_changed_default_permissions" = "changed default permissions";
"lng_admin_log_changed_stickers_group" = "{from} changed the group's {sticker_set}";
"lng_admin_log_changed_stickers_set" = "sticker set";
"lng_admin_log_removed_stickers_group" = "{from} removed the group's sticker set";
"lng_admin_log_changed_linked_chat" = "{from} changed the discussion group to «{chat}»";
"lng_admin_log_removed_linked_chat" = "{from} removed the discussion group";
"lng_admin_log_changed_linked_channel" = "{from} changed the linked channel to «{chat}»";
"lng_admin_log_removed_linked_channel" = "{from} removed the linked channel";
"lng_admin_log_changed_location_chat" = "{from} changed the group location to {address}";
"lng_admin_log_removed_location_chat" = "{from} removed the group location";
"lng_admin_log_user_with_username" = "{name} ({mention})";
"lng_admin_log_restricted_forever" = "indefinitely";
"lng_admin_log_restricted_until" = "until {date}";
@@ -1680,32 +1790,33 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_admin_log_admin_pin_messages" = "Pin messages";
"lng_admin_log_admin_add_admins" = "Add new admins";
"lng_feed_name" = "Feed";
"lng_feed_show_next" = "Show Next";
// #feed
//"lng_feed_name" = "Feed";
//"lng_feed_show_next" = "Show Next";
"lng_feed_group" = "Group in feed";
"lng_feed_ungroup" = "Ungroup from feed";
"lng_feed_channel_added" = "Channel added to your feed.";
"lng_feed_channel_removed" = "Channel removed from your feed.";
"lng_feed_no_messages" = "No messages in this feed yet";
"lng_feed_channels#one" = "{count} channel";
"lng_feed_channels#other" = "{count} channels";
"lng_feed_notifications" = "Feed notifications";
"lng_feed_ungroup_all" = "Ungroup all channels";
"lng_feed_sure_ungroup_all" = "Are you sure you want to ungroup all channels from this feed?";
"lng_feed_ungroup_sure" = "Ungroup";
"lng_feed_create_new" = "New feed";
"lng_feed_too_few_channels#one" = "You need at least {count} channel to create a feed.";
"lng_feed_too_few_channels#other" = "You need at least {count} channels to create a feed.";
"lng_feed_select_more_channels#one" = "Select {count} channel or more.";
"lng_feed_select_more_channels#other" = "Select {count} channels or more.";
"lng_feed_create" = "Create";
"lng_feed_edit_title" = "Edit feed";
"lng_feed_channels_not_found" = "No channels found";
//"lng_feed_group" = "Group in feed";
//"lng_feed_ungroup" = "Ungroup from feed";
//"lng_feed_channel_added" = "Channel added to your feed.";
//"lng_feed_channel_removed" = "Channel removed from your feed.";
//"lng_feed_no_messages" = "No messages in this feed yet";
//"lng_feed_channels#one" = "{count} channel";
//"lng_feed_channels#other" = "{count} channels";
//"lng_feed_notifications" = "Feed notifications";
//"lng_feed_ungroup_all" = "Ungroup all channels";
//"lng_feed_sure_ungroup_all" = "Are you sure you want to ungroup all channels from this feed?";
//"lng_feed_ungroup_sure" = "Ungroup";
//"lng_feed_create_new" = "New feed";
//"lng_feed_too_few_channels#one" = "You need at least {count} channel to create a feed.";
//"lng_feed_too_few_channels#other" = "You need at least {count} channels to create a feed.";
//"lng_feed_select_more_channels#one" = "Select {count} channel or more.";
//"lng_feed_select_more_channels#other" = "Select {count} channels or more.";
//"lng_feed_create" = "Create";
//"lng_feed_edit_title" = "Edit feed";
//"lng_feed_channels_not_found" = "No channels found";
"lng_info_feed_title" = "Feed Info";
"lng_info_feed_is_default" = "Group new channels";
"lng_info_feed_channels" = "Channels";
//"lng_info_feed_title" = "Feed Info";
//"lng_info_feed_is_default" = "Group new channels";
//"lng_info_feed_channels" = "Channels";
"lng_terms_signup" = "By signing up,\nyou agree to the {link}.";
"lng_terms_signup_link" = "Terms of Service";
@@ -1903,14 +2014,14 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_export_state_userpics" = "Profile pictures";
"lng_export_state_chats_list" = "Processing chats...";
"lng_export_state_chats" = "Chats";
"lng_export_state_progress" = "{count} / {total}";
"lng_export_state_ready_progress" = "{ready} / {total}";
"lng_export_progress" = "You can close this window now. Please don't quit Telegram until the data export is completed.";
"lng_export_stop" = "Stop";
"lng_export_sure_stop" = "Are you sure you want to stop exporting your data?\n\nIf you do, you'll need to start over.";
"lng_export_about_done" = "Your data was successfully exported.";
"lng_export_done" = "Show my data";
"lng_export_finished" = "Data export completed.";
"lng_export_total_files" = "Total files: {count}.";
"lng_export_total_amount" = "Total files: {amount}.";
"lng_export_total_size" = "Total size: {size}.";
"lng_export_folder" = "Choose export folder";
"lng_export_invalid" = "Sorry, you have started a new data export, so this data export is now cancelled.";
@@ -1964,6 +2075,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_polls_create_maximum" = "You have added the maximum number of options.";
"lng_polls_create_button" = "Create";
"lng_outdated_title" = "PLEASE UPDATE YOUR OPERATING SYSTEM.";
"lng_outdated_soon" = "Otherwise, Telegram Desktop will stop updating on {date}.";
"lng_outdated_now" = "So that Telegram Desktop can update to newer versions.";
// Wnd specific
"lng_wnd_choose_program_menu" = "Choose Default Program...";
@@ -2015,4 +2130,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_mac_menu_new_channel" = "New Channel";
"lng_mac_menu_show" = "Show Telegram";
"lng_mac_touchbar_favorite_stickers" = "Favorite stickers";
// Keys finished

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -68,12 +68,4 @@
<qresource prefix="/misc">
<file alias="default_shortcuts-custom.json">../default_shortcuts-custom.json</file>
</qresource>
<qresource prefix="/langs">
<file alias="lang_it.strings">../langs/lang_it.strings</file>
<file alias="lang_es.strings">../langs/lang_es.strings</file>
<file alias="lang_de.strings">../langs/lang_de.strings</file>
<file alias="lang_nl.strings">../langs/lang_nl.strings</file>
<file alias="lang_pt_BR.strings">../langs/lang_pt_BR.strings</file>
<file alias="lang_ko.strings">../langs/lang_ko.strings</file>
</qresource>
</RCC>

View File

@@ -153,10 +153,13 @@ inputPeerSelf#7da07ec9 = InputPeer;
inputPeerChat#179be863 chat_id:int = InputPeer;
inputPeerUser#7b8e7de6 user_id:int access_hash:long = InputPeer;
inputPeerChannel#20adaef8 channel_id:int access_hash:long = InputPeer;
inputPeerUserFromMessage#17bae2e6 peer:InputPeer msg_id:int user_id:int = InputPeer;
inputPeerChannelFromMessage#9c95f7bb peer:InputPeer msg_id:int channel_id:int = InputPeer;
inputUserEmpty#b98886cf = InputUser;
inputUserSelf#f7c1b13f = InputUser;
inputUser#d8292816 user_id:int access_hash:long = InputUser;
inputUserFromMessage#2d117597 peer:InputPeer msg_id:int user_id:int = InputUser;
inputPhoneContact#f392b7f4 client_id:long phone:string first_name:string last_name:string = InputContact;
@@ -191,9 +194,12 @@ inputPhoto#3bb3b94a id:long access_hash:long file_reference:bytes = InputPhoto;
inputFileLocation#dfdaabe1 volume_id:long local_id:int secret:long file_reference:bytes = InputFileLocation;
inputEncryptedFileLocation#f5235d55 id:long access_hash:long = InputFileLocation;
inputDocumentFileLocation#196683d9 id:long access_hash:long file_reference:bytes = InputFileLocation;
inputDocumentFileLocation#bad07584 id:long access_hash:long file_reference:bytes thumb_size:string = InputFileLocation;
inputSecureFileLocation#cbc7ee28 id:long access_hash:long = InputFileLocation;
inputTakeoutFileLocation#29be5899 = InputFileLocation;
inputPhotoFileLocation#40181ffe id:long access_hash:long file_reference:bytes thumb_size:string = InputFileLocation;
inputPeerPhotoFileLocation#27d69997 flags:# big:flags.0?true peer:InputPeer volume_id:long local_id:int = InputFileLocation;
inputStickerSetThumb#dbaeae9 stickerset:InputStickerSet volume_id:long local_id:int = InputFileLocation;
peerUser#9db1bc6d user_id:int = Peer;
peerChat#bad0e5bb chat_id:int = Peer;
@@ -210,14 +216,11 @@ storage.fileMov#4b09ebbc = storage.FileType;
storage.fileMp4#b3cea0e4 = storage.FileType;
storage.fileWebp#1081464c = storage.FileType;
fileLocationUnavailable#7c596b46 volume_id:long local_id:int secret:long = FileLocation;
fileLocation#91d11eb dc_id:int volume_id:long local_id:int secret:long file_reference:bytes = FileLocation;
userEmpty#200250ba id:int = User;
user#2e13f4c3 flags:# self:flags.10?true contact:flags.11?true mutual_contact:flags.12?true deleted:flags.13?true bot:flags.14?true bot_chat_history:flags.15?true bot_nochats:flags.16?true verified:flags.17?true restricted:flags.18?true min:flags.20?true bot_inline_geo:flags.21?true support:flags.23?true id:int access_hash:flags.0?long first_name:flags.1?string last_name:flags.2?string username:flags.3?string phone:flags.4?string photo:flags.5?UserProfilePhoto status:flags.6?UserStatus bot_info_version:flags.14?int restriction_reason:flags.18?string bot_inline_placeholder:flags.19?string lang_code:flags.22?string = User;
user#2e13f4c3 flags:# self:flags.10?true contact:flags.11?true mutual_contact:flags.12?true deleted:flags.13?true bot:flags.14?true bot_chat_history:flags.15?true bot_nochats:flags.16?true verified:flags.17?true restricted:flags.18?true min:flags.20?true bot_inline_geo:flags.21?true support:flags.23?true scam:flags.24?true id:int access_hash:flags.0?long first_name:flags.1?string last_name:flags.2?string username:flags.3?string phone:flags.4?string photo:flags.5?UserProfilePhoto status:flags.6?UserStatus bot_info_version:flags.14?int restriction_reason:flags.18?string bot_inline_placeholder:flags.19?string lang_code:flags.22?string = User;
userProfilePhotoEmpty#4f11bae1 = UserProfilePhoto;
userProfilePhoto#d559d8c8 photo_id:long photo_small:FileLocation photo_big:FileLocation = UserProfilePhoto;
userProfilePhoto#ecd75d8c photo_id:long photo_small:FileLocation photo_big:FileLocation dc_id:int = UserProfilePhoto;
userStatusEmpty#9d05049 = UserStatus;
userStatusOnline#edb93949 expires:int = UserStatus;
@@ -229,11 +232,11 @@ userStatusLastMonth#77ebc742 = UserStatus;
chatEmpty#9ba2d800 id:int = Chat;
chat#3bda1bde flags:# creator:flags.0?true kicked:flags.1?true left:flags.2?true deactivated:flags.5?true id:int title:string photo:ChatPhoto participants_count:int date:int version:int migrated_to:flags.6?InputChannel admin_rights:flags.14?ChatAdminRights default_banned_rights:flags.18?ChatBannedRights = Chat;
chatForbidden#7328bdb id:int title:string = Chat;
channel#4df30834 flags:# creator:flags.0?true left:flags.2?true broadcast:flags.5?true verified:flags.7?true megagroup:flags.8?true restricted:flags.9?true signatures:flags.11?true min:flags.12?true id:int access_hash:flags.13?long title:string username:flags.6?string photo:ChatPhoto date:int version:int restriction_reason:flags.9?string admin_rights:flags.14?ChatAdminRights banned_rights:flags.15?ChatBannedRights default_banned_rights:flags.18?ChatBannedRights participants_count:flags.17?int = Chat;
channel#4df30834 flags:# creator:flags.0?true left:flags.2?true broadcast:flags.5?true verified:flags.7?true megagroup:flags.8?true restricted:flags.9?true signatures:flags.11?true min:flags.12?true scam:flags.19?true has_link:flags.20?true has_geo:flags.21?true id:int access_hash:flags.13?long title:string username:flags.6?string photo:ChatPhoto date:int version:int restriction_reason:flags.9?string admin_rights:flags.14?ChatAdminRights banned_rights:flags.15?ChatBannedRights default_banned_rights:flags.18?ChatBannedRights participants_count:flags.17?int = Chat;
channelForbidden#289da732 flags:# broadcast:flags.5?true megagroup:flags.8?true id:int access_hash:long title:string until_date:flags.16?int = Chat;
chatFull#22a235da flags:# can_set_username:flags.7?true id:int about:string participants:ChatParticipants chat_photo:flags.2?Photo notify_settings:PeerNotifySettings exported_invite:ExportedChatInvite bot_info:flags.3?Vector<BotInfo> pinned_msg_id:flags.6?int = ChatFull;
channelFull#1c87a71a flags:# can_view_participants:flags.3?true can_set_username:flags.6?true can_set_stickers:flags.7?true hidden_prehistory:flags.10?true can_view_stats:flags.12?true id:int about:string participants_count:flags.0?int admins_count:flags.1?int kicked_count:flags.2?int banned_count:flags.2?int online_count:flags.13?int read_inbox_max_id:int read_outbox_max_id:int unread_count:int chat_photo:Photo notify_settings:PeerNotifySettings exported_invite:ExportedChatInvite bot_info:Vector<BotInfo> migrated_from_chat_id:flags.4?int migrated_from_max_id:flags.4?int pinned_msg_id:flags.5?int stickerset:flags.8?StickerSet available_min_id:flags.9?int = ChatFull;
chatFull#1b7c9db3 flags:# can_set_username:flags.7?true id:int about:string participants:ChatParticipants chat_photo:flags.2?Photo notify_settings:PeerNotifySettings exported_invite:ExportedChatInvite bot_info:flags.3?Vector<BotInfo> pinned_msg_id:flags.6?int folder_id:flags.11?int = ChatFull;
channelFull#10916653 flags:# can_view_participants:flags.3?true can_set_username:flags.6?true can_set_stickers:flags.7?true hidden_prehistory:flags.10?true can_view_stats:flags.12?true can_set_location:flags.16?true id:int about:string participants_count:flags.0?int admins_count:flags.1?int kicked_count:flags.2?int banned_count:flags.2?int online_count:flags.13?int read_inbox_max_id:int read_outbox_max_id:int unread_count:int chat_photo:Photo notify_settings:PeerNotifySettings exported_invite:ExportedChatInvite bot_info:Vector<BotInfo> migrated_from_chat_id:flags.4?int migrated_from_max_id:flags.4?int pinned_msg_id:flags.5?int stickerset:flags.8?StickerSet available_min_id:flags.9?int folder_id:flags.11?int linked_chat_id:flags.14?int location:flags.15?ChannelLocation pts:int = ChatFull;
chatParticipant#c8d7493e user_id:int inviter_id:int date:int = ChatParticipant;
chatParticipantCreator#da13538a user_id:int = ChatParticipant;
@@ -243,11 +246,11 @@ chatParticipantsForbidden#fc900c2b flags:# chat_id:int self_participant:flags.0?
chatParticipants#3f460fed chat_id:int participants:Vector<ChatParticipant> version:int = ChatParticipants;
chatPhotoEmpty#37c1011c = ChatPhoto;
chatPhoto#6153276a photo_small:FileLocation photo_big:FileLocation = ChatPhoto;
chatPhoto#475cdbd5 photo_small:FileLocation photo_big:FileLocation dc_id:int = ChatPhoto;
messageEmpty#83e5de54 id:int = Message;
message#44f9b43d flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true post:flags.14?true from_scheduled:flags.18?true id:int from_id:flags.8?int to_id:Peer fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?int reply_to_msg_id:flags.3?int date:int message:string media:flags.9?MessageMedia reply_markup:flags.6?ReplyMarkup entities:flags.7?Vector<MessageEntity> views:flags.10?int edit_date:flags.15?int post_author:flags.16?string grouped_id:flags.17?long = Message;
messageService#9e19a1f6 flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true post:flags.14?true id:int from_id:flags.8?int to_id:Peer reply_to_msg_id:flags.3?int date:int action:MessageAction = Message;
message#44f9b43d flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true post:flags.14?true from_scheduled:flags.18?true legacy:flags.19?true id:int from_id:flags.8?int to_id:Peer fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?int reply_to_msg_id:flags.3?int date:int message:string media:flags.9?MessageMedia reply_markup:flags.6?ReplyMarkup entities:flags.7?Vector<MessageEntity> views:flags.10?int edit_date:flags.15?int post_author:flags.16?string grouped_id:flags.17?long = Message;
messageService#9e19a1f6 flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true post:flags.14?true legacy:flags.19?true id:int from_id:flags.8?int to_id:Peer reply_to_msg_id:flags.3?int date:int action:MessageAction = Message;
messageMediaEmpty#3ded6320 = MessageMedia;
messageMediaPhoto#695150d7 flags:# photo:flags.0?Photo ttl_seconds:flags.2?int = MessageMedia;
@@ -278,7 +281,7 @@ messageActionHistoryClear#9fbab604 = MessageAction;
messageActionGameScore#92a72876 game_id:long score:int = MessageAction;
messageActionPaymentSentMe#8f31b327 flags:# currency:string total_amount:long payload:bytes info:flags.0?PaymentRequestedInfo shipping_option_id:flags.1?string charge:PaymentCharge = MessageAction;
messageActionPaymentSent#40699cd0 currency:string total_amount:long = MessageAction;
messageActionPhoneCall#80e11a7f flags:# call_id:long reason:flags.0?PhoneCallDiscardReason duration:flags.1?int = MessageAction;
messageActionPhoneCall#80e11a7f flags:# video:flags.2?true call_id:long reason:flags.0?PhoneCallDiscardReason duration:flags.1?int = MessageAction;
messageActionScreenshotTaken#4792929b = MessageAction;
messageActionCustomAction#fae69f56 message:string = MessageAction;
messageActionBotAllowed#abe9affe domain:string = MessageAction;
@@ -286,10 +289,11 @@ messageActionSecureValuesSentMe#1b287353 values:Vector<SecureValue> credentials:
messageActionSecureValuesSent#d95c6154 types:Vector<SecureValueType> = MessageAction;
messageActionContactSignUp#f3f25f76 = MessageAction;
dialog#e4def5db flags:# pinned:flags.2?true unread_mark:flags.3?true peer:Peer top_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int unread_mentions_count:int notify_settings:PeerNotifySettings pts:flags.0?int draft:flags.1?DraftMessage = Dialog;
dialog#2c171f72 flags:# pinned:flags.2?true unread_mark:flags.3?true peer:Peer top_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int unread_mentions_count:int notify_settings:PeerNotifySettings pts:flags.0?int draft:flags.1?DraftMessage folder_id:flags.4?int = Dialog;
dialogFolder#71bd134c flags:# pinned:flags.2?true folder:Folder peer:Peer top_message:int unread_muted_peers_count:int unread_unmuted_peers_count:int unread_muted_messages_count:int unread_unmuted_messages_count:int = Dialog;
photoEmpty#2331b22d id:long = Photo;
photo#9c477dd8 flags:# has_stickers:flags.0?true id:long access_hash:long file_reference:bytes date:int sizes:Vector<PhotoSize> = Photo;
photo#d07504a5 flags:# has_stickers:flags.0?true id:long access_hash:long file_reference:bytes date:int sizes:Vector<PhotoSize> dc_id:int = Photo;
photoSizeEmpty#e17e23c type:string = PhotoSize;
photoSize#77bfb61b type:string location:FileLocation w:int h:int size:int = PhotoSize;
@@ -316,7 +320,7 @@ inputPeerNotifySettings#9c3d198e flags:# show_previews:flags.0?Bool silent:flags
peerNotifySettings#af509d20 flags:# show_previews:flags.0?Bool silent:flags.1?Bool mute_until:flags.2?int sound:flags.3?string = PeerNotifySettings;
peerSettings#818426cd flags:# report_spam:flags.0?true = PeerSettings;
peerSettings#818426cd flags:# report_spam:flags.0?true add_contact:flags.1?true block_contact:flags.2?true share_contact:flags.3?true need_contacts_exception:flags.4?true report_geo:flags.5?true = PeerSettings;
wallPaper#a437c3ed id:long flags:# creator:flags.0?true default:flags.1?true pattern:flags.3?true dark:flags.4?true access_hash:long slug:string document:Document settings:flags.2?WallPaperSettings = WallPaper;
@@ -326,8 +330,9 @@ inputReportReasonPornography#2e59d922 = ReportReason;
inputReportReasonChildAbuse#adf44ee3 = ReportReason;
inputReportReasonOther#e1746d0a text:string = ReportReason;
inputReportReasonCopyright#9b89f93a = ReportReason;
inputReportReasonGeoIrrelevant#dbd4feed = ReportReason;
userFull#8ea4a881 flags:# blocked:flags.0?true phone_calls_available:flags.4?true phone_calls_private:flags.5?true can_pin_message:flags.7?true user:User about:flags.1?string link:contacts.Link profile_photo:flags.2?Photo notify_settings:PeerNotifySettings bot_info:flags.3?BotInfo pinned_msg_id:flags.6?int common_chats_count:int = UserFull;
userFull#edf17c12 flags:# blocked:flags.0?true phone_calls_available:flags.4?true phone_calls_private:flags.5?true can_pin_message:flags.7?true user:User about:flags.1?string settings:PeerSettings profile_photo:flags.2?Photo notify_settings:PeerNotifySettings bot_info:flags.3?BotInfo pinned_msg_id:flags.6?int common_chats_count:int folder_id:flags.11?int = UserFull;
contact#f911c994 user_id:int mutual:Bool = Contact;
@@ -337,8 +342,6 @@ contactBlocked#561bc879 user_id:int date:int = ContactBlocked;
contactStatus#d3680c61 user_id:int status:UserStatus = ContactStatus;
contacts.link#3ace484c my_link:ContactLink foreign_link:ContactLink user:User = contacts.Link;
contacts.contactsNotModified#b74ba9d2 = contacts.Contacts;
contacts.contacts#eae87e42 contacts:Vector<Contact> saved_count:int users:Vector<User> = contacts.Contacts;
@@ -352,7 +355,7 @@ messages.dialogsSlice#71e094f3 count:int dialogs:Vector<Dialog> messages:Vector<
messages.dialogsNotModified#f0e3e596 count:int = messages.Dialogs;
messages.messages#8c718e87 messages:Vector<Message> chats:Vector<Chat> users:Vector<User> = messages.Messages;
messages.messagesSlice#a6c47aaa flags:# inexact:flags.1?true count:int messages:Vector<Message> chats:Vector<Chat> users:Vector<User> = messages.Messages;
messages.messagesSlice#c8edce1e flags:# inexact:flags.1?true count:int next_rate:flags.0?int messages:Vector<Message> chats:Vector<Chat> users:Vector<User> = messages.Messages;
messages.channelMessages#99262e37 flags:# inexact:flags.1?true pts:int count:int messages:Vector<Message> chats:Vector<Chat> users:Vector<User> = messages.Messages;
messages.messagesNotModified#74535f21 count:int = messages.Messages;
@@ -389,7 +392,6 @@ updateChatParticipants#7761198 participants:ChatParticipants = Update;
updateUserStatus#1bfbd823 user_id:int status:UserStatus = Update;
updateUserName#a7332b73 user_id:int first_name:string last_name:string username:string = Update;
updateUserPhoto#95313b0c user_id:int date:int photo:UserProfilePhoto previous:Bool = Update;
updateContactLink#9d2e67c5 user_id:int my_link:ContactLink foreign_link:ContactLink = Update;
updateNewEncryptedMessage#12bcbd9a message:EncryptedMessage qts:int = Update;
updateEncryptedChatTyping#1710f156 chat_id:int = Update;
updateEncryption#b4a2e88d chat:EncryptedChat date:int = Update;
@@ -402,14 +404,14 @@ updateNotifySettings#bec268ef peer:NotifyPeer notify_settings:PeerNotifySettings
updateServiceNotification#ebe46819 flags:# popup:flags.0?true inbox_date:flags.1?int type:string message:string media:MessageMedia entities:Vector<MessageEntity> = Update;
updatePrivacy#ee3b272a key:PrivacyKey rules:Vector<PrivacyRule> = Update;
updateUserPhone#12b9417b user_id:int phone:string = Update;
updateReadHistoryInbox#9961fd5c peer:Peer max_id:int pts:int pts_count:int = Update;
updateReadHistoryInbox#9c974fdf flags:# folder_id:flags.0?int peer:Peer max_id:int still_unread_count:int pts:int pts_count:int = Update;
updateReadHistoryOutbox#2f2f21bf peer:Peer max_id:int pts:int pts_count:int = Update;
updateWebPage#7f891213 webpage:WebPage pts:int pts_count:int = Update;
updateReadMessagesContents#68c13933 messages:Vector<int> pts:int pts_count:int = Update;
updateChannelTooLong#eb0467fb flags:# channel_id:int pts:flags.0?int = Update;
updateChannel#b6d45656 channel_id:int = Update;
updateNewChannelMessage#62ba04d9 message:Message pts:int pts_count:int = Update;
updateReadChannelInbox#4214f37f channel_id:int max_id:int = Update;
updateReadChannelInbox#330b5424 flags:# folder_id:flags.0?int channel_id:int max_id:int still_unread_count:int pts:int = Update;
updateDeleteChannelMessages#c37521c9 channel_id:int messages:Vector<int> pts:int pts_count:int = Update;
updateChannelMessageViews#98a12b4b channel_id:int id:int views:int = Update;
updateChatParticipantAdmin#b6901959 chat_id:int user_id:int is_admin:Bool version:int = Update;
@@ -431,8 +433,8 @@ updateRecentStickers#9a422c20 = Update;
updateConfig#a229dd06 = Update;
updatePtsChanged#3354678f = Update;
updateChannelWebPage#40771900 channel_id:int webpage:WebPage pts:int pts_count:int = Update;
updateDialogPinned#19d27f3c flags:# pinned:flags.0?true peer:DialogPeer = Update;
updatePinnedDialogs#ea4cb65b flags:# order:flags.0?Vector<DialogPeer> = Update;
updateDialogPinned#6e6fe51c flags:# pinned:flags.0?true folder_id:flags.1?int peer:DialogPeer = Update;
updatePinnedDialogs#fa0f3ca2 flags:# folder_id:flags.1?int order:flags.0?Vector<DialogPeer> = Update;
updateBotWebhookJSON#8317c0c3 data:DataJSON = Update;
updateBotWebhookJSONQuery#9b9240a6 query_id:long data:DataJSON timeout:int = Update;
updateBotShippingQuery#e0cdc940 query_id:long user_id:int payload:bytes shipping_address:PostAddress = Update;
@@ -449,6 +451,9 @@ updateUserPinnedMessage#4c43da18 user_id:int id:int = Update;
updateChatPinnedMessage#e10db349 chat_id:int id:int version:int = Update;
updateMessagePoll#aca1657b flags:# poll_id:long poll:flags.0?Poll results:PollResults = Update;
updateChatDefaultBannedRights#54c01850 peer:Peer default_banned_rights:ChatBannedRights version:int = Update;
updateFolderPeers#19360dc0 folder_peers:Vector<FolderPeer> pts:int pts_count:int = Update;
updatePeerSettings#6a7e7366 peer:Peer settings:PeerSettings = Update;
updatePeerLocated#b4afcfb0 peers:Vector<PeerLocated> = Update;
updates.state#a56c2a3e pts:int qts:int date:int seq:int unread_count:int = updates.State;
@@ -475,7 +480,7 @@ upload.fileCdnRedirect#f18cda44 dc_id:int file_token:bytes encryption_key:bytes
dcOption#18b7a10d flags:# ipv6:flags.0?true media_only:flags.1?true tcpo_only:flags.2?true cdn:flags.3?true static:flags.4?true id:int ip_address:string port:int secret:flags.10?bytes = DcOption;
config#e6ca25f6 flags:# phonecalls_enabled:flags.1?true default_p2p_contacts:flags.3?true preload_featured_stickers:flags.4?true ignore_phone_entities:flags.5?true revoke_pm_inbox:flags.6?true blocked_mode:flags.8?true pfs_enabled:flags.13?true date:int expires:int test_mode:Bool this_dc:int dc_options:Vector<DcOption> dc_txt_domain_name:string chat_size_max:int megagroup_size_max:int forwarded_count_max:int online_update_period_ms:int offline_blur_timeout_ms:int offline_idle_timeout_ms:int online_cloud_timeout_ms:int notify_cloud_delay_ms:int notify_default_delay_ms:int push_chat_period_ms:int push_chat_limit:int saved_gifs_limit:int edit_time_limit:int revoke_time_limit:int revoke_pm_time_limit:int rating_e_decay:int stickers_recent_limit:int stickers_faved_limit:int channels_read_media_period:int tmp_sessions:flags.0?int pinned_dialogs_count_max:int call_receive_timeout_ms:int call_ring_timeout_ms:int call_connect_timeout_ms:int call_packet_timeout_ms:int me_url_prefix:string autoupdate_url_prefix:flags.7?string gif_search_username:flags.9?string venue_search_username:flags.10?string img_search_username:flags.11?string static_maps_provider:flags.12?string caption_length_max:int message_length_max:int webfile_dc_id:int suggested_lang_code:flags.2?string lang_pack_version:flags.2?int base_lang_pack_version:flags.2?int = Config;
config#330b4067 flags:# phonecalls_enabled:flags.1?true default_p2p_contacts:flags.3?true preload_featured_stickers:flags.4?true ignore_phone_entities:flags.5?true revoke_pm_inbox:flags.6?true blocked_mode:flags.8?true pfs_enabled:flags.13?true date:int expires:int test_mode:Bool this_dc:int dc_options:Vector<DcOption> dc_txt_domain_name:string chat_size_max:int megagroup_size_max:int forwarded_count_max:int online_update_period_ms:int offline_blur_timeout_ms:int offline_idle_timeout_ms:int online_cloud_timeout_ms:int notify_cloud_delay_ms:int notify_default_delay_ms:int push_chat_period_ms:int push_chat_limit:int saved_gifs_limit:int edit_time_limit:int revoke_time_limit:int revoke_pm_time_limit:int rating_e_decay:int stickers_recent_limit:int stickers_faved_limit:int channels_read_media_period:int tmp_sessions:flags.0?int pinned_dialogs_count_max:int pinned_infolder_count_max:int call_receive_timeout_ms:int call_ring_timeout_ms:int call_connect_timeout_ms:int call_packet_timeout_ms:int me_url_prefix:string autoupdate_url_prefix:flags.7?string gif_search_username:flags.9?string venue_search_username:flags.10?string img_search_username:flags.11?string static_maps_provider:flags.12?string caption_length_max:int message_length_max:int webfile_dc_id:int suggested_lang_code:flags.2?string lang_pack_version:flags.2?int base_lang_pack_version:flags.2?int = Config;
nearestDc#8e1a1775 country:string this_dc:int nearest_dc:int = NearestDc;
@@ -544,6 +549,7 @@ inputPrivacyKeyPhoneCall#fabadc5f = InputPrivacyKey;
inputPrivacyKeyPhoneP2P#db9e70d2 = InputPrivacyKey;
inputPrivacyKeyForwards#a4dd4c08 = InputPrivacyKey;
inputPrivacyKeyProfilePhoto#5719bacc = InputPrivacyKey;
inputPrivacyKeyPhoneNumber#352dafa = InputPrivacyKey;
privacyKeyStatusTimestamp#bc2eab30 = PrivacyKey;
privacyKeyChatInvite#500e6dfa = PrivacyKey;
@@ -551,6 +557,7 @@ privacyKeyPhoneCall#3d662b7b = PrivacyKey;
privacyKeyPhoneP2P#39491cc8 = PrivacyKey;
privacyKeyForwards#69ec56a3 = PrivacyKey;
privacyKeyProfilePhoto#96151fed = PrivacyKey;
privacyKeyPhoneNumber#d19ae46d = PrivacyKey;
inputPrivacyValueAllowContacts#d09e07b = InputPrivacyRule;
inputPrivacyValueAllowAll#184b35ce = InputPrivacyRule;
@@ -558,6 +565,8 @@ inputPrivacyValueAllowUsers#131cc67f users:Vector<InputUser> = InputPrivacyRule;
inputPrivacyValueDisallowContacts#ba52007 = InputPrivacyRule;
inputPrivacyValueDisallowAll#d66b66c9 = InputPrivacyRule;
inputPrivacyValueDisallowUsers#90110467 users:Vector<InputUser> = InputPrivacyRule;
inputPrivacyValueAllowChatParticipants#4c81c1ba chats:Vector<int> = InputPrivacyRule;
inputPrivacyValueDisallowChatParticipants#d82363af chats:Vector<int> = InputPrivacyRule;
privacyValueAllowContacts#fffe1bac = PrivacyRule;
privacyValueAllowAll#65427b82 = PrivacyRule;
@@ -565,8 +574,10 @@ privacyValueAllowUsers#4d5bbe0c users:Vector<int> = PrivacyRule;
privacyValueDisallowContacts#f888fa1a = PrivacyRule;
privacyValueDisallowAll#8b73e763 = PrivacyRule;
privacyValueDisallowUsers#c7f49b7 users:Vector<int> = PrivacyRule;
privacyValueAllowChatParticipants#18be796b chats:Vector<int> = PrivacyRule;
privacyValueDisallowChatParticipants#acae0690 chats:Vector<int> = PrivacyRule;
account.privacyRules#554abb6f rules:Vector<PrivacyRule> users:Vector<User> = account.PrivacyRules;
account.privacyRules#50a04e45 rules:Vector<PrivacyRule> chats:Vector<Chat> users:Vector<User> = account.PrivacyRules;
accountDaysTTL#b8d0afdf days:int = AccountDaysTTL;
@@ -588,11 +599,6 @@ messages.allStickers#edfd405f hash:int sets:Vector<StickerSet> = messages.AllSti
messages.affectedMessages#84d19185 pts:int pts_count:int = messages.AffectedMessages;
contactLinkUnknown#5f4f9247 = ContactLink;
contactLinkNone#feedd3ad = ContactLink;
contactLinkHasPhone#268f3f59 = ContactLink;
contactLinkContact#d502c2d0 = ContactLink;
webPageEmpty#eb1477e8 id:long = WebPage;
webPagePending#c586da1c id:long date:int = WebPage;
webPage#5f07b4bc flags:# id:long url:string display_url:string hash:int type:flags.0?string site_name:flags.1?string title:flags.2?string description:flags.3?string photo:flags.4?Photo embed_url:flags.5?string embed_type:flags.5?string embed_width:flags.6?int embed_height:flags.6?int duration:flags.7?int author:flags.8?string document:flags.9?Document cached_page:flags.10?Page = WebPage;
@@ -616,13 +622,13 @@ chatInviteEmpty#69df3769 = ExportedChatInvite;
chatInviteExported#fc2e05bc link:string = ExportedChatInvite;
chatInviteAlready#5a686d7c chat:Chat = ChatInvite;
chatInvite#db74f558 flags:# channel:flags.0?true broadcast:flags.1?true public:flags.2?true megagroup:flags.3?true title:string photo:ChatPhoto participants_count:int participants:flags.4?Vector<User> = ChatInvite;
chatInvite#dfc2f58e flags:# channel:flags.0?true broadcast:flags.1?true public:flags.2?true megagroup:flags.3?true title:string photo:Photo participants_count:int participants:flags.4?Vector<User> = ChatInvite;
inputStickerSetEmpty#ffb62b95 = InputStickerSet;
inputStickerSetID#9de7a269 id:long access_hash:long = InputStickerSet;
inputStickerSetShortName#861cc8a0 short_name:string = InputStickerSet;
stickerSet#6a90bcb7 flags:# archived:flags.1?true official:flags.2?true masks:flags.3?true installed_date:flags.0?int id:long access_hash:long title:string short_name:string thumb:flags.4?PhotoSize count:int hash:int = StickerSet;
stickerSet#eeb46f27 flags:# archived:flags.1?true official:flags.2?true masks:flags.3?true animated:flags.5?true installed_date:flags.0?int id:long access_hash:long title:string short_name:string thumb:flags.4?PhotoSize thumb_dc_id:flags.4?int count:int hash:int = StickerSet;
messages.stickerSet#b60a24a6 set:StickerSet packs:Vector<StickerPack> documents:Vector<Document> = messages.StickerSet;
@@ -638,6 +644,8 @@ keyboardButtonRequestGeoLocation#fc796b3f text:string = KeyboardButton;
keyboardButtonSwitchInline#568a748 flags:# same_peer:flags.0?true text:string query:string = KeyboardButton;
keyboardButtonGame#50f41ccf text:string = KeyboardButton;
keyboardButtonBuy#afd93fbb text:string = KeyboardButton;
keyboardButtonUrlAuth#10b78d29 flags:# text:string fwd_text:flags.0?string url:string button_id:int = KeyboardButton;
inputKeyboardButtonUrlAuth#d02e7fd4 flags:# request_write_access:flags.0?true text:string fwd_text:flags.1?string url:string bot:InputUser = KeyboardButton;
keyboardButtonRow#77608b83 buttons:Vector<KeyboardButton> = KeyboardButtonRow;
@@ -661,16 +669,20 @@ messageEntityMentionName#352dca58 offset:int length:int user_id:int = MessageEnt
inputMessageEntityMentionName#208e68c9 offset:int length:int user_id:InputUser = MessageEntity;
messageEntityPhone#9b69e34b offset:int length:int = MessageEntity;
messageEntityCashtag#4c4e743f offset:int length:int = MessageEntity;
messageEntityUnderline#9c4e7e8b offset:int length:int = MessageEntity;
messageEntityStrike#bf0693d4 offset:int length:int = MessageEntity;
messageEntityBlockquote#20df5d0 offset:int length:int = MessageEntity;
inputChannelEmpty#ee8c1e86 = InputChannel;
inputChannel#afeb712e channel_id:int access_hash:long = InputChannel;
inputChannelFromMessage#2a286531 peer:InputPeer msg_id:int channel_id:int = InputChannel;
contacts.resolvedPeer#7f077ad9 peer:Peer chats:Vector<Chat> users:Vector<User> = contacts.ResolvedPeer;
messageRange#ae30253 min_id:int max_id:int = MessageRange;
updates.channelDifferenceEmpty#3e11affb flags:# final:flags.0?true pts:int timeout:flags.1?int = updates.ChannelDifference;
updates.channelDifferenceTooLong#6a9d7b35 flags:# final:flags.0?true pts:int timeout:flags.1?int top_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int unread_mentions_count:int messages:Vector<Message> chats:Vector<Chat> users:Vector<User> = updates.ChannelDifference;
updates.channelDifferenceTooLong#a4bcc6fe flags:# final:flags.0?true timeout:flags.1?int dialog:Dialog messages:Vector<Message> chats:Vector<Chat> users:Vector<User> = updates.ChannelDifference;
updates.channelDifference#2064674e flags:# final:flags.0?true pts:int timeout:flags.1?int new_messages:Vector<Message> other_updates:Vector<Update> chats:Vector<Chat> users:Vector<User> = updates.ChannelDifference;
channelMessagesFilterEmpty#94d42ee7 = ChannelMessagesFilter;
@@ -759,6 +771,8 @@ topPeerCategoryCorrespondents#637b7ed = TopPeerCategory;
topPeerCategoryGroups#bd17a14a = TopPeerCategory;
topPeerCategoryChannels#161d9628 = TopPeerCategory;
topPeerCategoryPhoneCalls#1e76a78c = TopPeerCategory;
topPeerCategoryForwardUsers#a8406ca9 = TopPeerCategory;
topPeerCategoryForwardChats#fbeec0f0 = TopPeerCategory;
topPeerCategoryPeers#fb834291 category:TopPeerCategory count:int peers:Vector<TopPeer> = TopPeerCategoryPeers;
@@ -898,11 +912,11 @@ inputStickerSetItem#ffa0a496 flags:# document:InputDocument emoji:string mask_co
inputPhoneCall#1e36fded id:long access_hash:long = InputPhoneCall;
phoneCallEmpty#5366c915 id:long = PhoneCall;
phoneCallWaiting#1b8f4ad1 flags:# id:long access_hash:long date:int admin_id:int participant_id:int protocol:PhoneCallProtocol receive_date:flags.0?int = PhoneCall;
phoneCallRequested#83761ce4 id:long access_hash:long date:int admin_id:int participant_id:int g_a_hash:bytes protocol:PhoneCallProtocol = PhoneCall;
phoneCallAccepted#6d003d3f id:long access_hash:long date:int admin_id:int participant_id:int g_b:bytes protocol:PhoneCallProtocol = PhoneCall;
phoneCall#e6f9ddf3 flags:# p2p_allowed:flags.5?true id:long access_hash:long date:int admin_id:int participant_id:int g_a_or_b:bytes key_fingerprint:long protocol:PhoneCallProtocol connection:PhoneConnection alternative_connections:Vector<PhoneConnection> start_date:int = PhoneCall;
phoneCallDiscarded#50ca4de1 flags:# need_rating:flags.2?true need_debug:flags.3?true id:long reason:flags.0?PhoneCallDiscardReason duration:flags.1?int = PhoneCall;
phoneCallWaiting#1b8f4ad1 flags:# video:flags.5?true id:long access_hash:long date:int admin_id:int participant_id:int protocol:PhoneCallProtocol receive_date:flags.0?int = PhoneCall;
phoneCallRequested#87eabb53 flags:# video:flags.5?true id:long access_hash:long date:int admin_id:int participant_id:int g_a_hash:bytes protocol:PhoneCallProtocol = PhoneCall;
phoneCallAccepted#997c454a flags:# video:flags.5?true id:long access_hash:long date:int admin_id:int participant_id:int g_b:bytes protocol:PhoneCallProtocol = PhoneCall;
phoneCall#8742ae7f flags:# p2p_allowed:flags.5?true id:long access_hash:long date:int admin_id:int participant_id:int g_a_or_b:bytes key_fingerprint:long protocol:PhoneCallProtocol connections:Vector<PhoneConnection> start_date:int = PhoneCall;
phoneCallDiscarded#50ca4de1 flags:# need_rating:flags.2?true need_debug:flags.3?true video:flags.5?true id:long reason:flags.0?PhoneCallDiscardReason duration:flags.1?int = PhoneCall;
phoneConnection#9d4c17c0 id:long ip:string ipv6:string port:int peer_tag:bytes = PhoneConnection;
@@ -928,7 +942,7 @@ langPackLanguage#eeca5ce3 flags:# official:flags.0?true rtl:flags.2?true beta:fl
channelAdminLogEventActionChangeTitle#e6dfb825 prev_value:string new_value:string = ChannelAdminLogEventAction;
channelAdminLogEventActionChangeAbout#55188a2e prev_value:string new_value:string = ChannelAdminLogEventAction;
channelAdminLogEventActionChangeUsername#6a4afc38 prev_value:string new_value:string = ChannelAdminLogEventAction;
channelAdminLogEventActionChangePhoto#b82f55c3 prev_photo:ChatPhoto new_photo:ChatPhoto = ChannelAdminLogEventAction;
channelAdminLogEventActionChangePhoto#434bd2af prev_photo:Photo new_photo:Photo = ChannelAdminLogEventAction;
channelAdminLogEventActionToggleInvites#1b7907ae new_value:Bool = ChannelAdminLogEventAction;
channelAdminLogEventActionToggleSignatures#26ae0971 new_value:Bool = ChannelAdminLogEventAction;
channelAdminLogEventActionUpdatePinned#e9e82c18 message:Message = ChannelAdminLogEventAction;
@@ -943,6 +957,8 @@ channelAdminLogEventActionChangeStickerSet#b1c3caa7 prev_stickerset:InputSticker
channelAdminLogEventActionTogglePreHistoryHidden#5f5c95f1 new_value:Bool = ChannelAdminLogEventAction;
channelAdminLogEventActionDefaultBannedRights#2df5fc0a prev_banned_rights:ChatBannedRights new_banned_rights:ChatBannedRights = ChannelAdminLogEventAction;
channelAdminLogEventActionStopPoll#8f079643 message:Message = ChannelAdminLogEventAction;
channelAdminLogEventActionChangeLinkedChat#a26f881b prev_value:int new_value:int = ChannelAdminLogEventAction;
channelAdminLogEventActionChangeLocation#e6b76ae prev_value:ChannelLocation new_value:ChannelLocation = ChannelAdminLogEventAction;
channelAdminLogEvent#3b5a3e40 id:long date:int user_id:int action:ChannelAdminLogEventAction = ChannelAdminLogEvent;
@@ -974,8 +990,10 @@ inputMessageReplyTo#bad88395 id:int = InputMessage;
inputMessagePinned#86872538 = InputMessage;
inputDialogPeer#fcaafeb7 peer:InputPeer = InputDialogPeer;
inputDialogPeerFolder#64600527 folder_id:int = InputDialogPeer;
dialogPeer#e56dbf05 peer:Peer = DialogPeer;
dialogPeerFolder#514519e2 folder_id:int = DialogPeer;
messages.foundStickerSetsNotModified#d54b65d = messages.FoundStickerSets;
messages.foundStickerSets#5108d648 hash:int sets:Vector<StickerSetCovered> = messages.FoundStickerSets;
@@ -1131,6 +1149,27 @@ emojiKeywordsDifference#5cc761bd lang_code:string from_version:int version:int k
emojiURL#a575739d url:string = EmojiURL;
emojiLanguage#b3fb5361 lang_code:string = EmojiLanguage;
fileLocationToBeDeprecated#bc7fc6cd volume_id:long local_id:int = FileLocation;
folder#ff544e65 flags:# autofill_new_broadcasts:flags.0?true autofill_public_groups:flags.1?true autofill_new_correspondents:flags.2?true id:int title:string photo:flags.3?ChatPhoto = Folder;
inputFolderPeer#fbd2c296 peer:InputPeer folder_id:int = InputFolderPeer;
folderPeer#e9baa668 peer:Peer folder_id:int = FolderPeer;
messages.searchCounter#e844ebff flags:# inexact:flags.1?true filter:MessagesFilter count:int = messages.SearchCounter;
urlAuthResultRequest#92d33a0e flags:# request_write_access:flags.0?true bot:User domain:string = UrlAuthResult;
urlAuthResultAccepted#8f8c0e4e url:string = UrlAuthResult;
urlAuthResultDefault#a9d6db1f = UrlAuthResult;
channelLocationEmpty#bfb5ad8b = ChannelLocation;
channelLocation#209b82db geo_point:GeoPoint address:string = ChannelLocation;
peerLocated#ca461b5d peer:Peer expires:int distance:int = PeerLocated;
---functions---
invokeAfterMsg#cb9f372d {X:Type} msg_id:long query:!X = X;
@@ -1157,7 +1196,7 @@ auth.resendCode#3ef1a9bf phone_number:string phone_code_hash:string = auth.SentC
auth.cancelCode#1f040578 phone_number:string phone_code_hash:string = Bool;
auth.dropTempAuthKeys#8e48a188 except_auth_keys:Vector<long> = Bool;
account.registerDevice#5cbea590 token_type:int token:string app_sandbox:Bool secret:bytes other_uids:Vector<int> = Bool;
account.registerDevice#68976c6f flags:# no_muted:flags.0?true token_type:int token:string app_sandbox:Bool secret:bytes other_uids:Vector<int> = Bool;
account.unregisterDevice#3076c4bf token_type:int token:string other_uids:Vector<int> = Bool;
account.updateNotifySettings#84be5b93 peer:InputNotifyPeer settings:InputPeerNotifySettings = Bool;
account.getNotifySettings#12b3ad31 peer:InputNotifyPeer = PeerNotifySettings;
@@ -1221,22 +1260,24 @@ contacts.getContactIDs#2caa4a42 hash:int = Vector<int>;
contacts.getStatuses#c4a353ee = Vector<ContactStatus>;
contacts.getContacts#c023849f hash:int = contacts.Contacts;
contacts.importContacts#2c800be5 contacts:Vector<InputContact> = contacts.ImportedContacts;
contacts.deleteContact#8e953744 id:InputUser = contacts.Link;
contacts.deleteContacts#59ab389e id:Vector<InputUser> = Bool;
contacts.deleteContacts#96a0e00 id:Vector<InputUser> = Updates;
contacts.deleteByPhones#1013fd9e phones:Vector<string> = Bool;
contacts.block#332b49fc id:InputUser = Bool;
contacts.unblock#e54100bd id:InputUser = Bool;
contacts.getBlocked#f57c350f offset:int limit:int = contacts.Blocked;
contacts.search#11f812d8 q:string limit:int = contacts.Found;
contacts.resolveUsername#f93ccba3 username:string = contacts.ResolvedPeer;
contacts.getTopPeers#d4982db5 flags:# correspondents:flags.0?true bots_pm:flags.1?true bots_inline:flags.2?true phone_calls:flags.3?true groups:flags.10?true channels:flags.15?true offset:int limit:int hash:int = contacts.TopPeers;
contacts.getTopPeers#d4982db5 flags:# correspondents:flags.0?true bots_pm:flags.1?true bots_inline:flags.2?true phone_calls:flags.3?true forward_users:flags.4?true forward_chats:flags.5?true groups:flags.10?true channels:flags.15?true offset:int limit:int hash:int = contacts.TopPeers;
contacts.resetTopPeerRating#1ae373ac category:TopPeerCategory peer:InputPeer = Bool;
contacts.resetSaved#879537f1 = Bool;
contacts.getSaved#82f1e39f = Vector<SavedContact>;
contacts.toggleTopPeers#8514bdda enabled:Bool = Bool;
contacts.addContact#e8f463d0 flags:# add_phone_privacy_exception:flags.0?true id:InputUser first_name:string last_name:string phone:string = Updates;
contacts.acceptContact#f831a20f id:InputUser = Updates;
contacts.getLocated#a356056 geo_point:InputGeoPoint = Updates;
messages.getMessages#63c66506 id:Vector<InputMessage> = messages.Messages;
messages.getDialogs#b098aee6 flags:# exclude_pinned:flags.0?true offset_date:int offset_id:int offset_peer:InputPeer limit:int hash:int = messages.Dialogs;
messages.getDialogs#a0ee3b73 flags:# exclude_pinned:flags.0?true folder_id:flags.1?int offset_date:int offset_id:int offset_peer:InputPeer limit:int hash:int = messages.Dialogs;
messages.getHistory#dcbb8260 peer:InputPeer offset_id:int offset_date:int add_offset:int limit:int max_id:int min_id:int hash:int = messages.Messages;
messages.search#8614ef68 flags:# peer:InputPeer q:string from_id:flags.0?InputUser filter:MessagesFilter min_date:int max_date:int offset_id:int add_offset:int limit:int max_id:int min_id:int hash:int = messages.Messages;
messages.readHistory#e306d3a peer:InputPeer max_id:int = messages.AffectedMessages;
@@ -1248,7 +1289,6 @@ messages.sendMessage#fa88427a flags:# no_webpage:flags.1?true silent:flags.5?tru
messages.sendMedia#b8d1262b flags:# silent:flags.5?true background:flags.6?true clear_draft:flags.7?true peer:InputPeer reply_to_msg_id:flags.0?int media:InputMedia message:string random_id:long reply_markup:flags.2?ReplyMarkup entities:flags.3?Vector<MessageEntity> = Updates;
messages.forwardMessages#708e0195 flags:# silent:flags.5?true background:flags.6?true with_my_score:flags.8?true grouped:flags.9?true from_peer:InputPeer id:Vector<int> random_id:Vector<long> to_peer:InputPeer = Updates;
messages.reportSpam#cf1592db peer:InputPeer = Bool;
messages.hideReportSpam#a8f1709b peer:InputPeer = Bool;
messages.getPeerSettings#3672e09c peer:InputPeer = PeerSettings;
messages.report#bd82b658 peer:InputPeer id:Vector<int> reason:ReportReason = Bool;
messages.getChats#3c6aa187 id:Vector<int> = messages.Chats;
@@ -1283,7 +1323,7 @@ messages.startBot#e6df7378 bot:InputUser peer:InputPeer random_id:long start_par
messages.getMessagesViews#c4c8a55d peer:InputPeer id:Vector<int> increment:Bool = Vector<int>;
messages.editChatAdmin#a9e69f2e chat_id:int user_id:InputUser is_admin:Bool = Bool;
messages.migrateChat#15a3b8e3 chat_id:int = Updates;
messages.searchGlobal#9e3cacb0 q:string offset_date:int offset_peer:InputPeer offset_id:int limit:int = messages.Messages;
messages.searchGlobal#bf7225a4 flags:# folder_id:flags.0?int q:string offset_rate:int offset_peer:InputPeer offset_id:int limit:int = messages.Messages;
messages.reorderStickerSets#78337739 flags:# masks:flags.0?true order:Vector<long> = Bool;
messages.getDocumentByHash#338e2464 sha256:bytes size:int mime_type:string = Document;
messages.searchGifs#bf9a776b q:string offset:int = messages.FoundGifs;
@@ -1316,8 +1356,8 @@ messages.getCommonChats#d0a48c4 user_id:InputUser max_id:int limit:int = message
messages.getAllChats#eba80ff0 except_ids:Vector<int> = messages.Chats;
messages.getWebPage#32ca8f91 url:string hash:int = WebPage;
messages.toggleDialogPin#a731e257 flags:# pinned:flags.0?true peer:InputDialogPeer = Bool;
messages.reorderPinnedDialogs#5b51d63f flags:# force:flags.0?true order:Vector<InputDialogPeer> = Bool;
messages.getPinnedDialogs#e254d64e = messages.PeerDialogs;
messages.reorderPinnedDialogs#3b1adf37 flags:# force:flags.0?true folder_id:int order:Vector<InputDialogPeer> = Bool;
messages.getPinnedDialogs#d6b94df2 folder_id:int = messages.PeerDialogs;
messages.setBotShippingResults#e5f672fa flags:# query_id:long error:flags.0?string shipping_options:flags.1?Vector<ShippingOption> = Bool;
messages.setBotPrecheckoutResults#9c2dd95 flags:# success:flags.1?true query_id:long error:flags.0?string = Bool;
messages.uploadMedia#519bc2b1 peer:InputPeer media:InputMedia = MessageMedia;
@@ -1343,7 +1383,12 @@ messages.editChatAbout#def60797 peer:InputPeer about:string = Bool;
messages.editChatDefaultBannedRights#a5866b41 peer:InputPeer banned_rights:ChatBannedRights = Updates;
messages.getEmojiKeywords#35a0e062 lang_code:string = EmojiKeywordsDifference;
messages.getEmojiKeywordsDifference#1508b6af lang_code:string from_version:int = EmojiKeywordsDifference;
messages.getEmojiKeywordsLanguages#4e9963b2 lang_codes:Vector<string> = Vector<EmojiLanguage>;
messages.getEmojiURL#d5b10c26 lang_code:string = EmojiURL;
messages.getSearchCounters#732eef00 peer:InputPeer filters:Vector<MessagesFilter> = Vector<messages.SearchCounter>;
messages.requestUrlAuth#e33f5613 peer:InputPeer msg_id:int button_id:int = UrlAuthResult;
messages.acceptUrlAuth#f729ea98 flags:# write_allowed:flags.0?true peer:InputPeer msg_id:int button_id:int = UrlAuthResult;
messages.hidePeerSettingsBar#4facb138 peer:InputPeer = Bool;
updates.getState#edd4882a = updates.State;
updates.getDifference#25939651 flags:# pts:int pts_total_limit:flags.0?int date:int qts:int = updates.Difference;
@@ -1392,7 +1437,7 @@ channels.getParticipants#123e05e9 channel:InputChannel filter:ChannelParticipant
channels.getParticipant#546dd7a6 channel:InputChannel user_id:InputUser = channels.ChannelParticipant;
channels.getChannels#a7f6bbb id:Vector<InputChannel> = messages.Chats;
channels.getFullChannel#8736a09 channel:InputChannel = messages.ChatFull;
channels.createChannel#f4893d7f flags:# broadcast:flags.0?true megagroup:flags.1?true title:string about:string = Updates;
channels.createChannel#3d5fb10f flags:# broadcast:flags.0?true megagroup:flags.1?true title:string about:string geo_point:flags.2?InputGeoPoint address:flags.2?string = Updates;
channels.editAdmin#70f893ba channel:InputChannel user_id:InputUser admin_rights:ChatAdminRights = Updates;
channels.editTitle#566decd0 channel:InputChannel title:string = Updates;
channels.editPhoto#f12e57c9 channel:InputChannel photo:InputChatPhoto = Updates;
@@ -1404,7 +1449,7 @@ channels.inviteToChannel#199f3a6c channel:InputChannel users:Vector<InputUser> =
channels.deleteChannel#c0111fe3 channel:InputChannel = Updates;
channels.exportMessageLink#ceb77163 channel:InputChannel id:int grouped:Bool = ExportedMessageLink;
channels.toggleSignatures#1f69b606 channel:InputChannel enabled:Bool = Updates;
channels.getAdminedPublicChannels#8d8d82d7 = messages.Chats;
channels.getAdminedPublicChannels#f8b036af flags:# by_location:flags.0?true check_limit:flags.1?true = messages.Chats;
channels.editBanned#72796912 channel:InputChannel user_id:InputUser banned_rights:ChatBannedRights = Updates;
channels.getAdminLog#33ddf480 flags:# channel:InputChannel q:string events_filter:flags.0?ChannelAdminLogEventsFilter admins:flags.1?Vector<InputUser> max_id:long min_id:long limit:int = channels.AdminLogResults;
channels.setStickers#ea8ca4f9 channel:InputChannel stickerset:InputStickerSet = Bool;
@@ -1412,6 +1457,10 @@ channels.readMessageContents#eab5dc38 channel:InputChannel id:Vector<int> = Bool
channels.deleteHistory#af369d42 channel:InputChannel max_id:int = Bool;
channels.togglePreHistoryHidden#eabbb94c channel:InputChannel enabled:Bool = Updates;
channels.getLeftChannels#8341ecc0 offset:int = messages.Chats;
channels.getGroupsForDiscussion#f5dad378 = messages.Chats;
channels.setDiscussionGroup#40582bb2 broadcast:InputChannel group:InputChannel = Bool;
channels.editCreator#8f38cd1f channel:InputChannel user_id:InputUser password:InputCheckPasswordSRP = Updates;
channels.editLocation#58e63f6d channel:InputChannel geo_point:InputGeoPoint address:string = Bool;
bots.sendCustomRequest#aa2769ed custom_method:string params:DataJSON = DataJSON;
bots.answerWebhookJSONQuery#e6213f4d query_id:long data:DataJSON = Bool;
@@ -1429,11 +1478,11 @@ stickers.changeStickerPosition#ffb6d4ca sticker:InputDocument position:int = mes
stickers.addStickerToSet#8653febe stickerset:InputStickerSet sticker:InputStickerSetItem = messages.StickerSet;
phone.getCallConfig#55451fa9 = DataJSON;
phone.requestCall#5b95b3d4 user_id:InputUser random_id:int g_a_hash:bytes protocol:PhoneCallProtocol = phone.PhoneCall;
phone.requestCall#42ff96ed flags:# video:flags.0?true user_id:InputUser random_id:int g_a_hash:bytes protocol:PhoneCallProtocol = phone.PhoneCall;
phone.acceptCall#3bd2b4a0 peer:InputPhoneCall g_b:bytes protocol:PhoneCallProtocol = phone.PhoneCall;
phone.confirmCall#2efe1722 peer:InputPhoneCall g_a:bytes key_fingerprint:long protocol:PhoneCallProtocol = phone.PhoneCall;
phone.receivedCall#17d54f61 peer:InputPhoneCall = Bool;
phone.discardCall#78d413a6 peer:InputPhoneCall duration:int reason:PhoneCallDiscardReason connection_id:long = Updates;
phone.discardCall#b2cbc1c0 flags:# video:flags.0?true peer:InputPhoneCall duration:int reason:PhoneCallDiscardReason connection_id:long = Updates;
phone.setCallRating#59ead627 flags:# user_initiative:flags.0?true peer:InputPhoneCall rating:int comment:string = Updates;
phone.saveCallDebug#277add7e peer:InputPhoneCall debug:DataJSON = Bool;
@@ -1443,4 +1492,7 @@ langpack.getDifference#cd984aa5 lang_pack:string lang_code:string from_version:i
langpack.getLanguages#42c6978f lang_pack:string = Vector<LangPackLanguage>;
langpack.getLanguage#6a596502 lang_pack:string lang_code:string = LangPackLanguage;
// LAYER 97
folders.editPeerFolders#6847d0ab folder_peers:Vector<InputFolderPeer> = Updates;
folders.deleteFolder#1c295881 folder_id:int = Updates;
// LAYER 103

View File

@@ -9,7 +9,7 @@
<Identity Name="TelegramMessengerLLP.TelegramDesktop"
ProcessorArchitecture="ARCHITECTURE"
Publisher="CN=536BC709-8EE1-4478-AF22-F0F0F26FF64A"
Version="1.6.3.0" />
Version="1.7.13.0" />
<Properties>
<DisplayName>Telegram Desktop</DisplayName>
<PublisherDisplayName>Telegram Messenger LLP</PublisherDisplayName>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
<!-- Windows 8.1 -->
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<!-- Windows Vista -->
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
<!-- Windows 7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<!-- Windows 8 -->
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
</application>
</compatibility>
</assembly>

View File

@@ -34,8 +34,8 @@ IDI_ICON1 ICON "..\\art\\icon256.ico"
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,6,3,0
PRODUCTVERSION 1,6,3,0
FILEVERSION 1,7,13,0
PRODUCTVERSION 1,7,13,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -52,10 +52,10 @@ BEGIN
BEGIN
VALUE "CompanyName", "Telegram Messenger LLP"
VALUE "FileDescription", "Telegram Desktop"
VALUE "FileVersion", "1.6.3.0"
VALUE "FileVersion", "1.7.13.0"
VALUE "LegalCopyright", "Copyright (C) 2014-2019"
VALUE "ProductName", "Telegram Desktop"
VALUE "ProductVersion", "1.6.3.0"
VALUE "ProductVersion", "1.7.13.0"
END
END
BLOCK "VarFileInfo"

View File

@@ -25,8 +25,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,6,3,0
PRODUCTVERSION 1,6,3,0
FILEVERSION 1,7,13,0
PRODUCTVERSION 1,7,13,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -43,10 +43,10 @@ BEGIN
BEGIN
VALUE "CompanyName", "Telegram Messenger LLP"
VALUE "FileDescription", "Telegram Desktop Updater"
VALUE "FileVersion", "1.6.3.0"
VALUE "FileVersion", "1.7.13.0"
VALUE "LegalCopyright", "Copyright (C) 2014-2019"
VALUE "ProductName", "Telegram Desktop"
VALUE "ProductVersion", "1.6.3.0"
VALUE "ProductVersion", "1.7.13.0"
END
END
BLOCK "VarFileInfo"

View File

@@ -15,6 +15,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
bool BetaChannel = false;
quint64 AlphaVersion = 0;
bool OnlyAlphaKey = false;
const char *PublicKey = "\
-----BEGIN RSA PUBLIC KEY-----\n\
@@ -126,6 +127,21 @@ int32 *hashSha1(const void *data, uint32 len, void *dest) {
QString AlphaSignature;
int writeAlphaKey() {
if (!AlphaVersion) {
return 0;
}
QString keyName(QString("talpha_%1_key").arg(AlphaVersion));
QFile key(keyName);
if (!key.open(QIODevice::WriteOnly)) {
cout << "Can't open '" << keyName.toUtf8().constData() << "' for write..\n";
return -1;
}
key.write(AlphaSignature.toUtf8());
key.close();
return 0;
}
int main(int argc, char *argv[])
{
QString workDir;
@@ -146,6 +162,8 @@ int main(int argc, char *argv[])
version = QString(argv[i + 1]).toInt();
} else if (string("-beta") == argv[i]) {
BetaChannel = true;
} else if (string("-alphakey") == argv[i]) {
OnlyAlphaKey = true;
} else if (string("-alpha") == argv[i] && i + 1 < argc) {
AlphaVersion = QString(argv[i + 1]).toULongLong();
if (AlphaVersion > version * 1000ULL && AlphaVersion < (version + 1) * 1000ULL) {
@@ -160,6 +178,9 @@ int main(int argc, char *argv[])
}
}
}
if (OnlyAlphaKey) {
return writeAlphaKey();
}
if (files.isEmpty() || remove.isEmpty() || version <= 1016 || version > 999999999) {
#ifdef Q_OS_WIN
@@ -464,20 +485,9 @@ int main(int argc, char *argv[])
out.write(compressed);
out.close();
if (AlphaVersion) {
QString keyName(QString("talpha_%1_key").arg(AlphaVersion));
QFile key(keyName);
if (!key.open(QIODevice::WriteOnly)) {
cout << "Can't open '" << keyName.toUtf8().constData() << "' for write..\n";
return -1;
}
key.write(AlphaSignature.toUtf8());
key.close();
}
cout << "Update file '" << outName.toUtf8().constData() << "' written successfully!\n";
return 0;
return writeAlphaKey();
}
QString countAlphaVersionSignature(quint64 version) { // duplicated in autoupdater.cpp

File diff suppressed because it is too large Load Diff

View File

@@ -60,26 +60,76 @@ inline int32 CountHash(IntRange &&range) {
class ApiWrap : public MTP::Sender, private base::Subscriber {
public:
ApiWrap(not_null<AuthSession*> session);
struct Privacy {
enum class Key {
PhoneNumber,
LastSeen,
Calls,
Invites,
CallsPeer2Peer,
Forwards,
ProfilePhoto,
};
enum class Option {
Everyone,
Contacts,
Nobody,
};
Option option = Option::Everyone;
std::vector<not_null<PeerData*>> always;
std::vector<not_null<PeerData*>> never;
static MTPInputPrivacyKey Input(Key key);
static std::optional<Key> KeyFromMTP(mtpTypeId type);
};
struct BlockedUsersSlice {
struct Item {
UserData *user = nullptr;
TimeId date = 0;
bool operator==(const Item &other) const;
bool operator!=(const Item &other) const;
};
QVector<Item> list;
int total = 0;
bool operator==(const BlockedUsersSlice &other) const;
bool operator!=(const BlockedUsersSlice &other) const;
};
explicit ApiWrap(not_null<AuthSession*> session);
AuthSession &session() const;
void applyUpdates(const MTPUpdates &updates, uint64 sentMessageRandomId = 0);
void applyNotifySettings(
MTPInputNotifyPeer peer,
const MTPPeerNotifySettings &settings);
void savePinnedOrder();
//void toggleChannelGrouping( // #feed
// not_null<ChannelData*> channel,
// bool group,
// Fn<void()> callback);
//void ungroupAllFromFeed(not_null<Data::Feed*> feed);
void savePinnedOrder(Data::Folder *folder);
void toggleHistoryArchived(
not_null<History*> history,
bool archived,
Fn<void()> callback);
//void ungroupAllFromFeed(not_null<Data::Feed*> feed); // #feed
using RequestMessageDataCallback = Fn<void(ChannelData*, MsgId)>;
void requestMessageData(
ChannelData *channel,
MsgId msgId,
RequestMessageDataCallback callback);
QString exportDirectMessageLink(not_null<HistoryItem*> item);
void requestContacts();
void requestDialogEntry(not_null<Data::Feed*> feed);
//void requestFeedDialogsEntries(not_null<Data::Feed*> feed);
void requestDialogs(Data::Folder *folder = nullptr);
void requestPinnedDialogs(Data::Folder *folder = nullptr);
void requestMoreBlockedByDateDialogs();
rpl::producer<bool> dialogsLoadMayBlockByDate() const;
rpl::producer<bool> dialogsLoadBlockedByDate() const;
void requestDialogEntry(not_null<Data::Folder*> folder);
void requestDialogEntry(
not_null<History*> history,
Fn<void()> callback = nullptr);
@@ -100,6 +150,7 @@ public:
void requestFullPeer(not_null<PeerData*> peer);
void requestPeer(not_null<PeerData*> peer);
void requestPeers(const QList<PeerData*> &peers);
void requestPeerSettings(not_null<PeerData*> peer);
void requestLastParticipants(not_null<ChannelData*> channel);
void requestBots(not_null<ChannelData*> channel);
void requestAdmins(not_null<ChannelData*> channel);
@@ -198,15 +249,19 @@ public:
void leaveChannel(not_null<ChannelData*> channel);
void blockUser(not_null<UserData*> user);
void unblockUser(not_null<UserData*> user);
void unblockUser(not_null<UserData*> user, Fn<void()> onDone = nullptr);
void exportInviteLink(not_null<PeerData*> peer);
void requestNotifySettings(const MTPInputNotifyPeer &peer);
void updateNotifySettingsDelayed(not_null<const PeerData*> peer);
void saveDraftToCloudDelayed(not_null<History*> history);
void savePrivacy(const MTPInputPrivacyKey &key, QVector<MTPInputPrivacyRule> &&rules);
void handlePrivacyChange(mtpTypeId keyTypeId, const MTPVector<MTPPrivacyRule> &rules);
void savePrivacy(
const MTPInputPrivacyKey &key,
QVector<MTPInputPrivacyRule> &&rules);
void handlePrivacyChange(
Privacy::Key key,
const MTPVector<MTPPrivacyRule> &rules);
static int OnlineTillFromStatus(
const MTPUserStatus &status,
int currentOnlineTill);
@@ -276,7 +331,7 @@ public:
const MTPchannels_ChannelParticipants &result,
Fn<void(
int availableCount,
const QVector<MTPChannelParticipant> &list)> callbackList,
const QVector<MTPChannelParticipant> &list)> callbackList = nullptr,
Fn<void()> callbackNotModified = nullptr);
void addChatParticipants(
not_null<PeerData*> peer,
@@ -308,9 +363,9 @@ public:
void shareContact(not_null<UserData*> user, const SendOptions &options);
void readServerHistory(not_null<History*> history);
void readServerHistoryForce(not_null<History*> history);
void readFeed(
not_null<Data::Feed*> feed,
Data::MessagePosition position);
//void readFeed( // #feed
// not_null<Data::Feed*> feed,
// Data::MessagePosition position);
void sendVoiceMessage(
QByteArray result,
@@ -328,6 +383,13 @@ public:
SendMediaType type,
const SendOptions &options);
void editMedia(
Storage::PreparedList &&list,
SendMediaType type,
TextWithTags &&caption,
const SendOptions &options,
MsgId msgIdToEdit);
void sendUploadedPhoto(
FullMsgId localId,
const MTPInputFile &file,
@@ -337,6 +399,13 @@ public:
const MTPInputFile &file,
const std::optional<MTPInputFile> &thumb,
bool silent);
void editUploadedFile(
FullMsgId localId,
const MTPInputFile &file,
const std::optional<MTPInputFile> &thumb,
bool silent,
bool isDocument);
void cancelLocalItem(not_null<HistoryItem*> item);
struct MessageToSend {
@@ -378,29 +447,12 @@ public:
void saveSelfBio(const QString &text, FnMut<void()> done);
struct Privacy {
enum class Key {
LastSeen,
Calls,
Invites,
CallsPeer2Peer,
Forwards,
ProfilePhoto,
};
enum class Option {
Everyone,
Contacts,
Nobody,
};
Option option = Option::Everyone;
std::vector<not_null<UserData*>> always;
std::vector<not_null<UserData*>> never;
static MTPInputPrivacyKey Input(Key key);
};
void reloadPrivacy(Privacy::Key key);
rpl::producer<Privacy> privacyValue(Privacy::Key key);
void reloadBlockedUsers();
rpl::producer<BlockedUsersSlice> blockedUsersSlice();
void reloadSelfDestruct();
rpl::producer<int> selfDestructValue() const;
void saveSelfDestruct(int days);
@@ -413,7 +465,7 @@ public:
void sendPollVotes(
FullMsgId itemId,
const std::vector<QByteArray> &options);
void closePoll(FullMsgId itemId);
void closePoll(not_null<HistoryItem*> item);
void reloadPollResults(not_null<HistoryItem*> item);
~ApiWrap();
@@ -433,7 +485,27 @@ private:
crl::time received = 0;
};
void updatesReceived(const MTPUpdates &updates);
struct DialogsLoadState {
TimeId offsetDate = 0;
MsgId offsetId = 0;
PeerData *offsetPeer = nullptr;
mtpRequestId requestId = 0;
bool listReceived = false;
mtpRequestId pinnedRequestId = 0;
bool pinnedReceived = false;
};
void setupSupportMode();
void refreshDialogsLoadBlocked();
void updateDialogsOffset(
Data::Folder *folder,
const QVector<MTPDialog> &dialogs,
const QVector<MTPMessage> &messages);
void requestMoreDialogs(Data::Folder *folder);
DialogsLoadState *dialogsLoadState(Data::Folder *folder);
void dialogsLoadFinish(Data::Folder *folder);
void checkQuitPreventFinished();
void saveDraftsToCloud();
@@ -447,9 +519,6 @@ private:
QVector<MTPInputMessage> collectMessageIds(const MessageDataRequests &requests);
MessageDataRequests *messageDataRequests(ChannelData *channel, bool onlyExisting = false);
void applyPeerDialogs(const MTPmessages_PeerDialogs &dialogs);
void applyFeedDialogs(
not_null<Data::Feed*> feed,
const MTPmessages_Dialogs &dialogs);
void gotChatFull(
not_null<PeerData*> peer,
@@ -487,10 +556,6 @@ private:
MsgRange range,
const MTPupdates_ChannelDifference &result);
void notifySettingReceived(
MTPInputNotifyPeer peer,
const MTPPeerNotifySettings &settings);
void stickerSetDisenabled(mtpRequestId requestId);
void stickersSaveOrder();
@@ -507,17 +572,17 @@ private:
const QVector<MTPChannelParticipant> &participants);
void jumpToHistoryDate(not_null<PeerData*> peer, const QDate &date);
void jumpToFeedDate(not_null<Data::Feed*> feed, const QDate &date);
//void jumpToFeedDate(not_null<Data::Feed*> feed, const QDate &date); // #feed
template <typename Callback>
void requestMessageAfterDate(
not_null<PeerData*> peer,
const QDate &date,
Callback &&callback);
template <typename Callback>
void requestMessageAfterDate(
not_null<Data::Feed*> feed,
const QDate &date,
Callback &&callback);
//template <typename Callback> // #feed
//void requestMessageAfterDate(
// not_null<Data::Feed*> feed,
// const QDate &date,
// Callback &&callback);
void sharedMediaDone(
not_null<PeerData*> peer,
@@ -586,7 +651,7 @@ private:
uint64 randomId);
FileLoadTo fileLoadTaskOptions(const SendOptions &options) const;
void readFeeds();
//void readFeeds(); // #feed
void getProxyPromotionDelayed(TimeId now, TimeId next);
void proxyPromotionDone(const MTPhelp_ProxyData &proxy);
@@ -625,6 +690,7 @@ private:
using PeerRequests = QMap<PeerData*, mtpRequestId>;
PeerRequests _fullPeerRequests;
PeerRequests _peerRequests;
base::flat_set<not_null<PeerData*>> _requestedPeerSettings;
PeerRequests _participantsRequests;
PeerRequests _botsRequests;
@@ -636,8 +702,8 @@ private:
Fn<void(
const MTPchannels_ChannelParticipants&)> _channelMembersForAddCallback;
base::flat_map<
not_null<ChannelData*>,
std::pair<mtpRequestId,Fn<void()>>> _channelGroupingRequests;
not_null<History*>,
std::pair<mtpRequestId,Fn<void()>>> _historyArchivedRequests;
using KickRequest = std::pair<
not_null<ChannelData*>,
@@ -686,7 +752,7 @@ private:
mtpRequestId _contactsRequestId = 0;
mtpRequestId _contactsStatusesRequestId = 0;
base::flat_set<not_null<Data::Feed*>> _dialogFeedRequests;
base::flat_set<not_null<Data::Folder*>> _dialogFolderRequests;
base::flat_map<
not_null<History*>,
std::vector<Fn<void()>>> _dialogRequests;
@@ -705,19 +771,28 @@ private:
base::flat_map<not_null<UserData*>, mtpRequestId> _userPhotosRequests;
base::flat_set<not_null<Data::Feed*>> _feedChannelsGetRequests;
//base::flat_set<not_null<Data::Feed*>> _feedChannelsGetRequests; // #feed
//base::flat_map<
// not_null<Data::Feed*>,
// mtpRequestId> _feedChannelsSetRequests;
//base::flat_set<std::tuple<
// not_null<Data::Feed*>,
// Data::MessagePosition,
// SliceType>> _feedMessagesRequests;
//base::flat_set<std::tuple<
// not_null<Data::Feed*>,
// Data::MessagePosition,
// SliceType>> _feedMessagesRequestsPending;
//mtpRequestId _saveDefaultFeedIdRequest = 0;
std::unique_ptr<DialogsLoadState> _dialogsLoadState;
TimeId _dialogsLoadTill = 0;
rpl::variable<bool> _dialogsLoadMayBlockByDate = false;
rpl::variable<bool> _dialogsLoadBlockedByDate = false;
base::flat_map<
not_null<Data::Feed*>,
mtpRequestId> _feedChannelsSetRequests;
base::flat_set<std::tuple<
not_null<Data::Feed*>,
Data::MessagePosition,
SliceType>> _feedMessagesRequests;
base::flat_set<std::tuple<
not_null<Data::Feed*>,
Data::MessagePosition,
SliceType>> _feedMessagesRequestsPending;
mtpRequestId _saveDefaultFeedIdRequest = 0;
not_null<Data::Folder*>,
DialogsLoadState> _foldersLoadState;
rpl::event_stream<SendOptions> _sendActions;
@@ -740,9 +815,10 @@ private:
rpl::event_stream<uint64> _stickerSetInstalled;
base::flat_map<not_null<Data::Feed*>, crl::time> _feedReadsDelayed;
base::flat_map<not_null<Data::Feed*>, mtpRequestId> _feedReadRequests;
base::Timer _feedReadTimer;
// #feed
//base::flat_map<not_null<Data::Feed*>, crl::time> _feedReadsDelayed;
//base::flat_map<not_null<Data::Feed*>, mtpRequestId> _feedReadRequests;
//base::Timer _feedReadTimer;
mtpRequestId _proxyPromotionRequestId = 0;
std::pair<QString, uint32> _proxyPromotionKey;
@@ -789,6 +865,10 @@ private:
base::flat_map<Privacy::Key, Privacy> _privacyValues;
std::map<Privacy::Key, rpl::event_stream<Privacy>> _privacyChanges;
mtpRequestId _blockedUsersRequestId = 0;
std::optional<BlockedUsersSlice> _blockedUsersSlice;
rpl::event_stream<BlockedUsersSlice> _blockedUsersChanges;
mtpRequestId _selfDestructRequestId = 0;
std::optional<int> _selfDestructDays;
rpl::event_stream<int> _selfDestructChanges;
@@ -808,4 +888,6 @@ private:
mtpRequestId _attachedStickerSetsRequestId = 0;
base::flat_map<FullMsgId, QString> _unlikelyMessageLinks;
};

View File

@@ -29,6 +29,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "core/application.h"
#include "window/themes/window_theme.h"
#include "window/notifications_manager.h"
#include "window/window_controller.h"
#include "platform/platform_notifications_manager.h"
#include "storage/file_upload.h"
#include "storage/localstorage.h"
@@ -53,21 +54,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
namespace {
App::LaunchState _launchState = App::Launched;
using DependentItemsSet = OrderedSet<HistoryItem*>;
using DependentItems = QMap<HistoryItem*, DependentItemsSet>;
DependentItems dependentItems;
using MsgsData = QHash<MsgId, HistoryItem*>;
MsgsData msgsData;
using ChannelMsgsData = QMap<ChannelId, MsgsData>;
ChannelMsgsData channelMsgsData;
using RandomData = QMap<uint64, FullMsgId>;
RandomData randomData;
using SentData = QMap<uint64, QPair<PeerId, QString>>;
SentData sentData;
HistoryView::Element *hoveredItem = nullptr,
*pressedItem = nullptr,
*hoveredLinkItem = nullptr,
@@ -117,8 +103,8 @@ namespace App {
}
MainWindow *wnd() {
return Core::IsAppLaunched()
? Core::App().getActiveWindow()
return (Core::IsAppLaunched() && Core::App().activeWindow())
? Core::App().activeWindow()->widget().get()
: nullptr;
}
@@ -129,53 +115,6 @@ namespace App {
return nullptr;
}
bool checkEntitiesAndViewsUpdate(const MTPDmessage &m) {
auto peerId = peerFromMTP(m.vto_id);
if (m.has_from_id() && peerId == Auth().userPeerId()) {
peerId = peerFromUser(m.vfrom_id);
}
if (const auto existing = App::histItemById(peerToChannel(peerId), m.vid.v)) {
auto text = qs(m.vmessage);
auto entities = m.has_entities()
? TextUtilities::EntitiesFromMTP(m.ventities.v)
: EntitiesInText();
const auto media = m.has_media() ? &m.vmedia : nullptr;
existing->setText({ text, entities });
existing->updateSentMedia(m.has_media() ? &m.vmedia : nullptr);
existing->updateReplyMarkup(m.has_reply_markup()
? (&m.vreply_markup)
: nullptr);
existing->updateForwardedInfo(m.has_fwd_from()
? &m.vfwd_from
: nullptr);
existing->setViewsCount(m.has_views() ? m.vviews.v : -1);
existing->indexAsNewItem();
Auth().data().requestItemTextRefresh(existing);
if (existing->mainView()) {
App::checkSavedGif(existing);
return true;
}
return false;
}
return false;
}
void updateEditedMessage(const MTPMessage &message) {
message.match([](const MTPDmessageEmpty &) {
}, [](const auto &message) {
auto peerId = peerFromMTP(message.vto_id);
if (message.has_from_id() && peerId == Auth().userPeerId()) {
peerId = peerFromUser(message.vfrom_id);
}
const auto existing = App::histItemById(
peerToChannel(peerId),
message.vid.v);
if (existing) {
existing->applyEdition(message);
}
});
}
void addSavedGif(DocumentData *doc) {
auto &saved = Auth().data().savedGifsRef();
int32 index = saved.indexOf(doc);
@@ -203,357 +142,13 @@ namespace App {
}
}
void feedMsgs(const QVector<MTPMessage> &msgs, NewMessageType type) {
auto indices = base::flat_map<uint64, int>();
for (int i = 0, l = msgs.size(); i != l; ++i) {
const auto &msg = msgs[i];
if (msg.type() == mtpc_message) {
const auto &data = msg.c_message();
if (type == NewMessageUnread) { // new message, index my forwarded messages to links overview
if (checkEntitiesAndViewsUpdate(data)) { // already in blocks
LOG(("Skipping message, because it is already in blocks!"));
continue;
}
}
}
const auto msgId = IdFromMessage(msg);
indices.emplace((uint64(uint32(msgId)) << 32) | uint64(i), i);
}
for (const auto [position, index] : indices) {
Auth().data().addNewMessage(msgs[index], type);
}
}
void feedMsgs(const MTPVector<MTPMessage> &msgs, NewMessageType type) {
return feedMsgs(msgs.v, type);
}
ImagePtr image(const MTPPhotoSize &size) {
switch (size.type()) {
case mtpc_photoSize: {
auto &d = size.c_photoSize();
if (d.vlocation.type() == mtpc_fileLocation) {
auto &l = d.vlocation.c_fileLocation();
return Images::Create(
StorageImageLocation(
d.vw.v,
d.vh.v,
l.vdc_id.v,
l.vvolume_id.v,
l.vlocal_id.v,
l.vsecret.v,
l.vfile_reference.v),
d.vsize.v);
}
} break;
case mtpc_photoCachedSize: {
auto &d = size.c_photoCachedSize();
if (d.vlocation.type() == mtpc_fileLocation) {
auto &l = d.vlocation.c_fileLocation();
auto bytes = qba(d.vbytes);
return Images::Create(
StorageImageLocation(
d.vw.v,
d.vh.v,
l.vdc_id.v,
l.vvolume_id.v,
l.vlocal_id.v,
l.vsecret.v,
l.vfile_reference.v),
bytes);
} else if (d.vlocation.type() == mtpc_fileLocationUnavailable) {
const auto bytes = qba(d.vbytes);
if (auto image = App::readImage(bytes); !image.isNull()) {
return Images::Create(std::move(image), "JPG");
}
}
} break;
case mtpc_photoStrippedSize: {
const auto &d = size.c_photoStrippedSize();
auto bytes = qba(d.vbytes);
if (bytes.size() >= 3 && bytes[0] == '\x01') {
const char header[] = "\xff\xd8\xff\xe0\x00\x10\x4a\x46\x49"
"\x46\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xdb\x00\x43\x00\x28\x1c"
"\x1e\x23\x1e\x19\x28\x23\x21\x23\x2d\x2b\x28\x30\x3c\x64\x41\x3c\x37\x37"
"\x3c\x7b\x58\x5d\x49\x64\x91\x80\x99\x96\x8f\x80\x8c\x8a\xa0\xb4\xe6\xc3"
"\xa0\xaa\xda\xad\x8a\x8c\xc8\xff\xcb\xda\xee\xf5\xff\xff\xff\x9b\xc1\xff"
"\xff\xff\xfa\xff\xe6\xfd\xff\xf8\xff\xdb\x00\x43\x01\x2b\x2d\x2d\x3c\x35"
"\x3c\x76\x41\x41\x76\xf8\xa5\x8c\xa5\xf8\xf8\xf8\xf8\xf8\xf8\xf8\xf8\xf8"
"\xf8\xf8\xf8\xf8\xf8\xf8\xf8\xf8\xf8\xf8\xf8\xf8\xf8\xf8\xf8\xf8\xf8\xf8"
"\xf8\xf8\xf8\xf8\xf8\xf8\xf8\xf8\xf8\xf8\xf8\xf8\xf8\xf8\xf8\xf8\xf8\xf8"
"\xf8\xf8\xf8\xf8\xf8\xff\xc0\x00\x11\x08\x00\x00\x00\x00\x03\x01\x22\x00"
"\x02\x11\x01\x03\x11\x01\xff\xc4\x00\x1f\x00\x00\x01\x05\x01\x01\x01\x01"
"\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x03\x04\x05\x06\x07\x08"
"\x09\x0a\x0b\xff\xc4\x00\xb5\x10\x00\x02\x01\x03\x03\x02\x04\x03\x05\x05"
"\x04\x04\x00\x00\x01\x7d\x01\x02\x03\x00\x04\x11\x05\x12\x21\x31\x41\x06"
"\x13\x51\x61\x07\x22\x71\x14\x32\x81\x91\xa1\x08\x23\x42\xb1\xc1\x15\x52"
"\xd1\xf0\x24\x33\x62\x72\x82\x09\x0a\x16\x17\x18\x19\x1a\x25\x26\x27\x28"
"\x29\x2a\x34\x35\x36\x37\x38\x39\x3a\x43\x44\x45\x46\x47\x48\x49\x4a\x53"
"\x54\x55\x56\x57\x58\x59\x5a\x63\x64\x65\x66\x67\x68\x69\x6a\x73\x74\x75"
"\x76\x77\x78\x79\x7a\x83\x84\x85\x86\x87\x88\x89\x8a\x92\x93\x94\x95\x96"
"\x97\x98\x99\x9a\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xb2\xb3\xb4\xb5\xb6"
"\xb7\xb8\xb9\xba\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xd2\xd3\xd4\xd5\xd6"
"\xd7\xd8\xd9\xda\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xf1\xf2\xf3\xf4"
"\xf5\xf6\xf7\xf8\xf9\xfa\xff\xc4\x00\x1f\x01\x00\x03\x01\x01\x01\x01\x01"
"\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x01\x02\x03\x04\x05\x06\x07\x08"
"\x09\x0a\x0b\xff\xc4\x00\xb5\x11\x00\x02\x01\x02\x04\x04\x03\x04\x07\x05"
"\x04\x04\x00\x01\x02\x77\x00\x01\x02\x03\x11\x04\x05\x21\x31\x06\x12\x41"
"\x51\x07\x61\x71\x13\x22\x32\x81\x08\x14\x42\x91\xa1\xb1\xc1\x09\x23\x33"
"\x52\xf0\x15\x62\x72\xd1\x0a\x16\x24\x34\xe1\x25\xf1\x17\x18\x19\x1a\x26"
"\x27\x28\x29\x2a\x35\x36\x37\x38\x39\x3a\x43\x44\x45\x46\x47\x48\x49\x4a"
"\x53\x54\x55\x56\x57\x58\x59\x5a\x63\x64\x65\x66\x67\x68\x69\x6a\x73\x74"
"\x75\x76\x77\x78\x79\x7a\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x92\x93\x94"
"\x95\x96\x97\x98\x99\x9a\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xb2\xb3\xb4"
"\xb5\xb6\xb7\xb8\xb9\xba\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xd2\xd3\xd4"
"\xd5\xd6\xd7\xd8\xd9\xda\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xf2\xf3\xf4"
"\xf5\xf6\xf7\xf8\xf9\xfa\xff\xda\x00\x0c\x03\x01\x00\x02\x11\x03\x11\x00"
"\x3f\x00";
const char footer[] = "\xff\xd9";
auto real = QByteArray(header, sizeof(header) - 1);
real[164] = bytes[1];
real[166] = bytes[2];
bytes = real + bytes.mid(3) + QByteArray::fromRawData(footer, sizeof(footer) - 1);
if (auto image = App::readImage(bytes); !image.isNull()) {
return Images::Create(std::move(image), "JPG");
}
}
} break;
}
return ImagePtr();
}
void feedInboxRead(const PeerId &peer, MsgId upTo) {
if (const auto history = Auth().data().historyLoaded(peer)) {
history->inboxRead(upTo);
}
}
void feedOutboxRead(const PeerId &peer, MsgId upTo, TimeId when) {
if (auto history = Auth().data().historyLoaded(peer)) {
history->outboxRead(upTo);
if (const auto user = history->peer->asUser()) {
user->madeAction(when);
}
}
}
inline MsgsData *fetchMsgsData(ChannelId channelId, bool insert = true) {
if (channelId == NoChannel) return &msgsData;
ChannelMsgsData::iterator i = channelMsgsData.find(channelId);
if (i == channelMsgsData.cend()) {
if (insert) {
i = channelMsgsData.insert(channelId, MsgsData());
} else {
return 0;
}
}
return &(*i);
}
void feedWereDeleted(
ChannelId channelId,
const QVector<MTPint> &msgsIds) {
const auto data = fetchMsgsData(channelId, false);
if (!data) return;
const auto affectedHistory = (channelId != NoChannel)
? Auth().data().history(peerFromChannel(channelId)).get()
: nullptr;
auto historiesToCheck = base::flat_set<not_null<History*>>();
for (const auto msgId : msgsIds) {
auto j = data->constFind(msgId.v);
if (j != data->cend()) {
const auto history = (*j)->history();
(*j)->destroy();
if (!history->chatListMessageKnown()) {
historiesToCheck.emplace(history);
}
} else if (affectedHistory) {
affectedHistory->unknownMessageDeleted(msgId.v);
}
}
for (const auto history : historiesToCheck) {
history->requestChatListMessage();
}
}
void feedUserLink(MTPint userId, const MTPContactLink &myLink, const MTPContactLink &foreignLink) {
if (const auto user = Auth().data().userLoaded(userId.v)) {
const auto wasShowPhone = (user->contactStatus() == UserData::ContactStatus::CanAdd);
switch (myLink.type()) {
case mtpc_contactLinkContact:
user->setContactStatus(UserData::ContactStatus::Contact);
break;
case mtpc_contactLinkHasPhone:
user->setContactStatus(UserData::ContactStatus::CanAdd);
break;
case mtpc_contactLinkNone:
case mtpc_contactLinkUnknown:
user->setContactStatus(UserData::ContactStatus::PhoneUnknown);
break;
}
if (user->contactStatus() == UserData::ContactStatus::PhoneUnknown
&& !user->phone().isEmpty()
&& user->id != Auth().userPeerId()) {
user->setContactStatus(UserData::ContactStatus::CanAdd);
}
const auto showPhone = !user->isServiceUser()
&& !user->isSelf()
&& user->contactStatus() == UserData::ContactStatus::CanAdd;
const auto showPhoneChanged = !user->isServiceUser()
&& !user->isSelf()
&& (showPhone != wasShowPhone);
if (showPhoneChanged) {
user->setName(
TextUtilities::SingleLine(user->firstName),
TextUtilities::SingleLine(user->lastName),
showPhone
? App::formatPhone(user->phone())
: QString(),
TextUtilities::SingleLine(user->username));
}
}
}
QString peerName(const PeerData *peer, bool forDialogs) {
return peer ? ((forDialogs && peer->isUser() && !peer->asUser()->nameOrPhone.isEmpty()) ? peer->asUser()->nameOrPhone : peer->name) : lang(lng_deleted);
}
HistoryItem *histItemById(ChannelId channelId, MsgId itemId) {
if (!itemId) return nullptr;
const auto data = fetchMsgsData(channelId, false);
if (!data) return nullptr;
const auto i = data->constFind(itemId);
return (i != data->cend()) ? i.value() : nullptr;
}
HistoryItem *histItemById(const ChannelData *channel, MsgId itemId) {
return histItemById(channel ? peerToChannel(channel->id) : 0, itemId);
}
void historyRegItem(not_null<HistoryItem*> item) {
const auto data = fetchMsgsData(item->channelId());
const auto i = data->constFind(item->id);
if (i == data->cend()) {
data->insert(item->id, item);
} else if (i.value() != item) {
LOG(("App Error: trying to historyRegItem() an already registered item"));
i.value()->destroy();
data->insert(item->id, item);
}
}
void historyUnregItem(not_null<HistoryItem*> item) {
const auto data = fetchMsgsData(item->channelId(), false);
if (!data) return;
const auto i = data->find(item->id);
if (i != data->cend()) {
if (i.value() == item) {
data->erase(i);
}
}
const auto j = ::dependentItems.find(item);
if (j != ::dependentItems.cend()) {
DependentItemsSet items;
std::swap(items, j.value());
::dependentItems.erase(j);
for_const (auto dependent, items) {
dependent->dependencyItemRemoved(item);
}
}
item->history()->session().notifications().clearFromItem(item);
}
void historyUpdateDependent(not_null<HistoryItem*> item) {
const auto j = ::dependentItems.find(item);
if (j != ::dependentItems.cend()) {
for_const (const auto dependent, j.value()) {
dependent->updateDependencyItem();
}
}
if (App::main()) {
App::main()->itemEdited(item);
}
}
void historyClearMsgs() {
::dependentItems.clear();
const auto oldData = base::take(msgsData);
const auto oldChannelData = base::take(channelMsgsData);
for (const auto item : oldData) {
delete item;
}
for (const auto &data : oldChannelData) {
for (const auto item : data) {
delete item;
}
}
clearMousedItems();
}
void historyClearItems() {
randomData.clear();
sentData.clear();
cSetSavedPeers(SavedPeers());
cSetSavedPeersByTime(SavedPeersByTime());
cSetRecentInlineBots(RecentInlineBots());
cSetRecentStickers(RecentStickerPack());
cSetReportSpamStatuses(ReportSpamStatuses());
}
void historyRegDependency(HistoryItem *dependent, HistoryItem *dependency) {
::dependentItems[dependency].insert(dependent);
}
void historyUnregDependency(HistoryItem *dependent, HistoryItem *dependency) {
auto i = ::dependentItems.find(dependency);
if (i != ::dependentItems.cend()) {
i.value().remove(dependent);
if (i.value().isEmpty()) {
::dependentItems.erase(i);
}
}
}
void historyRegRandom(uint64 randomId, const FullMsgId &itemId) {
randomData.insert(randomId, itemId);
}
void historyUnregRandom(uint64 randomId) {
randomData.remove(randomId);
}
FullMsgId histItemByRandom(uint64 randomId) {
RandomData::const_iterator i = randomData.constFind(randomId);
if (i != randomData.cend()) {
return i.value();
}
return FullMsgId();
}
void historyRegSentData(uint64 randomId, const PeerId &peerId, const QString &text) {
sentData.insert(randomId, qMakePair(peerId, text));
}
void historyUnregSentData(uint64 randomId) {
sentData.remove(randomId);
}
void histSentDataByItem(uint64 randomId, PeerId &peerId, QString &text) {
QPair<PeerId, QString> d = sentData.value(randomId);
peerId = d.first;
text = d.second;
return peer ? ((forDialogs && peer->isUser() && !peer->asUser()->nameOrPhone.isEmpty()) ? peer->asUser()->nameOrPhone : peer->name) : tr::lng_deleted(tr::now);
}
void prepareCorners(RoundCorners index, int32 radius, const QBrush &brush, const style::color *shadow = nullptr, QImage *cors = nullptr) {
Expects(::corners.size() > index);
int32 r = radius * cIntRetinaFactor(), s = st::msgShadow * cIntRetinaFactor();
QImage rect(r * 3, r * 3 + (shadow ? s : 0), QImage::Format_ARGB32_Premultiplied), localCors[4];
{

View File

@@ -9,7 +9,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "data/data_types.h"
enum NewMessageType : char;
enum class ImageRoundRadius;
class MainWindow;
class MainWidget;
@@ -66,43 +65,10 @@ namespace App {
QString formatPhone(QString phone);
bool checkEntitiesAndViewsUpdate(const MTPDmessage &m); // returns true if item found and it is not detached
void updateEditedMessage(const MTPMessage &m);
void addSavedGif(DocumentData *doc);
void checkSavedGif(HistoryItem *item);
void feedMsgs(const QVector<MTPMessage> &msgs, NewMessageType type);
void feedMsgs(const MTPVector<MTPMessage> &msgs, NewMessageType type);
void feedInboxRead(const PeerId &peer, MsgId upTo);
void feedOutboxRead(const PeerId &peer, MsgId upTo, TimeId when);
void feedWereDeleted(ChannelId channelId, const QVector<MTPint> &msgsIds);
void feedUserLink(MTPint userId, const MTPContactLink &myLink, const MTPContactLink &foreignLink);
ImagePtr image(const MTPPhotoSize &size);
[[nodiscard]] QString peerName(const PeerData *peer, bool forDialogs = false);
[[nodiscard]] HistoryItem *histItemById(ChannelId channelId, MsgId itemId);
[[nodiscard]] HistoryItem *histItemById(
const ChannelData *channel,
MsgId itemId);
[[nodiscard]] inline HistoryItem *histItemById(const FullMsgId &msgId) {
return histItemById(msgId.channel, msgId.msg);
}
void historyRegItem(not_null<HistoryItem*> item);
void historyUnregItem(not_null<HistoryItem*> item);
void historyUpdateDependent(not_null<HistoryItem*> item);
void historyClearMsgs();
void historyClearItems();
void historyRegDependency(HistoryItem *dependent, HistoryItem *dependency);
void historyUnregDependency(HistoryItem *dependent, HistoryItem *dependency);
void historyRegRandom(uint64 randomId, const FullMsgId &itemId);
void historyUnregRandom(uint64 randomId);
FullMsgId histItemByRandom(uint64 randomId);
void historyRegSentData(uint64 randomId, const PeerId &peerId, const QString &text);
void historyUnregSentData(uint64 randomId);
void histSentDataByItem(uint64 randomId, PeerId &peerId, QString &text);
void hoveredItem(HistoryView::Element *item);
HistoryView::Element *hoveredItem();
void pressedItem(HistoryView::Element *item);

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