mirror of
https://github.com/vale981/tdesktop
synced 2025-03-05 09:41:41 -05:00
Fix localtime-related slowmode errors.
This commit is contained in:
parent
1a06714f3a
commit
e1fe373504
9 changed files with 35 additions and 25 deletions
|
@ -561,8 +561,12 @@ void ApiWrap::sendMessageFail(
|
|||
const auto left = error.type().mid(chop).toInt();
|
||||
if (const auto channel = peer->asChannel()) {
|
||||
const auto seconds = channel->slowmodeSeconds();
|
||||
channel->growSlowmodeLastMessage(
|
||||
base::unixtime::now() - (left - seconds));
|
||||
if (seconds >= left) {
|
||||
channel->growSlowmodeLastMessage(
|
||||
base::unixtime::now() - (left - seconds));
|
||||
} else {
|
||||
requestFullPeer(peer);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (const auto item = _session->data().message(itemId)) {
|
||||
|
|
|
@ -596,10 +596,15 @@ TimeId ChannelData::slowmodeLastMessage() const {
|
|||
}
|
||||
|
||||
void ChannelData::growSlowmodeLastMessage(TimeId when) {
|
||||
if (_slowmodeLastMessage >= when) {
|
||||
const auto now = base::unixtime::now();
|
||||
accumulate_min(when, now);
|
||||
if (_slowmodeLastMessage > now) {
|
||||
_slowmodeLastMessage = when;
|
||||
} else if (_slowmodeLastMessage >= when) {
|
||||
return;
|
||||
} else {
|
||||
_slowmodeLastMessage = when;
|
||||
}
|
||||
_slowmodeLastMessage = when;
|
||||
Notify::peerUpdatedDelayed(this, UpdateFlag::ChannelSlowmode);
|
||||
}
|
||||
|
||||
|
@ -655,11 +660,10 @@ void ApplyChannelUpdate(
|
|||
channel->setKickedCount(update.vkicked_count().value_or_empty());
|
||||
channel->setSlowmodeSeconds(update.vslowmode_seconds().value_or_empty());
|
||||
if (const auto next = update.vslowmode_next_send_date()) {
|
||||
if (next->v > base::unixtime::now()) {
|
||||
channel->growSlowmodeLastMessage(
|
||||
next->v - channel->slowmodeSeconds());
|
||||
}
|
||||
channel->growSlowmodeLastMessage(
|
||||
next->v - channel->slowmodeSeconds());
|
||||
}
|
||||
channel->checkSlowmodeLastMessage();
|
||||
channel->setInviteLink(update.vexported_invite().match([&](
|
||||
const MTPDchatInviteExported &data) {
|
||||
return qs(data.vlink());
|
||||
|
|
|
@ -713,10 +713,11 @@ bool PeerData::slowmodeApplied() const {
|
|||
|
||||
int PeerData::slowmodeSecondsLeft() const {
|
||||
if (const auto channel = asChannel()) {
|
||||
if (const auto last = channel->slowmodeLastMessage()) {
|
||||
const auto seconds = channel->slowmodeSeconds();
|
||||
const auto now = base::unixtime::now();
|
||||
return std::max(seconds - (now - last), 0);
|
||||
if (const auto seconds = channel->slowmodeSeconds()) {
|
||||
if (const auto last = channel->slowmodeLastMessage()) {
|
||||
const auto now = base::unixtime::now();
|
||||
return std::max(seconds - (now - last), 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
|
|
@ -1637,11 +1637,7 @@ bool Session::checkEntitiesAndViewsUpdate(const MTPDmessage &data) {
|
|||
existing->updateForwardedInfo(data.vfwd_from());
|
||||
existing->setViewsCount(data.vviews().value_or(-1));
|
||||
existing->indexAsNewItem();
|
||||
if (const auto channel = existing->history()->peer->asChannel()) {
|
||||
if (existing->out()) {
|
||||
channel->growSlowmodeLastMessage(data.vdate().v);
|
||||
}
|
||||
}
|
||||
existing->contributeToSlowmode(data.vdate().v);
|
||||
requestItemTextRefresh(existing);
|
||||
if (existing->mainView()) {
|
||||
checkSavedGif(existing);
|
||||
|
|
|
@ -1242,16 +1242,12 @@ void History::newItemAdded(not_null<HistoryItem*> item) {
|
|||
}
|
||||
from->madeAction(item->date());
|
||||
}
|
||||
item->contributeToSlowmode();
|
||||
if (item->out()) {
|
||||
destroyUnreadBar();
|
||||
if (!item->unread()) {
|
||||
outboxRead(item);
|
||||
}
|
||||
if (const auto channel = peer->asChannel()) {
|
||||
if (IsServerMsgId(item->id)) {
|
||||
channel->growSlowmodeLastMessage(item->date());
|
||||
}
|
||||
}
|
||||
} else if (item->unread()) {
|
||||
if (!isChannel() || peer->asChannel()->amIn()) {
|
||||
_notifications.push_back(item);
|
||||
|
|
|
@ -204,6 +204,8 @@ public:
|
|||
}
|
||||
virtual void updateForwardedInfo(const MTPMessageFwdHeader *fwd) {
|
||||
}
|
||||
virtual void contributeToSlowmode(TimeId realDate = 0) {
|
||||
}
|
||||
|
||||
virtual void addToUnreadMentions(UnreadMentionType type);
|
||||
virtual void eraseFromUnreadMentions() {
|
||||
|
|
|
@ -1098,6 +1098,14 @@ void HistoryMessage::updateForwardedInfo(const MTPMessageFwdHeader *fwd) {
|
|||
});
|
||||
}
|
||||
|
||||
void HistoryMessage::contributeToSlowmode(TimeId realDate) {
|
||||
if (const auto channel = history()->peer->asChannel()) {
|
||||
if (out() && IsServerMsgId(id)) {
|
||||
channel->growSlowmodeLastMessage(realDate ? realDate : date());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void HistoryMessage::addToUnreadMentions(UnreadMentionType type) {
|
||||
if (IsServerMsgId(id) && isUnreadMention()) {
|
||||
if (history()->addToUnreadMentions(id, type)) {
|
||||
|
|
|
@ -137,6 +137,7 @@ public:
|
|||
setReplyMarkup(markup);
|
||||
}
|
||||
void updateForwardedInfo(const MTPMessageFwdHeader *fwd) override;
|
||||
void contributeToSlowmode(TimeId realDate = 0) override;
|
||||
|
||||
void addToUnreadMentions(UnreadMentionType type) override;
|
||||
void eraseFromUnreadMentions() override;
|
||||
|
|
|
@ -3821,9 +3821,7 @@ void MainWidget::feedUpdates(const MTPUpdates &updates, uint64 randomId) {
|
|||
sent.text,
|
||||
TextUtilities::EntitiesFromMTP(list.value_or_empty())
|
||||
}, d.vmedia());
|
||||
if (const auto channel = item->history()->peer->asChannel()) {
|
||||
channel->growSlowmodeLastMessage(d.vdate().v);
|
||||
}
|
||||
item->contributeToSlowmode(d.vdate().v);
|
||||
if (!wasAlready) {
|
||||
item->indexAsNewItem();
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue