diff --git a/Telegram/SourceFiles/calls/group/calls_group_messages.cpp b/Telegram/SourceFiles/calls/group/calls_group_messages.cpp index 7bc0821e1e..13fffbe101 100644 --- a/Telegram/SourceFiles/calls/group/calls_group_messages.cpp +++ b/Telegram/SourceFiles/calls/group/calls_group_messages.cpp @@ -11,6 +11,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "api/api_text_entities.h" #include "base/random.h" #include "base/unixtime.h" +#include "calls/group/ui/calls_group_stars_coloring.h" #include "calls/group/calls_group_call.h" #include "calls/group/calls_group_message_encryption.h" #include "data/data_group_call.h" @@ -123,7 +124,6 @@ void Messages::received(const MTPDupdateGroupCallMessage &data) { fields.vmessage(), fields.vdate().v, fields.vpaid_message_stars().value_or_empty()); - pushChanges(); } void Messages::received(const MTPDupdateGroupCallEncryptedMessage &data) { @@ -159,7 +159,6 @@ void Messages::received(const MTPDupdateGroupCallEncryptedMessage &data) { base::unixtime::now(), // date 0, // stars true); // checkCustomEmoji - pushChanges(); } void Messages::deleted(const MTPDupdateDeleteGroupCallMessages &data) { @@ -245,26 +244,29 @@ void Messages::received( allowedEntityTypes), .stars = stars, }); + ranges::sort(_messages, ranges::less(), &Message::id); checkDestroying(true); } void Messages::checkDestroying(bool afterChanges) { auto next = TimeId(); const auto now = base::unixtime::now(); - const auto destroyTime = now - _ttl; const auto initial = _messages.size(); for (auto i = begin(_messages); i != end(_messages);) { const auto date = i->date; + const auto ttl = i->stars + ? (Ui::StarsColoringForCount(i->stars).minutesPin * 60) + : _ttl; if (!date) { if (i->id < 0) { ++i; } else { i = _messages.erase(i); } - } else if (date <= destroyTime) { + } else if (date + ttl <= now) { i = _messages.erase(i); - } else if (!next) { - next = date + _ttl - now; + } else if (!next || next > date + ttl - now) { + next = date + ttl - now; ++i; } else { ++i; @@ -301,7 +303,14 @@ void Messages::sendPending() { } void Messages::pushChanges() { - _changes.fire_copy(_messages); + if (_changesScheduled) { + return; + } + _changesScheduled = true; + Ui::PostponeCall(this, [=] { + _changesScheduled = false; + _changes.fire_copy(_messages); + }); } void Messages::failed(uint64 randomId, const MTP::Response &response) { diff --git a/Telegram/SourceFiles/calls/group/calls_group_messages.h b/Telegram/SourceFiles/calls/group/calls_group_messages.h index 13277a0c7b..dd48546c81 100644 --- a/Telegram/SourceFiles/calls/group/calls_group_messages.h +++ b/Telegram/SourceFiles/calls/group/calls_group_messages.h @@ -8,6 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #pragma once #include "base/timer.h" +#include "base/weak_ptr.h" namespace Calls { class GroupCall; @@ -38,7 +39,7 @@ struct MessageIdUpdate { MsgId realId = 0; }; -class Messages final { +class Messages final : public base::has_weak_ptr { public: Messages(not_null call, not_null api); @@ -91,6 +92,7 @@ private: rpl::event_stream _idUpdates; TimeId _ttl = 0; + bool _changesScheduled = false; rpl::lifetime _lifetime; diff --git a/Telegram/SourceFiles/calls/group/calls_group_messages_ui.cpp b/Telegram/SourceFiles/calls/group/calls_group_messages_ui.cpp index f0fea7f159..bb521bd9bd 100644 --- a/Telegram/SourceFiles/calls/group/calls_group_messages_ui.cpp +++ b/Telegram/SourceFiles/calls/group/calls_group_messages_ui.cpp @@ -336,7 +336,7 @@ void MessagesUi::setContent( int stars) { if (stars) { entry.price = Ui::Text::String( - st::messageTextStyle, + st::whoReadDateStyle, Ui::Text::IconEmoji( &st::starIconEmojiSmall ).append(Lang::FormatCountDecimal(stars)), diff --git a/Telegram/SourceFiles/payments/ui/payments_reaction_box.cpp b/Telegram/SourceFiles/payments/ui/payments_reaction_box.cpp index 79a9ae9e61..e97f7a3dcb 100644 --- a/Telegram/SourceFiles/payments/ui/payments_reaction_box.cpp +++ b/Telegram/SourceFiles/payments/ui/payments_reaction_box.cpp @@ -584,6 +584,7 @@ void PaidReactionsBox( rpl::single(Text::Bold(args.name)), Text::RichLangValue)), dark ? st::darkEditStarsText : st::boostText); + label->setTryMakeSimilarLines(true); labelWrap->widthValue() | rpl::start_with_next([=](int width) { label->resizeToWidth(width); }, label->lifetime());