From 00504b61cd595cb0889e27e7b31a0f0767f2dae4 Mon Sep 17 00:00:00 2001 From: John Preston Date: Thu, 19 Nov 2020 16:23:51 +0300 Subject: [PATCH] Allow all messages silent in support mode. --- Telegram/SourceFiles/api/api_sending.cpp | 8 ++--- Telegram/SourceFiles/apiwrap.cpp | 26 +++++----------- .../SourceFiles/history/history_message.cpp | 31 +++++++++++++------ .../SourceFiles/history/history_message.h | 4 +++ .../main/main_session_settings.cpp | 6 ++++ .../SourceFiles/main/main_session_settings.h | 7 +++++ .../platform/mac/specific_mac_p.mm | 12 ++++--- .../SourceFiles/settings/settings_chat.cpp | 14 +++++++++ 8 files changed, 70 insertions(+), 38 deletions(-) diff --git a/Telegram/SourceFiles/api/api_sending.cpp b/Telegram/SourceFiles/api/api_sending.cpp index 3ee6026f6..e2e370145 100644 --- a/Telegram/SourceFiles/api/api_sending.cpp +++ b/Telegram/SourceFiles/api/api_sending.cpp @@ -86,8 +86,7 @@ void SendExistingMedia( sendFlags |= MTPmessages_SendMedia::Flag::f_reply_to_msg_id; } const auto anonymousPost = peer->amAnonymous(); - const auto silentPost = message.action.options.silent - || (peer->isBroadcast() && session->data().notifySilentPosts(peer)); + const auto silentPost = ShouldSendSilent(peer, message.action.options); InnerFillMessagePostFlags(message.action.options, peer, flags); if (silentPost) { sendFlags |= MTPmessages_SendMedia::Flag::f_silent; @@ -261,8 +260,7 @@ bool SendDice(Api::MessageToSend &message) { } const auto replyHeader = NewMessageReplyHeader(message.action); const auto anonymousPost = peer->amAnonymous(); - const auto silentPost = message.action.options.silent - || (peer->isBroadcast() && session->data().notifySilentPosts(peer)); + const auto silentPost = ShouldSendSilent(peer, message.action.options); InnerFillMessagePostFlags(message.action.options, peer, flags); if (silentPost) { sendFlags |= MTPmessages_SendMedia::Flag::f_silent; @@ -403,7 +401,7 @@ void SendConfirmedFile( } const auto replyHeader = NewMessageReplyHeader(action); const auto anonymousPost = peer->amAnonymous(); - const auto silentPost = file->to.options.silent; + const auto silentPost = ShouldSendSilent(peer, file->to.options); Api::FillMessagePostFlags(action, peer, flags); if (silentPost) { flags |= MTPDmessage::Flag::f_silent; diff --git a/Telegram/SourceFiles/apiwrap.cpp b/Telegram/SourceFiles/apiwrap.cpp index 0f6ee2581..fb1a263e4 100644 --- a/Telegram/SourceFiles/apiwrap.cpp +++ b/Telegram/SourceFiles/apiwrap.cpp @@ -3955,8 +3955,7 @@ void ApiWrap::forwardMessages( histories.readInbox(history); const auto anonymousPost = peer->amAnonymous(); - const auto silentPost = action.options.silent - || (peer->isBroadcast() && _session->data().notifySilentPosts(peer)); + const auto silentPost = ShouldSendSilent(peer, action.options); auto flags = MTPDmessage::Flags(0); auto clientFlags = MTPDmessage_ClientFlags(); @@ -4155,11 +4154,7 @@ void ApiWrap::sendSharedContact( MTP_string(firstName), MTP_string(lastName), MTP_string(vcard)); - auto options = action.options; - if (_session->data().notifySilentPosts(peer)) { - options.silent = true; - } - sendMedia(item, media, options); + sendMedia(item, media, action.options); _session->data().sendHistoryChangeNotifications(); _session->changes().historyUpdated( @@ -4374,8 +4369,7 @@ void ApiWrap::sendMessage(MessageToSend &&message) { flags |= MTPDmessage::Flag::f_media; } const auto anonymousPost = peer->amAnonymous(); - const auto silentPost = action.options.silent - || (peer->isBroadcast() && _session->data().notifySilentPosts(peer)); + const auto silentPost = ShouldSendSilent(peer, action.options); FillMessagePostFlags(action, peer, flags); if (silentPost) { sendFlags |= MTPmessages_SendMessage::Flag::f_silent; @@ -4516,8 +4510,7 @@ void ApiWrap::sendInlineResult( sendFlags |= MTPmessages_SendInlineBotResult::Flag::f_reply_to_msg_id; } const auto anonymousPost = peer->amAnonymous(); - const auto silentPost = action.options.silent - || (peer->isBroadcast() && _session->data().notifySilentPosts(peer)); + const auto silentPost = ShouldSendSilent(peer, action.options); FillMessagePostFlags(action, peer, flags); if (silentPost) { sendFlags |= MTPmessages_SendInlineBotResult::Flag::f_silent; @@ -4683,7 +4676,7 @@ void ApiWrap::sendMediaWithRandomId( | (replyTo ? MTPmessages_SendMedia::Flag::f_reply_to_msg_id : MTPmessages_SendMedia::Flag(0)) - | (options.silent + | (ShouldSendSilent(history->peer, options) ? MTPmessages_SendMedia::Flag::f_silent : MTPmessages_SendMedia::Flag(0)) | (!sentEntities.v.isEmpty() @@ -4790,7 +4783,7 @@ void ApiWrap::sendAlbumIfReady(not_null album) { | (replyTo ? MTPmessages_SendMultiMedia::Flag::f_reply_to_msg_id : MTPmessages_SendMultiMedia::Flag(0)) - | (album->options.silent + | (ShouldSendSilent(history->peer, album->options) ? MTPmessages_SendMultiMedia::Flag::f_silent : MTPmessages_SendMultiMedia::Flag(0)) | (album->options.scheduled @@ -4828,10 +4821,6 @@ void ApiWrap::sendAlbumIfReady(not_null album) { FileLoadTo ApiWrap::fileLoadTaskOptions(const SendAction &action) const { const auto peer = action.history->peer; - auto options = action.options; - if (_session->data().notifySilentPosts(peer)) { - options.silent = true; - } return FileLoadTo(peer->id, action.options, action.replyTo); } @@ -5261,8 +5250,7 @@ void ApiWrap::createPoll( history->clearLocalDraft(); history->clearCloudDraft(); } - const auto silentPost = action.options.silent - || (peer->isBroadcast() && _session->data().notifySilentPosts(peer)); + const auto silentPost = ShouldSendSilent(peer, action.options); if (silentPost) { sendFlags |= MTPmessages_SendMedia::Flag::f_silent; } diff --git a/Telegram/SourceFiles/history/history_message.cpp b/Telegram/SourceFiles/history/history_message.cpp index 59f165f47..0185d871d 100644 --- a/Telegram/SourceFiles/history/history_message.cpp +++ b/Telegram/SourceFiles/history/history_message.cpp @@ -21,6 +21,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "history/view/media/history_view_media.h" // AddTimestampLinks. #include "chat_helpers/stickers_emoji_pack.h" #include "main/main_session.h" +#include "main/main_session_settings.h" #include "api/api_updates.h" #include "boxes/share_box.h" #include "boxes/confirm_box.h" @@ -277,11 +278,8 @@ void FastShareMessage(not_null item) { return; } - const auto sendFlags = MTPmessages_ForwardMessages::Flag(0) + const auto commonSendFlags = MTPmessages_ForwardMessages::Flag(0) | MTPmessages_ForwardMessages::Flag::f_with_my_score - | (options.silent - ? MTPmessages_ForwardMessages::Flag::f_silent - : MTPmessages_ForwardMessages::Flag(0)) | (options.scheduled ? MTPmessages_ForwardMessages::Flag::f_schedule_date : MTPmessages_ForwardMessages::Flag(0)); @@ -311,13 +309,17 @@ void FastShareMessage(not_null item) { } histories.sendRequest(history, requestType, [=](Fn finish) { auto &api = history->session().api(); + const auto sendFlags = commonSendFlags + | (ShouldSendSilent(peer, options) + ? MTPmessages_ForwardMessages::Flag::f_silent + : MTPmessages_ForwardMessages::Flag(0)); history->sendRequestId = api.request(MTPmessages_ForwardMessages( - MTP_flags(sendFlags), - data->peer->input, - MTP_vector(msgIds), - MTP_vector(generateRandom()), - peer->input, - MTP_int(options.scheduled) + MTP_flags(sendFlags), + data->peer->input, + MTP_vector(msgIds), + MTP_vector(generateRandom()), + peer->input, + MTP_int(options.scheduled) )).done([=](const MTPUpdates &updates, mtpRequestId requestId) { history->session().api().applyUpdates(updates); data->requests.remove(requestId); @@ -375,6 +377,15 @@ MTPDmessage::Flags NewMessageFlags(not_null peer) { return result; } +bool ShouldSendSilent( + not_null peer, + const Api::SendOptions &options) { + return options.silent + || (peer->isBroadcast() && peer->owner().notifySilentPosts(peer)) + || (peer->session().supportMode() + && peer->session().settings().supportAllSilent()); +} + MsgId LookupReplyToTop(not_null history, MsgId replyToId) { const auto &owner = history->owner(); if (const auto item = owner.message(history->channelId(), replyToId)) { diff --git a/Telegram/SourceFiles/history/history_message.h b/Telegram/SourceFiles/history/history_message.h index 610b6044f..5bfc295d7 100644 --- a/Telegram/SourceFiles/history/history_message.h +++ b/Telegram/SourceFiles/history/history_message.h @@ -11,6 +11,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL namespace Api { struct SendAction; +struct SendOptions; } // namespace Api namespace HistoryView { @@ -24,6 +25,9 @@ struct HistoryMessageViews; [[nodiscard]] Fn HistoryDependentItemCallback( not_null item); [[nodiscard]] MTPDmessage::Flags NewMessageFlags(not_null peer); +[[nodiscard]] bool ShouldSendSilent( + not_null peer, + const Api::SendOptions &options); [[nodiscard]] MTPDmessage_ClientFlags NewMessageClientFlags(); [[nodiscard]] MsgId LookupReplyToTop( not_null history, diff --git a/Telegram/SourceFiles/main/main_session_settings.cpp b/Telegram/SourceFiles/main/main_session_settings.cpp index e97770cbf..f38f2e3e4 100644 --- a/Telegram/SourceFiles/main/main_session_settings.cpp +++ b/Telegram/SourceFiles/main/main_session_settings.cpp @@ -69,6 +69,7 @@ QByteArray SessionSettings::serialize() const { stream << quint64(key) << qint32(value); } stream << qint32(_dialogsFiltersEnabled ? 1 : 0); + stream << qint32(_supportAllSilent ? 1 : 0); } return result; } @@ -127,6 +128,7 @@ void SessionSettings::addFromSerialized(const QByteArray &serialized) { qint32 appAutoDownloadDictionaries = app.autoDownloadDictionaries() ? 1 : 0; base::flat_map hiddenPinnedMessages; qint32 dialogsFiltersEnabled = _dialogsFiltersEnabled ? 1 : 0; + qint32 supportAllSilent = _supportAllSilent ? 1 : 0; stream >> versionTag; if (versionTag == kVersionTag) { @@ -321,6 +323,9 @@ void SessionSettings::addFromSerialized(const QByteArray &serialized) { if (!stream.atEnd()) { stream >> dialogsFiltersEnabled; } + if (!stream.atEnd()) { + stream >> supportAllSilent; + } if (stream.status() != QDataStream::Ok) { LOG(("App Error: " "Bad data for SessionSettings::addFromSerialized()")); @@ -362,6 +367,7 @@ void SessionSettings::addFromSerialized(const QByteArray &serialized) { _mediaLastPlaybackPosition = std::move(mediaLastPlaybackPosition); _hiddenPinnedMessages = std::move(hiddenPinnedMessages); _dialogsFiltersEnabled = (dialogsFiltersEnabled == 1); + _supportAllSilent = (supportAllSilent == 1); if (version < 2) { app.setLastSeenWarningSeen(appLastSeenWarningSeen == 1); diff --git a/Telegram/SourceFiles/main/main_session_settings.h b/Telegram/SourceFiles/main/main_session_settings.h index e8c8b1552..2cd331e7e 100644 --- a/Telegram/SourceFiles/main/main_session_settings.h +++ b/Telegram/SourceFiles/main/main_session_settings.h @@ -51,6 +51,12 @@ public: void setSupportAllSearchResults(bool all); [[nodiscard]] bool supportAllSearchResults() const; [[nodiscard]] rpl::producer supportAllSearchResultsValue() const; + void setSupportAllSilent(bool enabled) { + _supportAllSilent = enabled; + } + [[nodiscard]] bool supportAllSilent() const { + return _supportAllSilent; + } [[nodiscard]] ChatHelpers::SelectorTab selectorTab() const { return _selectorTab; @@ -131,6 +137,7 @@ private: Support::SwitchSettings _supportSwitch; bool _supportFixChatsOrder = true; bool _supportTemplatesAutocomplete = true; + bool _supportAllSilent = false; rpl::variable _supportChatsTimeSlice = kDefaultSupportChatsLimitSlice; rpl::variable _supportAllSearchResults = false; diff --git a/Telegram/SourceFiles/platform/mac/specific_mac_p.mm b/Telegram/SourceFiles/platform/mac/specific_mac_p.mm index e53afe424..5fdf9397a 100644 --- a/Telegram/SourceFiles/platform/mac/specific_mac_p.mm +++ b/Telegram/SourceFiles/platform/mac/specific_mac_p.mm @@ -158,11 +158,15 @@ ApplicationDelegate *_sharedDelegate = nil; if (!Core::IsAppLaunched()) { return; } - Core::App().checkLocalTime(); + Core::Sandbox::Instance().customEnterFromEventLoop([&] { + Core::App().checkLocalTime(); - LOG(("Audio Info: " - "-receiveWakeNote: received, scheduling detach from audio device")); - Media::Audio::ScheduleDetachFromDeviceSafe(); + LOG(("Audio Info: " + "-receiveWakeNote: received, scheduling detach from audio device")); + Media::Audio::ScheduleDetachFromDeviceSafe(); + + Core::App().settings().setSystemDarkMode(Platform::IsDarkMode()); + }); } - (void) setWatchingMediaKeys:(bool)watching { diff --git a/Telegram/SourceFiles/settings/settings_chat.cpp b/Telegram/SourceFiles/settings/settings_chat.cpp index a27a33f60..ac92f78cb 100644 --- a/Telegram/SourceFiles/settings/settings_chat.cpp +++ b/Telegram/SourceFiles/settings/settings_chat.cpp @@ -1419,6 +1419,20 @@ void SetupSupport( controller->session().saveSettingsDelayed(); }, inner->lifetime()); + inner->add( + object_ptr( + inner, + "Send all messages without sound", + controller->session().settings().supportAllSilent(), + st::settingsCheckbox), + st::settingsSendTypePadding + )->checkedChanges( + ) | rpl::start_with_next([=](bool checked) { + controller->session().settings().setSupportAllSilent( + checked); + controller->session().saveSettingsDelayed(); + }, inner->lifetime()); + AddSkip(inner, st::settingsCheckboxesSkip); AddSubsectionTitle(inner, rpl::single(qsl("Load chats for a period")));