From 20f79c5ae521d227d0a2736c5eeceec66fd87c00 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 27 Feb 2026 22:54:41 +0400 Subject: [PATCH] Confirm enable sharing request sending. --- Telegram/Resources/langs/lang.strings | 3 +++ Telegram/SourceFiles/data/data_session.cpp | 15 +++++++++++ Telegram/SourceFiles/data/data_session.h | 6 +++++ Telegram/SourceFiles/data/data_user.cpp | 3 +++ .../SourceFiles/window/window_peer_menu.cpp | 27 ++++++++++++++++++- 5 files changed, 53 insertions(+), 1 deletion(-) diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index c15f5187fc..fd89c036e5 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -1909,6 +1909,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_disable_sharing_button" = "Disable Sharing"; "lng_disable_sharing_toast" = "Sharing disabled for this chat."; "lng_enable_sharing_toast" = "Sharing enabled for this chat."; +"lng_enable_sharing_request_title" = "Enable Sharing"; +"lng_enable_sharing_request_text" = "You need **{name}'s** approval to enable sharing. Send a request?"; +"lng_enable_sharing_request_button" = "Send Request"; "lng_action_no_forwards_you_disabled" = "You disabled sharing in this chat."; "lng_action_no_forwards_you_enabled" = "You enabled sharing in this chat."; diff --git a/Telegram/SourceFiles/data/data_session.cpp b/Telegram/SourceFiles/data/data_session.cpp index edc69c5062..447d58e94f 100644 --- a/Telegram/SourceFiles/data/data_session.cpp +++ b/Telegram/SourceFiles/data/data_session.cpp @@ -1309,6 +1309,21 @@ void Session::maybeStopWatchForOffline(not_null user) { } } +void Session::recordSharingDisabledTime(not_null user) { + _sharingDisabledTimes[user] = base::unixtime::now(); +} + +bool Session::sharingRecentlyDisabledByMe( + not_null user) const { + const auto i = _sharingDisabledTimes.find(user); + return (i != end(_sharingDisabledTimes)) + && (base::unixtime::now() - i->second < 86400); +} + +void Session::clearSharingDisabledTime(not_null user) { + _sharingDisabledTimes.remove(user); +} + void Session::checkLocalUsersWentOffline() { _watchForOfflineTimer.cancel(); diff --git a/Telegram/SourceFiles/data/data_session.h b/Telegram/SourceFiles/data/data_session.h index 403c6a4885..a46318e213 100644 --- a/Telegram/SourceFiles/data/data_session.h +++ b/Telegram/SourceFiles/data/data_session.h @@ -286,6 +286,11 @@ public: void watchForOffline(not_null user, TimeId now = 0); void maybeStopWatchForOffline(not_null user); + void recordSharingDisabledTime(not_null user); + [[nodiscard]] bool sharingRecentlyDisabledByMe( + not_null user) const; + void clearSharingDisabledTime(not_null user); + [[nodiscard]] auto invitedToCallUsers(CallId callId) const -> const base::flat_map, bool> &; void registerInvitedToCallUser( @@ -1285,6 +1290,7 @@ private: base::flat_map, TimeId> _watchingForOffline; base::Timer _watchForOfflineTimer; + base::flat_map, TimeId> _sharingDisabledTimes; base::flat_map, MTP::DcId> _peerStatsDcIds; diff --git a/Telegram/SourceFiles/data/data_user.cpp b/Telegram/SourceFiles/data/data_user.cpp index d415246ead..86c23814be 100644 --- a/Telegram/SourceFiles/data/data_user.cpp +++ b/Telegram/SourceFiles/data/data_user.cpp @@ -656,6 +656,9 @@ void UserData::setNoForwardsFlags(bool myEnabled, bool peerEnabled) { setFlags((flags() & ~mask) | (myEnabled ? Flag::NoForwardsMyEnabled : Flag()) | (peerEnabled ? Flag::NoForwardsPeerEnabled : Flag())); + if (!myEnabled && !peerEnabled) { + owner().clearSharingDisabledTime(this); + } } int UserData::starsPerMessage() const { diff --git a/Telegram/SourceFiles/window/window_peer_menu.cpp b/Telegram/SourceFiles/window/window_peer_menu.cpp index ae1f6b8d38..c82a775150 100644 --- a/Telegram/SourceFiles/window/window_peer_menu.cpp +++ b/Telegram/SourceFiles/window/window_peer_menu.cpp @@ -1448,6 +1448,11 @@ void Filler::addToggleNoForwards() { MTPint() )).done([=](const MTPUpdates &result) { peer->session().api().applyUpdates(result); + if (enabled) { + if (const auto user = peer->asUser()) { + peer->session().data().recordSharingDisabledTime(user); + } + } }).fail([=](const MTP::Error &error) { if (error.type() != u"CHAT_NOT_MODIFIED"_q) { controller->showToast(error.type()); @@ -1461,7 +1466,27 @@ void Filler::addToggleNoForwards() { if (controller->showFrozenError()) { return; } else if (disabledNow) { - toggleNoForwards(false); + const auto willBeRequest = true + && (user->flags() & UserDataFlag::NoForwardsPeerEnabled) + && !peer->session().data().sharingRecentlyDisabledByMe(user); + if (willBeRequest) { + controller->show(Ui::MakeConfirmBox({ + .text = tr::lng_enable_sharing_request_text( + tr::now, + lt_name, + tr::marked(user->shortName()), + tr::rich), + .confirmed = [=](Fn close) { + toggleNoForwards(false); + controller->showPeerHistory(peer->id); + close(); + }, + .confirmText = tr::lng_enable_sharing_request_button(), + .title = tr::lng_enable_sharing_request_title(), + })); + } else { + toggleNoForwards(false); + } return; } auto &settings = peer->session().settings();