2
0
mirror of https://github.com/telegramdesktop/tdesktop synced 2025-09-01 06:55:58 +00:00

Update API scheme on layer 172.

This commit is contained in:
John Preston
2024-01-15 11:36:17 +04:00
parent 1cfad14437
commit 6e31993777
22 changed files with 343 additions and 245 deletions

View File

@@ -34,37 +34,26 @@ using UpdateFlag = Data::PeerUpdate::Flag;
BotInfo::BotInfo() = default;
int RecentOnlineAfter(TimeId when) {
return (when > 0) ? (-when - kSetOnlineAfterActivity) : 0;
}
bool IsRecentOnlineValue(int value) {
return (value < -kSetOnlineAfterActivity);
}
bool IsRecentOnline(int value, TimeId now) {
return IsRecentOnlineValue(value) && (now < -value);
}
int OnlineTillFromMTP(
Data::LastseenStatus LastseenFromMTP(
const MTPUserStatus &status,
int currentOnlineTill) {
return status.match([](const MTPDuserStatusEmpty &) {
return kOnlineEmpty;
}, [&](const MTPDuserStatusRecently&) {
return IsRecentOnlineValue(currentOnlineTill)
? currentOnlineTill
: kOnlineRecently;
}, [](const MTPDuserStatusLastWeek &) {
return kOnlineLastWeek;
}, [](const MTPDuserStatusLastMonth &) {
return kOnlineLastMonth;
}, [](const MTPDuserStatusHidden &) {
return kOnlineHidden;
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.vexpires().v;
return Data::LastseenStatus::OnlineTill(data.vexpires().v);
}, [](const MTPDuserStatusOffline &data) {
return data.vwas_online().v;
return Data::LastseenStatus::OnlineTill(data.vwas_online().v);
});
}
@@ -88,6 +77,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) {
@@ -305,11 +307,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);
}
}