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
+51 -11
View File
@@ -302,6 +302,16 @@ Session::Session(not_null<Main::Session*> session)
}
}, _lifetime);
_reactions->myTagRenamed(
) | rpl::start_with_next([=](const ReactionId &id) {
const auto i = _viewsByTag.find(id);
if (i != end(_viewsByTag)) {
for (const auto &view : i->second) {
notifyItemDataChange(view->data());
}
}
}, _lifetime);
Spellchecker::HighlightReady(
) | rpl::start_with_next([=](uint64 processId) {
highlightProcessDone(processId);
@@ -531,6 +541,8 @@ not_null<UserData*> Session::processUser(const MTPUser &data) {
| Flag::BotInlineGeo
| Flag::Premium
| Flag::Support
| Flag::SomeRequirePremiumToWrite
| Flag::RequirePremiumToWriteKnown
| (!minimal
? Flag::Contact
| Flag::MutualContact
@@ -551,10 +563,20 @@ not_null<UserData*> Session::processUser(const MTPUser &data) {
| (data.is_bot_inline_geo() ? Flag::BotInlineGeo : Flag())
| (data.is_premium() ? Flag::Premium : Flag())
| (data.is_support() ? Flag::Support : Flag())
| (data.is_contact_require_premium()
? (Flag::SomeRequirePremiumToWrite
| (result->someRequirePremiumToWrite()
? (result->requirePremiumToWriteKnown()
? Flag::RequirePremiumToWriteKnown
: Flag())
: Flag()))
: Flag())
| (!minimal
? (data.is_contact() ? Flag::Contact : Flag())
| (data.is_mutual_contact() ? Flag::MutualContact : Flag())
| (data.is_apply_min_photo() ? Flag() : Flag::DiscardMinPhoto)
| (data.is_apply_min_photo()
? Flag()
: Flag::DiscardMinPhoto)
| (data.is_stories_hidden() ? Flag::StoriesHidden : Flag())
: Flag());
result->setFlags((result->flags() & ~flagsMask) | flagsSet);
@@ -730,14 +752,9 @@ not_null<UserData*> Session::processUser(const MTPUser &data) {
}
if (status && !minimal) {
const auto oldOnlineTill = result->onlineTill;
const auto newOnlineTill = ApiWrap::OnlineTillFromStatus(
*status,
oldOnlineTill);
if (oldOnlineTill != newOnlineTill) {
result->onlineTill = newOnlineTill;
const auto lastseen = LastseenFromMTP(*status, result->lastseen());
if (result->updateLastseen(lastseen)) {
flags |= UpdateFlag::OnlineStatus;
session().data().maybeStopWatchForOffline(result);
}
}
@@ -1108,7 +1125,8 @@ void Session::watchForOffline(not_null<UserData*> user, TimeId now) {
if (!Data::IsUserOnline(user, now)) {
return;
}
const auto till = user->onlineTill;
const auto lastseen = user->lastseen();
const auto till = lastseen.onlineTill();
const auto &[i, ok] = _watchingForOffline.emplace(user, till);
if (!ok) {
if (i->second == till) {
@@ -1116,7 +1134,7 @@ void Session::watchForOffline(not_null<UserData*> user, TimeId now) {
}
i->second = till;
}
const auto timeout = Data::OnlineChangeTimeout(till, now);
const auto timeout = Data::OnlineChangeTimeout(lastseen, now);
const auto fires = _watchForOfflineTimer.isActive()
? _watchForOfflineTimer.remainingTime()
: -1;
@@ -4451,7 +4469,7 @@ void Session::serviceNotification(
MTPstring(), // username
MTP_string("42777"),
MTP_userProfilePhotoEmpty(),
MTP_userStatusRecently(),
MTP_userStatusRecently(MTP_flags(0)),
MTPint(), // bot_info_version
MTPVector<MTPRestrictionReason>(),
MTPstring(), // bot_inline_placeholder
@@ -4664,6 +4682,28 @@ rpl::producer<not_null<PeerData*>> Session::peerDecorationsUpdated() const {
return _peerDecorationsUpdated.events();
}
void Session::viewTagsChanged(
not_null<ViewElement*> view,
std::vector<Data::ReactionId> &&was,
std::vector<Data::ReactionId> &&now) {
for (const auto &id : now) {
const auto i = ranges::remove(was, id);
if (i != end(was)) {
was.erase(i, end(was));
} else {
_viewsByTag[id].emplace(view);
}
}
for (const auto &id : was) {
const auto i = _viewsByTag.find(id);
if (i != end(_viewsByTag)
&& i->second.remove(view)
&& i->second.empty()) {
_viewsByTag.erase(i);
}
}
}
void Session::clearLocalStorage() {
_cache->close();
_cache->clear();