Merge v4.14.13

# Conflicts:
#	Telegram/Resources/winrc/Telegram.rc
#	Telegram/Resources/winrc/Updater.rc
#	Telegram/SourceFiles/core/version.h
#	Telegram/SourceFiles/history/view/controls/history_view_voice_record_bar.cpp
#	Telegram/SourceFiles/history/view/media/history_view_photo.cpp
#	Telegram/SourceFiles/history/view/reactions/history_view_reactions_selector.cpp
#	Telegram/SourceFiles/mainwidget.cpp
#	Telegram/lib_ui
This commit is contained in:
ZavaruKitsu
2024-02-03 23:20:50 +03:00
251 changed files with 6957 additions and 2361 deletions
+76 -7
View File
@@ -39,6 +39,29 @@ using UpdateFlag = Data::PeerUpdate::Flag;
BotInfo::BotInfo() = default;
Data::LastseenStatus LastseenFromMTP(
const MTPUserStatus &status,
Data::LastseenStatus currentStatus) {
return status.match([](const MTPDuserStatusEmpty &data) {
return Data::LastseenStatus::LongAgo();
}, [&](const MTPDuserStatusRecently &data) {
return currentStatus.isLocalOnlineValue()
? Data::LastseenStatus::OnlineTill(
currentStatus.onlineTill(),
true,
data.is_by_me())
: Data::LastseenStatus::Recently(data.is_by_me());
}, [](const MTPDuserStatusLastWeek &data) {
return Data::LastseenStatus::WithinWeek(data.is_by_me());
}, [](const MTPDuserStatusLastMonth &data) {
return Data::LastseenStatus::WithinMonth(data.is_by_me());
}, [](const MTPDuserStatusOnline& data) {
return Data::LastseenStatus::OnlineTill(data.vexpires().v);
}, [](const MTPDuserStatusOffline &data) {
return Data::LastseenStatus::OnlineTill(data.vwas_online().v);
});
}
UserData::UserData(not_null<Data::Session*> owner, PeerId id)
: PeerData(owner, id)
, _flags((id == owner->session().userPeerId()) ? Flag::Self : Flag(0)) {
@@ -59,6 +82,19 @@ void UserData::setIsContact(bool is) {
}
}
Data::LastseenStatus UserData::lastseen() const {
return _lastseen;
}
bool UserData::updateLastseen(Data::LastseenStatus value) {
if (_lastseen == value) {
return false;
}
_lastseen = value;
owner().maybeStopWatchForOffline(this);
return true;
}
// see Serialize::readPeer as well
void UserData::setPhoto(const MTPUserProfilePhoto &photo) {
photo.match([&](const MTPDuserProfilePhoto &data) {
@@ -276,11 +312,14 @@ void UserData::setNameOrPhone(const QString &newNameOrPhone) {
void UserData::madeAction(TimeId when) {
if (isBot() || isServiceUser() || when <= 0) {
return;
} else if (onlineTill <= 0 && -onlineTill < when) {
onlineTill = -when - kSetOnlineAfterActivity;
session().changes().peerUpdated(this, UpdateFlag::OnlineStatus);
} else if (onlineTill > 0 && onlineTill < when + 1) {
onlineTill = when + kSetOnlineAfterActivity;
}
const auto till = lastseen().onlineTill();
if (till < when + 1
&& updateLastseen(
Data::LastseenStatus::OnlineTill(
when + kSetOnlineAfterActivity,
!till || lastseen().isLocalOnlineValue(),
lastseen().isHiddenByMe()))) {
session().changes().peerUpdated(this, UpdateFlag::OnlineStatus);
}
}
@@ -368,6 +407,26 @@ bool UserData::hasStoriesHidden() const {
return (flags() & UserDataFlag::StoriesHidden);
}
bool UserData::someRequirePremiumToWrite() const {
return (flags() & UserDataFlag::SomeRequirePremiumToWrite);
}
bool UserData::meRequiresPremiumToWrite() const {
return (flags() & UserDataFlag::MeRequiresPremiumToWrite);
}
bool UserData::requirePremiumToWriteKnown() const {
return (flags() & UserDataFlag::RequirePremiumToWriteKnown);
}
bool UserData::canSendIgnoreRequirePremium() const {
return !isInaccessible() && !isRepliesChat();
}
bool UserData::readDatesPrivate() const {
return (flags() & UserDataFlag::ReadDatesPrivate);
}
bool UserData::canAddContact() const {
return canShareThisContact() && !isContact();
}
@@ -470,15 +529,25 @@ void ApplyUserUpdate(not_null<UserData*> user, const MTPDuserFull &update) {
| Flag::PhoneCallsPrivate
| Flag::CanReceiveGifts
| Flag::CanPinMessages
| Flag::VoiceMessagesForbidden;
| Flag::VoiceMessagesForbidden
| Flag::ReadDatesPrivate
| Flag::RequirePremiumToWriteKnown
| Flag::MeRequiresPremiumToWrite;
user->setFlags((user->flags() & ~mask)
| (update.is_phone_calls_private() ? Flag::PhoneCallsPrivate : Flag())
| (update.is_phone_calls_private()
? Flag::PhoneCallsPrivate
: Flag())
| (update.is_phone_calls_available() ? Flag::HasPhoneCalls : Flag())
| (canReceiveGifts ? Flag::CanReceiveGifts : Flag())
| (update.is_can_pin_message() ? Flag::CanPinMessages : Flag())
| (update.is_blocked() ? Flag::Blocked : Flag())
| (update.is_voice_messages_forbidden()
? Flag::VoiceMessagesForbidden
: Flag())
| (update.is_read_dates_private() ? Flag::ReadDatesPrivate : Flag())
| Flag::RequirePremiumToWriteKnown
| (update.is_contact_require_premium()
? Flag::MeRequiresPremiumToWrite
: Flag()));
user->setIsBlocked(update.is_blocked());
user->setCallsStatus(update.is_phone_calls_private()