Calculate was_online_local/was_online_remote.
GitOrigin-RevId: 774c9172e2274f998daf244dcb8bfdea7c4c2448
This commit is contained in:
parent
c53eaf92a7
commit
64c7362fd8
@ -25,6 +25,7 @@
|
|||||||
#include "td/telegram/MessagesManager.h"
|
#include "td/telegram/MessagesManager.h"
|
||||||
#include "td/telegram/misc.h"
|
#include "td/telegram/misc.h"
|
||||||
#include "td/telegram/net/NetQuery.h"
|
#include "td/telegram/net/NetQuery.h"
|
||||||
|
#include "td/telegram/NotificationManager.h"
|
||||||
#include "td/telegram/Photo.h"
|
#include "td/telegram/Photo.h"
|
||||||
#include "td/telegram/Photo.hpp"
|
#include "td/telegram/Photo.hpp"
|
||||||
#include "td/telegram/SecretChatActor.h"
|
#include "td/telegram/SecretChatActor.h"
|
||||||
@ -2330,6 +2331,12 @@ ContactsManager::ContactsManager(Td *td, ActorShared<> parent) : td_(td), parent
|
|||||||
G()->td_db()->get_binlog_pmc()->erase("saved_contact_count");
|
G()->td_db()->get_binlog_pmc()->erase("saved_contact_count");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
was_online_local_ = to_integer<int32>(G()->td_db()->get_binlog_pmc()->get("my_was_online_local"));
|
||||||
|
was_online_remote_ = to_integer<int32>(G()->td_db()->get_binlog_pmc()->get("my_was_online_remote"));
|
||||||
|
if (was_online_local_ >= G()->unix_time_cached() && !td_->is_online()) {
|
||||||
|
was_online_local_ = G()->unix_time_cached() - 1;
|
||||||
|
}
|
||||||
|
|
||||||
user_online_timeout_.set_callback(on_user_online_timeout_callback);
|
user_online_timeout_.set_callback(on_user_online_timeout_callback);
|
||||||
user_online_timeout_.set_callback_data(static_cast<void *>(this));
|
user_online_timeout_.set_callback_data(static_cast<void *>(this));
|
||||||
|
|
||||||
@ -3075,6 +3082,10 @@ void ContactsManager::set_my_id(UserId my_id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ContactsManager::set_my_online_status(bool is_online, bool send_update, bool is_local) {
|
void ContactsManager::set_my_online_status(bool is_online, bool send_update, bool is_local) {
|
||||||
|
if (td_->auth_manager_->is_bot()) {
|
||||||
|
return; // just in case
|
||||||
|
}
|
||||||
|
|
||||||
auto my_id = get_my_id();
|
auto my_id = get_my_id();
|
||||||
User *u = get_user_force(my_id);
|
User *u = get_user_force(my_id);
|
||||||
if (u != nullptr) {
|
if (u != nullptr) {
|
||||||
@ -3104,6 +3115,12 @@ void ContactsManager::set_my_online_status(bool is_online, bool send_update, boo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (was_online_local_ != new_online) {
|
||||||
|
was_online_local_ = new_online;
|
||||||
|
VLOG(notifications) << "Set was_online_local to " << was_online_local_;
|
||||||
|
G()->td_db()->get_binlog_pmc()->set("my_was_online_local", to_string(was_online_local_));
|
||||||
|
}
|
||||||
|
|
||||||
if (send_update) {
|
if (send_update) {
|
||||||
update_user(u, my_id);
|
update_user(u, my_id);
|
||||||
}
|
}
|
||||||
@ -3111,15 +3128,11 @@ void ContactsManager::set_my_online_status(bool is_online, bool send_update, boo
|
|||||||
}
|
}
|
||||||
|
|
||||||
ContactsManager::MyOnlineStatusInfo ContactsManager::get_my_online_status() const {
|
ContactsManager::MyOnlineStatusInfo ContactsManager::get_my_online_status() const {
|
||||||
auto my_id = get_my_id();
|
|
||||||
const User *u = get_user(my_id);
|
|
||||||
int32 was_online = my_was_online_local_ != 0 ? my_was_online_local_ : (u == nullptr ? 0 : u->was_online);
|
|
||||||
|
|
||||||
MyOnlineStatusInfo status_info;
|
MyOnlineStatusInfo status_info;
|
||||||
status_info.is_online_local = td_->is_online();
|
status_info.is_online_local = td_->is_online();
|
||||||
status_info.is_online_remote = false; // TODO
|
status_info.is_online_remote = was_online_remote_ > G()->unix_time_cached();
|
||||||
status_info.was_online_local = was_online; // TODO
|
status_info.was_online_local = was_online_local_;
|
||||||
status_info.was_online_remote = was_online; // TODO
|
status_info.was_online_remote = was_online_remote_;
|
||||||
|
|
||||||
return status_info;
|
return status_info;
|
||||||
}
|
}
|
||||||
@ -4890,8 +4903,12 @@ void ContactsManager::on_get_contacts_finished(size_t expected_contact_count) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ContactsManager::on_get_contacts_statuses(vector<tl_object_ptr<telegram_api::contactStatus>> &&statuses) {
|
void ContactsManager::on_get_contacts_statuses(vector<tl_object_ptr<telegram_api::contactStatus>> &&statuses) {
|
||||||
|
auto my_user_id = get_my_id();
|
||||||
for (auto &status : statuses) {
|
for (auto &status : statuses) {
|
||||||
on_update_user_online(UserId(status->user_id_), std::move(status->status_));
|
UserId user_id(status->user_id_);
|
||||||
|
if (user_id != my_user_id) {
|
||||||
|
on_update_user_online(user_id, std::move(status->status_));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
save_next_contacts_sync_date();
|
save_next_contacts_sync_date();
|
||||||
}
|
}
|
||||||
@ -6741,8 +6758,18 @@ void ContactsManager::on_update_user_online(UserId user_id, tl_object_ptr<telegr
|
|||||||
|
|
||||||
User *u = get_user_force(user_id);
|
User *u = get_user_force(user_id);
|
||||||
if (u != nullptr) {
|
if (u != nullptr) {
|
||||||
|
if (u->is_bot) {
|
||||||
|
LOG(ERROR) << "Receive updateUserStatus about bot " << user_id;
|
||||||
|
return;
|
||||||
|
}
|
||||||
on_update_user_online(u, user_id, std::move(status));
|
on_update_user_online(u, user_id, std::move(status));
|
||||||
update_user(u, user_id);
|
update_user(u, user_id);
|
||||||
|
|
||||||
|
if (user_id == get_my_id() && was_online_remote_ != u->was_online) { // only update was_online_remote_ from updateUserStatus
|
||||||
|
was_online_remote_ = u->was_online;
|
||||||
|
VLOG(notifications) << "Set was_online_remote to " << was_online_remote_;
|
||||||
|
G()->td_db()->get_binlog_pmc()->set("my_was_online_remote", to_string(was_online_remote_));
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
LOG(INFO) << "Ignore update user online about unknown " << user_id;
|
LOG(INFO) << "Ignore update user online about unknown " << user_id;
|
||||||
}
|
}
|
||||||
|
@ -1101,6 +1101,9 @@ class ContactsManager : public Actor {
|
|||||||
MultiPromiseActor load_contact_users_multipromise_;
|
MultiPromiseActor load_contact_users_multipromise_;
|
||||||
int32 saved_contact_count_ = -1;
|
int32 saved_contact_count_ = -1;
|
||||||
|
|
||||||
|
int32 was_online_local_ = 0;
|
||||||
|
int32 was_online_remote_ = 0;
|
||||||
|
|
||||||
bool are_imported_contacts_loaded_ = false;
|
bool are_imported_contacts_loaded_ = false;
|
||||||
vector<Promise<Unit>> load_imported_contacts_queries_;
|
vector<Promise<Unit>> load_imported_contacts_queries_;
|
||||||
MultiPromiseActor load_imported_contact_users_multipromise_;
|
MultiPromiseActor load_imported_contact_users_multipromise_;
|
||||||
|
@ -691,7 +691,7 @@ void UpdatesManager::on_get_updates(tl_object_ptr<telegram_api::Updates> &&updat
|
|||||||
}
|
}
|
||||||
case telegram_api::updateShort::ID: {
|
case telegram_api::updateShort::ID: {
|
||||||
auto update = move_tl_object_as<telegram_api::updateShort>(updates_ptr);
|
auto update = move_tl_object_as<telegram_api::updateShort>(updates_ptr);
|
||||||
LOG(DEBUG) << "Receive " << to_string(update);
|
LOG(DEBUG) << "Receive " << oneline(to_string(update));
|
||||||
if (!is_acceptable_update(update->update_.get())) {
|
if (!is_acceptable_update(update->update_.get())) {
|
||||||
LOG(ERROR) << "Receive unacceptable short update: " << td::oneline(to_string(update));
|
LOG(ERROR) << "Receive unacceptable short update: " << td::oneline(to_string(update));
|
||||||
return get_difference("unacceptable short update");
|
return get_difference("unacceptable short update");
|
||||||
|
Reference in New Issue
Block a user