Disallow revoking dice media in first 24 hours.

Fixes #7745.
This commit is contained in:
John Preston 2020-05-01 13:21:26 +04:00
parent 9c66bd553a
commit d8e55081b0
3 changed files with 21 additions and 12 deletions

View File

@ -46,7 +46,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
namespace Data { namespace Data {
namespace { namespace {
Call ComputeCallData(const MTPDmessageActionPhoneCall &call) { constexpr auto kFastRevokeRestriction = 24 * 60 * TimeId(60);
[[nodiscard]] Call ComputeCallData(const MTPDmessageActionPhoneCall &call) {
auto result = Call(); auto result = Call();
result.finishReason = [&] { result.finishReason = [&] {
if (const auto reason = call.vreason()) { if (const auto reason = call.vreason()) {
@ -68,7 +70,7 @@ Call ComputeCallData(const MTPDmessageActionPhoneCall &call) {
return result; return result;
} }
Invoice ComputeInvoiceData( [[nodiscard]] Invoice ComputeInvoiceData(
not_null<HistoryItem*> item, not_null<HistoryItem*> item,
const MTPDmessageMediaInvoice &data) { const MTPDmessageMediaInvoice &data) {
auto result = Invoice(); auto result = Invoice();
@ -84,7 +86,7 @@ Invoice ComputeInvoiceData(
return result; return result;
} }
QString WithCaptionDialogsText( [[nodiscard]] QString WithCaptionDialogsText(
const QString &attachType, const QString &attachType,
const QString &caption) { const QString &caption) {
if (caption.isEmpty()) { if (caption.isEmpty()) {
@ -102,7 +104,7 @@ QString WithCaptionDialogsText(
TextUtilities::Clean(caption)); TextUtilities::Clean(caption));
} }
QString WithCaptionNotificationText( [[nodiscard]] QString WithCaptionNotificationText(
const QString &attachType, const QString &attachType,
const QString &caption) { const QString &caption) {
if (caption.isEmpty()) { if (caption.isEmpty()) {
@ -220,7 +222,7 @@ bool Media::allowsEditMedia() const {
return false; return false;
} }
bool Media::allowsRevoke() const { bool Media::allowsRevoke(TimeId now) const {
return true; return true;
} }
@ -1344,6 +1346,14 @@ int MediaDice::value() const {
return _value; return _value;
} }
bool MediaDice::allowsRevoke(TimeId now) const {
const auto peer = parent()->history()->peer;
if (peer->isSelf() || !peer->isUser()) {
return true;
}
return (now >= parent()->date() + kFastRevokeRestriction);
}
QString MediaDice::notificationText() const { QString MediaDice::notificationText() const {
return _emoji; return _emoji;
} }

View File

@ -95,7 +95,7 @@ public:
virtual bool allowsEdit() const; virtual bool allowsEdit() const;
virtual bool allowsEditCaption() const; virtual bool allowsEditCaption() const;
virtual bool allowsEditMedia() const; virtual bool allowsEditMedia() const;
virtual bool allowsRevoke() const; virtual bool allowsRevoke(TimeId now) const;
virtual bool forwardedBecomesUnread() const; virtual bool forwardedBecomesUnread() const;
virtual QString errorTextForForward(not_null<PeerData*> peer) const; virtual QString errorTextForForward(not_null<PeerData*> peer) const;
@ -414,6 +414,7 @@ public:
[[nodiscard]] QString emoji() const; [[nodiscard]] QString emoji() const;
[[nodiscard]] int value() const; [[nodiscard]] int value() const;
bool allowsRevoke(TimeId now) const override;
QString notificationText() const override; QString notificationText() const override;
QString pinnedTextSubstring() const override; QString pinnedTextSubstring() const override;
TextForMimeData clipboardText() const override; TextForMimeData clipboardText() const override;

View File

@ -585,13 +585,11 @@ bool HistoryItem::canDeleteForEveryone(TimeId now) const {
return false; return false;
} }
} }
if (!peer->isUser()) { if (!peer->isUser() && !toHistoryMessage()) {
if (!toHistoryMessage()) { return false;
} else if (const auto media = this->media()) {
if (!media->allowsRevoke(now)) {
return false; return false;
} else if (const auto media = this->media()) {
if (!media->allowsRevoke()) {
return false;
}
} }
} }
if (!out()) { if (!out()) {