Add Chat.has_scheduled_messages flag.

GitOrigin-RevId: 6d7f211647c738d5912476232e8842c245d1f884
This commit is contained in:
levlam 2019-11-25 19:11:24 +03:00
parent 2a335089f9
commit 5b1d363918
6 changed files with 54 additions and 5 deletions

View File

@ -640,6 +640,7 @@ chatListArchive = ChatList;
//@is_pinned True, if the chat is pinned //@is_pinned True, if the chat is pinned
//@is_marked_as_unread True, if the chat is marked as unread //@is_marked_as_unread True, if the chat is marked as unread
//@is_sponsored True, if the chat is sponsored by the user's MTProxy server //@is_sponsored True, if the chat is sponsored by the user's MTProxy server
//@has_scheduled_messages True, if the chat has scheduled messages
//@can_be_deleted_only_for_self True, if the chat messages can be deleted only for the current user while other users will continue to see the messages //@can_be_deleted_only_for_self True, if the chat messages can be deleted only for the current user while other users will continue to see the messages
//@can_be_deleted_for_all_users True, if the chat messages can be deleted for all users //@can_be_deleted_for_all_users True, if the chat messages can be deleted for all users
//@can_be_reported True, if the chat can be reported to Telegram moderators through reportChat //@can_be_reported True, if the chat can be reported to Telegram moderators through reportChat
@ -654,7 +655,7 @@ chatListArchive = ChatList;
//@reply_markup_message_id Identifier of the message from which reply markup needs to be used; 0 if there is no default custom reply markup in the chat //@reply_markup_message_id Identifier of the message from which reply markup needs to be used; 0 if there is no default custom reply markup in the chat
//@draft_message A draft of a message in the chat; may be null //@draft_message A draft of a message in the chat; may be null
//@client_data Contains client-specific data associated with the chat. (For example, the chat position or local chat notification settings can be stored here.) Persistent if a message database is used //@client_data Contains client-specific data associated with the chat. (For example, the chat position or local chat notification settings can be stored here.) Persistent if a message database is used
chat id:int53 type:ChatType chat_list:ChatList title:string photo:chatPhoto permissions:chatPermissions last_message:message order:int64 is_pinned:Bool is_marked_as_unread:Bool is_sponsored:Bool can_be_deleted_only_for_self:Bool can_be_deleted_for_all_users:Bool can_be_reported:Bool default_disable_notification:Bool unread_count:int32 last_read_inbox_message_id:int53 last_read_outbox_message_id:int53 unread_mention_count:int32 notification_settings:chatNotificationSettings action_bar:ChatActionBar pinned_message_id:int53 reply_markup_message_id:int53 draft_message:draftMessage client_data:string = Chat; chat id:int53 type:ChatType chat_list:ChatList title:string photo:chatPhoto permissions:chatPermissions last_message:message order:int64 is_pinned:Bool is_marked_as_unread:Bool is_sponsored:Bool has_scheduled_messages:Bool can_be_deleted_only_for_self:Bool can_be_deleted_for_all_users:Bool can_be_reported:Bool default_disable_notification:Bool unread_count:int32 last_read_inbox_message_id:int53 last_read_outbox_message_id:int53 unread_mention_count:int32 notification_settings:chatNotificationSettings action_bar:ChatActionBar pinned_message_id:int53 reply_markup_message_id:int53 draft_message:draftMessage client_data:string = Chat;
//@description Represents a list of chats @chat_ids List of chat identifiers //@description Represents a list of chats @chat_ids List of chat identifiers
chats chat_ids:vector<int53> = Chats; chats chat_ids:vector<int53> = Chats;
@ -2741,6 +2742,9 @@ updateChatIsMarkedAsUnread chat_id:int53 is_marked_as_unread:Bool = Update;
//@description A chat's is_sponsored field has changed @chat_id Chat identifier @is_sponsored New value of is_sponsored @order New value of chat order //@description A chat's is_sponsored field has changed @chat_id Chat identifier @is_sponsored New value of is_sponsored @order New value of chat order
updateChatIsSponsored chat_id:int53 is_sponsored:Bool order:int64 = Update; updateChatIsSponsored chat_id:int53 is_sponsored:Bool order:int64 = Update;
//@description A chat's has_scheduled_messages field has changed @chat_id Chat identifier @has_scheduled_messages New value of has_scheduled_messages
updateChatHasScheduledMessages chat_id:int53 has_scheduled_messages:Bool = Update;
//@description The value of the default disable_notification parameter, used when a message is sent to the chat, was changed @chat_id Chat identifier @default_disable_notification The new default_disable_notification value //@description The value of the default disable_notification parameter, used when a message is sent to the chat, was changed @chat_id Chat identifier @default_disable_notification The new default_disable_notification value
updateChatDefaultDisableNotification chat_id:int53 default_disable_notification:Bool = Update; updateChatDefaultDisableNotification chat_id:int53 default_disable_notification:Bool = Update;

Binary file not shown.

View File

@ -8137,6 +8137,8 @@ void ContactsManager::on_get_user_full(tl_object_ptr<telegram_api::userFull> &&u
} }
td_->messages_manager_->on_update_dialog_folder_id(DialogId(user_id), folder_id); td_->messages_manager_->on_update_dialog_folder_id(DialogId(user_id), folder_id);
} }
td_->messages_manager_->on_update_dialog_has_scheduled_messages(
DialogId(user_id), (user_full->flags_ & USER_FULL_FLAG_HAS_SCHEDULED_MESSAGES) != 0);
UserFull *user = add_user_full(user_id); UserFull *user = add_user_full(user_id);
user->expires_at = Time::now() + USER_FULL_EXPIRE_TIME; user->expires_at = Time::now() + USER_FULL_EXPIRE_TIME;
@ -8355,6 +8357,8 @@ void ContactsManager::on_get_chat_full(tl_object_ptr<telegram_api::ChatFull> &&c
} }
td_->messages_manager_->on_update_dialog_folder_id(DialogId(chat_id), folder_id); td_->messages_manager_->on_update_dialog_folder_id(DialogId(chat_id), folder_id);
} }
td_->messages_manager_->on_update_dialog_has_scheduled_messages(
DialogId(chat_id), (chat_full->flags_ & CHAT_FULL_FLAG_HAS_SCHEDULED_MESSAGES) != 0);
ChatFull *chat = add_chat_full(chat_id); ChatFull *chat = add_chat_full(chat_id);
on_update_chat_full_invite_link(chat, std::move(chat_full->exported_invite_)); on_update_chat_full_invite_link(chat, std::move(chat_full->exported_invite_));
@ -8495,6 +8499,8 @@ void ContactsManager::on_get_chat_full(tl_object_ptr<telegram_api::ChatFull> &&c
} }
td_->messages_manager_->on_update_dialog_folder_id(DialogId(channel_id), folder_id); td_->messages_manager_->on_update_dialog_folder_id(DialogId(channel_id), folder_id);
} }
td_->messages_manager_->on_update_dialog_has_scheduled_messages(
DialogId(channel_id), (channel_full->flags_ & CHANNEL_FULL_FLAG_HAS_SCHEDULED_MESSAGES) != 0);
if (participant_count >= 190) { if (participant_count >= 190) {
int32 online_member_count = 0; int32 online_member_count = 0;

View File

@ -882,6 +882,7 @@ class ContactsManager : public Actor {
static constexpr int32 USER_FULL_FLAG_HAS_PINNED_MESSAGE = 1 << 6; static constexpr int32 USER_FULL_FLAG_HAS_PINNED_MESSAGE = 1 << 6;
static constexpr int32 USER_FULL_FLAG_CAN_PIN_MESSAGE = 1 << 7; static constexpr int32 USER_FULL_FLAG_CAN_PIN_MESSAGE = 1 << 7;
static constexpr int32 USER_FULL_FLAG_HAS_FOLDER_ID = 1 << 11; static constexpr int32 USER_FULL_FLAG_HAS_FOLDER_ID = 1 << 11;
static constexpr int32 USER_FULL_FLAG_HAS_SCHEDULED_MESSAGES = 1 << 12;
static constexpr int32 CHAT_FLAG_USER_IS_CREATOR = 1 << 0; static constexpr int32 CHAT_FLAG_USER_IS_CREATOR = 1 << 0;
static constexpr int32 CHAT_FLAG_USER_WAS_KICKED = 1 << 1; static constexpr int32 CHAT_FLAG_USER_WAS_KICKED = 1 << 1;
@ -892,6 +893,7 @@ class ContactsManager : public Actor {
static constexpr int32 CHAT_FLAG_WAS_MIGRATED = 1 << 6; static constexpr int32 CHAT_FLAG_WAS_MIGRATED = 1 << 6;
static constexpr int32 CHAT_FULL_FLAG_HAS_PINNED_MESSAGE = 1 << 6; static constexpr int32 CHAT_FULL_FLAG_HAS_PINNED_MESSAGE = 1 << 6;
static constexpr int32 CHAT_FULL_FLAG_HAS_SCHEDULED_MESSAGES = 1 << 8;
static constexpr int32 CHAT_FULL_FLAG_HAS_FOLDER_ID = 1 << 11; static constexpr int32 CHAT_FULL_FLAG_HAS_FOLDER_ID = 1 << 11;
static constexpr int32 CHANNEL_FLAG_USER_IS_CREATOR = 1 << 0; static constexpr int32 CHANNEL_FLAG_USER_IS_CREATOR = 1 << 0;
@ -933,6 +935,7 @@ class ContactsManager : public Actor {
static constexpr int32 CHANNEL_FULL_FLAG_CAN_SET_LOCATION = 1 << 16; static constexpr int32 CHANNEL_FULL_FLAG_CAN_SET_LOCATION = 1 << 16;
static constexpr int32 CHANNEL_FULL_FLAG_HAS_SLOW_MODE_DELAY = 1 << 17; static constexpr int32 CHANNEL_FULL_FLAG_HAS_SLOW_MODE_DELAY = 1 << 17;
static constexpr int32 CHANNEL_FULL_FLAG_HAS_SLOW_MODE_NEXT_SEND_DATE = 1 << 18; static constexpr int32 CHANNEL_FULL_FLAG_HAS_SLOW_MODE_NEXT_SEND_DATE = 1 << 18;
static constexpr int32 CHANNEL_FULL_FLAG_HAS_SCHEDULED_MESSAGES = 1 << 19;
static constexpr int32 CHAT_INVITE_FLAG_IS_CHANNEL = 1 << 0; static constexpr int32 CHAT_INVITE_FLAG_IS_CHANNEL = 1 << 0;
static constexpr int32 CHAT_INVITE_FLAG_IS_BROADCAST = 1 << 1; static constexpr int32 CHAT_INVITE_FLAG_IS_BROADCAST = 1 << 1;

View File

@ -4170,6 +4170,7 @@ void MessagesManager::Dialog::store(StorerT &storer) const {
STORE_FLAG(can_block_user); STORE_FLAG(can_block_user);
STORE_FLAG(can_share_phone_number); STORE_FLAG(can_share_phone_number);
STORE_FLAG(can_report_location); STORE_FLAG(can_report_location);
STORE_FLAG(has_scheduled_messages);
END_STORE_FLAGS(); END_STORE_FLAGS();
} }
@ -4328,6 +4329,7 @@ void MessagesManager::Dialog::parse(ParserT &parser) {
PARSE_FLAG(can_block_user); PARSE_FLAG(can_block_user);
PARSE_FLAG(can_share_phone_number); PARSE_FLAG(can_share_phone_number);
PARSE_FLAG(can_report_location); PARSE_FLAG(can_report_location);
PARSE_FLAG(has_scheduled_messages);
END_PARSE_FLAGS(); END_PARSE_FLAGS();
} else { } else {
is_folder_id_inited = false; is_folder_id_inited = false;
@ -14540,10 +14542,10 @@ td_api::object_ptr<td_api::chat> MessagesManager::get_chat_object(const Dialog *
get_chat_photo_object(td_->file_manager_.get(), get_dialog_photo(d->dialog_id)), get_chat_photo_object(td_->file_manager_.get(), get_dialog_photo(d->dialog_id)),
get_dialog_permissions(d->dialog_id).get_chat_permissions_object(), get_dialog_permissions(d->dialog_id).get_chat_permissions_object(),
get_message_object(d->dialog_id, get_message(d, d->last_message_id)), get_dialog_public_order(d), get_message_object(d->dialog_id, get_message(d, d->last_message_id)), get_dialog_public_order(d),
d->pinned_order != DEFAULT_ORDER, d->is_marked_as_unread, d->order == SPONSORED_DIALOG_ORDER, can_delete_for_self, d->pinned_order != DEFAULT_ORDER, d->is_marked_as_unread, d->order == SPONSORED_DIALOG_ORDER,
can_delete_for_all_users, can_report_dialog(d->dialog_id), d->notification_settings.silent_send_message, d->has_scheduled_messages, can_delete_for_self, can_delete_for_all_users, can_report_dialog(d->dialog_id),
d->server_unread_count + d->local_unread_count, d->last_read_inbox_message_id.get(), d->notification_settings.silent_send_message, d->server_unread_count + d->local_unread_count,
d->last_read_outbox_message_id.get(), d->unread_mention_count, d->last_read_inbox_message_id.get(), d->last_read_outbox_message_id.get(), d->unread_mention_count,
get_chat_notification_settings_object(&d->notification_settings), get_chat_action_bar_object(d), get_chat_notification_settings_object(&d->notification_settings), get_chat_action_bar_object(d),
d->pinned_message_id.get(), d->reply_markup_message_id.get(), get_draft_message_object(d->draft_message), d->pinned_message_id.get(), d->reply_markup_message_id.get(), get_draft_message_object(d->draft_message),
d->client_data); d->client_data);
@ -22155,6 +22157,35 @@ void MessagesManager::set_dialog_pinned_message_id(Dialog *d, MessageId pinned_m
make_tl_object<td_api::updateChatPinnedMessage>(d->dialog_id.get(), pinned_message_id.get())); make_tl_object<td_api::updateChatPinnedMessage>(d->dialog_id.get(), pinned_message_id.get()));
} }
void MessagesManager::on_update_dialog_has_scheduled_messages(DialogId dialog_id, bool has_scheduled_messages) {
if (!dialog_id.is_valid()) {
LOG(ERROR) << "Receive has_scheduled_messages in invalid " << dialog_id;
return;
}
auto d = get_dialog_force(dialog_id);
if (d == nullptr) {
// nothing to do
return;
}
if (d->has_scheduled_messages != has_scheduled_messages) {
set_dialog_has_scheduled_messages(d, has_scheduled_messages);
}
}
void MessagesManager::set_dialog_has_scheduled_messages(Dialog *d, bool has_scheduled_messages) {
CHECK(d != nullptr);
CHECK(d->has_scheduled_messages != has_scheduled_messages);
d->has_scheduled_messages = has_scheduled_messages;
on_dialog_updated(d->dialog_id, "set_dialog_has_scheduled_messages");
LOG(INFO) << "Set " << d->dialog_id << " has_scheduled_messages to " << has_scheduled_messages;
LOG_CHECK(d->is_update_new_chat_sent) << "Wrong " << d->dialog_id << " in set_dialog_has_scheduled_messages";
send_closure(G()->td(), &Td::send_update,
td_api::make_object<td_api::updateChatHasScheduledMessages>(d->dialog_id.get(), has_scheduled_messages));
}
void MessagesManager::on_update_dialog_folder_id(DialogId dialog_id, FolderId folder_id) { void MessagesManager::on_update_dialog_folder_id(DialogId dialog_id, FolderId folder_id) {
auto d = get_dialog_force(dialog_id); auto d = get_dialog_force(dialog_id);
if (d == nullptr) { if (d == nullptr) {

View File

@ -285,6 +285,8 @@ class MessagesManager : public Actor {
void on_update_dialog_pinned_message_id(DialogId dialog_id, MessageId pinned_message_id); void on_update_dialog_pinned_message_id(DialogId dialog_id, MessageId pinned_message_id);
void on_update_dialog_has_scheduled_messages(DialogId dialog_id, bool has_scheduled_messages);
void on_update_dialog_folder_id(DialogId dialog_id, FolderId folder_id); void on_update_dialog_folder_id(DialogId dialog_id, FolderId folder_id);
void on_update_service_notification(tl_object_ptr<telegram_api::updateServiceNotification> &&update, void on_update_service_notification(tl_object_ptr<telegram_api::updateServiceNotification> &&update,
@ -1080,6 +1082,7 @@ class MessagesManager : public Actor {
bool is_folder_id_inited = false; bool is_folder_id_inited = false;
bool need_repair_server_unread_count = false; bool need_repair_server_unread_count = false;
bool is_marked_as_unread = false; bool is_marked_as_unread = false;
bool has_scheduled_messages = false;
bool increment_view_counter = false; bool increment_view_counter = false;
@ -1875,6 +1878,8 @@ class MessagesManager : public Actor {
void set_dialog_pinned_message_id(Dialog *d, MessageId pinned_message_id); void set_dialog_pinned_message_id(Dialog *d, MessageId pinned_message_id);
void set_dialog_has_scheduled_messages(Dialog *d, bool has_scheduled_messages);
void set_dialog_folder_id(Dialog *d, FolderId folder_id); void set_dialog_folder_id(Dialog *d, FolderId folder_id);
void toggle_dialog_is_pinned_on_server(DialogId dialog_id, bool is_pinned, uint64 logevent_id); void toggle_dialog_is_pinned_on_server(DialogId dialog_id, bool is_pinned, uint64 logevent_id);