From 5b7d936140ad97e4690678b9cee857927235033e Mon Sep 17 00:00:00 2001 From: John Preston Date: Thu, 29 Sep 2016 00:33:05 +0300 Subject: [PATCH 1/6] Some langs updated. Build fixed for Xcode. --- Telegram/Resources/langs/lang_de.strings | 10 +++++++++- Telegram/Resources/langs/lang_es.strings | 8 ++++++++ Telegram/Resources/langs/lang_it.strings | 10 +++++++++- Telegram/Resources/langs/lang_nl.strings | 8 ++++++++ Telegram/Resources/langs/lang_pt_BR.strings | 2 +- Telegram/SourceFiles/inline_bots/inline_bot_result.cpp | 4 ++++ Telegram/SourceFiles/inline_bots/inline_bot_result.h | 2 ++ Telegram/SourceFiles/media/media_clip_reader.h | 5 +++++ Telegram/SourceFiles/pspecific_mac.cpp | 1 + Telegram/SourceFiles/ui/animation.cpp | 5 ----- Telegram/SourceFiles/ui/animation.h | 5 ----- 11 files changed, 47 insertions(+), 13 deletions(-) diff --git a/Telegram/Resources/langs/lang_de.strings b/Telegram/Resources/langs/lang_de.strings index 353b954db..ab3cfef13 100644 --- a/Telegram/Resources/langs/lang_de.strings +++ b/Telegram/Resources/langs/lang_de.strings @@ -580,7 +580,9 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org "lng_action_pinned_media_contact" = "einen Kontakt"; "lng_action_pinned_media_location" = "einen Standort"; "lng_action_pinned_media_sticker" = "einen Sticker"; -"lng_action_game_score" = "{from} erzielte {count:Punkte|Punkt|Punkte} bei {game}"; +"lng_action_pinned_media_emoji_sticker" = "einen {emoji} Sticker"; +"lng_action_pinned_media_game" = "ein Spiel «{game}»"; +"lng_action_game_score" = "{from} erzielte {count:# Punkte|# Punkt|# Punkte} bei {game}"; "lng_profile_migrate_reached" = "Limit von {count:_not_used_|# Mitglied|# Mitgliedern} erreicht"; "lng_profile_migrate_body" = "Um das Limit aufzuheben, ändere die Gruppe in eine Supergruppe."; @@ -774,6 +776,11 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org "lng_bot_groups_not_found" = "Keine Gruppen gefunden"; "lng_bot_sure_invite" = "Den Bot zu «{group}» hinzufügen?"; "lng_bot_already_in_group" = "Der Bot ist schon in dieser Gruppe."; +"lng_bot_choose_chat" = "Chat auswählen"; +"lng_bot_no_chats" = "Du hast keine Chats"; +"lng_bot_chats_not_found" = "Keine Chats gefunden"; +"lng_bot_sure_share_game" = "Das Spiel mit {user} teilen?"; +"lng_bot_sure_share_game_group" = "Das Spiel mit «{group}» teilen?"; "lng_typing" = "tippt"; "lng_user_typing" = "{user} tippt"; @@ -808,6 +815,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org "lng_duration_played" = "{played} / {duration}"; "lng_date_and_duration" = "{date}, {duration}"; "lng_choose_images" = "Bilder auswählen"; +"lng_game_tag" = "Spiel"; "lng_context_view_profile" = "Profil öffnen"; "lng_context_view_group" = "Gruppeninfo zeigen"; diff --git a/Telegram/Resources/langs/lang_es.strings b/Telegram/Resources/langs/lang_es.strings index b844de3b2..840e0eb86 100644 --- a/Telegram/Resources/langs/lang_es.strings +++ b/Telegram/Resources/langs/lang_es.strings @@ -580,6 +580,8 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org "lng_action_pinned_media_contact" = "un contacto"; "lng_action_pinned_media_location" = "una ubicación"; "lng_action_pinned_media_sticker" = "un sticker"; +"lng_action_pinned_media_emoji_sticker" = "un {emoji} sticker"; +"lng_action_pinned_media_game" = "un juego «{game}»"; "lng_action_game_score" = "{from} ha conseguido {count:# puntos|# punto|# puntos} en {game}"; "lng_profile_migrate_reached" = "Límite de {count:_not_used_|# miembro|# miembros} alcanzado"; @@ -774,6 +776,11 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org "lng_bot_groups_not_found" = "No se encontraron grupos"; "lng_bot_sure_invite" = "¿Añadir el bot a «{group}»?"; "lng_bot_already_in_group" = "El bot ya es un miembro del grupo."; +"lng_bot_choose_chat" = "Elige un chat"; +"lng_bot_no_chats" = "No tienes chats"; +"lng_bot_chats_not_found" = "No se encontraron chats"; +"lng_bot_sure_share_game" = "¿Compartir el juego con {user}?"; +"lng_bot_sure_share_game_group" = "¿Compartir el juego en «{group}»?"; "lng_typing" = "escribiendo"; "lng_user_typing" = "{user} está escribiendo"; @@ -808,6 +815,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org "lng_duration_played" = "{played} / {duration}"; "lng_date_and_duration" = "{date}, {duration}"; "lng_choose_images" = "Elegir imágenes"; +"lng_game_tag" = "Juego"; "lng_context_view_profile" = "Ver información"; "lng_context_view_group" = "Ver información"; diff --git a/Telegram/Resources/langs/lang_it.strings b/Telegram/Resources/langs/lang_it.strings index 2d2d99dd4..42fa1df3d 100644 --- a/Telegram/Resources/langs/lang_it.strings +++ b/Telegram/Resources/langs/lang_it.strings @@ -580,7 +580,9 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org "lng_action_pinned_media_contact" = "un contatto"; "lng_action_pinned_media_location" = "una posizione"; "lng_action_pinned_media_sticker" = "uno sticker"; -"lng_action_game_score" = "{from} ha segnato {count:# punti|# punto|# punti} in {game}"; +"lng_action_pinned_media_emoji_sticker" = "uno {emoji} sticker"; +"lng_action_pinned_media_game" = "un gioco «{game}»"; +"lng_action_game_score" = "{from} ha segnato {count:# punti|# punto|# punti} a {game}"; "lng_profile_migrate_reached" = "Limite di {count:_not_used_|# membro|# membri} raggiunto"; "lng_profile_migrate_body" = "Per superare questo limite, puoi aggiornare il gruppo a supergruppo."; @@ -774,6 +776,11 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org "lng_bot_groups_not_found" = "Nessun gruppo trovato"; "lng_bot_sure_invite" = "Aggiungere il bot a «{group}»?"; "lng_bot_already_in_group" = "Questo bot è già membro del gruppo."; +"lng_bot_choose_chat" = "Scegli chat"; +"lng_bot_no_chats" = "Non hai chat"; +"lng_bot_chats_not_found" = "Nessuna chat trovata"; +"lng_bot_sure_share_game" = "Condividere questo gioco con {user}?"; +"lng_bot_sure_share_game_group" = "Condividere questo gioco con «{group}»?"; "lng_typing" = "sta scrivendo"; "lng_user_typing" = "{user} sta scrivendo"; @@ -808,6 +815,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org "lng_duration_played" = "{played} / {duration}"; "lng_date_and_duration" = "{date}, {duration}"; "lng_choose_images" = "Scegli immagini"; +"lng_game_tag" = "Gioco"; "lng_context_view_profile" = "Visualizza profilo"; "lng_context_view_group" = "Visualizza info gruppo"; diff --git a/Telegram/Resources/langs/lang_nl.strings b/Telegram/Resources/langs/lang_nl.strings index c2b2b2ff6..df84eb3ee 100644 --- a/Telegram/Resources/langs/lang_nl.strings +++ b/Telegram/Resources/langs/lang_nl.strings @@ -580,6 +580,8 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org "lng_action_pinned_media_contact" = "een contact"; "lng_action_pinned_media_location" = "een locatie"; "lng_action_pinned_media_sticker" = "een sticker"; +"lng_action_pinned_media_emoji_sticker" = "een {emoji} sticker"; +"lng_action_pinned_media_game" = "een spel «{game}»"; "lng_action_game_score" = "{from} heeft met {game} {count:#punten|#punt|#punten} behaald"; "lng_profile_migrate_reached" = "{count:_not_used_|# lid |# leden} limiet bereikt"; @@ -774,6 +776,11 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org "lng_bot_groups_not_found" = "Geen groepen gevonden"; "lng_bot_sure_invite" = "De bot toevoegen aan \"{group}\"?"; "lng_bot_already_in_group" = "Deze bot is al een groepslid."; +"lng_bot_choose_chat" = "Kies chat"; +"lng_bot_no_chats" = "Je hebt nog geen chats"; +"lng_bot_chats_not_found" = "Geen chats gevonden"; +"lng_bot_sure_share_game" = "Spel met {user} delen?"; +"lng_bot_sure_share_game_group" = "Spel met «{group}» delen?"; "lng_typing" = "aan het typen"; "lng_user_typing" = "{user} is aan het typen"; @@ -808,6 +815,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org "lng_duration_played" = "{played} / {duration}"; "lng_date_and_duration" = "{date}, {duration}"; "lng_choose_images" = "Afbeeldingen kiezen"; +"lng_game_tag" = "Spel"; "lng_context_view_profile" = "Profiel weergeven"; "lng_context_view_group" = "Groepsinformatie weergeven"; diff --git a/Telegram/Resources/langs/lang_pt_BR.strings b/Telegram/Resources/langs/lang_pt_BR.strings index 16b443849..ac452d955 100644 --- a/Telegram/Resources/langs/lang_pt_BR.strings +++ b/Telegram/Resources/langs/lang_pt_BR.strings @@ -580,7 +580,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org "lng_action_pinned_media_contact" = "um contato"; "lng_action_pinned_media_location" = "uma localização"; "lng_action_pinned_media_sticker" = "um sticker"; -"lng_action_game_score" = "{from} marcou {count:pontos|ponto|pontos} em {game}"; +"lng_action_game_score" = "{from} marcou {count:# pontos|# ponto|# pontos} em {game}"; "lng_profile_migrate_reached" = "{count:_not_used_|# membro|# membros} limite alcançado"; "lng_profile_migrate_body" = "Para ir além desse limite, você pode converter seu grupo em um supergrupo."; diff --git a/Telegram/SourceFiles/inline_bots/inline_bot_result.cpp b/Telegram/SourceFiles/inline_bots/inline_bot_result.cpp index ab9824bb3..482b20a37 100644 --- a/Telegram/SourceFiles/inline_bots/inline_bot_result.cpp +++ b/Telegram/SourceFiles/inline_bots/inline_bot_result.cpp @@ -303,6 +303,10 @@ QString Result::getLayoutDescription() const { return sendData->getLayoutDescription(this); } +// just to make unique_ptr see the destructors. +Result::~Result() { +} + void Result::createPhoto() { if (_photo) return; diff --git a/Telegram/SourceFiles/inline_bots/inline_bot_result.h b/Telegram/SourceFiles/inline_bots/inline_bot_result.h index 09c58aad9..944b0a807 100644 --- a/Telegram/SourceFiles/inline_bots/inline_bot_result.h +++ b/Telegram/SourceFiles/inline_bots/inline_bot_result.h @@ -74,6 +74,8 @@ public: QString getLayoutTitle() const; QString getLayoutDescription() const; + ~Result(); + private: void createPhoto(); void createDocument(); diff --git a/Telegram/SourceFiles/media/media_clip_reader.h b/Telegram/SourceFiles/media/media_clip_reader.h index 220632c55..0b3a8a395 100644 --- a/Telegram/SourceFiles/media/media_clip_reader.h +++ b/Telegram/SourceFiles/media/media_clip_reader.h @@ -171,6 +171,11 @@ private: }; +template +inline ReaderPointer MakeReader(Args&&... args) { + return ReaderPointer(new Reader(std_::forward(args)...)); +} + enum class ProcessResult { Error, Started, diff --git a/Telegram/SourceFiles/pspecific_mac.cpp b/Telegram/SourceFiles/pspecific_mac.cpp index bfc1baba0..2ed9fd9b7 100644 --- a/Telegram/SourceFiles/pspecific_mac.cpp +++ b/Telegram/SourceFiles/pspecific_mac.cpp @@ -25,6 +25,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org #include "localstorage.h" #include "passcodewidget.h" +#include "history/history_location_manager.h" #include diff --git a/Telegram/SourceFiles/ui/animation.cpp b/Telegram/SourceFiles/ui/animation.cpp index 0fd8b7995..88d79b43f 100644 --- a/Telegram/SourceFiles/ui/animation.cpp +++ b/Telegram/SourceFiles/ui/animation.cpp @@ -35,11 +35,6 @@ ReaderPointer::~ReaderPointer() { _pointer = nullptr; } -class Tmp; -void f(Tmp *t) { - delete t; -} - } // namespace Clip } // namespace Media diff --git a/Telegram/SourceFiles/ui/animation.h b/Telegram/SourceFiles/ui/animation.h index dc9e7b83a..4bbe4e49c 100644 --- a/Telegram/SourceFiles/ui/animation.h +++ b/Telegram/SourceFiles/ui/animation.h @@ -77,11 +77,6 @@ private: }; -template -inline ReaderPointer MakeReader(Args&&... args) { - return ReaderPointer(new Reader(std_::forward(args)...)); -} - class Manager; enum Notification { From 139882113de5d215fd4d1d3c446b982634902359 Mon Sep 17 00:00:00 2001 From: John Preston Date: Thu, 29 Sep 2016 00:33:51 +0300 Subject: [PATCH 2/6] Closed beta 10008002: games support and some testing. --- Telegram/Resources/winrc/Telegram.rc | 8 ++++---- Telegram/Resources/winrc/Updater.rc | 8 ++++---- Telegram/SourceFiles/core/version.h | 2 +- Telegram/build/version | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Telegram/Resources/winrc/Telegram.rc b/Telegram/Resources/winrc/Telegram.rc index c52e8eb1c..094e01541 100644 --- a/Telegram/Resources/winrc/Telegram.rc +++ b/Telegram/Resources/winrc/Telegram.rc @@ -34,8 +34,8 @@ IDI_ICON1 ICON "..\\art\\icon256.ico" // VS_VERSION_INFO VERSIONINFO - FILEVERSION 0,10,8,1 - PRODUCTVERSION 0,10,8,1 + FILEVERSION 0,10,8,2 + PRODUCTVERSION 0,10,8,2 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -51,10 +51,10 @@ BEGIN BLOCK "040904b0" BEGIN VALUE "CompanyName", "Telegram Messenger LLP" - VALUE "FileVersion", "0.10.8.1" + VALUE "FileVersion", "0.10.8.2" VALUE "LegalCopyright", "Copyright (C) 2014-2016" VALUE "ProductName", "Telegram Desktop" - VALUE "ProductVersion", "0.10.8.1" + VALUE "ProductVersion", "0.10.8.2" END END BLOCK "VarFileInfo" diff --git a/Telegram/Resources/winrc/Updater.rc b/Telegram/Resources/winrc/Updater.rc index 4ecec9605..e8c2b5b18 100644 --- a/Telegram/Resources/winrc/Updater.rc +++ b/Telegram/Resources/winrc/Updater.rc @@ -25,8 +25,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // VS_VERSION_INFO VERSIONINFO - FILEVERSION 0,10,8,1 - PRODUCTVERSION 0,10,8,1 + FILEVERSION 0,10,8,2 + PRODUCTVERSION 0,10,8,2 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -43,10 +43,10 @@ BEGIN BEGIN VALUE "CompanyName", "Telegram Messenger LLP" VALUE "FileDescription", "Telegram Updater" - VALUE "FileVersion", "0.10.8.1" + VALUE "FileVersion", "0.10.8.2" VALUE "LegalCopyright", "Copyright (C) 2014-2016" VALUE "ProductName", "Telegram Desktop" - VALUE "ProductVersion", "0.10.8.1" + VALUE "ProductVersion", "0.10.8.2" END END BLOCK "VarFileInfo" diff --git a/Telegram/SourceFiles/core/version.h b/Telegram/SourceFiles/core/version.h index 87b63fb6a..428f16a51 100644 --- a/Telegram/SourceFiles/core/version.h +++ b/Telegram/SourceFiles/core/version.h @@ -22,7 +22,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org #include "core/basic_types.h" -#define BETA_VERSION_MACRO (10008001ULL) +#define BETA_VERSION_MACRO (10008002ULL) constexpr int AppVersion = 10008; constexpr str_const AppVersionStr = "0.10.8"; diff --git a/Telegram/build/version b/Telegram/build/version index a56338061..cef9dab37 100644 --- a/Telegram/build/version +++ b/Telegram/build/version @@ -3,4 +3,4 @@ AppVersionStrMajor 0.10 AppVersionStrSmall 0.10.8 AppVersionStr 0.10.8 AlphaChannel 0 -BetaVersion 10008001 +BetaVersion 10008002 From 73a8d27bfd1a48a3ee8396a8a41dbace07ebe2a8 Mon Sep 17 00:00:00 2001 From: John Preston Date: Thu, 29 Sep 2016 12:10:32 +0300 Subject: [PATCH 3/6] You scored phrase for game service messages. Game layout bug fix. --- Telegram/Resources/langs/lang.strings | 3 ++- .../SourceFiles/history/history_media_types.cpp | 3 ++- Telegram/SourceFiles/history/history_message.cpp | 14 +++++++++----- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index d36c93ffc..6e40e9452 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -581,8 +581,9 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org "lng_action_pinned_media_location" = "a location mark"; "lng_action_pinned_media_sticker" = "a sticker"; "lng_action_pinned_media_emoji_sticker" = "a {emoji} sticker"; -"lng_action_pinned_media_game" = "a game «{game}»"; +"lng_action_pinned_media_game" = "the game «{game}»"; "lng_action_game_score" = "{from} scored {count:#|#|#} in {game}"; +"lng_action_game_you_scored" = "You scored {count:#|#|#} in {game}"; "lng_profile_migrate_reached" = "{count:_not_used_|# member|# members} limit reached"; "lng_profile_migrate_body" = "To get over this limit, you can upgrade your group to a supergroup."; diff --git a/Telegram/SourceFiles/history/history_media_types.cpp b/Telegram/SourceFiles/history/history_media_types.cpp index a6816c6c3..10c39c546 100644 --- a/Telegram/SourceFiles/history/history_media_types.cpp +++ b/Telegram/SourceFiles/history/history_media_types.cpp @@ -2959,7 +2959,8 @@ void HistoryGame::initDimensions() { _minh = 0; int32 titleMinHeight = _title.isEmpty() ? 0 : _lineHeight; - int32 descMaxLines = (4 + (titleMinHeight ? 0 : 1)); + // enable any count of lines in game description / message + int descMaxLines = 4096; int32 descriptionMinHeight = _description.isEmpty() ? 0 : qMin(_description.minHeight(), descMaxLines * _lineHeight); if (!_title.isEmpty()) { diff --git a/Telegram/SourceFiles/history/history_message.cpp b/Telegram/SourceFiles/history/history_message.cpp index cf0894118..88f0ba908 100644 --- a/Telegram/SourceFiles/history/history_message.cpp +++ b/Telegram/SourceFiles/history/history_message.cpp @@ -1968,7 +1968,7 @@ bool HistoryService::preparePinnedText(const QString &from, QString *outText, Li bool HistoryService::prepareGameScoreText(const QString &from, QString *outText, Links *outLinks) { bool result = false; - QString text; + QString gameTitle; ClickHandlerPtr second; auto gamescore = Get(); @@ -1981,15 +1981,19 @@ bool HistoryService::prepareGameScoreText(const QString &from, QString *outText, } return lang(lng_deleted_message); }; - text = lng_action_game_score(lt_from, from, lt_count, gamescore->score, lt_game, getGameTitle()); + gameTitle = getGameTitle(); result = true; } else if (gamescore && gamescore->msgId) { - text = lng_action_game_score(lt_from, from, lt_count, gamescore->score, lt_game, lang(lng_contacts_loading)); + gameTitle = lang(lng_contacts_loading); result = true; } else { - text = lng_action_game_score(lt_from, from, lt_count, gamescore->score, lt_game, lang(lng_deleted_message)); + gameTitle = lang(lng_deleted_message); + } + if (_from->isSelf()) { + *outText = lng_action_game_you_scored(lt_count, gamescore->score, lt_game, gameTitle); + } else { + *outText = lng_action_game_score(lt_from, from, lt_count, gamescore->score, lt_game, gameTitle); } - *outText = text; if (second) { outLinks->push_back(second); } From f1f7333c7ade80eb40414b631c7dfc4dccc336d7 Mon Sep 17 00:00:00 2001 From: John Preston Date: Thu, 29 Sep 2016 14:37:16 +0300 Subject: [PATCH 4/6] Removed some old styles. Divided basic_types module to several. --- Telegram/Resources/art/sprite.png | Bin 181494 -> 178657 bytes Telegram/Resources/art/sprite_200x.png | Bin 246426 -> 239275 bytes Telegram/Resources/basic.style | 148 +- Telegram/Resources/basic_types.style | 8 - Telegram/SourceFiles/app.cpp | 40 +- Telegram/SourceFiles/boxes/confirmbox.cpp | 4 +- Telegram/SourceFiles/boxes/stickersetbox.cpp | 10 +- Telegram/SourceFiles/boxes/stickersetbox.h | 2 +- Telegram/SourceFiles/core/basic_types.h | 1220 +---------------- Telegram/SourceFiles/core/lambda_wrap.h | 8 +- Telegram/SourceFiles/core/ordered_set.h | 159 +++ .../SourceFiles/core/runtime_composer.cpp | 52 + Telegram/SourceFiles/core/runtime_composer.h | 257 ++++ Telegram/SourceFiles/core/stl_subset.h | 276 ++++ .../core/{basic_types.cpp => utils.cpp} | 33 +- Telegram/SourceFiles/core/utils.h | 581 ++++++++ Telegram/SourceFiles/core/version.h | 2 +- Telegram/SourceFiles/history.cpp | 16 +- Telegram/SourceFiles/history.h | 8 +- Telegram/SourceFiles/history/history_item.h | 22 +- .../history/history_media_types.cpp | 6 +- .../SourceFiles/history/history_media_types.h | 10 +- .../SourceFiles/history/history_message.h | 4 +- Telegram/SourceFiles/intro/introsignup.cpp | 30 +- Telegram/SourceFiles/langloaderplain.cpp | 4 +- Telegram/SourceFiles/layout.h | 4 +- Telegram/SourceFiles/logs.cpp | 22 +- Telegram/SourceFiles/mainwindow.cpp | 24 +- Telegram/SourceFiles/mtproto/connection.h | 2 +- Telegram/SourceFiles/mtproto/core_types.h | 18 +- Telegram/SourceFiles/mtproto/facade.h | 4 +- .../SourceFiles/mtproto/file_download.cpp | 4 +- Telegram/SourceFiles/mtproto/rsa_public_key.h | 2 +- Telegram/SourceFiles/mtproto/session.cpp | 4 +- .../SourceFiles/overview/overview_layout.h | 2 +- Telegram/SourceFiles/passcodewidget.cpp | 2 +- .../platform/win/windows_event_filter.cpp | 36 +- Telegram/SourceFiles/settings.cpp | 28 +- .../settings/settings_background_widget.cpp | 10 +- Telegram/SourceFiles/stdafx.h | 2 + Telegram/SourceFiles/structs.h | 6 +- Telegram/SourceFiles/sysbuttons.cpp | 4 +- Telegram/SourceFiles/sysbuttons.h | 16 + Telegram/SourceFiles/title.cpp | 26 +- Telegram/SourceFiles/ui/animation.h | 2 +- Telegram/SourceFiles/ui/flatcheckbox.h | 12 +- Telegram/SourceFiles/ui/twidget.h | 4 +- Telegram/gyp/Telegram.gyp | 7 +- 48 files changed, 1567 insertions(+), 1574 deletions(-) create mode 100644 Telegram/SourceFiles/core/ordered_set.h create mode 100644 Telegram/SourceFiles/core/runtime_composer.cpp create mode 100644 Telegram/SourceFiles/core/runtime_composer.h create mode 100644 Telegram/SourceFiles/core/stl_subset.h rename Telegram/SourceFiles/core/{basic_types.cpp => utils.cpp} (97%) create mode 100644 Telegram/SourceFiles/core/utils.h diff --git a/Telegram/Resources/art/sprite.png b/Telegram/Resources/art/sprite.png index 179237f54a2c47dff8de5e849551154b4be2986a..e1f5778499c3f783a0bf6d07856299ea131d4926 100644 GIT binary patch delta 53659 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

q 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 z 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 z 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 D7aB85 delta 56472 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 diff --git a/Telegram/Resources/art/sprite_200x.png b/Telegram/Resources/art/sprite_200x.png index e5dd6795e5a00d66c3a2c6378bc6de39cd181bdd..9eaedee277b2f16b3565813f5afa208dbb12208c 100644 GIT binary patch delta 113411 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 delta 120619 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�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

    ERH?@6DAU4<4(+leD?F}j3 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 { case mtpc_photoSize: { - const string &s(i->c_photoSize().vtype.c_string().v); + auto &s = i->c_photoSize().vtype.c_string().v; if (s.size()) size = s[0]; } break; case mtpc_photoCachedSize: { - const string &s(i->c_photoCachedSize().vtype.c_string().v); + auto &s = i->c_photoCachedSize().vtype.c_string().v; if (s.size()) size = s[0]; } break; } @@ -2070,22 +2068,28 @@ namespace { cSetSavedPeers(SavedPeers()); cSetSavedPeersByTime(SavedPeersByTime()); cSetRecentInlineBots(RecentInlineBots()); - for_const (PeerData *peer, peersData) { + + for_const (auto peer, ::peersData) { delete peer; } - peersData.clear(); - for_const (PhotoData *photo, ::photosData) { + ::peersData.clear(); + for_const (auto game, ::gamesData) { + delete game; + } + ::gamesData.clear(); + for_const (auto webpage, ::webPagesData) { + delete webpage; + } + ::webPagesData.clear(); + for_const (auto photo, ::photosData) { delete photo; } ::photosData.clear(); - for_const (DocumentData *document, ::documentsData) { + for_const (auto document, ::documentsData) { delete document; } ::documentsData.clear(); - for_const (WebPageData *webpage, webPagesData) { - delete webpage; - } - webPagesData.clear(); + if (api()) api()->clearWebPageRequests(); cSetRecentStickers(RecentStickerPack()); Global::SetStickerSets(Stickers::Sets()); diff --git a/Telegram/SourceFiles/boxes/confirmbox.cpp b/Telegram/SourceFiles/boxes/confirmbox.cpp index 61107ba4a..25265a48a 100644 --- a/Telegram/SourceFiles/boxes/confirmbox.cpp +++ b/Telegram/SourceFiles/boxes/confirmbox.cpp @@ -285,8 +285,8 @@ void MaxInviteBox::paintEvent(QPaintEvent *e) { p.drawText(_invitationLink, _link, option); if (!_goodTextLink.isEmpty() && a_goodOpacity.current() > 0) { p.setOpacity(a_goodOpacity.current()); - p.setPen(st::setGoodColor->p); - p.setFont(st::boxTextFont->f); + p.setPen(st::setGoodColor); + p.setFont(st::boxTextFont); p.drawTextLeft(st::boxPadding.left(), height() - st::boxButtonPadding.bottom() - _close.height() + st::defaultBoxButton.textTop + st::defaultBoxButton.font->ascent - st::boxTextFont->ascent, width(), _goodTextLink); p.setOpacity(1); } diff --git a/Telegram/SourceFiles/boxes/stickersetbox.cpp b/Telegram/SourceFiles/boxes/stickersetbox.cpp index 6c20fbc79..1058ed031 100644 --- a/Telegram/SourceFiles/boxes/stickersetbox.cpp +++ b/Telegram/SourceFiles/boxes/stickersetbox.cpp @@ -1508,8 +1508,8 @@ void StickersBox::paintEvent(QPaintEvent *e) { void StickersBox::closePressed() { if (!_disenableRequests.isEmpty()) { - for (QMap::const_iterator i = _disenableRequests.cbegin(), e = _disenableRequests.cend(); i != e; ++i) { - MTP::cancel(i.key()); + for_const (auto requestId, _disenableRequests) { + MTP::cancel(requestId); } _disenableRequests.clear(); Global::SetLastStickersUpdate(0); @@ -1607,7 +1607,7 @@ void StickersBox::onSave() { if (!(it->flags & MTPDstickerSet::Flag::f_archived)) { MTPInputStickerSet setId = (it->id && it->access) ? MTP_inputStickerSetID(MTP_long(it->id), MTP_long(it->access)) : MTP_inputStickerSetShortName(MTP_string(it->shortName)); if (it->flags & MTPDstickerSet::Flag::f_official) { - _disenableRequests.insert(MTP::send(MTPmessages_InstallStickerSet(setId, MTP_boolTrue()), rpcDone(&StickersBox::disenableDone), rpcFail(&StickersBox::disenableFail), 0, 5), NullType()); + _disenableRequests.insert(MTP::send(MTPmessages_InstallStickerSet(setId, MTP_boolTrue()), rpcDone(&StickersBox::disenableDone), rpcFail(&StickersBox::disenableFail), 0, 5)); it->flags |= MTPDstickerSet::Flag::f_archived; auto index = Global::RefArchivedStickerSetsOrder().indexOf(it->id); if (index < 0) { @@ -1615,7 +1615,7 @@ void StickersBox::onSave() { writeArchived = true; } } else { - _disenableRequests.insert(MTP::send(MTPmessages_UninstallStickerSet(setId), rpcDone(&StickersBox::disenableDone), rpcFail(&StickersBox::disenableFail), 0, 5), NullType()); + _disenableRequests.insert(MTP::send(MTPmessages_UninstallStickerSet(setId), rpcDone(&StickersBox::disenableDone), rpcFail(&StickersBox::disenableFail), 0, 5)); int removeIndex = Global::StickerSetsOrder().indexOf(it->id); if (removeIndex >= 0) Global::RefStickerSetsOrder().removeAt(removeIndex); if (!(it->flags & MTPDstickerSet_ClientFlag::f_featured) && !(it->flags & MTPDstickerSet_ClientFlag::f_special)) { @@ -1645,7 +1645,7 @@ void StickersBox::onSave() { if (it != sets.cend()) { if ((it->flags & MTPDstickerSet::Flag::f_archived) && !disabled.contains(it->id)) { MTPInputStickerSet setId = (it->id && it->access) ? MTP_inputStickerSetID(MTP_long(it->id), MTP_long(it->access)) : MTP_inputStickerSetShortName(MTP_string(it->shortName)); - _disenableRequests.insert(MTP::send(MTPmessages_InstallStickerSet(setId, MTP_boolFalse()), rpcDone(&StickersBox::disenableDone), rpcFail(&StickersBox::disenableFail), 0, 5), NullType()); + _disenableRequests.insert(MTP::send(MTPmessages_InstallStickerSet(setId, MTP_boolFalse()), rpcDone(&StickersBox::disenableDone), rpcFail(&StickersBox::disenableFail), 0, 5)); it->flags &= ~MTPDstickerSet::Flag::f_archived; writeArchived = true; } diff --git a/Telegram/SourceFiles/boxes/stickersetbox.h b/Telegram/SourceFiles/boxes/stickersetbox.h index 1626fd08a..113ac8aa3 100644 --- a/Telegram/SourceFiles/boxes/stickersetbox.h +++ b/Telegram/SourceFiles/boxes/stickersetbox.h @@ -186,7 +186,7 @@ private: ChildWidget _inner; ChildWidget _save = { nullptr }; ChildWidget _cancel = { nullptr }; - QMap _disenableRequests; + OrderedSet _disenableRequests; mtpRequestId _reorderRequest = 0; ChildWidget _topShadow = { nullptr }; ChildWidget _bottomShadow = { nullptr }; diff --git a/Telegram/SourceFiles/core/basic_types.h b/Telegram/SourceFiles/core/basic_types.h index 2b22bc4cd..9487daec9 100644 --- a/Telegram/SourceFiles/core/basic_types.h +++ b/Telegram/SourceFiles/core/basic_types.h @@ -22,157 +22,22 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org #include #include +#include #include -#include +#include "core/stl_subset.h" +#include "core/ordered_set.h" -#ifndef OS_MAC_OLD -#include -#endif // OS_MAC_OLD - -template -void deleteAndMark(T *&link) { - delete link; - link = reinterpret_cast(0x00000BAD); -} - -template -T *getPointerAndReset(T *&ptr) { - T *result = nullptr; - qSwap(result, ptr); - return result; -} - -struct NullType { -}; - -// ordered set template based on QMap -template -class OrderedSet { - typedef OrderedSet Self; - typedef QMap Impl; - typedef typename Impl::iterator IteratorImpl; - typedef typename Impl::const_iterator ConstIteratorImpl; - Impl impl_; - -public: - - inline bool operator==(const Self &other) const { return impl_ == other.impl_; } - inline bool operator!=(const Self &other) const { return impl_ != other.impl_; } - inline int size() const { return impl_.size(); } - inline bool isEmpty() const { return impl_.isEmpty(); } - inline void detach() { return impl_.detach(); } - inline bool isDetached() const { return impl_.isDetached(); } - inline void clear() { return impl_.clear(); } - inline QList values() const { return impl_.keys(); } - inline const T &first() const { return impl_.firstKey(); } - inline const T &last() const { return impl_.lastKey(); } - - class const_iterator; - class iterator { - public: - typedef typename IteratorImpl::iterator_category iterator_category; - typedef typename IteratorImpl::difference_type difference_type; - typedef T value_type; - typedef T *pointer; - typedef T &reference; - - explicit iterator(const IteratorImpl &impl) : impl_(impl) { - } - inline const T &operator*() const { return impl_.key(); } - inline const T *operator->() const { return &impl_.key(); } - inline bool operator==(const iterator &other) const { return impl_ == other.impl_; } - inline bool operator!=(const iterator &other) const { return impl_ != other.impl_; } - inline iterator &operator++() { ++impl_; return *this; } - inline iterator operator++(int) { return iterator(impl_++); } - inline iterator &operator--() { --impl_; return *this; } - inline iterator operator--(int) { return iterator(impl_--); } - inline iterator operator+(int j) const { return iterator(impl_ + j); } - inline iterator operator-(int j) const { return iterator(impl_ - j); } - inline iterator &operator+=(int j) { impl_ += j; return *this; } - inline iterator &operator-=(int j) { impl_ -= j; return *this; } - - friend class const_iterator; - inline bool operator==(const const_iterator &other) const { return impl_ == other.impl_; } - inline bool operator!=(const const_iterator &other) const { return impl_ != other.impl_; } - - private: - IteratorImpl impl_; - friend class OrderedSet; - - }; - friend class iterator; - - class const_iterator { - public: - typedef typename IteratorImpl::iterator_category iterator_category; - typedef typename IteratorImpl::difference_type difference_type; - typedef T value_type; - typedef T *pointer; - typedef T &reference; - - explicit const_iterator(const ConstIteratorImpl &impl) : impl_(impl) { - } - inline const T &operator*() const { return impl_.key(); } - inline const T *operator->() const { return &impl_.key(); } - inline bool operator==(const const_iterator &other) const { return impl_ == other.impl_; } - inline bool operator!=(const const_iterator &other) const { return impl_ != other.impl_; } - inline const_iterator &operator++() { ++impl_; return *this; } - inline const_iterator operator++(int) { return const_iterator(impl_++); } - inline const_iterator &operator--() { --impl_; return *this; } - inline const_iterator operator--(int) { return const_iterator(impl_--); } - inline const_iterator operator+(int j) const { return const_iterator(impl_ + j); } - inline const_iterator operator-(int j) const { return const_iterator(impl_ - j); } - inline const_iterator &operator+=(int j) { impl_ += j; return *this; } - inline const_iterator &operator-=(int j) { impl_ -= j; return *this; } - - friend class iterator; - inline bool operator==(const iterator &other) const { return impl_ == other.impl_; } - inline bool operator!=(const iterator &other) const { return impl_ != other.impl_; } - - private: - ConstIteratorImpl impl_; - friend class OrderedSet; - - }; - friend class const_iterator; - - // STL style - inline iterator begin() { return iterator(impl_.begin()); } - inline const_iterator begin() const { return const_iterator(impl_.cbegin()); } - inline const_iterator constBegin() const { return const_iterator(impl_.cbegin()); } - inline const_iterator cbegin() const { return const_iterator(impl_.cbegin()); } - inline iterator end() { detach(); return iterator(impl_.end()); } - inline const_iterator end() const { return const_iterator(impl_.cend()); } - inline const_iterator constEnd() const { return const_iterator(impl_.cend()); } - inline const_iterator cend() const { return const_iterator(impl_.cend()); } - inline iterator erase(iterator it) { return iterator(impl_.erase(it.impl_)); } - - inline iterator insert(const T &value) { return iterator(impl_.insert(value, NullType())); } - inline iterator insert(const_iterator pos, const T &value) { return iterator(impl_.insert(pos.impl_, value, NullType())); } - inline int remove(const T &value) { return impl_.remove(value); } - inline bool contains(const T &value) const { return impl_.contains(value); } - - // more Qt - typedef iterator Iterator; - typedef const_iterator ConstIterator; - inline int count() const { return impl_.count(); } - inline iterator find(const T &value) { return iterator(impl_.find(value)); } - inline const_iterator find(const T &value) const { return const_iterator(impl_.constFind(value)); } - inline const_iterator constFind(const T &value) const { return const_iterator(impl_.constFind(value)); } - inline Self &unite(const Self &other) { impl_.unite(other.impl_); return *this; } - - // STL compatibility - typedef typename Impl::difference_type difference_type; - typedef typename Impl::size_type size_type; - inline bool empty() const { return impl_.empty(); } - -}; - -// thanks Chromium see https://blogs.msdn.microsoft.com/the1/2004/05/07/how-would-you-get-the-count-of-an-array-in-c-2/ -template char(&ArraySizeHelper(T(&array)[N]))[N]; -#define arraysize(array) (sizeof(ArraySizeHelper(array))) +//using uchar = unsigned char; // Qt has uchar +using int16 = qint16; +using uint16 = quint16; +using int32 = qint32; +using uint32 = quint32; +using int64 = qint64; +using uint64 = quint64; +using float32 = float; +using float64 = double; #define qsl(s) QStringLiteral(s) #define qstr(s) QLatin1String(s, sizeof(s) - 1) @@ -206,1064 +71,3 @@ Q_DECLARE_FRIEND_INCOMPATIBLE_FLAGS(Flags) // if you have "QVector v" then "for (T * const p : v)" will still call QVector::detach(), // while "for_const (T *p, v)" won't and "for_const (T *&p, v)" won't compile #define for_const(range_declaration, range_expression) for (range_declaration : std_::as_const(range_expression)) - -template -inline QFlags qFlags(Enum v) { - return QFlags(v); -} - -//typedef unsigned char uchar; // Qt has uchar -typedef qint16 int16; -typedef quint16 uint16; -typedef qint32 int32; -typedef quint32 uint32; -typedef qint64 int64; -typedef quint64 uint64; - -static const int32 ScrollMax = INT_MAX; - -extern uint64 _SharedMemoryLocation[]; -template -T *SharedMemoryLocation() { - static_assert(N < 4, "Only 4 shared memory locations!"); - return reinterpret_cast(_SharedMemoryLocation + N); -} - -// see https://github.com/boostcon/cppnow_presentations_2012/blob/master/wed/schurr_cpp11_tools_for_class_authors.pdf -class str_const { // constexpr string -public: - template - constexpr str_const(const char(&a)[N]) : _str(a), _size(N - 1) { - } - constexpr char operator[](std::size_t n) const { - return (n < _size) ? _str[n] : -#ifndef OS_MAC_OLD - throw std::out_of_range(""); -#else // OS_MAC_OLD - throw std::exception(); -#endif // OS_MAC_OLD - } - constexpr std::size_t size() const { return _size; } - const char *c_str() const { return _str; } - -private: - const char* const _str; - const std::size_t _size; - -}; - -inline QString str_const_toString(const str_const &str) { - return QString::fromUtf8(str.c_str(), str.size()); -} - -template -inline void accumulate_max(T &a, const T &b) { if (a < b) a = b; } - -template -inline void accumulate_min(T &a, const T &b) { if (a > b) a = b; } - -#ifdef Q_OS_WIN -typedef float float32; -typedef double float64; -#else -typedef float float32; -typedef double float64; -#endif - -using std::string; -using std::exception; -#ifdef OS_MAC_OLD -namespace std { -using nullptr_t = decltype(nullptr); -} -#endif // OS_MAC_OLD - -// we copy some parts of C++11/14/17 std:: library, because on OS X 10.6+ -// version we can use C++11/14/17, but we can not use its library :( -namespace std_ { - -template -struct integral_constant { - static constexpr T value = V; - - using value_type = T; - using type = integral_constant; - - constexpr operator value_type() const noexcept { - return (value); - } - - constexpr value_type operator()() const noexcept { - return (value); - } -}; - -using true_type = integral_constant; -using false_type = integral_constant; - -template -struct remove_reference { - using type = T; -}; -template -struct remove_reference { - using type = T; -}; -template -struct remove_reference { - using type = T; -}; - -template -struct is_lvalue_reference : false_type { -}; -template -struct is_lvalue_reference : true_type { -}; - -template -struct is_rvalue_reference : false_type { -}; -template -struct is_rvalue_reference : true_type { -}; - -template -inline constexpr T &&forward(typename remove_reference::type &value) noexcept { - return static_cast(value); -} -template -inline constexpr T &&forward(typename remove_reference::type &&value) noexcept { - static_assert(!is_lvalue_reference::value, "bad forward call"); - return static_cast(value); -} - -template -inline constexpr typename remove_reference::type &&move(T &&value) noexcept { - return static_cast::type&&>(value); -} - -template -void swap(T &a, T &b) { - T tmp = move(a); - a = move(b); - b = move(tmp); -} - -template -struct remove_const { - using type = T; -}; - -template -struct remove_const { - using type = T; -}; - -template -struct remove_volatile { - using type = T; -}; - -template -struct remove_volatile { - using type = T; -}; - -template -using decay_simple_t = typename remove_const::type>::type>::type; - -template -struct is_same : false_type { -}; - -template -struct is_same : true_type { -}; - -template -struct enable_if { -}; - -template -struct enable_if { - using type = T; -}; - -template -using enable_if_t = typename enable_if::type; - -template -struct add_const { - using type = const T; -}; -template -using add_const_t = typename add_const::type; -template -constexpr add_const_t &as_const(T& t) noexcept { - return t; -} -template -void as_const(const T&&) = delete; - -// This is not full unique_ptr, but at least with std interface. -template -class unique_ptr { -public: - constexpr unique_ptr() noexcept = default; - unique_ptr(const unique_ptr &) = delete; - unique_ptr &operator=(const unique_ptr &) = delete; - - constexpr unique_ptr(std::nullptr_t) { - } - unique_ptr &operator=(std::nullptr_t) noexcept { - reset(); - return (*this); - } - - explicit unique_ptr(T *p) noexcept : _p(p) { - } - - template - unique_ptr(unique_ptr &&other) noexcept : _p(other.release()) { - } - template - unique_ptr &operator=(unique_ptr &&other) noexcept { - reset(other.release()); - return (*this); - } - unique_ptr &operator=(unique_ptr &&other) noexcept { - if (this != &other) { - reset(other.release()); - } - return (*this); - } - - void swap(unique_ptr &other) noexcept { - std::swap(_p, other._p); - } - ~unique_ptr() noexcept { - delete _p; - } - - T &operator*() const { - return (*get()); - } - T *operator->() const noexcept { - return get(); - } - T *get() const noexcept { - return _p; - } - explicit operator bool() const noexcept { - return get() != nullptr; - } - - T *release() noexcept { - return getPointerAndReset(_p); - } - - void reset(T *p = nullptr) noexcept { - T *old = _p; - _p = p; - if (old) { - delete old; - } - } - -private: - T *_p = nullptr; - -}; - -template -inline unique_ptr make_unique(Args&&... args) { - return unique_ptr(new T(forward(args)...)); -} - -template -inline bool operator==(const unique_ptr &a, std::nullptr_t) noexcept { - return !a; -} -template -inline bool operator==(std::nullptr_t, const unique_ptr &b) noexcept { - return !b; -} -template -inline bool operator!=(const unique_ptr &a, std::nullptr_t b) noexcept { - return !(a == b); -} -template -inline bool operator!=(std::nullptr_t a, const unique_ptr &b) noexcept { - return !(a == b); -} - -using _yes = char(&)[1]; -using _no = char(&)[2]; - -template -struct _host { - operator Base*() const; - operator Derived*(); -}; - -template -struct is_base_of { - template - static _yes check(Derived*, T); - static _no check(Base*, int); - - static constexpr bool value = sizeof(check(_host(), int())) == sizeof(_yes); -}; - -} // namespace std_ - -template -T createAndSwap(T &value) { - T result = T(); - std_::swap(result, value); - return std_::move(result); -} - -#include "logs.h" - -static volatile int *t_assert_nullptr = nullptr; -inline void t_noop() {} -inline void t_assert_fail(const char *message, const char *file, int32 line) { - QString info(qsl("%1 %2:%3").arg(message).arg(file).arg(line)); - LOG(("Assertion Failed! %1 %2:%3").arg(info)); - SignalHandlers::setCrashAnnotation("Assertion", info); - *t_assert_nullptr = 0; -} -#define t_assert_full(condition, message, file, line) ((!(condition)) ? t_assert_fail(message, file, line) : t_noop()) -#define t_assert_c(condition, comment) t_assert_full(condition, "\"" #condition "\" (" comment ")", __FILE__, __LINE__) -#define t_assert(condition) t_assert_full(condition, "\"" #condition "\"", __FILE__, __LINE__) - -class Exception : public exception { -public: - - Exception(const QString &msg, bool isFatal = true) : _fatal(isFatal), _msg(msg.toUtf8()) { - LOG(("Exception: %1").arg(msg)); - } - bool fatal() const { - return _fatal; - } - - virtual const char *what() const throw() { - return _msg.constData(); - } - virtual ~Exception() throw() { - } - -private: - bool _fatal; - QByteArray _msg; -}; - -class MTPint; -typedef int32 TimeId; -TimeId myunixtime(); -void unixtimeInit(); -void unixtimeSet(TimeId servertime, bool force = false); -TimeId unixtime(); -TimeId fromServerTime(const MTPint &serverTime); -void toServerTime(const TimeId &clientTime, MTPint &outServerTime); -uint64 msgid(); -int32 reqid(); - -inline QDateTime date(int32 time = -1) { - QDateTime result; - if (time >= 0) result.setTime_t(time); - return result; -} - -inline QDateTime dateFromServerTime(const MTPint &time) { - return date(fromServerTime(time)); -} - -inline QDateTime date(const MTPint &time) { - return dateFromServerTime(time); -} - -QDateTime dateFromServerTime(TimeId time); - -inline void mylocaltime(struct tm * _Tm, const time_t * _Time) { -#ifdef Q_OS_WIN - localtime_s(_Tm, _Time); -#else - localtime_r(_Time, _Tm); -#endif -} - -namespace ThirdParty { - - void start(); - void finish(); - -} - -bool checkms(); // returns true if time has changed -uint64 getms(bool checked = false); - -class SingleTimer : public QTimer { // single shot timer with check - Q_OBJECT - -public: - - SingleTimer(); - - void setSingleShot(bool); // is not available - void start(); // is not available - -public slots: - - void start(int msec); - void startIfNotActive(int msec); - void adjust() { - uint64 n = getms(true); - if (isActive()) { - if (n >= _finishing) { - start(0); - } else { - start(_finishing - n); - } - } - } - -private: - uint64 _finishing; - bool _inited; - -}; - -const static uint32 _md5_block_size = 64; -class HashMd5 { -public: - - HashMd5(const void *input = 0, uint32 length = 0); - void feed(const void *input, uint32 length); - int32 *result(); - -private: - - void init(); - void finalize(); - void transform(const uchar *block); - - bool _finalized; - uchar _buffer[_md5_block_size]; - uint32 _count[2]; - uint32 _state[4]; - uchar _digest[16]; - -}; - -int32 hashCrc32(const void *data, uint32 len); -int32 *hashSha1(const void *data, uint32 len, void *dest); // dest - ptr to 20 bytes, returns (int32*)dest -int32 *hashSha256(const void *data, uint32 len, void *dest); // dest - ptr to 32 bytes, returns (int32*)dest -int32 *hashMd5(const void *data, uint32 len, void *dest); // dest = ptr to 16 bytes, returns (int32*)dest -char *hashMd5Hex(const int32 *hashmd5, void *dest); // dest = ptr to 32 bytes, returns (char*)dest -inline char *hashMd5Hex(const void *data, uint32 len, void *dest) { // dest = ptr to 32 bytes, returns (char*)dest - return hashMd5Hex(HashMd5(data, len).result(), dest); -} - -// good random (using openssl implementation) -void memset_rand(void *data, uint32 len); -template -T rand_value() { - T result; - memset_rand(&result, sizeof(result)); - return result; -} - -inline void memset_rand_bad(void *data, uint32 len) { - for (uchar *i = reinterpret_cast(data), *e = i + len; i != e; ++i) { - *i = uchar(rand() & 0xFF); - } -} - -template -inline void memsetrnd_bad(T &value) { - memset_rand_bad(&value, sizeof(value)); -} - -class ReadLockerAttempt { -public: - - ReadLockerAttempt(QReadWriteLock *_lock) : success(_lock->tryLockForRead()), lock(_lock) { - } - ~ReadLockerAttempt() { - if (success) { - lock->unlock(); - } - } - - operator bool() const { - return success; - } - -private: - - bool success; - QReadWriteLock *lock; - -}; - -inline QString fromUtf8Safe(const char *str, int32 size = -1) { - if (!str || !size) return QString(); - if (size < 0) size = int32(strlen(str)); - QString result(QString::fromUtf8(str, size)); - QByteArray back = result.toUtf8(); - if (back.size() != size || memcmp(back.constData(), str, size)) return QString::fromLocal8Bit(str, size); - return result; -} - -inline QString fromUtf8Safe(const QByteArray &str) { - return fromUtf8Safe(str.constData(), str.size()); -} - -static const QRegularExpression::PatternOptions reMultiline(QRegularExpression::DotMatchesEverythingOption | QRegularExpression::MultilineOption); - -template -inline T snap(const T &v, const T &_min, const T &_max) { - return (v < _min) ? _min : ((v > _max) ? _max : v); -} - -template -class ManagedPtr { -public: - ManagedPtr() : ptr(0) { - } - ManagedPtr(T *p) : ptr(p) { - } - T *operator->() const { - return ptr; - } - T *v() const { - return ptr; - } - -protected: - - T *ptr; - typedef ManagedPtr Parent; -}; - -QString translitRusEng(const QString &rus); -QString rusKeyboardLayoutSwitch(const QString &from); - -enum DBISendKey { - dbiskEnter = 0, - dbiskCtrlEnter = 1, -}; - -enum DBINotifyView { - dbinvShowPreview = 0, - dbinvShowName = 1, - dbinvShowNothing = 2, -}; - -enum DBIWorkMode { - dbiwmWindowAndTray = 0, - dbiwmTrayOnly = 1, - dbiwmWindowOnly = 2, -}; - -enum DBIConnectionType { - dbictAuto = 0, - dbictHttpAuto = 1, // not used - dbictHttpProxy = 2, - dbictTcpProxy = 3, -}; - -enum DBIDefaultAttach { - dbidaDocument = 0, - dbidaPhoto = 1, -}; - -struct ProxyData { - QString host; - uint32 port = 0; - QString user, password; -}; - -enum DBIScale { - dbisAuto = 0, - dbisOne = 1, - dbisOneAndQuarter = 2, - dbisOneAndHalf = 3, - dbisTwo = 4, - - dbisScaleCount = 5, -}; - -static const int MatrixRowShift = 40000; - -enum DBIEmojiTab { - dbietRecent = -1, - dbietPeople = 0, - dbietNature = 1, - dbietFood = 2, - dbietActivity = 3, - dbietTravel = 4, - dbietObjects = 5, - dbietSymbols = 6, - dbietStickers = 666, -}; -static const int emojiTabCount = 8; -inline DBIEmojiTab emojiTabAtIndex(int index) { - return (index < 0 || index >= emojiTabCount) ? dbietRecent : DBIEmojiTab(index - 1); -} - -enum DBIPlatform { - dbipWindows = 0, - dbipMac = 1, - dbipLinux64 = 2, - dbipLinux32 = 3, - dbipMacOld = 4, -}; - -enum DBIPeerReportSpamStatus { - dbiprsNoButton = 0, // hidden, but not in the cloud settings yet - dbiprsUnknown = 1, // contacts not loaded yet - dbiprsShowButton = 2, // show report spam button, each show peer request setting from cloud - dbiprsReportSent = 3, // report sent, but the report spam panel is not hidden yet - dbiprsHidden = 4, // hidden in the cloud or not needed (bots, contacts, etc), no more requests - dbiprsRequesting = 5, // requesting the cloud setting right now -}; - -typedef enum { - HitTestNone = 0, - HitTestClient, - HitTestSysButton, - HitTestIcon, - HitTestCaption, - HitTestTop, - HitTestTopRight, - HitTestRight, - HitTestBottomRight, - HitTestBottom, - HitTestBottomLeft, - HitTestLeft, - HitTestTopLeft, -} HitTestType; - -inline QString strMakeFromLetters(const uint32 *letters, int32 len) { - QString result; - result.reserve(len); - for (int32 i = 0; i < len; ++i) { - result.push_back(QChar((((letters[i] >> 16) & 0xFF) << 8) | (letters[i] & 0xFF))); - } - return result; -} - -class MimeType { -public: - - enum TypeEnum { - Unknown, - WebP, - }; - - MimeType(const QMimeType &type) : _typeStruct(type), _type(Unknown) { - } - MimeType(TypeEnum type) : _type(type) { - } - QStringList globPatterns() const; - QString filterString() const; - QString name() const; - -private: - - QMimeType _typeStruct; - TypeEnum _type; - -}; - -MimeType mimeTypeForName(const QString &mime); -MimeType mimeTypeForFile(const QFileInfo &file); -MimeType mimeTypeForData(const QByteArray &data); - -#include - -inline int rowscount(int fullCount, int countPerRow) { - return (fullCount + countPerRow - 1) / countPerRow; -} -inline int floorclamp(int value, int step, int lowest, int highest) { - return qMin(qMax(value / step, lowest), highest); -} -inline int floorclamp(float64 value, int step, int lowest, int highest) { - return qMin(qMax(static_cast(std::floor(value / step)), lowest), highest); -} -inline int ceilclamp(int value, int step, int lowest, int highest) { - return qMax(qMin((value + step - 1) / step, highest), lowest); -} -inline int ceilclamp(float64 value, int32 step, int32 lowest, int32 highest) { - return qMax(qMin(static_cast(std::ceil(value / step)), highest), lowest); -} - -enum ForwardWhatMessages { - ForwardSelectedMessages, - ForwardContextMessage, - ForwardPressedMessage, - ForwardPressedLinkMessage -}; - -enum ShowLayerOption { - CloseOtherLayers = 0x00, - KeepOtherLayers = 0x01, - ShowAfterOtherLayers = 0x03, - - AnimatedShowLayer = 0x00, - ForceFastShowLayer = 0x04, -}; -Q_DECLARE_FLAGS(ShowLayerOptions, ShowLayerOption); -Q_DECLARE_OPERATORS_FOR_FLAGS(ShowLayerOptions); - -static int32 FullArcLength = 360 * 16; -static int32 QuarterArcLength = (FullArcLength / 4); -static int32 MinArcLength = (FullArcLength / 360); -static int32 AlmostFullArcLength = (FullArcLength - MinArcLength); - -template -inline QSharedPointer MakeShared(Args&&... args) { - return QSharedPointer(new T(std_::forward(args)...)); -} - -// This pointer is used for global non-POD variables that are allocated -// on demand by createIfNull(lambda) and are never automatically freed. -template -class NeverFreedPointer { -public: - NeverFreedPointer() = default; - NeverFreedPointer(const NeverFreedPointer &other) = delete; - NeverFreedPointer &operator=(const NeverFreedPointer &other) = delete; - - template - void createIfNull(U creator) { - if (isNull()) { - reset(creator()); - } - } - - template - void makeIfNull(Args&&... args) { - if (isNull()) { - reset(new T(std_::forward(args)...)); - } - }; - - T *data() const { - return _p; - } - T *release() { - return getPointerAndReset(_p); - } - void reset(T *p = nullptr) { - delete _p; - _p = p; - } - bool isNull() const { - return data() == nullptr; - } - - void clear() { - reset(); - } - T *operator->() const { - return data(); - } - T &operator*() const { - t_assert(!isNull()); - return *data(); - } - explicit operator bool() const { - return !isNull(); - } - -private: - T *_p; - -}; - -// This pointer is used for static non-POD variables that are allocated -// on first use by constructor and are never automatically freed. -template -class StaticNeverFreedPointer { -public: - explicit StaticNeverFreedPointer(T *p) : _p(p) { - } - StaticNeverFreedPointer(const StaticNeverFreedPointer &other) = delete; - StaticNeverFreedPointer &operator=(const StaticNeverFreedPointer &other) = delete; - - T *data() const { - return _p; - } - T *release() { - return getPointerAndReset(_p); - } - void reset(T *p = nullptr) { - delete _p; - _p = p; - } - bool isNull() const { - return data() == nullptr; - } - - void clear() { - reset(); - } - T *operator->() const { - return data(); - } - T &operator*() const { - t_assert(!isNull()); - return *data(); - } - explicit operator bool() const { - return !isNull(); - } - -private: - T *_p = nullptr; - -}; - -class Composer; -typedef void(*ComponentConstruct)(void *location, Composer *composer); -typedef void(*ComponentDestruct)(void *location); -typedef void(*ComponentMove)(void *location, void *waslocation); - -struct ComponentWrapStruct { - // don't init any fields, because it is only created in - // global scope, so it will be filled by zeros from the start - ComponentWrapStruct() { - } - ComponentWrapStruct(std::size_t size, std::size_t align, ComponentConstruct construct, ComponentDestruct destruct, ComponentMove move) - : Size(size) - , Align(align) - , Construct(construct) - , Destruct(destruct) - , Move(move) { - } - std::size_t Size; - std::size_t Align; - ComponentConstruct Construct; - ComponentDestruct Destruct; - ComponentMove Move; -}; - -template -struct CeilDivideMinimumOne { - static const int Result = ((Value / Denominator) + ((!Value || (Value % Denominator)) ? 1 : 0)); -}; - -extern ComponentWrapStruct ComponentWraps[64]; -extern QAtomicInt ComponentIndexLast; - -template -struct BaseComponent { - BaseComponent() { - static_assert(alignof(Type) <= alignof(SmallestSizeType), "Components should align to a pointer!"); - } - BaseComponent(const BaseComponent &other) = delete; - BaseComponent &operator=(const BaseComponent &other) = delete; - BaseComponent(BaseComponent &&other) = delete; - BaseComponent &operator=(BaseComponent &&other) = default; - - static int Index() { - static QAtomicInt _index(0); - if (int index = _index.loadAcquire()) { - return index - 1; - } - while (true) { - int last = ComponentIndexLast.loadAcquire(); - if (ComponentIndexLast.testAndSetOrdered(last, last + 1)) { - t_assert(last < 64); - if (_index.testAndSetOrdered(0, last + 1)) { - ComponentWraps[last] = ComponentWrapStruct( - CeilDivideMinimumOne::Result * sizeof(SmallestSizeType), - alignof(Type), - Type::ComponentConstruct, - Type::ComponentDestruct, - Type::ComponentMove); - } - break; - } - } - return _index.loadAcquire() - 1; - } - static uint64 Bit() { - return (1ULL << Index()); - } - -protected: - using SmallestSizeType = void*; - - static void ComponentConstruct(void *location, Composer *composer) { - new (location) Type(); - } - static void ComponentDestruct(void *location) { - ((Type*)location)->~Type(); - } - static void ComponentMove(void *location, void *waslocation) { - *(Type*)location = std_::move(*(Type*)waslocation); - } - -}; - -class ComposerMetadata { -public: - ComposerMetadata(uint64 mask) : size(0), last(64), _mask(mask) { - for (int i = 0; i < 64; ++i) { - uint64 m = (1ULL << i); - if (_mask & m) { - int s = ComponentWraps[i].Size; - if (s) { - offsets[i] = size; - size += s; - } else { - offsets[i] = -1; - } - } else if (_mask < m) { - last = i; - for (; i < 64; ++i) { - offsets[i] = -1; - } - } else { - offsets[i] = -1; - } - } - } - - int size, last; - int offsets[64]; - - bool equals(uint64 mask) const { - return _mask == mask; - } - uint64 maskadd(uint64 mask) const { - return _mask | mask; - } - uint64 maskremove(uint64 mask) const { - return _mask & (~mask); - } - -private: - uint64 _mask; - -}; - -const ComposerMetadata *GetComposerMetadata(uint64 mask); - -class Composer { -public: - Composer(uint64 mask = 0) : _data(zerodata()) { - if (mask) { - const ComposerMetadata *meta = GetComposerMetadata(mask); - int size = sizeof(meta) + meta->size; - - auto data = operator new(size); - t_assert(data != nullptr); - - _data = data; - _meta() = meta; - for (int i = 0; i < meta->last; ++i) { - int offset = meta->offsets[i]; - if (offset >= 0) { - try { - auto constructAt = _dataptrunsafe(offset); -#ifndef OS_MAC_OLD - auto space = ComponentWraps[i].Size; - auto alignedAt = std::align(ComponentWraps[i].Align, space, constructAt, space); - t_assert(alignedAt == constructAt); -#endif // OS_MAC_OLD - ComponentWraps[i].Construct(constructAt, this); - } catch (...) { - while (i > 0) { - --i; - offset = meta->offsets[--i]; - if (offset >= 0) { - ComponentWraps[i].Destruct(_dataptrunsafe(offset)); - } - } - throw; - } - } - } - } - } - Composer(const Composer &other) = delete; - Composer &operator=(const Composer &other) = delete; - ~Composer() { - if (_data != zerodata()) { - auto meta = _meta(); - for (int i = 0; i < meta->last; ++i) { - int offset = meta->offsets[i]; - if (offset >= 0) { - ComponentWraps[i].Destruct(_dataptrunsafe(offset)); - } - } - operator delete(_data); - } - } - - template - bool Has() const { - return (_meta()->offsets[Type::Index()] >= 0); - } - - template - Type *Get() { - return static_cast(_dataptr(_meta()->offsets[Type::Index()])); - } - template - const Type *Get() const { - return static_cast(_dataptr(_meta()->offsets[Type::Index()])); - } - -protected: - void UpdateComponents(uint64 mask = 0) { - if (!_meta()->equals(mask)) { - Composer tmp(mask); - tmp.swap(*this); - if (_data != zerodata() && tmp._data != zerodata()) { - auto meta = _meta(), wasmeta = tmp._meta(); - for (int i = 0; i < meta->last; ++i) { - int offset = meta->offsets[i], wasoffset = wasmeta->offsets[i]; - if (offset >= 0 && wasoffset >= 0) { - ComponentWraps[i].Move(_dataptrunsafe(offset), tmp._dataptrunsafe(wasoffset)); - } - } - } - } - } - void AddComponents(uint64 mask = 0) { - UpdateComponents(_meta()->maskadd(mask)); - } - void RemoveComponents(uint64 mask = 0) { - UpdateComponents(_meta()->maskremove(mask)); - } - -private: - static const ComposerMetadata *ZeroComposerMetadata; - static void *zerodata() { - return &ZeroComposerMetadata; - } - - void *_dataptrunsafe(int skip) const { - return (char*)_data + sizeof(_meta()) + skip; - } - void *_dataptr(int skip) const { - return (skip >= 0) ? _dataptrunsafe(skip) : 0; - } - const ComposerMetadata *&_meta() const { - return *static_cast(_data); - } - void *_data; - - void swap(Composer &other) { - std::swap(_data, other._data); - } - -}; diff --git a/Telegram/SourceFiles/core/lambda_wrap.h b/Telegram/SourceFiles/core/lambda_wrap.h index 9305c6694..b8c6c8e53 100644 --- a/Telegram/SourceFiles/core/lambda_wrap.h +++ b/Telegram/SourceFiles/core/lambda_wrap.h @@ -146,11 +146,9 @@ struct lambda_wrap_helper_move_impl : } static void construct_move_lambda_method(void *lambda, void *source) { static_assert(alignof(JustLambda) <= alignof(void*), "Bad lambda alignment."); -#ifndef OS_MAC_OLD auto space = sizeof(JustLambda); - auto aligned = std::align(alignof(JustLambda), space, lambda, space); + auto aligned = std_::align(alignof(JustLambda), space, lambda, space); t_assert(aligned == lambda); -#endif // OS_MAC_OLD auto source_lambda = static_cast(source); new (lambda) JustLambda(static_cast(*source_lambda)); } @@ -223,11 +221,9 @@ struct lambda_wrap_helper_copy_impl : } static void construct_copy_lambda_method(void *lambda, const void *source) { static_assert(alignof(JustLambda) <= alignof(void*), "Bad lambda alignment."); -#ifndef OS_MAC_OLD auto space = sizeof(JustLambda); - auto aligned = std::align(alignof(JustLambda), space, lambda, space); + auto aligned = std_::align(alignof(JustLambda), space, lambda, space); t_assert(aligned == lambda); -#endif // OS_MAC_OLD auto source_lambda = static_cast(source); new (lambda) JustLambda(static_cast(*source_lambda)); } diff --git a/Telegram/SourceFiles/core/ordered_set.h b/Telegram/SourceFiles/core/ordered_set.h new file mode 100644 index 000000000..05da1455e --- /dev/null +++ b/Telegram/SourceFiles/core/ordered_set.h @@ -0,0 +1,159 @@ +/* +This file is part of Telegram Desktop, +the official desktop version of Telegram messaging app, see https://telegram.org + +Telegram Desktop is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +It is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + +Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE +Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org +*/ +#pragma once + +#include + +// ordered set template based on QMap +template +class OrderedSet { + struct NullType { + }; + using Self = OrderedSet; + using Impl = QMap; + using IteratorImpl = typename Impl::iterator; + using ConstIteratorImpl = typename Impl::const_iterator; + Impl impl_; + +public: + inline bool operator==(const Self &other) const { return impl_ == other.impl_; } + inline bool operator!=(const Self &other) const { return impl_ != other.impl_; } + inline int size() const { return impl_.size(); } + inline bool isEmpty() const { return impl_.isEmpty(); } + inline void detach() { return impl_.detach(); } + inline bool isDetached() const { return impl_.isDetached(); } + inline void clear() { return impl_.clear(); } + inline QList values() const { return impl_.keys(); } + inline const T &first() const { return impl_.firstKey(); } + inline const T &last() const { return impl_.lastKey(); } + + class const_iterator; + class iterator { + public: + typedef typename IteratorImpl::iterator_category iterator_category; + typedef typename IteratorImpl::difference_type difference_type; + typedef T value_type; + typedef T *pointer; + typedef T &reference; + + iterator() = default; + iterator(const iterator &other) = default; + iterator &operator=(const iterator &other) = default; + inline const T &operator*() const { return impl_.key(); } + inline const T *operator->() const { return &impl_.key(); } + inline bool operator==(const iterator &other) const { return impl_ == other.impl_; } + inline bool operator!=(const iterator &other) const { return impl_ != other.impl_; } + inline iterator &operator++() { ++impl_; return *this; } + inline iterator operator++(int) { return iterator(impl_++); } + inline iterator &operator--() { --impl_; return *this; } + inline iterator operator--(int) { return iterator(impl_--); } + inline iterator operator+(int j) const { return iterator(impl_ + j); } + inline iterator operator-(int j) const { return iterator(impl_ - j); } + inline iterator &operator+=(int j) { impl_ += j; return *this; } + inline iterator &operator-=(int j) { impl_ -= j; return *this; } + + friend class const_iterator; + inline bool operator==(const const_iterator &other) const { return impl_ == other.impl_; } + inline bool operator!=(const const_iterator &other) const { return impl_ != other.impl_; } + + private: + explicit iterator(const IteratorImpl &impl) : impl_(impl) { + } + IteratorImpl impl_; + friend class OrderedSet; + + }; + friend class iterator; + + class const_iterator { + public: + typedef typename IteratorImpl::iterator_category iterator_category; + typedef typename IteratorImpl::difference_type difference_type; + typedef T value_type; + typedef T *pointer; + typedef T &reference; + + const_iterator() = default; + const_iterator(const const_iterator &other) = default; + const_iterator &operator=(const const_iterator &other) = default; + const_iterator(const iterator &other) : impl_(other.impl_) { + } + const_iterator &operator=(const iterator &other) { + impl_ = other.impl_; + return *this; + } + inline const T &operator*() const { return impl_.key(); } + inline const T *operator->() const { return &impl_.key(); } + inline bool operator==(const const_iterator &other) const { return impl_ == other.impl_; } + inline bool operator!=(const const_iterator &other) const { return impl_ != other.impl_; } + inline const_iterator &operator++() { ++impl_; return *this; } + inline const_iterator operator++(int) { return const_iterator(impl_++); } + inline const_iterator &operator--() { --impl_; return *this; } + inline const_iterator operator--(int) { return const_iterator(impl_--); } + inline const_iterator operator+(int j) const { return const_iterator(impl_ + j); } + inline const_iterator operator-(int j) const { return const_iterator(impl_ - j); } + inline const_iterator &operator+=(int j) { impl_ += j; return *this; } + inline const_iterator &operator-=(int j) { impl_ -= j; return *this; } + + friend class iterator; + inline bool operator==(const iterator &other) const { return impl_ == other.impl_; } + inline bool operator!=(const iterator &other) const { return impl_ != other.impl_; } + + private: + explicit const_iterator(const ConstIteratorImpl &impl) : impl_(impl) { + } + ConstIteratorImpl impl_; + friend class OrderedSet; + + }; + friend class const_iterator; + + // STL style + inline iterator begin() { return iterator(impl_.begin()); } + inline const_iterator begin() const { return const_iterator(impl_.cbegin()); } + inline const_iterator constBegin() const { return const_iterator(impl_.cbegin()); } + inline const_iterator cbegin() const { return const_iterator(impl_.cbegin()); } + inline iterator end() { detach(); return iterator(impl_.end()); } + inline const_iterator end() const { return const_iterator(impl_.cend()); } + inline const_iterator constEnd() const { return const_iterator(impl_.cend()); } + inline const_iterator cend() const { return const_iterator(impl_.cend()); } + inline iterator erase(iterator it) { return iterator(impl_.erase(it.impl_)); } + + inline iterator insert(const T &value) { return iterator(impl_.insert(value, NullType())); } + inline iterator insert(const_iterator pos, const T &value) { return iterator(impl_.insert(pos.impl_, value, NullType())); } + inline int remove(const T &value) { return impl_.remove(value); } + inline bool contains(const T &value) const { return impl_.contains(value); } + + // more Qt + typedef iterator Iterator; + typedef const_iterator ConstIterator; + inline int count() const { return impl_.count(); } + inline iterator find(const T &value) { return iterator(impl_.find(value)); } + inline const_iterator find(const T &value) const { return const_iterator(impl_.constFind(value)); } + inline const_iterator constFind(const T &value) const { return const_iterator(impl_.constFind(value)); } + inline Self &unite(const Self &other) { impl_.unite(other.impl_); return *this; } + + // STL compatibility + typedef typename Impl::difference_type difference_type; + typedef typename Impl::size_type size_type; + inline bool empty() const { return impl_.empty(); } + +}; diff --git a/Telegram/SourceFiles/core/runtime_composer.cpp b/Telegram/SourceFiles/core/runtime_composer.cpp new file mode 100644 index 000000000..add2ecaa0 --- /dev/null +++ b/Telegram/SourceFiles/core/runtime_composer.cpp @@ -0,0 +1,52 @@ +/* +This file is part of Telegram Desktop, +the official desktop version of Telegram messaging app, see https://telegram.org + +Telegram Desktop is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +It is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + +Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE +Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org +*/ +#include "stdafx.h" +#include "core/runtime_composer.h" + +struct RuntimeComposerMetadatasMap { + QMap data; + ~RuntimeComposerMetadatasMap() { + for_const (const RuntimeComposerMetadata *p, data) { + delete p; + } + } +}; + +const RuntimeComposerMetadata *GetRuntimeComposerMetadata(uint64 mask) { + static RuntimeComposerMetadatasMap RuntimeComposerMetadatas; + static QMutex RuntimeComposerMetadatasMutex; + + QMutexLocker lock(&RuntimeComposerMetadatasMutex); + auto i = RuntimeComposerMetadatas.data.constFind(mask); + if (i == RuntimeComposerMetadatas.data.cend()) { + RuntimeComposerMetadata *meta = new RuntimeComposerMetadata(mask); + t_assert(meta != nullptr); + + i = RuntimeComposerMetadatas.data.insert(mask, meta); + } + return i.value(); +} + +const RuntimeComposerMetadata *RuntimeComposer::ZeroRuntimeComposerMetadata = GetRuntimeComposerMetadata(0); + +RuntimeComponentWrapStruct RuntimeComponentWraps[64]; + +QAtomicInt RuntimeComponentIndexLast; diff --git a/Telegram/SourceFiles/core/runtime_composer.h b/Telegram/SourceFiles/core/runtime_composer.h new file mode 100644 index 000000000..bc5b0f15e --- /dev/null +++ b/Telegram/SourceFiles/core/runtime_composer.h @@ -0,0 +1,257 @@ +/* +This file is part of Telegram Desktop, +the official desktop version of Telegram messaging app, see https://telegram.org + +Telegram Desktop is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +It is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + +Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE +Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org +*/ +#pragma once + +class RuntimeComposer; +typedef void(*RuntimeComponentConstruct)(void *location, RuntimeComposer *composer); +typedef void(*RuntimeComponentDestruct)(void *location); +typedef void(*RuntimeComponentMove)(void *location, void *waslocation); + +struct RuntimeComponentWrapStruct { + // don't init any fields, because it is only created in + // global scope, so it will be filled by zeros from the start + RuntimeComponentWrapStruct() = default; + RuntimeComponentWrapStruct(std::size_t size, std::size_t align, RuntimeComponentConstruct construct, RuntimeComponentDestruct destruct, RuntimeComponentMove move) + : Size(size) + , Align(align) + , Construct(construct) + , Destruct(destruct) + , Move(move) { + } + std::size_t Size; + std::size_t Align; + RuntimeComponentConstruct Construct; + RuntimeComponentDestruct Destruct; + RuntimeComponentMove Move; +}; + +template +struct CeilDivideMinimumOne { + static constexpr int Result = ((Value / Denominator) + ((!Value || (Value % Denominator)) ? 1 : 0)); +}; + +extern RuntimeComponentWrapStruct RuntimeComponentWraps[64]; +extern QAtomicInt RuntimeComponentIndexLast; + +template +struct RuntimeComponent { + RuntimeComponent() { + static_assert(alignof(Type) <= alignof(SmallestSizeType), "Components should align to a pointer!"); + } + RuntimeComponent(const RuntimeComponent &other) = delete; + RuntimeComponent &operator=(const RuntimeComponent &other) = delete; + RuntimeComponent(RuntimeComponent &&other) = delete; + RuntimeComponent &operator=(RuntimeComponent &&other) = default; + + static int Index() { + static QAtomicInt _index(0); + if (int index = _index.loadAcquire()) { + return index - 1; + } + while (true) { + int last = RuntimeComponentIndexLast.loadAcquire(); + if (RuntimeComponentIndexLast.testAndSetOrdered(last, last + 1)) { + t_assert(last < 64); + if (_index.testAndSetOrdered(0, last + 1)) { + RuntimeComponentWraps[last] = RuntimeComponentWrapStruct( + CeilDivideMinimumOne::Result * sizeof(SmallestSizeType), + alignof(Type), + Type::RuntimeComponentConstruct, + Type::RuntimeComponentDestruct, + Type::RuntimeComponentMove); + } + break; + } + } + return _index.loadAcquire() - 1; + } + static uint64 Bit() { + return (1ULL << Index()); + } + +protected: + using SmallestSizeType = void*; + + static void RuntimeComponentConstruct(void *location, RuntimeComposer *composer) { + new (location) Type(); + } + static void RuntimeComponentDestruct(void *location) { + ((Type*)location)->~Type(); + } + static void RuntimeComponentMove(void *location, void *waslocation) { + *(Type*)location = std_::move(*(Type*)waslocation); + } + +}; + +class RuntimeComposerMetadata { +public: + RuntimeComposerMetadata(uint64 mask) : size(0), last(64), _mask(mask) { + for (int i = 0; i < 64; ++i) { + uint64 m = (1ULL << i); + if (_mask & m) { + int s = RuntimeComponentWraps[i].Size; + if (s) { + offsets[i] = size; + size += s; + } else { + offsets[i] = -1; + } + } else if (_mask < m) { + last = i; + for (; i < 64; ++i) { + offsets[i] = -1; + } + } else { + offsets[i] = -1; + } + } + } + + int size, last; + int offsets[64]; + + bool equals(uint64 mask) const { + return _mask == mask; + } + uint64 maskadd(uint64 mask) const { + return _mask | mask; + } + uint64 maskremove(uint64 mask) const { + return _mask & (~mask); + } + +private: + uint64 _mask; + +}; + +const RuntimeComposerMetadata *GetRuntimeComposerMetadata(uint64 mask); + +class RuntimeComposer { +public: + RuntimeComposer(uint64 mask = 0) : _data(zerodata()) { + if (mask) { + const RuntimeComposerMetadata *meta = GetRuntimeComposerMetadata(mask); + int size = sizeof(meta) + meta->size; + + auto data = operator new(size); + t_assert(data != nullptr); + + _data = data; + _meta() = meta; + for (int i = 0; i < meta->last; ++i) { + int offset = meta->offsets[i]; + if (offset >= 0) { + try { + auto constructAt = _dataptrunsafe(offset); + auto space = RuntimeComponentWraps[i].Size; + auto alignedAt = std_::align(RuntimeComponentWraps[i].Align, space, constructAt, space); + t_assert(alignedAt == constructAt); + RuntimeComponentWraps[i].Construct(constructAt, this); + } catch (...) { + while (i > 0) { + --i; + offset = meta->offsets[--i]; + if (offset >= 0) { + RuntimeComponentWraps[i].Destruct(_dataptrunsafe(offset)); + } + } + throw; + } + } + } + } + } + RuntimeComposer(const RuntimeComposer &other) = delete; + RuntimeComposer &operator=(const RuntimeComposer &other) = delete; + ~RuntimeComposer() { + if (_data != zerodata()) { + auto meta = _meta(); + for (int i = 0; i < meta->last; ++i) { + int offset = meta->offsets[i]; + if (offset >= 0) { + RuntimeComponentWraps[i].Destruct(_dataptrunsafe(offset)); + } + } + operator delete(_data); + } + } + + template + bool Has() const { + return (_meta()->offsets[Type::Index()] >= 0); + } + + template + Type *Get() { + return static_cast(_dataptr(_meta()->offsets[Type::Index()])); + } + template + const Type *Get() const { + return static_cast(_dataptr(_meta()->offsets[Type::Index()])); + } + +protected: + void UpdateComponents(uint64 mask = 0) { + if (!_meta()->equals(mask)) { + RuntimeComposer tmp(mask); + tmp.swap(*this); + if (_data != zerodata() && tmp._data != zerodata()) { + auto meta = _meta(), wasmeta = tmp._meta(); + for (int i = 0; i < meta->last; ++i) { + int offset = meta->offsets[i], wasoffset = wasmeta->offsets[i]; + if (offset >= 0 && wasoffset >= 0) { + RuntimeComponentWraps[i].Move(_dataptrunsafe(offset), tmp._dataptrunsafe(wasoffset)); + } + } + } + } + } + void AddComponents(uint64 mask = 0) { + UpdateComponents(_meta()->maskadd(mask)); + } + void RemoveComponents(uint64 mask = 0) { + UpdateComponents(_meta()->maskremove(mask)); + } + +private: + static const RuntimeComposerMetadata *ZeroRuntimeComposerMetadata; + static void *zerodata() { + return &ZeroRuntimeComposerMetadata; + } + + void *_dataptrunsafe(int skip) const { + return (char*)_data + sizeof(_meta()) + skip; + } + void *_dataptr(int skip) const { + return (skip >= 0) ? _dataptrunsafe(skip) : 0; + } + const RuntimeComposerMetadata *&_meta() const { + return *static_cast(_data); + } + void *_data; + + void swap(RuntimeComposer &other) { + std::swap(_data, other._data); + } + +}; diff --git a/Telegram/SourceFiles/core/stl_subset.h b/Telegram/SourceFiles/core/stl_subset.h new file mode 100644 index 000000000..477614850 --- /dev/null +++ b/Telegram/SourceFiles/core/stl_subset.h @@ -0,0 +1,276 @@ +/* +This file is part of Telegram Desktop, +the official desktop version of Telegram messaging app, see https://telegram.org + +Telegram Desktop is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +It is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + +Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE +Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org +*/ +#pragma once + +// we copy some parts of C++11/14/17 std:: library, because on OS X 10.6+ +// version we can use C++11/14/17, but we can not use its library :( +namespace std_ { + +using nullptr_t = decltype(nullptr); + +template +struct integral_constant { + static constexpr T value = V; + + using value_type = T; + using type = integral_constant; + + constexpr operator value_type() const noexcept { + return (value); + } + + constexpr value_type operator()() const noexcept { + return (value); + } +}; + +using true_type = integral_constant; +using false_type = integral_constant; + +template +struct remove_reference { + using type = T; +}; +template +struct remove_reference { + using type = T; +}; +template +struct remove_reference { + using type = T; +}; + +template +struct is_lvalue_reference : false_type { +}; +template +struct is_lvalue_reference : true_type { +}; + +template +struct is_rvalue_reference : false_type { +}; +template +struct is_rvalue_reference : true_type { +}; + +template +inline constexpr T &&forward(typename remove_reference::type &value) noexcept { + return static_cast(value); +} +template +inline constexpr T &&forward(typename remove_reference::type &&value) noexcept { + static_assert(!is_lvalue_reference::value, "bad forward call"); + return static_cast(value); +} + +template +inline constexpr typename remove_reference::type &&move(T &&value) noexcept { + return static_cast::type&&>(value); +} + +template +void swap(T &a, T &b) { + T tmp = move(a); + a = move(b); + b = move(tmp); +} + +template +struct remove_const { + using type = T; +}; + +template +struct remove_const { + using type = T; +}; + +template +struct remove_volatile { + using type = T; +}; + +template +struct remove_volatile { + using type = T; +}; + +template +using decay_simple_t = typename remove_const::type>::type>::type; + +template +struct is_same : false_type { +}; + +template +struct is_same : true_type { +}; + +template +struct enable_if { +}; + +template +struct enable_if { + using type = T; +}; + +template +using enable_if_t = typename enable_if::type; + +template +struct add_const { + using type = const T; +}; +template +using add_const_t = typename add_const::type; +template +constexpr add_const_t &as_const(T& t) noexcept { + return t; +} +template +void as_const(const T&&) = delete; + +// This is not full unique_ptr, but at least with std interface. +template +class unique_ptr { +public: + constexpr unique_ptr() noexcept = default; + unique_ptr(const unique_ptr &) = delete; + unique_ptr &operator=(const unique_ptr &) = delete; + + constexpr unique_ptr(std_::nullptr_t) { + } + unique_ptr &operator=(std_::nullptr_t) noexcept { + reset(); + return (*this); + } + + explicit unique_ptr(T *p) noexcept : _p(p) { + } + + template + unique_ptr(unique_ptr &&other) noexcept : _p(other.release()) { + } + template + unique_ptr &operator=(unique_ptr &&other) noexcept { + reset(other.release()); + return (*this); + } + unique_ptr &operator=(unique_ptr &&other) noexcept { + if (this != &other) { + reset(other.release()); + } + return (*this); + } + + void swap(unique_ptr &other) noexcept { + std::swap(_p, other._p); + } + ~unique_ptr() noexcept { + delete _p; + } + + T &operator*() const { + return (*get()); + } + T *operator->() const noexcept { + return get(); + } + T *get() const noexcept { + return _p; + } + explicit operator bool() const noexcept { + return get() != nullptr; + } + + T *release() noexcept { + return getPointerAndReset(_p); + } + + void reset(T *p = nullptr) noexcept { + T *old = _p; + _p = p; + if (old) { + delete old; + } + } + +private: + T *_p = nullptr; + +}; + +template +inline unique_ptr make_unique(Args&&... args) { + return unique_ptr(new T(forward(args)...)); +} + +template +inline bool operator==(const unique_ptr &a, std_::nullptr_t) noexcept { + return !a; +} +template +inline bool operator==(std_::nullptr_t, const unique_ptr &b) noexcept { + return !b; +} +template +inline bool operator!=(const unique_ptr &a, std_::nullptr_t b) noexcept { + return !(a == b); +} +template +inline bool operator!=(std_::nullptr_t a, const unique_ptr &b) noexcept { + return !(a == b); +} + +using _yes = char(&)[1]; +using _no = char(&)[2]; + +template +struct _host { + operator Base*() const; + operator Derived*(); +}; + +template +struct is_base_of { + template + static _yes check(Derived*, T); + static _no check(Base*, int); + + static constexpr bool value = sizeof(check(_host(), int())) == sizeof(_yes); +}; + +#ifndef OS_MAC_OLD +inline void *align(size_t alignment, size_t size, void*& ptr, size_t& space) noexcept { + auto p = reinterpret_cast(ptr); + auto a = (p - 1u + alignment) & -alignment; + auto d = a - p; + if ((size + d) > space) { + return nullptr; + } + space -= d; + return ptr = reinterpret_cast(a); +} +#endif // OS_MAC_OLD + +} // namespace std_ diff --git a/Telegram/SourceFiles/core/basic_types.cpp b/Telegram/SourceFiles/core/utils.cpp similarity index 97% rename from Telegram/SourceFiles/core/basic_types.cpp rename to Telegram/SourceFiles/core/utils.cpp index 868a5d23f..4ad8140ab 100644 --- a/Telegram/SourceFiles/core/basic_types.cpp +++ b/Telegram/SourceFiles/core/utils.cpp @@ -19,8 +19,7 @@ Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org */ #include "stdafx.h" - -#include "basic_types.h" +#include "core/utils.h" #include #include @@ -1020,33 +1019,3 @@ MimeType mimeTypeForData(const QByteArray &data) { } return MimeType(QMimeDatabase().mimeTypeForData(data)); } - -struct ComposerMetadatasMap { - QMap data; - ~ComposerMetadatasMap() { - for_const (const ComposerMetadata *p, data) { - delete p; - } - } -}; - -const ComposerMetadata *GetComposerMetadata(uint64 mask) { - static ComposerMetadatasMap ComposerMetadatas; - static QMutex ComposerMetadatasMutex; - - QMutexLocker lock(&ComposerMetadatasMutex); - auto i = ComposerMetadatas.data.constFind(mask); - if (i == ComposerMetadatas.data.cend()) { - ComposerMetadata *meta = new ComposerMetadata(mask); - t_assert(meta != nullptr); - - i = ComposerMetadatas.data.insert(mask, meta); - } - return i.value(); -} - -const ComposerMetadata *Composer::ZeroComposerMetadata = GetComposerMetadata(0); - -ComponentWrapStruct ComponentWraps[64]; - -QAtomicInt ComponentIndexLast; diff --git a/Telegram/SourceFiles/core/utils.h b/Telegram/SourceFiles/core/utils.h new file mode 100644 index 000000000..df4c23af3 --- /dev/null +++ b/Telegram/SourceFiles/core/utils.h @@ -0,0 +1,581 @@ +/* +This file is part of Telegram Desktop, +the official desktop version of Telegram messaging app, see https://telegram.org + +Telegram Desktop is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +It is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + +Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE +Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org +*/ +#pragma once + +#include "core/basic_types.h" + +template +inline constexpr size_t arraysize(T(&ArrahSizeHelper)[N]) { + return N; +} + +template +void deleteAndMark(T *&link) { + delete link; + link = reinterpret_cast(0x00000BAD); +} + +template +T *getPointerAndReset(T *&ptr) { + T *result = nullptr; + qSwap(result, ptr); + return result; +} + +template +inline QFlags qFlags(Enum v) { + return QFlags(v); +} + +static const int32 ScrollMax = INT_MAX; + +extern uint64 _SharedMemoryLocation[]; +template +T *SharedMemoryLocation() { + static_assert(N < 4, "Only 4 shared memory locations!"); + return reinterpret_cast(_SharedMemoryLocation + N); +} + +// see https://github.com/boostcon/cppnow_presentations_2012/blob/master/wed/schurr_cpp11_tools_for_class_authors.pdf +class str_const { // constexpr string +public: + template + constexpr str_const(const char(&a)[N]) : _str(a), _size(N - 1) { + } + constexpr char operator[](std::size_t n) const { + return (n < _size) ? _str[n] : +#ifndef OS_MAC_OLD + throw std::out_of_range(""); +#else // OS_MAC_OLD + throw std::exception(); +#endif // OS_MAC_OLD + } + constexpr std::size_t size() const { return _size; } + const char *c_str() const { return _str; } + +private: + const char* const _str; + const std::size_t _size; + +}; + +inline QString str_const_toString(const str_const &str) { + return QString::fromUtf8(str.c_str(), str.size()); +} + +template +inline void accumulate_max(T &a, const T &b) { if (a < b) a = b; } + +template +inline void accumulate_min(T &a, const T &b) { if (a > b) a = b; } + +template +T createAndSwap(T &value) { + T result = T(); + std_::swap(result, value); + return std_::move(result); +} + +static volatile int *t_assert_nullptr = nullptr; +inline void t_noop() {} +inline void t_assert_fail(const char *message, const char *file, int32 line) { + QString info(qsl("%1 %2:%3").arg(message).arg(file).arg(line)); + LOG(("Assertion Failed! %1 %2:%3").arg(info)); + SignalHandlers::setCrashAnnotation("Assertion", info); + *t_assert_nullptr = 0; +} +#define t_assert_full(condition, message, file, line) ((!(condition)) ? t_assert_fail(message, file, line) : t_noop()) +#define t_assert_c(condition, comment) t_assert_full(condition, "\"" #condition "\" (" comment ")", __FILE__, __LINE__) +#define t_assert(condition) t_assert_full(condition, "\"" #condition "\"", __FILE__, __LINE__) + +class Exception : public std::exception { +public: + + Exception(const QString &msg, bool isFatal = true) : _fatal(isFatal), _msg(msg.toUtf8()) { + LOG(("Exception: %1").arg(msg)); + } + bool fatal() const { + return _fatal; + } + + virtual const char *what() const throw() { + return _msg.constData(); + } + virtual ~Exception() throw() { + } + +private: + bool _fatal; + QByteArray _msg; +}; + +class MTPint; +using TimeId = int32; +TimeId myunixtime(); +void unixtimeInit(); +void unixtimeSet(TimeId servertime, bool force = false); +TimeId unixtime(); +TimeId fromServerTime(const MTPint &serverTime); +void toServerTime(const TimeId &clientTime, MTPint &outServerTime); +uint64 msgid(); +int32 reqid(); + +inline QDateTime date(int32 time = -1) { + QDateTime result; + if (time >= 0) result.setTime_t(time); + return result; +} + +inline QDateTime dateFromServerTime(const MTPint &time) { + return date(fromServerTime(time)); +} + +inline QDateTime date(const MTPint &time) { + return dateFromServerTime(time); +} + +QDateTime dateFromServerTime(TimeId time); + +inline void mylocaltime(struct tm * _Tm, const time_t * _Time) { +#ifdef Q_OS_WIN + localtime_s(_Tm, _Time); +#else + localtime_r(_Time, _Tm); +#endif +} + +namespace ThirdParty { + +void start(); +void finish(); + +} + +bool checkms(); // returns true if time has changed +uint64 getms(bool checked = false); + +class SingleTimer : public QTimer { // single shot timer with check + Q_OBJECT + +public: + + SingleTimer(); + + void setSingleShot(bool); // is not available + void start(); // is not available + + public slots: + + void start(int msec); + void startIfNotActive(int msec); + void adjust() { + uint64 n = getms(true); + if (isActive()) { + if (n >= _finishing) { + start(0); + } else { + start(_finishing - n); + } + } + } + +private: + uint64 _finishing; + bool _inited; + +}; + +const static uint32 _md5_block_size = 64; +class HashMd5 { +public: + + HashMd5(const void *input = 0, uint32 length = 0); + void feed(const void *input, uint32 length); + int32 *result(); + +private: + + void init(); + void finalize(); + void transform(const uchar *block); + + bool _finalized; + uchar _buffer[_md5_block_size]; + uint32 _count[2]; + uint32 _state[4]; + uchar _digest[16]; + +}; + +int32 hashCrc32(const void *data, uint32 len); +int32 *hashSha1(const void *data, uint32 len, void *dest); // dest - ptr to 20 bytes, returns (int32*)dest +int32 *hashSha256(const void *data, uint32 len, void *dest); // dest - ptr to 32 bytes, returns (int32*)dest +int32 *hashMd5(const void *data, uint32 len, void *dest); // dest = ptr to 16 bytes, returns (int32*)dest +char *hashMd5Hex(const int32 *hashmd5, void *dest); // dest = ptr to 32 bytes, returns (char*)dest +inline char *hashMd5Hex(const void *data, uint32 len, void *dest) { // dest = ptr to 32 bytes, returns (char*)dest + return hashMd5Hex(HashMd5(data, len).result(), dest); +} + +// good random (using openssl implementation) +void memset_rand(void *data, uint32 len); +template +T rand_value() { + T result; + memset_rand(&result, sizeof(result)); + return result; +} + +inline void memset_rand_bad(void *data, uint32 len) { + for (uchar *i = reinterpret_cast(data), *e = i + len; i != e; ++i) { + *i = uchar(rand() & 0xFF); + } +} + +template +inline void memsetrnd_bad(T &value) { + memset_rand_bad(&value, sizeof(value)); +} + +class ReadLockerAttempt { +public: + + ReadLockerAttempt(QReadWriteLock *_lock) : success(_lock->tryLockForRead()), lock(_lock) { + } + ~ReadLockerAttempt() { + if (success) { + lock->unlock(); + } + } + + operator bool() const { + return success; + } + +private: + + bool success; + QReadWriteLock *lock; + +}; + +inline QString fromUtf8Safe(const char *str, int32 size = -1) { + if (!str || !size) return QString(); + if (size < 0) size = int32(strlen(str)); + QString result(QString::fromUtf8(str, size)); + QByteArray back = result.toUtf8(); + if (back.size() != size || memcmp(back.constData(), str, size)) return QString::fromLocal8Bit(str, size); + return result; +} + +inline QString fromUtf8Safe(const QByteArray &str) { + return fromUtf8Safe(str.constData(), str.size()); +} + +static const QRegularExpression::PatternOptions reMultiline(QRegularExpression::DotMatchesEverythingOption | QRegularExpression::MultilineOption); + +template +inline T snap(const T &v, const T &_min, const T &_max) { + return (v < _min) ? _min : ((v > _max) ? _max : v); +} + +template +class ManagedPtr { +public: + ManagedPtr() : ptr(0) { + } + ManagedPtr(T *p) : ptr(p) { + } + T *operator->() const { + return ptr; + } + T *v() const { + return ptr; + } + +protected: + + T *ptr; + typedef ManagedPtr Parent; +}; + +QString translitRusEng(const QString &rus); +QString rusKeyboardLayoutSwitch(const QString &from); + +enum DBISendKey { + dbiskEnter = 0, + dbiskCtrlEnter = 1, +}; + +enum DBINotifyView { + dbinvShowPreview = 0, + dbinvShowName = 1, + dbinvShowNothing = 2, +}; + +enum DBIWorkMode { + dbiwmWindowAndTray = 0, + dbiwmTrayOnly = 1, + dbiwmWindowOnly = 2, +}; + +enum DBIConnectionType { + dbictAuto = 0, + dbictHttpAuto = 1, // not used + dbictHttpProxy = 2, + dbictTcpProxy = 3, +}; + +enum DBIDefaultAttach { + dbidaDocument = 0, + dbidaPhoto = 1, +}; + +struct ProxyData { + QString host; + uint32 port = 0; + QString user, password; +}; + +enum DBIScale { + dbisAuto = 0, + dbisOne = 1, + dbisOneAndQuarter = 2, + dbisOneAndHalf = 3, + dbisTwo = 4, + + dbisScaleCount = 5, +}; + +static const int MatrixRowShift = 40000; + +enum DBIEmojiTab { + dbietRecent = -1, + dbietPeople = 0, + dbietNature = 1, + dbietFood = 2, + dbietActivity = 3, + dbietTravel = 4, + dbietObjects = 5, + dbietSymbols = 6, + dbietStickers = 666, +}; +static const int emojiTabCount = 8; +inline DBIEmojiTab emojiTabAtIndex(int index) { + return (index < 0 || index >= emojiTabCount) ? dbietRecent : DBIEmojiTab(index - 1); +} + +enum DBIPlatform { + dbipWindows = 0, + dbipMac = 1, + dbipLinux64 = 2, + dbipLinux32 = 3, + dbipMacOld = 4, +}; + +enum DBIPeerReportSpamStatus { + dbiprsNoButton = 0, // hidden, but not in the cloud settings yet + dbiprsUnknown = 1, // contacts not loaded yet + dbiprsShowButton = 2, // show report spam button, each show peer request setting from cloud + dbiprsReportSent = 3, // report sent, but the report spam panel is not hidden yet + dbiprsHidden = 4, // hidden in the cloud or not needed (bots, contacts, etc), no more requests + dbiprsRequesting = 5, // requesting the cloud setting right now +}; + +inline QString strMakeFromLetters(const uint32 *letters, int32 len) { + QString result; + result.reserve(len); + for (int32 i = 0; i < len; ++i) { + result.push_back(QChar((((letters[i] >> 16) & 0xFF) << 8) | (letters[i] & 0xFF))); + } + return result; +} + +class MimeType { +public: + + enum TypeEnum { + Unknown, + WebP, + }; + + MimeType(const QMimeType &type) : _typeStruct(type), _type(Unknown) { + } + MimeType(TypeEnum type) : _type(type) { + } + QStringList globPatterns() const; + QString filterString() const; + QString name() const; + +private: + + QMimeType _typeStruct; + TypeEnum _type; + +}; + +MimeType mimeTypeForName(const QString &mime); +MimeType mimeTypeForFile(const QFileInfo &file); +MimeType mimeTypeForData(const QByteArray &data); + +#include + +inline int rowscount(int fullCount, int countPerRow) { + return (fullCount + countPerRow - 1) / countPerRow; +} +inline int floorclamp(int value, int step, int lowest, int highest) { + return qMin(qMax(value / step, lowest), highest); +} +inline int floorclamp(float64 value, int step, int lowest, int highest) { + return qMin(qMax(static_cast(std::floor(value / step)), lowest), highest); +} +inline int ceilclamp(int value, int step, int lowest, int highest) { + return qMax(qMin((value + step - 1) / step, highest), lowest); +} +inline int ceilclamp(float64 value, int32 step, int32 lowest, int32 highest) { + return qMax(qMin(static_cast(std::ceil(value / step)), highest), lowest); +} + +enum ForwardWhatMessages { + ForwardSelectedMessages, + ForwardContextMessage, + ForwardPressedMessage, + ForwardPressedLinkMessage +}; + +enum ShowLayerOption { + CloseOtherLayers = 0x00, + KeepOtherLayers = 0x01, + ShowAfterOtherLayers = 0x03, + + AnimatedShowLayer = 0x00, + ForceFastShowLayer = 0x04, +}; +Q_DECLARE_FLAGS(ShowLayerOptions, ShowLayerOption); +Q_DECLARE_OPERATORS_FOR_FLAGS(ShowLayerOptions); + +static int32 FullArcLength = 360 * 16; +static int32 QuarterArcLength = (FullArcLength / 4); +static int32 MinArcLength = (FullArcLength / 360); +static int32 AlmostFullArcLength = (FullArcLength - MinArcLength); + +template +inline QSharedPointer MakeShared(Args&&... args) { + return QSharedPointer(new T(std_::forward(args)...)); +} + +// This pointer is used for global non-POD variables that are allocated +// on demand by createIfNull(lambda) and are never automatically freed. +template +class NeverFreedPointer { +public: + NeverFreedPointer() = default; + NeverFreedPointer(const NeverFreedPointer &other) = delete; + NeverFreedPointer &operator=(const NeverFreedPointer &other) = delete; + + template + void createIfNull(U creator) { + if (isNull()) { + reset(creator()); + } + } + + template + void makeIfNull(Args&&... args) { + if (isNull()) { + reset(new T(std_::forward(args)...)); + } + }; + + T *data() const { + return _p; + } + T *release() { + return getPointerAndReset(_p); + } + void reset(T *p = nullptr) { + delete _p; + _p = p; + } + bool isNull() const { + return data() == nullptr; + } + + void clear() { + reset(); + } + T *operator->() const { + return data(); + } + T &operator*() const { + t_assert(!isNull()); + return *data(); + } + explicit operator bool() const { + return !isNull(); + } + +private: + T *_p; + +}; + +// This pointer is used for static non-POD variables that are allocated +// on first use by constructor and are never automatically freed. +template +class StaticNeverFreedPointer { +public: + explicit StaticNeverFreedPointer(T *p) : _p(p) { + } + StaticNeverFreedPointer(const StaticNeverFreedPointer &other) = delete; + StaticNeverFreedPointer &operator=(const StaticNeverFreedPointer &other) = delete; + + T *data() const { + return _p; + } + T *release() { + return getPointerAndReset(_p); + } + void reset(T *p = nullptr) { + delete _p; + _p = p; + } + bool isNull() const { + return data() == nullptr; + } + + void clear() { + reset(); + } + T *operator->() const { + return data(); + } + T &operator*() const { + t_assert(!isNull()); + return *data(); + } + explicit operator bool() const { + return !isNull(); + } + +private: + T *_p = nullptr; + +}; diff --git a/Telegram/SourceFiles/core/version.h b/Telegram/SourceFiles/core/version.h index 428f16a51..ec66d04e0 100644 --- a/Telegram/SourceFiles/core/version.h +++ b/Telegram/SourceFiles/core/version.h @@ -20,7 +20,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org */ #pragma once -#include "core/basic_types.h" +#include "core/utils.h" #define BETA_VERSION_MACRO (10008002ULL) diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index 5a2f73667..7faf04fb4 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -945,7 +945,7 @@ bool History::addToOverview(MediaOverviewType type, MsgId msgId, AddToOverviewMe } if (!adding) return false; - overviewIds[type].insert(msgId, NullType()); + overviewIds[type].insert(msgId); switch (method) { case AddToOverviewNew: case AddToOverviewBack: overview[type].push_back(msgId); break; @@ -963,11 +963,11 @@ bool History::addToOverview(MediaOverviewType type, MsgId msgId, AddToOverviewMe void History::eraseFromOverview(MediaOverviewType type, MsgId msgId) { if (overviewIds[type].isEmpty()) return; - History::MediaOverviewIds::iterator i = overviewIds[type].find(msgId); + auto i = overviewIds[type].find(msgId); if (i == overviewIds[type].cend()) return; overviewIds[type].erase(i); - for (History::MediaOverview::iterator i = overview[type].begin(), e = overview[type].end(); i != e; ++i) { + for (auto i = overview[type].begin(), e = overview[type].end(); i != e; ++i) { if ((*i) == msgId) { overview[type].erase(i); if (overviewCountData[type] > 0) { @@ -2011,8 +2011,8 @@ void History::overviewSliceDone(int32 overviewIndex, const MTPmessages_Messages if (!onlyCounts && v->isEmpty()) { overviewCountData[overviewIndex] = 0; } else if (overviewCountData[overviewIndex] > 0) { - for (History::MediaOverviewIds::const_iterator i = overviewIds[overviewIndex].cbegin(), e = overviewIds[overviewIndex].cend(); i != e; ++i) { - if (i.key() < 0) { + for_const (auto msgId, overviewIds[overviewIndex]) { + if (msgId < 0) { ++overviewCountData[overviewIndex]; } else { break; @@ -2023,7 +2023,7 @@ void History::overviewSliceDone(int32 overviewIndex, const MTPmessages_Messages for (QVector::const_iterator i = v->cbegin(), e = v->cend(); i != e; ++i) { HistoryItem *item = App::histories().addNewMessage(*i, NewMessageExisting); if (item && overviewIds[overviewIndex].constFind(item->id) == overviewIds[overviewIndex].cend()) { - overviewIds[overviewIndex].insert(item->id, NullType()); + overviewIds[overviewIndex].insert(item->id); overview[overviewIndex].push_front(item->id); } } @@ -2031,12 +2031,12 @@ void History::overviewSliceDone(int32 overviewIndex, const MTPmessages_Messages void History::changeMsgId(MsgId oldId, MsgId newId) { for (int32 i = 0; i < OverviewCount; ++i) { - History::MediaOverviewIds::iterator j = overviewIds[i].find(oldId); + auto j = overviewIds[i].find(oldId); if (j != overviewIds[i].cend()) { overviewIds[i].erase(j); int32 index = overview[i].indexOf(oldId); if (overviewIds[i].constFind(newId) == overviewIds[i].cend()) { - overviewIds[i].insert(newId, NullType()); + overviewIds[i].insert(newId); if (index >= 0) { overview[i][index] = newId; } else { diff --git a/Telegram/SourceFiles/history.h b/Telegram/SourceFiles/history.h index c9d44ebfb..db8cefa65 100644 --- a/Telegram/SourceFiles/history.h +++ b/Telegram/SourceFiles/history.h @@ -431,9 +431,9 @@ public: return result; } MsgId overviewMinId(int32 overviewIndex) const { - for (MediaOverviewIds::const_iterator i = overviewIds[overviewIndex].cbegin(), e = overviewIds[overviewIndex].cend(); i != e; ++i) { - if (i.key() > 0) { - return i.key(); + for_const (auto msgId, overviewIds[overviewIndex]) { + if (msgId > 0) { + return msgId; } } return 0; @@ -525,7 +525,7 @@ private: } uint64 _sortKeyInChatList = 0; // like ((unixtime) << 32) | (incremented counter) - typedef QMap MediaOverviewIds; + using MediaOverviewIds = OrderedSet; MediaOverviewIds overviewIds[OverviewCount]; int32 overviewCountData[OverviewCount]; // -1 - not loaded, 0 - all loaded, > 0 - count, but not all loaded diff --git a/Telegram/SourceFiles/history/history_item.h b/Telegram/SourceFiles/history/history_item.h index 008eb9b13..3be1f8665 100644 --- a/Telegram/SourceFiles/history/history_item.h +++ b/Telegram/SourceFiles/history/history_item.h @@ -20,6 +20,8 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org */ #pragma once +#include "core/runtime_composer.h" + class HistoryElement { public: HistoryElement() = default; @@ -95,7 +97,7 @@ enum HistoryItemType { HistoryItemJoined }; -struct HistoryMessageVia : public BaseComponent { +struct HistoryMessageVia : public RuntimeComponent { void create(int32 userId); void resize(int32 availw) const; @@ -106,20 +108,20 @@ struct HistoryMessageVia : public BaseComponent { ClickHandlerPtr _lnk; }; -struct HistoryMessageViews : public BaseComponent { +struct HistoryMessageViews : public RuntimeComponent { QString _viewsText; int _views = 0; int _viewsWidth = 0; }; -struct HistoryMessageSigned : public BaseComponent { +struct HistoryMessageSigned : public RuntimeComponent { void create(UserData *from, const QDateTime &date); int maxWidth() const; Text _signature; }; -struct HistoryMessageEdited : public BaseComponent { +struct HistoryMessageEdited : public RuntimeComponent { void create(const QDateTime &editDate, const QDateTime &date); int maxWidth() const; @@ -127,7 +129,7 @@ struct HistoryMessageEdited : public BaseComponent { Text _edited; }; -struct HistoryMessageForwarded : public BaseComponent { +struct HistoryMessageForwarded : public RuntimeComponent { void create(const HistoryMessageVia *via) const; PeerData *_authorOriginal = nullptr; @@ -136,7 +138,7 @@ struct HistoryMessageForwarded : public BaseComponent { mutable Text _text = { 1 }; }; -struct HistoryMessageReply : public BaseComponent { +struct HistoryMessageReply : public RuntimeComponent { HistoryMessageReply &operator=(HistoryMessageReply &&other) { replyToMsgId = other.replyToMsgId; std::swap(replyToMsg, other.replyToMsg); @@ -191,7 +193,7 @@ struct HistoryMessageReply : public BaseComponent { Q_DECLARE_OPERATORS_FOR_FLAGS(HistoryMessageReply::PaintFlags); class ReplyKeyboard; -struct HistoryMessageReplyMarkup : public BaseComponent { +struct HistoryMessageReplyMarkup : public RuntimeComponent { HistoryMessageReplyMarkup() = default; HistoryMessageReplyMarkup(MTPDreplyKeyboardMarkup::Flags f) : flags(f) { } @@ -362,7 +364,7 @@ private: // any HistoryItem can have this Interface for // displaying the day mark above the message -struct HistoryMessageDate : public BaseComponent { +struct HistoryMessageDate : public RuntimeComponent { void init(const QDateTime &date); int height() const; @@ -374,7 +376,7 @@ struct HistoryMessageDate : public BaseComponent { // any HistoryItem can have this Interface for // displaying the unread messages bar above the message -struct HistoryMessageUnreadBar : public BaseComponent { +struct HistoryMessageUnreadBar : public RuntimeComponent { void init(int count); static int height(); @@ -439,7 +441,7 @@ namespace internal { } // namespace internal -class HistoryItem : public HistoryElement, public Composer, public ClickHandlerHost { +class HistoryItem : public HistoryElement, public RuntimeComposer, public ClickHandlerHost { public: int resizeGetHeight(int width) { if (_flags & MTPDmessage_ClientFlag::f_pending_init_dimensions) { diff --git a/Telegram/SourceFiles/history/history_media_types.cpp b/Telegram/SourceFiles/history/history_media_types.cpp index 10c39c546..35f5114b3 100644 --- a/Telegram/SourceFiles/history/history_media_types.cpp +++ b/Telegram/SourceFiles/history/history_media_types.cpp @@ -527,13 +527,13 @@ void HistoryPhoto::updateSentMedia(const MTPMessageMedia &media) { const MTPFileLocation *loc = 0; switch (sizes.at(i).type()) { case mtpc_photoSize: { - const string &s(sizes.at(i).c_photoSize().vtype.c_string().v); + auto &s = sizes.at(i).c_photoSize().vtype.c_string().v; loc = &sizes.at(i).c_photoSize().vlocation; if (s.size()) size = s[0]; } break; case mtpc_photoCachedSize: { - const string &s(sizes.at(i).c_photoCachedSize().vtype.c_string().v); + auto &s = sizes.at(i).c_photoCachedSize().vtype.c_string().v; loc = &sizes.at(i).c_photoCachedSize().vlocation; if (s.size()) size = s[0]; } break; @@ -942,7 +942,7 @@ HistoryDocument::HistoryDocument(HistoryItem *parent, DocumentData *document, co } HistoryDocument::HistoryDocument(HistoryItem *parent, const HistoryDocument &other) : HistoryFileMedia(parent) -, Composer() +, RuntimeComposer() , _data(other._data) { auto captioned = other.Get(); createComponents(captioned != 0); diff --git a/Telegram/SourceFiles/history/history_media_types.h b/Telegram/SourceFiles/history/history_media_types.h index 1dec2c746..341f278b6 100644 --- a/Telegram/SourceFiles/history/history_media_types.h +++ b/Telegram/SourceFiles/history/history_media_types.h @@ -278,17 +278,17 @@ private: }; -struct HistoryDocumentThumbed : public BaseComponent { +struct HistoryDocumentThumbed : public RuntimeComponent { ClickHandlerPtr _linksavel, _linkcancell; int _thumbw = 0; mutable int _linkw = 0; mutable QString _link; }; -struct HistoryDocumentCaptioned : public BaseComponent { +struct HistoryDocumentCaptioned : public RuntimeComponent { Text _caption = { int(st::msgFileMinWidth) - st::msgPadding.left() - st::msgPadding.right() }; }; -struct HistoryDocumentNamed : public BaseComponent { +struct HistoryDocumentNamed : public RuntimeComponent { QString _name; int _namew = 0; }; @@ -300,7 +300,7 @@ struct HistoryDocumentVoicePlayback { anim::fvalue a_progress; Animation _a_progress; }; -struct HistoryDocumentVoice : public BaseComponent { +struct HistoryDocumentVoice : public RuntimeComponent { HistoryDocumentVoice &operator=(HistoryDocumentVoice &&other) { std::swap(_playback, other._playback); return *this; @@ -313,7 +313,7 @@ struct HistoryDocumentVoice : public BaseComponent { mutable HistoryDocumentVoicePlayback *_playback = nullptr; }; -class HistoryDocument : public HistoryFileMedia, public Composer { +class HistoryDocument : public HistoryFileMedia, public RuntimeComposer { public: HistoryDocument(HistoryItem *parent, DocumentData *document, const QString &caption); HistoryDocument(HistoryItem *parent, const HistoryDocument &other); diff --git a/Telegram/SourceFiles/history/history_message.h b/Telegram/SourceFiles/history/history_message.h index bfefaec4c..061420f38 100644 --- a/Telegram/SourceFiles/history/history_message.h +++ b/Telegram/SourceFiles/history/history_message.h @@ -252,10 +252,10 @@ struct HistoryServiceDependentData { ClickHandlerPtr lnk; }; -struct HistoryServicePinned : public BaseComponent, public HistoryServiceDependentData { +struct HistoryServicePinned : public RuntimeComponent, public HistoryServiceDependentData { }; -struct HistoryServiceGameScore : public BaseComponent, public HistoryServiceDependentData { +struct HistoryServiceGameScore : public RuntimeComponent, public HistoryServiceDependentData { int score = 0; }; diff --git a/Telegram/SourceFiles/intro/introsignup.cpp b/Telegram/SourceFiles/intro/introsignup.cpp index 923090a84..74034244f 100644 --- a/Telegram/SourceFiles/intro/introsignup.cpp +++ b/Telegram/SourceFiles/intro/introsignup.cpp @@ -96,7 +96,7 @@ void IntroSignup::mousePressEvent(QMouseEvent *e) { void IntroSignup::paintEvent(QPaintEvent *e) { bool trivial = (rect() == e->rect()); - QPainter p(this); + Painter p(this); if (!trivial) { p.setClipRect(e->rect()); } @@ -123,20 +123,22 @@ void IntroSignup::paintEvent(QPaintEvent *e) { } if (_photoSmall.isNull()) { - if (a_photoOver.current() < 1) { - QRect pix(st::setPhotoImg.rect()); - pix.moveTo(pix.x() + (pix.width() - (st::introPhotoSize * cIntRetinaFactor())) / 2, pix.y() + (pix.height() - (st::introPhotoSize * cIntRetinaFactor())) / 2); - pix.setSize(QSize(st::introPhotoSize * cIntRetinaFactor(), st::introPhotoSize * cIntRetinaFactor())); - p.drawPixmap(QPoint(_phLeft, _phTop), App::sprite(), pix); - } - if (a_photoOver.current() > 0) { - QRect pix(st::setOverPhotoImg.rect()); - pix.moveTo(pix.x() + (pix.width() - (st::introPhotoSize * cIntRetinaFactor())) / 2, pix.y() + (pix.height() - (st::introPhotoSize * cIntRetinaFactor())) / 2); - pix.setSize(QSize(st::introPhotoSize * cIntRetinaFactor(), st::introPhotoSize * cIntRetinaFactor())); - p.setOpacity(a_photoOver.current()); - p.drawPixmap(QPoint(_phLeft, _phTop), App::sprite(), pix); - p.setOpacity(1); + float64 o = a_photoOver.current(); + QRect phRect(_phLeft, _phTop, st::introPhotoSize, st::introPhotoSize); + if (o > 0) { + if (o < 1) { + QColor c; + c.setRedF(st::newGroupPhotoBg->c.redF() * (1. - o) + st::newGroupPhotoBgOver->c.redF() * o); + c.setGreenF(st::newGroupPhotoBg->c.greenF() * (1. - o) + st::newGroupPhotoBgOver->c.greenF() * o); + c.setBlueF(st::newGroupPhotoBg->c.blueF() * (1. - o) + st::newGroupPhotoBgOver->c.blueF() * o); + p.fillRect(phRect, c); + } else { + p.fillRect(phRect, st::newGroupPhotoBgOver); + } + } else { + p.fillRect(phRect, st::newGroupPhotoBg); } + p.drawSpriteCenter(phRect, st::newGroupPhotoIcon); } else { p.drawPixmap(_phLeft, _phTop, _photoSmall); } diff --git a/Telegram/SourceFiles/langloaderplain.cpp b/Telegram/SourceFiles/langloaderplain.cpp index 2a8e2f33d..cc36e7d21 100644 --- a/Telegram/SourceFiles/langloaderplain.cpp +++ b/Telegram/SourceFiles/langloaderplain.cpp @@ -151,7 +151,7 @@ bool LangLoaderPlain::readKeyValue(const char *&from, const char *end) { tagReplacer[1] = TextCommandLangTag; tagReplacer[2] = QChar(0x0020 + index); varValue.append(tagReplacer.toUtf8()); - + if (*from == ':') { start = ++from; @@ -306,7 +306,7 @@ LangLoaderPlain::LangLoaderPlain(const QString &file, const LangLoaderRequest &r break; } } - } catch (exception &e) { + } catch (std::exception &e) { error(QString::fromUtf8(e.what())); return; } diff --git a/Telegram/SourceFiles/layout.h b/Telegram/SourceFiles/layout.h index 1263f2de5..6b7d65531 100644 --- a/Telegram/SourceFiles/layout.h +++ b/Telegram/SourceFiles/layout.h @@ -20,6 +20,8 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org */ #pragma once +#include "core/runtime_composer.h" + static constexpr TextSelection FullSelection = { 0xFFFF, 0xFFFF }; extern TextParseOptions _textNameOptions, _textDlgOptions; @@ -96,7 +98,7 @@ public: }; -class LayoutItemBase : public Composer, public ClickHandlerHost { +class LayoutItemBase : public RuntimeComposer, public ClickHandlerHost { public: LayoutItemBase() { } diff --git a/Telegram/SourceFiles/logs.cpp b/Telegram/SourceFiles/logs.cpp index ea54fa5e0..fd83ba422 100644 --- a/Telegram/SourceFiles/logs.cpp +++ b/Telegram/SourceFiles/logs.cpp @@ -19,10 +19,11 @@ Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org */ #include "stdafx.h" - #include "logs.h" #include +#include + #include "pspecific.h" #ifndef TDESKTOP_DISABLE_CRASH_REPORTS @@ -736,6 +737,22 @@ namespace internal { namespace internal { + struct SomeAllocatedMemoryChunk { + char data[1024 * 1024]; + }; + std_::unique_ptr SomeAllocatedMemory; + + void OperatorNewHandler() { + std::set_new_handler(nullptr); + SomeAllocatedMemory.reset(); + t_assert(!"Could not allocate!"); + } + + void InstallOperatorNewHandler() { + SomeAllocatedMemory = std_::make_unique(); + std::set_new_handler(OperatorNewHandler); + } + Qt::HANDLE ReportingThreadId = nullptr; bool ReportingHeaderWritten = false; QMutex ReportingMutex; @@ -1078,6 +1095,9 @@ namespace internal { signal(SIGFPE, SignalHandlers::internal::Handler); #endif // else for !Q_OS_WIN } + + SignalHandlers::internal::InstallOperatorNewHandler(); + return Started; } diff --git a/Telegram/SourceFiles/mainwindow.cpp b/Telegram/SourceFiles/mainwindow.cpp index f69dfd2fc..eca53d7fd 100644 --- a/Telegram/SourceFiles/mainwindow.cpp +++ b/Telegram/SourceFiles/mainwindow.cpp @@ -966,31 +966,31 @@ HitTestType MainWindow::hitTest(const QPoint &p) const { if (!windowState().testFlag(Qt::WindowMaximized)) { if (y < raw) { if (x < raw) { - return HitTestTopLeft; + return HitTestType::TopLeft; } else if (x > w - raw - 1) { - return HitTestTopRight; + return HitTestType::TopRight; } - return HitTestTop; + return HitTestType::Top; } else if (y > h - raw - 1) { if (x < raw) { - return HitTestBottomLeft; + return HitTestType::BottomLeft; } else if (x > w - raw - 1) { - return HitTestBottomRight; + return HitTestType::BottomRight; } - return HitTestBottom; + return HitTestType::Bottom; } else if (x < raw) { - return HitTestLeft; + return HitTestType::Left; } else if (x > w - raw - 1) { - return HitTestRight; + return HitTestType::Right; } } - HitTestType titleTest = title->hitTest(p - title->geometry().topLeft()); - if (titleTest) { + auto titleTest = title->hitTest(p - title->geometry().topLeft()); + if (titleTest != HitTestType::None) { return titleTest; } else if (x >= 0 && y >= 0 && x < w && y < h) { - return HitTestClient; + return HitTestType::Client; } - return HitTestNone; + return HitTestType::None; } QRect MainWindow::iconRect() const { diff --git a/Telegram/SourceFiles/mtproto/connection.h b/Telegram/SourceFiles/mtproto/connection.h index dea2c3df3..89c62fb4b 100644 --- a/Telegram/SourceFiles/mtproto/connection.h +++ b/Telegram/SourceFiles/mtproto/connection.h @@ -162,7 +162,7 @@ private: int32 handleOneReceived(const mtpPrime *from, const mtpPrime *end, uint64 msgId, int32 serverTime, uint64 serverSalt, bool badTime); mtpBuffer ungzip(const mtpPrime *from, const mtpPrime *end) const; - void handleMsgsStates(const QVector &ids, const string &states, QVector &acked); + void handleMsgsStates(const QVector &ids, const std::string &states, QVector &acked); void clearMessages(); diff --git a/Telegram/SourceFiles/mtproto/core_types.h b/Telegram/SourceFiles/mtproto/core_types.h index 846b8ef71..e48a952be 100644 --- a/Telegram/SourceFiles/mtproto/core_types.h +++ b/Telegram/SourceFiles/mtproto/core_types.h @@ -665,7 +665,7 @@ class MTPDstring : public mtpDataImpl { public: MTPDstring() { } - MTPDstring(const string &val) : v(val) { + MTPDstring(const std::string &val) : v(val) { } MTPDstring(const QString &val) : v(val.toUtf8().constData()) { } @@ -674,7 +674,7 @@ public: MTPDstring(const char *val) : v(val) { } - string v; + std::string v; }; class MTPstring : private mtpDataOwner { @@ -755,13 +755,13 @@ private: explicit MTPstring(MTPDstring *_data) : mtpDataOwner(_data) { } - friend MTPstring MTP_string(const string &v); + friend MTPstring MTP_string(const std::string &v); friend MTPstring MTP_string(const QString &v); friend MTPstring MTP_string(const char *v); friend MTPstring MTP_bytes(const QByteArray &v); }; -inline MTPstring MTP_string(const string &v) { +inline MTPstring MTP_string(const std::string &v) { return MTPstring(new MTPDstring(v)); } inline MTPstring MTP_string(const QString &v) { @@ -788,12 +788,12 @@ inline bool operator!=(const MTPstring &a, const MTPstring &b) { } inline QString qs(const MTPstring &v) { - const string &d(v.c_string().v); + auto &d = v.c_string().v; return QString::fromUtf8(d.data(), d.length()); } inline QByteArray qba(const MTPstring &v) { - const string &d(v.c_string().v); + auto &d = v.c_string().v; return QByteArray(d.data(), d.length()); } @@ -981,8 +981,6 @@ inline bool mtpIsFalse(const MTPBool &v) { return !mtpIsTrue(v); } -#define CHECK_MTP_SCHEME_AND_CLIENT_FLAGS_CONFLICT(Type) \ - // we must validate that MTProto scheme flags don't intersect with client side flags // and define common bit operators which allow use Type_ClientFlag together with Type::Flag #define DEFINE_MTP_CLIENT_FLAGS(Type) \ @@ -990,12 +988,10 @@ static_assert(static_cast(Type::Flag::MAX_FIELD) < static_cast(Typ "MTProto flags conflict with client side flags!"); \ inline Type::Flags qFlags(Type##_ClientFlag v) { return Type::Flags(static_cast(v)); } \ inline Type::Flags operator&(Type::Flags i, Type##_ClientFlag v) { return i & qFlags(v); } \ -inline Type::Flags operator&(Type::Flag i, Type##_ClientFlag v) { return qFlags(i) & v; } \ inline Type::Flags operator&(Type##_ClientFlag i, Type##_ClientFlag v) { return qFlags(i) & v; } \ -inline Type::Flags operator&(Type##_ClientFlag i, Type::Flag v) { return qFlags(i) & v; } \ inline Type::Flags &operator&=(Type::Flags &i, Type##_ClientFlag v) { return i &= qFlags(v); } \ inline Type::Flags operator|(Type::Flags i, Type##_ClientFlag v) { return i | qFlags(v); } \ -inline Type::Flags operator|(Type::Flag i, Type##_ClientFlag v) { return qFlags(i) | v; } \ +inline Type::Flags operator|(Type::Flag i, Type##_ClientFlag v) { return i | qFlags(v); } \ inline Type::Flags operator|(Type##_ClientFlag i, Type##_ClientFlag v) { return qFlags(i) | v; } \ inline Type::Flags operator|(Type##_ClientFlag i, Type::Flag v) { return qFlags(i) | v; } \ inline Type::Flags &operator|=(Type::Flags &i, Type##_ClientFlag v) { return i |= qFlags(v); } \ diff --git a/Telegram/SourceFiles/mtproto/facade.h b/Telegram/SourceFiles/mtproto/facade.h index 6634fb812..94f5e39c0 100644 --- a/Telegram/SourceFiles/mtproto/facade.h +++ b/Telegram/SourceFiles/mtproto/facade.h @@ -198,12 +198,12 @@ void setKey(int32 dc, AuthKeyPtr key); QReadWriteLock *dcOptionsMutex(); struct DcOption { - DcOption(int id, MTPDdcOption::Flags flags, const string &ip, int port) : id(id), flags(flags), ip(ip), port(port) { + DcOption(int id, MTPDdcOption::Flags flags, const std::string &ip, int port) : id(id), flags(flags), ip(ip), port(port) { } int id; MTPDdcOption::Flags flags; - string ip; + std::string ip; int port; }; typedef QMap DcOptions; diff --git a/Telegram/SourceFiles/mtproto/file_download.cpp b/Telegram/SourceFiles/mtproto/file_download.cpp index 513fbfd8e..349380c9c 100644 --- a/Telegram/SourceFiles/mtproto/file_download.cpp +++ b/Telegram/SourceFiles/mtproto/file_download.cpp @@ -459,8 +459,8 @@ void mtpFileLoader::partLoaded(int32 offset, const MTPupload_File &result, mtpRe --_queue->queries; _requests.erase(i); - const auto &d(result.c_upload_file()); - const string &bytes(d.vbytes.c_string().v); + auto &d = result.c_upload_file(); + auto &bytes = d.vbytes.c_string().v; if (DebugLogging::FileLoader() && _id) DEBUG_LOG(("FileLoader(%1): got part with offset=%2, bytes=%3, _queue->queries=%4, _nextRequestOffset=%5, _requests=%6").arg(_id).arg(offset).arg(bytes.size()).arg(_queue->queries).arg(_nextRequestOffset).arg(serializereqs(_requests))); diff --git a/Telegram/SourceFiles/mtproto/rsa_public_key.h b/Telegram/SourceFiles/mtproto/rsa_public_key.h index b59deec79..5e1bcbf4f 100644 --- a/Telegram/SourceFiles/mtproto/rsa_public_key.h +++ b/Telegram/SourceFiles/mtproto/rsa_public_key.h @@ -34,7 +34,7 @@ public: uint64 getFingerPrint() const; // data has exactly 256 chars to be encrypted - bool encrypt(const void *data, string &result) const; + bool encrypt(const void *data, std::string &result) const; private: diff --git a/Telegram/SourceFiles/mtproto/session.cpp b/Telegram/SourceFiles/mtproto/session.cpp index 70f5561a5..6e80a3619 100644 --- a/Telegram/SourceFiles/mtproto/session.cpp +++ b/Telegram/SourceFiles/mtproto/session.cpp @@ -222,7 +222,7 @@ void Session::sendPong(quint64 msgId, quint64 pingId) { void Session::sendMsgsStateInfo(quint64 msgId, QByteArray data) { MTPMsgsStateInfo req(MTP_msgs_state_info(MTP_long(msgId), MTPstring())); - string &info(req._msgs_state_info().vinfo._string().v); + auto &info = req._msgs_state_info().vinfo._string().v; info.resize(data.size()); if (!data.isEmpty()) { memcpy(&info[0], data.constData(), data.size()); @@ -391,7 +391,7 @@ mtpRequestId Session::resend(quint64 msgId, quint64 msCanWait, bool forceContain char cantResend[2] = {1, 0}; DEBUG_LOG(("Message Info: cant resend %1, request not found").arg(msgId)); - return send(MTP_msgs_state_info(MTP_long(msgId), MTP_string(string(cantResend, cantResend + 1)))); + return send(MTP_msgs_state_info(MTP_long(msgId), MTP_string(std::string(cantResend, cantResend + 1)))); } return 0; } diff --git a/Telegram/SourceFiles/overview/overview_layout.h b/Telegram/SourceFiles/overview/overview_layout.h index 0705e5e21..af49c4bb8 100644 --- a/Telegram/SourceFiles/overview/overview_layout.h +++ b/Telegram/SourceFiles/overview/overview_layout.h @@ -156,7 +156,7 @@ protected: }; -struct Info : public BaseComponent { +struct Info : public RuntimeComponent { int top = 0; }; diff --git a/Telegram/SourceFiles/passcodewidget.cpp b/Telegram/SourceFiles/passcodewidget.cpp index ef4b8c9ed..1a2688f00 100644 --- a/Telegram/SourceFiles/passcodewidget.cpp +++ b/Telegram/SourceFiles/passcodewidget.cpp @@ -186,7 +186,7 @@ void PasscodeWidget::paintEvent(QPaintEvent *e) { p.setOpacity(a_shadow.current()); p.drawPixmap(QRect(a_coordOver.current() - st::slideShadow.pxWidth(), 0, st::slideShadow.pxWidth(), height()), App::sprite(), st::slideShadow.rect()); } else { - p.fillRect(rect(), st::setBG->b); + p.fillRect(rect(), st::windowBg); p.setFont(st::passcodeHeaderFont->f); p.drawText(QRect(0, _passcode.y() - st::passcodeHeaderHeight, width(), st::passcodeHeaderHeight), lang(lng_passcode_enter), style::al_center); diff --git a/Telegram/SourceFiles/platform/win/windows_event_filter.cpp b/Telegram/SourceFiles/platform/win/windows_event_filter.cpp index 0d9331782..a9a96d9f0 100644 --- a/Telegram/SourceFiles/platform/win/windows_event_filter.cpp +++ b/Telegram/SourceFiles/platform/win/windows_event_filter.cpp @@ -181,21 +181,21 @@ bool EventFilter::mainWindowEvent(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lPa POINTS p = MAKEPOINTS(lParam); RECT r; GetWindowRect(hWnd, &r); - HitTestType res = App::wnd()->hitTest(QPoint(p.x - r.left + App::wnd()->deltaLeft(), p.y - r.top + App::wnd()->deltaTop())); + auto res = App::wnd()->hitTest(QPoint(p.x - r.left + App::wnd()->deltaLeft(), p.y - r.top + App::wnd()->deltaTop())); switch (res) { - case HitTestClient: - case HitTestSysButton: *result = HTCLIENT; break; - case HitTestIcon: *result = HTCAPTION; break; - case HitTestCaption: *result = HTCAPTION; break; - case HitTestTop: *result = HTTOP; break; - case HitTestTopRight: *result = HTTOPRIGHT; break; - case HitTestRight: *result = HTRIGHT; break; - case HitTestBottomRight: *result = HTBOTTOMRIGHT; break; - case HitTestBottom: *result = HTBOTTOM; break; - case HitTestBottomLeft: *result = HTBOTTOMLEFT; break; - case HitTestLeft: *result = HTLEFT; break; - case HitTestTopLeft: *result = HTTOPLEFT; break; - case HitTestNone: + case HitTestType::Client: + case HitTestType::SysButton: *result = HTCLIENT; break; + case HitTestType::Icon: *result = HTCAPTION; break; + case HitTestType::Caption: *result = HTCAPTION; break; + case HitTestType::Top: *result = HTTOP; break; + case HitTestType::TopRight: *result = HTTOPRIGHT; break; + case HitTestType::Right: *result = HTRIGHT; break; + case HitTestType::BottomRight: *result = HTBOTTOMRIGHT; break; + case HitTestType::Bottom: *result = HTBOTTOM; break; + case HitTestType::BottomLeft: *result = HTBOTTOMLEFT; break; + case HitTestType::Left: *result = HTLEFT; break; + case HitTestType::TopLeft: *result = HTTOPLEFT; break; + case HitTestType::None: default: *result = HTTRANSPARENT; break; }; } return true; @@ -208,9 +208,9 @@ bool EventFilter::mainWindowEvent(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lPa POINTS p = MAKEPOINTS(lParam); RECT r; GetWindowRect(hWnd, &r); - HitTestType res = App::wnd()->hitTest(QPoint(p.x - r.left + App::wnd()->deltaLeft(), p.y - r.top + App::wnd()->deltaTop())); + auto res = App::wnd()->hitTest(QPoint(p.x - r.left + App::wnd()->deltaLeft(), p.y - r.top + App::wnd()->deltaTop())); switch (res) { - case HitTestIcon: + case HitTestType::Icon: if (menuHidden && getms() < menuHidden + 10) { menuHidden = 0; if (getms() < menuShown + GetDoubleClickTime()) { @@ -234,9 +234,9 @@ bool EventFilter::mainWindowEvent(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lPa POINTS p = MAKEPOINTS(lParam); RECT r; GetWindowRect(hWnd, &r); - HitTestType res = App::wnd()->hitTest(QPoint(p.x - r.left + App::wnd()->deltaLeft(), p.y - r.top + App::wnd()->deltaTop())); + auto res = App::wnd()->hitTest(QPoint(p.x - r.left + App::wnd()->deltaLeft(), p.y - r.top + App::wnd()->deltaTop())); switch (res) { - case HitTestIcon: App::wnd()->close(); return true; + case HitTestType::Icon: App::wnd()->close(); return true; }; } return false; diff --git a/Telegram/SourceFiles/settings.cpp b/Telegram/SourceFiles/settings.cpp index a9ab6f89a..69e8380a7 100644 --- a/Telegram/SourceFiles/settings.cpp +++ b/Telegram/SourceFiles/settings.cpp @@ -185,39 +185,39 @@ void settingsParseArgs(int argc, char *argv[]) { gStartUrl = fromUtf8Safe(argv[1]); } for (int32 i = 0; i < argc; ++i) { - if (string("-testmode") == argv[i]) { + if (qstr("-testmode") == argv[i]) { gTestMode = true; - } else if (string("-debug") == argv[i]) { + } else if (qstr("-debug") == argv[i]) { gDebug = true; - } else if (string("-many") == argv[i]) { + } else if (qstr("-many") == argv[i]) { gManyInstance = true; - } else if (string("-key") == argv[i] && i + 1 < argc) { + } else if (qstr("-key") == argv[i] && i + 1 < argc) { gKeyFile = fromUtf8Safe(argv[++i]); - } else if (string("-autostart") == argv[i]) { + } else if (qstr("-autostart") == argv[i]) { gLaunchMode = LaunchModeAutoStart; - } else if (string("-fixprevious") == argv[i]) { + } else if (qstr("-fixprevious") == argv[i]) { gLaunchMode = LaunchModeFixPrevious; - } else if (string("-cleanup") == argv[i]) { + } else if (qstr("-cleanup") == argv[i]) { gLaunchMode = LaunchModeCleanup; - } else if (string("-crash") == argv[i] && i + 1 < argc) { + } else if (qstr("-crash") == argv[i] && i + 1 < argc) { gLaunchMode = LaunchModeShowCrash; gStartUrl = fromUtf8Safe(argv[++i]); - } else if (string("-noupdate") == argv[i]) { + } else if (qstr("-noupdate") == argv[i]) { gNoStartUpdate = true; - } else if (string("-tosettings") == argv[i]) { + } else if (qstr("-tosettings") == argv[i]) { gStartToSettings = true; - } else if (string("-startintray") == argv[i]) { + } else if (qstr("-startintray") == argv[i]) { gStartInTray = true; - } else if (string("-sendpath") == argv[i] && i + 1 < argc) { + } else if (qstr("-sendpath") == argv[i] && i + 1 < argc) { for (++i; i < argc; ++i) { gSendPaths.push_back(fromUtf8Safe(argv[i])); } - } else if (string("-workdir") == argv[i] && i + 1 < argc) { + } else if (qstr("-workdir") == argv[i] && i + 1 < argc) { QString dir = fromUtf8Safe(argv[++i]); if (QDir().exists(dir)) { gWorkingDir = dir; } - } else if (string("--") == argv[i] && i + 1 < argc) { + } else if (qstr("--") == argv[i] && i + 1 < argc) { gStartUrl = fromUtf8Safe(argv[++i]).mid(0, 8192); } } diff --git a/Telegram/SourceFiles/settings/settings_background_widget.cpp b/Telegram/SourceFiles/settings/settings_background_widget.cpp index ac25cbd53..518bf5039 100644 --- a/Telegram/SourceFiles/settings/settings_background_widget.cpp +++ b/Telegram/SourceFiles/settings/settings_background_widget.cpp @@ -59,8 +59,8 @@ void BackgroundRow::paintEvent(QPaintEvent *e) { if (backThumb->isNull()) { p.drawPixmap(0, 0, _background); } else { - const QPixmap &pix = App::main()->newBackgroundThumb()->pixBlurred(st::setBackgroundSize); - p.drawPixmap(0, 0, st::setBackgroundSize, st::setBackgroundSize, pix, 0, (pix.height() - st::setBackgroundSize) / 2, st::setBackgroundSize, st::setBackgroundSize); + const QPixmap &pix = App::main()->newBackgroundThumb()->pixBlurred(st::settingsBackgroundSize); + p.drawPixmap(0, 0, st::settingsBackgroundSize, st::settingsBackgroundSize, pix, 0, (pix.height() - st::settingsBackgroundSize) / 2, st::settingsBackgroundSize, st::settingsBackgroundSize); } auto outer = radialRect(); @@ -115,7 +115,7 @@ bool BackgroundRow::radialLoading() const { } QRect BackgroundRow::radialRect() const { - return QRect(0, 0, st::setBackgroundSize, st::setBackgroundSize); + return QRect(0, 0, st::settingsBackgroundSize, st::settingsBackgroundSize); } void BackgroundRow::radialStart() { @@ -139,7 +139,7 @@ void BackgroundRow::step_radial(uint64 ms, bool timer) { } void BackgroundRow::updateImage() { - int32 size = st::setBackgroundSize * cIntRetinaFactor(); + int32 size = st::settingsBackgroundSize * cIntRetinaFactor(); QImage back(size, size, QImage::Format_ARGB32_Premultiplied); back.setDevicePixelRatio(cRetinaFactor()); { @@ -149,7 +149,7 @@ void BackgroundRow::updateImage() { int sy = (pix.height() > pix.width()) ? ((pix.height() - pix.width()) / 2) : 0; int s = (pix.width() > pix.height()) ? pix.height() : pix.width(); p.setRenderHint(QPainter::SmoothPixmapTransform); - p.drawPixmap(0, 0, st::setBackgroundSize, st::setBackgroundSize, pix, sx, sy, s, s); + p.drawPixmap(0, 0, st::settingsBackgroundSize, st::settingsBackgroundSize, pix, sx, sy, s, s); } imageRound(back, ImageRoundRadius::Small); _background = App::pixmapFromImageInPlace(std_::move(back)); diff --git a/Telegram/SourceFiles/stdafx.h b/Telegram/SourceFiles/stdafx.h index d4c7ed621..41c554fad 100644 --- a/Telegram/SourceFiles/stdafx.h +++ b/Telegram/SourceFiles/stdafx.h @@ -57,6 +57,8 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org #include #include "core/basic_types.h" +#include "logs.h" +#include "core/utils.h" #include "config.h" #include "mtproto/facade.h" diff --git a/Telegram/SourceFiles/structs.h b/Telegram/SourceFiles/structs.h index babee7e99..f75c8ade2 100644 --- a/Telegram/SourceFiles/structs.h +++ b/Telegram/SourceFiles/structs.h @@ -172,7 +172,7 @@ struct NotifySettings { } MTPDpeerNotifySettings::Flags flags; TimeId mute; - string sound; + std::string sound; bool previews() const { return flags & MTPDpeerNotifySettings::Flag::f_show_previews; } @@ -288,9 +288,9 @@ public: QString name; Text nameText; - typedef QSet Names; + using Names = OrderedSet; Names names; // for filtering - typedef QSet NameFirstChars; + using NameFirstChars = OrderedSet; NameFirstChars chars; enum LoadedStatus { diff --git a/Telegram/SourceFiles/sysbuttons.cpp b/Telegram/SourceFiles/sysbuttons.cpp index 0614cf322..becff636f 100644 --- a/Telegram/SourceFiles/sysbuttons.cpp +++ b/Telegram/SourceFiles/sysbuttons.cpp @@ -93,9 +93,9 @@ void SysBtn::setSysBtnStyle(const style::sysButton &st) { HitTestType SysBtn::hitTest(const QPoint &p) const { int x(p.x()), y(p.y()), w(width()), h(height()); if (x >= 0 && y >= 0 && x < w && y < h && isVisible()) { - return HitTestSysButton; + return HitTestType::SysButton; } - return HitTestNone; + return HitTestType::None; } void SysBtn::step_color(float64 ms, bool timer) { diff --git a/Telegram/SourceFiles/sysbuttons.h b/Telegram/SourceFiles/sysbuttons.h index 88ff7b0a1..ea5609368 100644 --- a/Telegram/SourceFiles/sysbuttons.h +++ b/Telegram/SourceFiles/sysbuttons.h @@ -23,6 +23,22 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org #include "ui/animation.h" #include "ui/button.h" +enum class HitTestType { + None = 0, + Client, + SysButton, + Icon, + Caption, + Top, + TopRight, + Right, + BottomRight, + Bottom, + BottomLeft, + Left, + TopLeft, +}; + class MainWindow; class SysBtn : public Button { diff --git a/Telegram/SourceFiles/title.cpp b/Telegram/SourceFiles/title.cpp index f75eb8d58..638248ae3 100644 --- a/Telegram/SourceFiles/title.cpp +++ b/Telegram/SourceFiles/title.cpp @@ -360,22 +360,22 @@ void TitleWidget::maximizedChanged(bool maximized, bool force) { } HitTestType TitleWidget::hitTest(const QPoint &p) { - if (App::wnd() && Ui::isLayerShown()) return HitTestNone; + if (App::wnd() && Ui::isLayerShown()) return HitTestType::None; int x(p.x()), y(p.y()), w(width()), h(height()); - if (!Adaptive::OneColumn() && hider && x >= App::main()->dlgsWidth()) return HitTestNone; + if (!Adaptive::OneColumn() && hider && x >= App::main()->dlgsWidth()) return HitTestType::None; if (x >= st::titleIconPos.x() && y >= st::titleIconPos.y() && x < st::titleIconPos.x() + st::titleIconImg.pxWidth() && y < st::titleIconPos.y() + st::titleIconImg.pxHeight()) { - return HitTestIcon; + return HitTestType::Icon; } else if (false - || (_lock.hitTest(p - _lock.geometry().topLeft()) == HitTestSysButton && _lock.isVisible()) - || (_update.hitTest(p - _update.geometry().topLeft()) == HitTestSysButton && _update.isVisible()) - || (_minimize.hitTest(p - _minimize.geometry().topLeft()) == HitTestSysButton) - || (_maximize.hitTest(p - _maximize.geometry().topLeft()) == HitTestSysButton) - || (_restore.hitTest(p - _restore.geometry().topLeft()) == HitTestSysButton) - || (_close.hitTest(p - _close.geometry().topLeft()) == HitTestSysButton) + || (_lock.hitTest(p - _lock.geometry().topLeft()) == HitTestType::SysButton && _lock.isVisible()) + || (_update.hitTest(p - _update.geometry().topLeft()) == HitTestType::SysButton && _update.isVisible()) + || (_minimize.hitTest(p - _minimize.geometry().topLeft()) == HitTestType::SysButton) + || (_maximize.hitTest(p - _maximize.geometry().topLeft()) == HitTestType::SysButton) + || (_restore.hitTest(p - _restore.geometry().topLeft()) == HitTestType::SysButton) + || (_close.hitTest(p - _close.geometry().topLeft()) == HitTestType::SysButton) ) { - return HitTestSysButton; + return HitTestType::SysButton; } else if (x >= 0 && x < w && y >= 0 && y < h) { if (false || (!_cancel.isHidden() && _cancel.geometry().contains(x, y)) @@ -383,9 +383,9 @@ HitTestType TitleWidget::hitTest(const QPoint &p) { || (!_contacts.isHidden() && _contacts.geometry().contains(x, y)) || (!_about.isHidden() && _about.geometry().contains(x, y)) ) { - return HitTestClient; + return HitTestType::Client; } - return HitTestCaption; + return HitTestType::Caption; } - return HitTestNone; + return HitTestType::None; } diff --git a/Telegram/SourceFiles/ui/animation.h b/Telegram/SourceFiles/ui/animation.h index 4bbe4e49c..6842c55a7 100644 --- a/Telegram/SourceFiles/ui/animation.h +++ b/Telegram/SourceFiles/ui/animation.h @@ -31,7 +31,7 @@ namespace Clip { class Reader; class ReaderPointer { public: - ReaderPointer(std::nullptr_t = nullptr) { + ReaderPointer(std_::nullptr_t = nullptr) { } explicit ReaderPointer(Reader *pointer) : _pointer(pointer) { } diff --git a/Telegram/SourceFiles/ui/flatcheckbox.h b/Telegram/SourceFiles/ui/flatcheckbox.h index 64d59c24b..ea43ce09d 100644 --- a/Telegram/SourceFiles/ui/flatcheckbox.h +++ b/Telegram/SourceFiles/ui/flatcheckbox.h @@ -26,8 +26,7 @@ class FlatCheckbox : public Button { Q_OBJECT public: - - FlatCheckbox(QWidget *parent, const QString &text, bool checked = false, const style::flatCheckbox &st = st::cbDefFlat); + FlatCheckbox(QWidget *parent, const QString &text, bool checked, const style::flatCheckbox &st); bool checked() const; void setChecked(bool checked); @@ -38,16 +37,13 @@ public: void setOpacity(float64 o); public slots: - void onClicked(); void onStateChange(int oldState, ButtonStateChangeSource source); signals: - void changed(); private: - style::flatCheckbox _st; anim::fvalue a_over; Animation _a_appearance; @@ -66,7 +62,7 @@ class FlatRadiobutton : public FlatCheckbox { public: - FlatRadiobutton(QWidget *parent, const QString &group, int32 value, const QString &text, bool checked = false, const style::flatCheckbox &st = st::rbDefFlat); + FlatRadiobutton(QWidget *parent, const QString &group, int32 value, const QString &text, bool checked, const style::flatCheckbox &st); int32 val() const { return _value; } @@ -130,7 +126,6 @@ class Radiobutton : public Button { Q_OBJECT public: - Radiobutton(QWidget *parent, const QString &group, int32 value, const QString &text, bool checked = false, const style::Radiobutton &st = st::defaultRadiobutton); bool checked() const; @@ -148,16 +143,13 @@ public: ~Radiobutton(); public slots: - void onClicked(); void onStateChange(int oldState, ButtonStateChangeSource source); signals: - void changed(); private: - void onChanged(); const style::Radiobutton &_st; diff --git a/Telegram/SourceFiles/ui/twidget.h b/Telegram/SourceFiles/ui/twidget.h index 0dc17700b..a883d746c 100644 --- a/Telegram/SourceFiles/ui/twidget.h +++ b/Telegram/SourceFiles/ui/twidget.h @@ -310,7 +310,7 @@ private: template class ChildWidget { public: - ChildWidget(std::nullptr_t) : _widget(nullptr) { + ChildWidget(std_::nullptr_t) : _widget(nullptr) { } // No default constructor, but constructors with at least @@ -322,7 +322,7 @@ public: ChildWidget(const ChildWidget &other) = delete; ChildWidget &operator=(const ChildWidget &other) = delete; - ChildWidget &operator=(std::nullptr_t) { + ChildWidget &operator=(std_::nullptr_t) { _widget = nullptr; return *this; } diff --git a/Telegram/gyp/Telegram.gyp b/Telegram/gyp/Telegram.gyp index e84b854f8..4e82727aa 100644 --- a/Telegram/gyp/Telegram.gyp +++ b/Telegram/gyp/Telegram.gyp @@ -191,7 +191,6 @@ '<(src_loc)/boxes/stickersetbox.h', '<(src_loc)/boxes/usernamebox.cpp', '<(src_loc)/boxes/usernamebox.h', - '<(src_loc)/core/basic_types.cpp', '<(src_loc)/core/basic_types.h', '<(src_loc)/core/click_handler.cpp', '<(src_loc)/core/click_handler.h', @@ -200,8 +199,14 @@ '<(src_loc)/core/lambda_wrap.h', '<(src_loc)/core/observer.cpp', '<(src_loc)/core/observer.h', + '<(src_loc)/core/ordered_set.h', '<(src_loc)/core/qthelp_url.cpp', '<(src_loc)/core/qthelp_url.h', + '<(src_loc)/core/runtime_composer.cpp', + '<(src_loc)/core/runtime_composer.h', + '<(src_loc)/core/stl_subset.h', + '<(src_loc)/core/utils.cpp', + '<(src_loc)/core/utils.h', '<(src_loc)/core/vector_of_moveable.h', '<(src_loc)/core/version.h', '<(src_loc)/data/data_abstract_structure.cpp', From 6b8d3aa48c399af514f14c82b4852df005752f01 Mon Sep 17 00:00:00 2001 From: John Preston Date: Thu, 29 Sep 2016 15:57:20 +0300 Subject: [PATCH 5/6] Some layout fixes, std_::align() fixed to work in OS X 10.6-7 build. --- Telegram/Resources/basic.style | 2 +- Telegram/SourceFiles/core/stl_subset.h | 16 +++++++++++----- .../SourceFiles/history/history_media_types.cpp | 8 ++++---- Telegram/SourceFiles/history/history_message.cpp | 3 ++- 4 files changed, 18 insertions(+), 11 deletions(-) diff --git a/Telegram/Resources/basic.style b/Telegram/Resources/basic.style index 5b1aaae80..76cf5bbf8 100644 --- a/Telegram/Resources/basic.style +++ b/Telegram/Resources/basic.style @@ -1007,7 +1007,7 @@ msgInvDblCheckImg: sprite(300px, 65px, 20px, 20px); msgInvViewsImg: sprite(104px, 59px, 16px, 11px); msgInvSendingViewsImg: sprite(104px, 114px, 16px, 11px); -msgDateSpace: 19px; +msgDateSpace: 12px; msgDateCheckSpace: 4px; msgDateViewsSpace: 11px; msgDateDelta: point(2px, 5px); diff --git a/Telegram/SourceFiles/core/stl_subset.h b/Telegram/SourceFiles/core/stl_subset.h index 477614850..10eeadbdf 100644 --- a/Telegram/SourceFiles/core/stl_subset.h +++ b/Telegram/SourceFiles/core/stl_subset.h @@ -20,6 +20,8 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org */ #pragma once +#include + // we copy some parts of C++11/14/17 std:: library, because on OS X 10.6+ // version we can use C++11/14/17, but we can not use its library :( namespace std_ { @@ -204,11 +206,13 @@ public: } T *release() noexcept { - return getPointerAndReset(_p); + auto old = _p; + _p = nullptr; + return old; } void reset(T *p = nullptr) noexcept { - T *old = _p; + auto old = _p; _p = p; if (old) { delete old; @@ -260,9 +264,12 @@ struct is_base_of { static constexpr bool value = sizeof(check(_host(), int())) == sizeof(_yes); }; -#ifndef OS_MAC_OLD inline void *align(size_t alignment, size_t size, void*& ptr, size_t& space) noexcept { - auto p = reinterpret_cast(ptr); +#ifndef OS_MAC_OLD + using std::uintptr_t; +#endif // OS_MAC_OLD + + auto p = reinterpret_cast(ptr); auto a = (p - 1u + alignment) & -alignment; auto d = a - p; if ((size + d) > space) { @@ -271,6 +278,5 @@ inline void *align(size_t alignment, size_t size, void*& ptr, size_t& space) noe space -= d; return ptr = reinterpret_cast(a); } -#endif // OS_MAC_OLD } // namespace std_ diff --git a/Telegram/SourceFiles/history/history_media_types.cpp b/Telegram/SourceFiles/history/history_media_types.cpp index 35f5114b3..813ff67f1 100644 --- a/Telegram/SourceFiles/history/history_media_types.cpp +++ b/Telegram/SourceFiles/history/history_media_types.cpp @@ -2560,7 +2560,7 @@ int HistoryWebPage::resizeGetHeight(int width) { return _height; } - _width = qMin(width, _maxw); + _width = width = qMin(width, _maxw); width -= st::msgPadding.left() + st::webPageLeft + st::msgPadding.right(); int32 linesMax = 5; @@ -2659,10 +2659,10 @@ void HistoryWebPage::draw(Painter &p, const QRect &r, TextSelection selection, u auto padding = inBubblePadding(); auto tshift = padding.top(); auto bshift = padding.bottom(); + width -= padding.left() + padding.right(); if (_asArticle || (isBubbleBottom() && _attach && _attach->customInfoLayout() && _attach->currentWidth() + _parent->skipBlockWidth() > width + bubble.left() + bubble.right())) { bshift += bottomInfoPadding(); } - width -= padding.left() + padding.right(); QRect bar(rtlrect(st::msgPadding.left(), tshift, st::webPageBar, _height - tshift - bshift, _width)); p.fillRect(bar, barfg); @@ -2994,7 +2994,7 @@ void HistoryGame::initDimensions() { } int HistoryGame::resizeGetHeight(int width) { - _width = qMin(width, _maxw); + _width = width = qMin(width, _maxw); width -= st::msgPadding.left() + st::webPageLeft + st::msgPadding.right(); // enable any count of lines in game description / message @@ -3056,10 +3056,10 @@ void HistoryGame::draw(Painter &p, const QRect &r, TextSelection selection, uint auto padding = inBubblePadding(); auto tshift = padding.top(); auto bshift = padding.bottom(); + width -= padding.left() + padding.right(); if (isBubbleBottom() && _attach && _attach->customInfoLayout() && _attach->currentWidth() + _parent->skipBlockWidth() > width + bubble.left() + bubble.right()) { bshift += bottomInfoPadding(); } - width -= padding.left() + padding.right(); QRect bar(rtlrect(st::msgPadding.left(), tshift, st::webPageBar, _height - tshift - bshift, _width)); p.fillRect(bar, barfg); diff --git a/Telegram/SourceFiles/history/history_message.cpp b/Telegram/SourceFiles/history/history_message.cpp index 88f0ba908..f47b7e1ff 100644 --- a/Telegram/SourceFiles/history/history_message.cpp +++ b/Telegram/SourceFiles/history/history_message.cpp @@ -1976,7 +1976,8 @@ bool HistoryService::prepareGameScoreText(const QString &from, QString *outText, auto getGameTitle = [item = gamescore->msg, &second]()->QString { if (auto media = item->getMedia()) { if (media->type() == MediaTypeGame) { - return static_cast(media)->game()->title; + second = MakeShared(item, 0, 0); + return textcmdLink(2, static_cast(media)->game()->title); } } return lang(lng_deleted_message); From 01a5aa30df95053d5f038e208db2d0adf22e516d Mon Sep 17 00:00:00 2001 From: John Preston Date: Thu, 29 Sep 2016 15:59:30 +0300 Subject: [PATCH 6/6] Beta 10008003: langs updated. --- Telegram/Resources/langs/lang_de.strings | 3 ++- Telegram/Resources/langs/lang_es.strings | 5 +++-- Telegram/Resources/langs/lang_it.strings | 5 +++-- Telegram/Resources/langs/lang_ko.strings | 9 +++++++++ Telegram/Resources/langs/lang_nl.strings | 5 +++-- Telegram/Resources/langs/lang_pt_BR.strings | 9 +++++++++ Telegram/Resources/winrc/Telegram.rc | 8 ++++---- Telegram/Resources/winrc/Updater.rc | 8 ++++---- Telegram/SourceFiles/core/version.h | 2 +- Telegram/build/version | 2 +- 10 files changed, 39 insertions(+), 17 deletions(-) diff --git a/Telegram/Resources/langs/lang_de.strings b/Telegram/Resources/langs/lang_de.strings index ab3cfef13..73f9219f9 100644 --- a/Telegram/Resources/langs/lang_de.strings +++ b/Telegram/Resources/langs/lang_de.strings @@ -581,8 +581,9 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org "lng_action_pinned_media_location" = "einen Standort"; "lng_action_pinned_media_sticker" = "einen Sticker"; "lng_action_pinned_media_emoji_sticker" = "einen {emoji} Sticker"; -"lng_action_pinned_media_game" = "ein Spiel «{game}»"; +"lng_action_pinned_media_game" = "das Spiel «{game}»"; "lng_action_game_score" = "{from} erzielte {count:# Punkte|# Punkt|# Punkte} bei {game}"; +"lng_action_game_you_scored" = "Du hast {count:# Punkte|# Punkt|# Punkte} bei {game} erzielt"; "lng_profile_migrate_reached" = "Limit von {count:_not_used_|# Mitglied|# Mitgliedern} erreicht"; "lng_profile_migrate_body" = "Um das Limit aufzuheben, ändere die Gruppe in eine Supergruppe."; diff --git a/Telegram/Resources/langs/lang_es.strings b/Telegram/Resources/langs/lang_es.strings index 840e0eb86..6787e3894 100644 --- a/Telegram/Resources/langs/lang_es.strings +++ b/Telegram/Resources/langs/lang_es.strings @@ -581,8 +581,9 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org "lng_action_pinned_media_location" = "una ubicación"; "lng_action_pinned_media_sticker" = "un sticker"; "lng_action_pinned_media_emoji_sticker" = "un {emoji} sticker"; -"lng_action_pinned_media_game" = "un juego «{game}»"; -"lng_action_game_score" = "{from} ha conseguido {count:# puntos|# punto|# puntos} en {game}"; +"lng_action_pinned_media_game" = "el juego «{game}»"; +"lng_action_game_score" = "{from} consiguió {count:# puntos|# punto|# puntos} en {game}"; +"lng_action_game_you_scored" = "Conseguiste {count:# puntos|# punto|#puntos} en {game}"; "lng_profile_migrate_reached" = "Límite de {count:_not_used_|# miembro|# miembros} alcanzado"; "lng_profile_migrate_body" = "Para superar este límite, puedes convertir tu grupo en un supergrupo."; diff --git a/Telegram/Resources/langs/lang_it.strings b/Telegram/Resources/langs/lang_it.strings index 42fa1df3d..0811a4299 100644 --- a/Telegram/Resources/langs/lang_it.strings +++ b/Telegram/Resources/langs/lang_it.strings @@ -581,8 +581,9 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org "lng_action_pinned_media_location" = "una posizione"; "lng_action_pinned_media_sticker" = "uno sticker"; "lng_action_pinned_media_emoji_sticker" = "uno {emoji} sticker"; -"lng_action_pinned_media_game" = "un gioco «{game}»"; -"lng_action_game_score" = "{from} ha segnato {count:# punti|# punto|# punti} a {game}"; +"lng_action_pinned_media_game" = "il gioco «{game}»"; +"lng_action_game_score" = "{from} ha totalizzato {count:# punti|# punto|# punti} a {game}"; +"lng_action_game_you_scored" = "Hai totalizzato {count:# punti|# punto|# punti} a {game}"; "lng_profile_migrate_reached" = "Limite di {count:_not_used_|# membro|# membri} raggiunto"; "lng_profile_migrate_body" = "Per superare questo limite, puoi aggiornare il gruppo a supergruppo."; diff --git a/Telegram/Resources/langs/lang_ko.strings b/Telegram/Resources/langs/lang_ko.strings index e0a6c86f5..0fdee3958 100644 --- a/Telegram/Resources/langs/lang_ko.strings +++ b/Telegram/Resources/langs/lang_ko.strings @@ -580,7 +580,10 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org "lng_action_pinned_media_contact" = "연락처 정보"; "lng_action_pinned_media_location" = "위치 마크"; "lng_action_pinned_media_sticker" = "스티커"; +"lng_action_pinned_media_emoji_sticker" = " {emoji} 스티커"; +"lng_action_pinned_media_game" = " «{game}» 게임"; "lng_action_game_score" = "{game} 에서 {from} 님이 {count:#|#|#} 점 획득"; +"lng_action_game_you_scored" = "{game} 에서 {count:#|#|#} 점 획득"; "lng_profile_migrate_reached" = "{count:_not_used_|# 명|# 명} 한계치에 도달 되었습니다."; "lng_profile_migrate_body" = "제한을 초과하고 싶으실 경우, 슈퍼그룹으로 그룹 업그레이드가 가능합니다."; @@ -774,6 +777,11 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org "lng_bot_groups_not_found" = "그룹을 찾을 수 없습니다."; "lng_bot_sure_invite" = "<<{group}>>에 봇을 추가 하시겠습니까?"; "lng_bot_already_in_group" = "봇이 이미 그룹의 멤버입니다."; +"lng_bot_choose_chat" = "채팅방 선택"; +"lng_bot_no_chats" = "채팅방이 없습니다."; +"lng_bot_chats_not_found" = "채팅방을 찾 을 수 없음"; +"lng_bot_sure_share_game" = "{user}에게 게임을 공유하겠습니까?"; +"lng_bot_sure_share_game_group" = " «{group}»에게 게임을 공유하겠습니까?"; "lng_typing" = "입력중"; "lng_user_typing" = "{user}님이 입력중입니다."; @@ -808,6 +816,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org "lng_duration_played" = "{played} / {duration}"; "lng_date_and_duration" = "{date}, {duration}"; "lng_choose_images" = "이미지 선택"; +"lng_game_tag" = "게임"; "lng_context_view_profile" = "프로필 보기"; "lng_context_view_group" = "그룹 정보 보기"; diff --git a/Telegram/Resources/langs/lang_nl.strings b/Telegram/Resources/langs/lang_nl.strings index df84eb3ee..317066c38 100644 --- a/Telegram/Resources/langs/lang_nl.strings +++ b/Telegram/Resources/langs/lang_nl.strings @@ -581,8 +581,9 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org "lng_action_pinned_media_location" = "een locatie"; "lng_action_pinned_media_sticker" = "een sticker"; "lng_action_pinned_media_emoji_sticker" = "een {emoji} sticker"; -"lng_action_pinned_media_game" = "een spel «{game}»"; -"lng_action_game_score" = "{from} heeft met {game} {count:#punten|#punt|#punten} behaald"; +"lng_action_pinned_media_game" = "het spel «{game}»"; +"lng_action_game_score" = "{from} heeft met {game} {count:# punten|# punt|# punten} behaald"; +"lng_action_game_you_scored" = "Je hebt met {game} {count:# punten|# punt|# punten} behaald"; "lng_profile_migrate_reached" = "{count:_not_used_|# lid |# leden} limiet bereikt"; "lng_profile_migrate_body" = "Wil je een hogere limiet? Waardeer op naar een supergroep."; diff --git a/Telegram/Resources/langs/lang_pt_BR.strings b/Telegram/Resources/langs/lang_pt_BR.strings index ac452d955..e75b35cbd 100644 --- a/Telegram/Resources/langs/lang_pt_BR.strings +++ b/Telegram/Resources/langs/lang_pt_BR.strings @@ -580,7 +580,10 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org "lng_action_pinned_media_contact" = "um contato"; "lng_action_pinned_media_location" = "uma localização"; "lng_action_pinned_media_sticker" = "um sticker"; +"lng_action_pinned_media_emoji_sticker" = "um {emoji} sticker"; +"lng_action_pinned_media_game" = "o jogo «{game}»"; "lng_action_game_score" = "{from} marcou {count:# pontos|# ponto|# pontos} em {game}"; +"lng_action_game_you_scored" = "Você marcou {count:# pontos|# ponto|# pontos} em {game}"; "lng_profile_migrate_reached" = "{count:_not_used_|# membro|# membros} limite alcançado"; "lng_profile_migrate_body" = "Para ir além desse limite, você pode converter seu grupo em um supergrupo."; @@ -774,6 +777,11 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org "lng_bot_groups_not_found" = "Nenhum grupo encontrado"; "lng_bot_sure_invite" = "Adicionar bot ao «{group}»?"; "lng_bot_already_in_group" = "O bot já é um membro do grupo."; +"lng_bot_choose_chat" = "Escolher Conversa"; +"lng_bot_no_chats" = "Você não possui conversas"; +"lng_bot_chats_not_found" = "Nenhuma conversa encontrada"; +"lng_bot_sure_share_game" = "Compartilhar o jogo com {user}?"; +"lng_bot_sure_share_game_group" = "Compartilhar o jogo com «{group}»?"; "lng_typing" = "escrevendo"; "lng_user_typing" = "{user} está escrevendo"; @@ -808,6 +816,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org "lng_duration_played" = "{played} / {duration}"; "lng_date_and_duration" = "{date}, {duration}"; "lng_choose_images" = "Escolher imagens"; +"lng_game_tag" = "Jogo"; "lng_context_view_profile" = "Ver perfil"; "lng_context_view_group" = "Ver info do grupo"; diff --git a/Telegram/Resources/winrc/Telegram.rc b/Telegram/Resources/winrc/Telegram.rc index 094e01541..1d240708c 100644 --- a/Telegram/Resources/winrc/Telegram.rc +++ b/Telegram/Resources/winrc/Telegram.rc @@ -34,8 +34,8 @@ IDI_ICON1 ICON "..\\art\\icon256.ico" // VS_VERSION_INFO VERSIONINFO - FILEVERSION 0,10,8,2 - PRODUCTVERSION 0,10,8,2 + FILEVERSION 0,10,8,3 + PRODUCTVERSION 0,10,8,3 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -51,10 +51,10 @@ BEGIN BLOCK "040904b0" BEGIN VALUE "CompanyName", "Telegram Messenger LLP" - VALUE "FileVersion", "0.10.8.2" + VALUE "FileVersion", "0.10.8.3" VALUE "LegalCopyright", "Copyright (C) 2014-2016" VALUE "ProductName", "Telegram Desktop" - VALUE "ProductVersion", "0.10.8.2" + VALUE "ProductVersion", "0.10.8.3" END END BLOCK "VarFileInfo" diff --git a/Telegram/Resources/winrc/Updater.rc b/Telegram/Resources/winrc/Updater.rc index e8c2b5b18..c82764a5c 100644 --- a/Telegram/Resources/winrc/Updater.rc +++ b/Telegram/Resources/winrc/Updater.rc @@ -25,8 +25,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // VS_VERSION_INFO VERSIONINFO - FILEVERSION 0,10,8,2 - PRODUCTVERSION 0,10,8,2 + FILEVERSION 0,10,8,3 + PRODUCTVERSION 0,10,8,3 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -43,10 +43,10 @@ BEGIN BEGIN VALUE "CompanyName", "Telegram Messenger LLP" VALUE "FileDescription", "Telegram Updater" - VALUE "FileVersion", "0.10.8.2" + VALUE "FileVersion", "0.10.8.3" VALUE "LegalCopyright", "Copyright (C) 2014-2016" VALUE "ProductName", "Telegram Desktop" - VALUE "ProductVersion", "0.10.8.2" + VALUE "ProductVersion", "0.10.8.3" END END BLOCK "VarFileInfo" diff --git a/Telegram/SourceFiles/core/version.h b/Telegram/SourceFiles/core/version.h index ec66d04e0..170016e56 100644 --- a/Telegram/SourceFiles/core/version.h +++ b/Telegram/SourceFiles/core/version.h @@ -22,7 +22,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org #include "core/utils.h" -#define BETA_VERSION_MACRO (10008002ULL) +#define BETA_VERSION_MACRO (10008003ULL) constexpr int AppVersion = 10008; constexpr str_const AppVersionStr = "0.10.8"; diff --git a/Telegram/build/version b/Telegram/build/version index cef9dab37..37cdddf1e 100644 --- a/Telegram/build/version +++ b/Telegram/build/version @@ -3,4 +3,4 @@ AppVersionStrMajor 0.10 AppVersionStrSmall 0.10.8 AppVersionStr 0.10.8 AlphaChannel 0 -BetaVersion 10008002 +BetaVersion 10008003