Add document contents to pushMessageContent.
GitOrigin-RevId: 5baa4853f4e47d9f50f23ca74ebbed0369f17558
This commit is contained in:
parent
46a0b0036d
commit
082ba9e020
@ -1938,8 +1938,11 @@ checkChatUsernameResultPublicGroupsUnavailable = CheckChatUsernameResult;
|
|||||||
//@description A general message with hidden content @is_pinned True, if the message is a pinned message with the specified content
|
//@description A general message with hidden content @is_pinned True, if the message is a pinned message with the specified content
|
||||||
pushMessageContentHidden is_pinned:Bool = PushMessageContent;
|
pushMessageContentHidden is_pinned:Bool = PushMessageContent;
|
||||||
|
|
||||||
//@description An animation message (GIF-style) @is_pinned True, if the message is a pinned message with the specified content
|
//@description An animation message (GIF-style) @animation Message content; may be null @caption Animation caption @is_pinned True, if the message is a pinned message with the specified content
|
||||||
pushMessageContentAnimation is_pinned:Bool = PushMessageContent;
|
pushMessageContentAnimation animation:animation caption:string is_pinned:Bool = PushMessageContent;
|
||||||
|
|
||||||
|
//@description An audio message @audio Message content; may be null @caption Audio caption @is_pinned True, if the message is a pinned message with the specified content
|
||||||
|
pushMessageContentAudio audio:audio caption:string is_pinned:Bool = PushMessageContent;
|
||||||
|
|
||||||
//@description A message with a user contact @name Contact's name @is_pinned True, if the message is a pinned message with the specified content
|
//@description A message with a user contact @name Contact's name @is_pinned True, if the message is a pinned message with the specified content
|
||||||
pushMessageContentContact name:string is_pinned:Bool = PushMessageContent;
|
pushMessageContentContact name:string is_pinned:Bool = PushMessageContent;
|
||||||
@ -1947,8 +1950,8 @@ pushMessageContentContact name:string is_pinned:Bool = PushMessageContent;
|
|||||||
//@description A contact has registered with Telegram
|
//@description A contact has registered with Telegram
|
||||||
pushMessageContentContactRegistered = PushMessageContent;
|
pushMessageContentContactRegistered = PushMessageContent;
|
||||||
|
|
||||||
//@description A document message (general file) @is_pinned True, if the message is a pinned message with the specified content
|
//@description A document message (a general file) @document Message content; may be null @caption Document caption @is_pinned True, if the message is a pinned message with the specified content
|
||||||
pushMessageContentDocument is_pinned:Bool = PushMessageContent;
|
pushMessageContentDocument document:document caption:string is_pinned:Bool = PushMessageContent;
|
||||||
|
|
||||||
//@description A message with a game @title Game title @is_pinned True, if the message is a pinned message with the specified content
|
//@description A message with a game @title Game title @is_pinned True, if the message is a pinned message with the specified content
|
||||||
pushMessageContentGame title:string is_pinned:Bool = PushMessageContent;
|
pushMessageContentGame title:string is_pinned:Bool = PushMessageContent;
|
||||||
@ -1971,20 +1974,20 @@ pushMessageContentPoll question:string is_pinned:Bool = PushMessageContent;
|
|||||||
//@description A screenshot of a message in the chat has been taken
|
//@description A screenshot of a message in the chat has been taken
|
||||||
pushMessageContentScreenshotTaken = PushMessageContent;
|
pushMessageContentScreenshotTaken = PushMessageContent;
|
||||||
|
|
||||||
//@description A message with a sticker @emoji Emoji corresponding to the sticker; may be empty @is_pinned True, if the message is a pinned message with the specified content
|
//@description A message with a sticker @sticker Message content; may be null @emoji Emoji corresponding to the sticker; may be empty @is_pinned True, if the message is a pinned message with the specified content
|
||||||
pushMessageContentSticker emoji:string is_pinned:Bool = PushMessageContent;
|
pushMessageContentSticker sticker:sticker emoji:string is_pinned:Bool = PushMessageContent;
|
||||||
|
|
||||||
//@description A text message @text Message text @is_pinned True, if the message is a pinned message with the specified content
|
//@description A text message @text Message text @is_pinned True, if the message is a pinned message with the specified content
|
||||||
pushMessageContentText text:string is_pinned:Bool = PushMessageContent;
|
pushMessageContentText text:string is_pinned:Bool = PushMessageContent;
|
||||||
|
|
||||||
//@description A video message @is_secret True, if the video is secret @is_pinned True, if the message is a pinned message with the specified content
|
//@description A video message @video Message content; may be null @caption Video caption @is_secret True, if the video is secret @is_pinned True, if the message is a pinned message with the specified content
|
||||||
pushMessageContentVideo is_secret:Bool is_pinned:Bool = PushMessageContent;
|
pushMessageContentVideo video:video caption:string is_secret:Bool is_pinned:Bool = PushMessageContent;
|
||||||
|
|
||||||
//@description A video note message @is_pinned True, if the message is a pinned message with the specified content
|
//@description A video note message @video_note Message content; may be null @is_pinned True, if the message is a pinned message with the specified content
|
||||||
pushMessageContentVideoNote is_pinned:Bool = PushMessageContent;
|
pushMessageContentVideoNote video_note:videoNote is_pinned:Bool = PushMessageContent;
|
||||||
|
|
||||||
//@description A voice note message @is_pinned True, if the message is a pinned message with the specified content
|
//@description A voice note message @voice_note Message content; may be null @caption Voice note caption @is_pinned True, if the message is a pinned message with the specified content
|
||||||
pushMessageContentVoiceNote is_pinned:Bool = PushMessageContent;
|
pushMessageContentVoiceNote voice_note:voiceNote caption:string is_pinned:Bool = PushMessageContent;
|
||||||
|
|
||||||
//@description A newly created basic group
|
//@description A newly created basic group
|
||||||
pushMessageContentBasicGroupChatCreate = PushMessageContent;
|
pushMessageContentBasicGroupChatCreate = PushMessageContent;
|
||||||
|
Binary file not shown.
@ -23,6 +23,10 @@ struct Document {
|
|||||||
Document() = default;
|
Document() = default;
|
||||||
Document(Type type, FileId file_id) : type(type), file_id(file_id) {
|
Document(Type type, FileId file_id) : type(type), file_id(file_id) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool empty() const {
|
||||||
|
return type == Type::Unknown;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
StringBuilder &operator<<(StringBuilder &string_builder, const Document &document);
|
StringBuilder &operator<<(StringBuilder &string_builder, const Document &document);
|
||||||
|
@ -225,7 +225,7 @@ Document DocumentsManager::on_get_document(RemoteDocument remote_document, Dialo
|
|||||||
file_type = FileType::Encrypted;
|
file_type = FileType::Encrypted;
|
||||||
encryption_key = FileEncryptionKey{document->key_.as_slice(), document->iv_.as_slice()};
|
encryption_key = FileEncryptionKey{document->key_.as_slice(), document->iv_.as_slice()};
|
||||||
if (encryption_key.empty()) {
|
if (encryption_key.empty()) {
|
||||||
return {Document::Type::Unknown, FileId()};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (document_type != Document::Type::VoiceNote) {
|
if (document_type != Document::Type::VoiceNote) {
|
||||||
@ -246,7 +246,7 @@ Document DocumentsManager::on_get_document(RemoteDocument remote_document, Dialo
|
|||||||
auto r_http_url = parse_url(web_document->url_);
|
auto r_http_url = parse_url(web_document->url_);
|
||||||
if (r_http_url.is_error()) {
|
if (r_http_url.is_error()) {
|
||||||
LOG(ERROR) << "Can't parse URL " << web_document->url_;
|
LOG(ERROR) << "Can't parse URL " << web_document->url_;
|
||||||
return {Document::Type::Unknown, FileId()};
|
return {};
|
||||||
}
|
}
|
||||||
auto http_url = r_http_url.move_as_ok();
|
auto http_url = r_http_url.move_as_ok();
|
||||||
|
|
||||||
@ -263,7 +263,7 @@ Document DocumentsManager::on_get_document(RemoteDocument remote_document, Dialo
|
|||||||
|
|
||||||
if (web_document->url_.find('.') == string::npos) {
|
if (web_document->url_.find('.') == string::npos) {
|
||||||
LOG(ERROR) << "Receive invalid URL " << web_document->url_;
|
LOG(ERROR) << "Receive invalid URL " << web_document->url_;
|
||||||
return {Document::Type::Unknown, FileId()};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
url = std::move(web_document->url_);
|
url = std::move(web_document->url_);
|
||||||
@ -280,7 +280,7 @@ Document DocumentsManager::on_get_document(RemoteDocument remote_document, Dialo
|
|||||||
LOG(DEBUG) << "Receive document with id = " << id << " of type " << static_cast<int32>(document_type);
|
LOG(DEBUG) << "Receive document with id = " << id << " of type " << static_cast<int32>(document_type);
|
||||||
if (!is_web && !DcId::is_valid(dc_id)) {
|
if (!is_web && !DcId::is_valid(dc_id)) {
|
||||||
LOG(ERROR) << "Wrong dc_id = " << dc_id;
|
LOG(ERROR) << "Wrong dc_id = " << dc_id;
|
||||||
return {Document::Type::Unknown, FileId()};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
auto suggested_file_name = file_name;
|
auto suggested_file_name = file_name;
|
||||||
@ -308,7 +308,7 @@ Document DocumentsManager::on_get_document(RemoteDocument remote_document, Dialo
|
|||||||
auto r_file_id = td_->file_manager_->from_persistent_id(url, file_type);
|
auto r_file_id = td_->file_manager_->from_persistent_id(url, file_type);
|
||||||
if (r_file_id.is_error()) {
|
if (r_file_id.is_error()) {
|
||||||
LOG(ERROR) << "Can't register URL: " << r_file_id.error();
|
LOG(ERROR) << "Can't register URL: " << r_file_id.error();
|
||||||
return {Document::Type::Unknown, FileId()};
|
return {};
|
||||||
}
|
}
|
||||||
file_id = r_file_id.move_as_ok();
|
file_id = r_file_id.move_as_ok();
|
||||||
}
|
}
|
||||||
|
@ -3495,7 +3495,7 @@ static tl_object_ptr<ToT> secret_to_telegram(FromT &from) {
|
|||||||
static unique_ptr<MessageContent> get_document_message_content(Document &&parsed_document, FormattedText &&caption,
|
static unique_ptr<MessageContent> get_document_message_content(Document &&parsed_document, FormattedText &&caption,
|
||||||
bool is_opened) {
|
bool is_opened) {
|
||||||
auto file_id = parsed_document.file_id;
|
auto file_id = parsed_document.file_id;
|
||||||
if (parsed_document.type != Document::Type::Unknown) {
|
if (!parsed_document.empty()) {
|
||||||
CHECK(file_id.is_valid());
|
CHECK(file_id.is_valid());
|
||||||
}
|
}
|
||||||
switch (parsed_document.type) {
|
switch (parsed_document.type) {
|
||||||
|
@ -22186,7 +22186,7 @@ MessagesManager::Message *MessagesManager::add_message_to_dialog(Dialog *d, uniq
|
|||||||
if (!message->from_database) {
|
if (!message->from_database) {
|
||||||
LOG(ERROR) << "Ignore " << message_id << " in " << dialog_id << " received not through update from " << source
|
LOG(ERROR) << "Ignore " << message_id << " in " << dialog_id << " received not through update from " << source
|
||||||
<< ". Last new is " << d->last_new_message_id << ", channel difference "
|
<< ". Last new is " << d->last_new_message_id << ", channel difference "
|
||||||
<< debug_channel_difference_dialog_ << to_string(get_message_object(dialog_id, message.get()));
|
<< debug_channel_difference_dialog_ << " " << to_string(get_message_object(dialog_id, message.get()));
|
||||||
dump_debug_message_op(d, 3);
|
dump_debug_message_op(d, 3);
|
||||||
if (dialog_id.get_type() == DialogType::Channel && have_input_peer(dialog_id, AccessRights::Read)) {
|
if (dialog_id.get_type() == DialogType::Channel && have_input_peer(dialog_id, AccessRights::Read)) {
|
||||||
channel_get_difference_retry_timeout_.add_timeout_in(dialog_id.get(), 0.001);
|
channel_get_difference_retry_timeout_.add_timeout_in(dialog_id.get(), 0.001);
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
#include "td/telegram/ContactsManager.h"
|
#include "td/telegram/ContactsManager.h"
|
||||||
#include "td/telegram/DeviceTokenManager.h"
|
#include "td/telegram/DeviceTokenManager.h"
|
||||||
#include "td/telegram/Document.h"
|
#include "td/telegram/Document.h"
|
||||||
|
#include "td/telegram/Document.hpp"
|
||||||
#include "td/telegram/DocumentsManager.h"
|
#include "td/telegram/DocumentsManager.h"
|
||||||
#include "td/telegram/files/FileManager.h"
|
#include "td/telegram/files/FileManager.h"
|
||||||
#include "td/telegram/Global.h"
|
#include "td/telegram/Global.h"
|
||||||
@ -3170,7 +3171,7 @@ Status NotificationManager::process_push_notification_payload(string payload, Pr
|
|||||||
}
|
}
|
||||||
TRY_RESULT(ph, get_json_object_field(mtpeer.get_object(), "ph", JsonValue::Type::Object));
|
TRY_RESULT(ph, get_json_object_field(mtpeer.get_object(), "ph", JsonValue::Type::Object));
|
||||||
if (ph.type() != JsonValue::Type::Null) {
|
if (ph.type() != JsonValue::Type::Null) {
|
||||||
// TODO parse photo
|
// TODO parse sender photo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3191,6 +3192,7 @@ Status NotificationManager::process_push_notification_payload(string payload, Pr
|
|||||||
|
|
||||||
Photo attached_photo;
|
Photo attached_photo;
|
||||||
attached_photo.id = -2;
|
attached_photo.id = -2;
|
||||||
|
Document attached_document;
|
||||||
if (has_json_object_field(custom, "attachb64")) {
|
if (has_json_object_field(custom, "attachb64")) {
|
||||||
TRY_RESULT(attachb64, get_json_object_string_field(custom, "attachb64", false));
|
TRY_RESULT(attachb64, get_json_object_string_field(custom, "attachb64", false));
|
||||||
TRY_RESULT(attach, base64url_decode(attachb64));
|
TRY_RESULT(attach, base64url_decode(attachb64));
|
||||||
@ -3237,21 +3239,45 @@ Status NotificationManager::process_push_notification_payload(string payload, Pr
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case telegram_api::document::ID: {
|
case telegram_api::document::ID: {
|
||||||
auto parsed_document = td_->documents_manager_->on_get_document(
|
if (ends_with(loc_key, "MESSAGE_ANIMATION") || ends_with(loc_key, "MESSAGE_AUDIO") ||
|
||||||
telegram_api::move_object_as<telegram_api::document>(result), dialog_id);
|
ends_with(loc_key, "MESSAGE_DOCUMENT") || ends_with(loc_key, "MESSAGE_STICKER") ||
|
||||||
switch (parsed_document.type) {
|
ends_with(loc_key, "MESSAGE_VIDEO") || ends_with(loc_key, "MESSAGE_VIDEO_NOTE") ||
|
||||||
case Document::Type::Animation:
|
ends_with(loc_key, "MESSAGE_VOICE_NOTE") || ends_with(loc_key, "MESSAGE_TEXT")) {
|
||||||
case Document::Type::Audio:
|
attached_document = td_->documents_manager_->on_get_document(
|
||||||
case Document::Type::General:
|
telegram_api::move_object_as<telegram_api::document>(result), dialog_id);
|
||||||
case Document::Type::Sticker:
|
if (!attached_document.empty()) {
|
||||||
case Document::Type::Unknown:
|
if (ends_with(loc_key, "_NOTE")) {
|
||||||
case Document::Type::Video:
|
loc_key.resize(loc_key.rfind('_'));
|
||||||
case Document::Type::VideoNote:
|
}
|
||||||
case Document::Type::VoiceNote:
|
loc_key.resize(loc_key.rfind('_') + 1);
|
||||||
break;
|
|
||||||
default:
|
auto type = [attached_document] {
|
||||||
UNREACHABLE();
|
switch (attached_document.type) {
|
||||||
return Status::Error("Unreachable");
|
case Document::Type::Animation:
|
||||||
|
return "ANIMATION";
|
||||||
|
case Document::Type::Audio:
|
||||||
|
return "AUDIO";
|
||||||
|
case Document::Type::General:
|
||||||
|
return "DOCUMENT";
|
||||||
|
case Document::Type::Sticker:
|
||||||
|
return "STICKER";
|
||||||
|
case Document::Type::Video:
|
||||||
|
return "VIDEO";
|
||||||
|
case Document::Type::VideoNote:
|
||||||
|
return "VIDEO_NOTE";
|
||||||
|
case Document::Type::VoiceNote:
|
||||||
|
return "VOICE_NOTE";
|
||||||
|
case Document::Type::Unknown:
|
||||||
|
default:
|
||||||
|
UNREACHABLE();
|
||||||
|
return "UNREACHABLE";
|
||||||
|
}
|
||||||
|
}();
|
||||||
|
|
||||||
|
loc_key += type;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
LOG(ERROR) << "Receive attached document for " << loc_key;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -3270,11 +3296,13 @@ Status NotificationManager::process_push_notification_payload(string payload, Pr
|
|||||||
return Status::Error("Receive wrong edit date");
|
return Status::Error("Receive wrong edit date");
|
||||||
}
|
}
|
||||||
edit_message_push_notification(dialog_id, MessageId(server_message_id), edit_date, std::move(loc_key),
|
edit_message_push_notification(dialog_id, MessageId(server_message_id), edit_date, std::move(loc_key),
|
||||||
std::move(arg), std::move(attached_photo), 0, std::move(promise));
|
std::move(arg), std::move(attached_photo), std::move(attached_document), 0,
|
||||||
|
std::move(promise));
|
||||||
} else {
|
} else {
|
||||||
add_message_push_notification(dialog_id, MessageId(server_message_id), random_id, sender_user_id,
|
add_message_push_notification(dialog_id, MessageId(server_message_id), random_id, sender_user_id,
|
||||||
std::move(sender_name), sent_date, contains_mention, is_silent, std::move(loc_key),
|
std::move(sender_name), sent_date, contains_mention, is_silent, std::move(loc_key),
|
||||||
std::move(arg), std::move(attached_photo), NotificationId(), 0, std::move(promise));
|
std::move(arg), std::move(attached_photo), std::move(attached_document),
|
||||||
|
NotificationId(), 0, std::move(promise));
|
||||||
}
|
}
|
||||||
return Status::OK();
|
return Status::OK();
|
||||||
}
|
}
|
||||||
@ -3292,6 +3320,7 @@ class NotificationManager::AddMessagePushNotificationLogEvent {
|
|||||||
string loc_key_;
|
string loc_key_;
|
||||||
string arg_;
|
string arg_;
|
||||||
Photo photo_;
|
Photo photo_;
|
||||||
|
Document document_;
|
||||||
NotificationId notification_id_;
|
NotificationId notification_id_;
|
||||||
|
|
||||||
template <class StorerT>
|
template <class StorerT>
|
||||||
@ -3302,6 +3331,7 @@ class NotificationManager::AddMessagePushNotificationLogEvent {
|
|||||||
bool has_sender_name = !sender_name_.empty();
|
bool has_sender_name = !sender_name_.empty();
|
||||||
bool has_arg = !arg_.empty();
|
bool has_arg = !arg_.empty();
|
||||||
bool has_photo = photo_.id != -2;
|
bool has_photo = photo_.id != -2;
|
||||||
|
bool has_document = !document_.empty();
|
||||||
BEGIN_STORE_FLAGS();
|
BEGIN_STORE_FLAGS();
|
||||||
STORE_FLAG(contains_mention_);
|
STORE_FLAG(contains_mention_);
|
||||||
STORE_FLAG(is_silent_);
|
STORE_FLAG(is_silent_);
|
||||||
@ -3311,6 +3341,7 @@ class NotificationManager::AddMessagePushNotificationLogEvent {
|
|||||||
STORE_FLAG(has_sender_name);
|
STORE_FLAG(has_sender_name);
|
||||||
STORE_FLAG(has_arg);
|
STORE_FLAG(has_arg);
|
||||||
STORE_FLAG(has_photo);
|
STORE_FLAG(has_photo);
|
||||||
|
STORE_FLAG(has_document);
|
||||||
END_STORE_FLAGS();
|
END_STORE_FLAGS();
|
||||||
td::store(dialog_id_, storer);
|
td::store(dialog_id_, storer);
|
||||||
if (has_message_id) {
|
if (has_message_id) {
|
||||||
@ -3333,6 +3364,9 @@ class NotificationManager::AddMessagePushNotificationLogEvent {
|
|||||||
if (has_photo) {
|
if (has_photo) {
|
||||||
td::store(photo_, storer);
|
td::store(photo_, storer);
|
||||||
}
|
}
|
||||||
|
if (has_document) {
|
||||||
|
td::store(document_, storer);
|
||||||
|
}
|
||||||
td::store(notification_id_, storer);
|
td::store(notification_id_, storer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3344,6 +3378,7 @@ class NotificationManager::AddMessagePushNotificationLogEvent {
|
|||||||
bool has_sender_name;
|
bool has_sender_name;
|
||||||
bool has_arg;
|
bool has_arg;
|
||||||
bool has_photo;
|
bool has_photo;
|
||||||
|
bool has_document;
|
||||||
BEGIN_PARSE_FLAGS();
|
BEGIN_PARSE_FLAGS();
|
||||||
PARSE_FLAG(contains_mention_);
|
PARSE_FLAG(contains_mention_);
|
||||||
PARSE_FLAG(is_silent_);
|
PARSE_FLAG(is_silent_);
|
||||||
@ -3353,6 +3388,7 @@ class NotificationManager::AddMessagePushNotificationLogEvent {
|
|||||||
PARSE_FLAG(has_sender_name);
|
PARSE_FLAG(has_sender_name);
|
||||||
PARSE_FLAG(has_arg);
|
PARSE_FLAG(has_arg);
|
||||||
PARSE_FLAG(has_photo);
|
PARSE_FLAG(has_photo);
|
||||||
|
PARSE_FLAG(has_document);
|
||||||
END_PARSE_FLAGS();
|
END_PARSE_FLAGS();
|
||||||
td::parse(dialog_id_, parser);
|
td::parse(dialog_id_, parser);
|
||||||
if (has_message_id) {
|
if (has_message_id) {
|
||||||
@ -3379,6 +3415,9 @@ class NotificationManager::AddMessagePushNotificationLogEvent {
|
|||||||
} else {
|
} else {
|
||||||
photo_.id = -2;
|
photo_.id = -2;
|
||||||
}
|
}
|
||||||
|
if (has_document) {
|
||||||
|
td::parse(document_, parser);
|
||||||
|
}
|
||||||
td::parse(notification_id_, parser);
|
td::parse(notification_id_, parser);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -3386,8 +3425,9 @@ class NotificationManager::AddMessagePushNotificationLogEvent {
|
|||||||
void NotificationManager::add_message_push_notification(DialogId dialog_id, MessageId message_id, int64 random_id,
|
void NotificationManager::add_message_push_notification(DialogId dialog_id, MessageId message_id, int64 random_id,
|
||||||
UserId sender_user_id, string sender_name, int32 date,
|
UserId sender_user_id, string sender_name, int32 date,
|
||||||
bool contains_mention, bool is_silent, string loc_key,
|
bool contains_mention, bool is_silent, string loc_key,
|
||||||
string arg, Photo photo, NotificationId notification_id,
|
string arg, Photo photo, Document document,
|
||||||
uint64 logevent_id, Promise<Unit> promise) {
|
NotificationId notification_id, uint64 logevent_id,
|
||||||
|
Promise<Unit> promise) {
|
||||||
auto is_pinned = begins_with(loc_key, "PINNED_");
|
auto is_pinned = begins_with(loc_key, "PINNED_");
|
||||||
auto r_info = td_->messages_manager_->get_message_push_notification_info(
|
auto r_info = td_->messages_manager_->get_message_push_notification_info(
|
||||||
dialog_id, message_id, random_id, sender_user_id, date, contains_mention, is_pinned, logevent_id != 0);
|
dialog_id, message_id, random_id, sender_user_id, date, contains_mention, is_pinned, logevent_id != 0);
|
||||||
@ -3444,9 +3484,9 @@ void NotificationManager::add_message_push_notification(DialogId dialog_id, Mess
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (logevent_id == 0 && G()->parameters().use_message_db) {
|
if (logevent_id == 0 && G()->parameters().use_message_db) {
|
||||||
AddMessagePushNotificationLogEvent logevent{dialog_id, message_id, random_id, sender_user_id, sender_name,
|
AddMessagePushNotificationLogEvent logevent{
|
||||||
date, contains_mention, is_silent, loc_key, arg,
|
dialog_id, message_id, random_id, sender_user_id, sender_name, date, contains_mention,
|
||||||
photo, notification_id};
|
is_silent, loc_key, arg, photo, document, notification_id};
|
||||||
auto storer = LogEventStorerImpl<AddMessagePushNotificationLogEvent>(logevent);
|
auto storer = LogEventStorerImpl<AddMessagePushNotificationLogEvent>(logevent);
|
||||||
logevent_id = binlog_add(G()->td_db()->get_binlog(), LogEvent::HandlerType::AddMessagePushNotification, storer);
|
logevent_id = binlog_add(G()->td_db()->get_binlog(), LogEvent::HandlerType::AddMessagePushNotification, storer);
|
||||||
}
|
}
|
||||||
@ -3466,13 +3506,13 @@ void NotificationManager::add_message_push_notification(DialogId dialog_id, Mess
|
|||||||
auto settings_dialog_id = info.settings_dialog_id;
|
auto settings_dialog_id = info.settings_dialog_id;
|
||||||
VLOG(notifications) << "Add message push " << notification_id << " of type " << loc_key << " for " << message_id
|
VLOG(notifications) << "Add message push " << notification_id << " of type " << loc_key << " for " << message_id
|
||||||
<< "/" << random_id << " in " << dialog_id << ", sent by " << sender_user_id << " at " << date
|
<< "/" << random_id << " in " << dialog_id << ", sent by " << sender_user_id << " at " << date
|
||||||
<< " with arg " << arg << ", photo " << photo << " to " << group_id << " of type " << group_type
|
<< " with arg " << arg << ", photo " << photo << " and document " << document << " to "
|
||||||
<< " with settings from " << settings_dialog_id;
|
<< group_id << " of type " << group_type << " with settings from " << settings_dialog_id;
|
||||||
|
|
||||||
add_notification(group_id, group_type, dialog_id, date, settings_dialog_id, is_silent, 0, notification_id,
|
add_notification(group_id, group_type, dialog_id, date, settings_dialog_id, is_silent, 0, notification_id,
|
||||||
create_new_push_message_notification(sender_user_id, message_id, std::move(loc_key), std::move(arg),
|
create_new_push_message_notification(sender_user_id, message_id, std::move(loc_key), std::move(arg),
|
||||||
std::move(photo)),
|
std::move(photo), std::move(document)),
|
||||||
"add_push_notification");
|
"add_message_push_notification");
|
||||||
}
|
}
|
||||||
|
|
||||||
class NotificationManager::EditMessagePushNotificationLogEvent {
|
class NotificationManager::EditMessagePushNotificationLogEvent {
|
||||||
@ -3483,16 +3523,19 @@ class NotificationManager::EditMessagePushNotificationLogEvent {
|
|||||||
string loc_key_;
|
string loc_key_;
|
||||||
string arg_;
|
string arg_;
|
||||||
Photo photo_;
|
Photo photo_;
|
||||||
|
Document document_;
|
||||||
|
|
||||||
template <class StorerT>
|
template <class StorerT>
|
||||||
void store(StorerT &storer) const {
|
void store(StorerT &storer) const {
|
||||||
bool has_message_id = message_id_.is_valid();
|
bool has_message_id = message_id_.is_valid();
|
||||||
bool has_arg = !arg_.empty();
|
bool has_arg = !arg_.empty();
|
||||||
bool has_photo = photo_.id != -2;
|
bool has_photo = photo_.id != -2;
|
||||||
|
bool has_document = !document_.empty();
|
||||||
BEGIN_STORE_FLAGS();
|
BEGIN_STORE_FLAGS();
|
||||||
STORE_FLAG(has_message_id);
|
STORE_FLAG(has_message_id);
|
||||||
STORE_FLAG(has_arg);
|
STORE_FLAG(has_arg);
|
||||||
STORE_FLAG(has_photo);
|
STORE_FLAG(has_photo);
|
||||||
|
STORE_FLAG(has_document);
|
||||||
END_STORE_FLAGS();
|
END_STORE_FLAGS();
|
||||||
td::store(dialog_id_, storer);
|
td::store(dialog_id_, storer);
|
||||||
if (has_message_id) {
|
if (has_message_id) {
|
||||||
@ -3506,6 +3549,9 @@ class NotificationManager::EditMessagePushNotificationLogEvent {
|
|||||||
if (has_photo) {
|
if (has_photo) {
|
||||||
td::store(photo_, storer);
|
td::store(photo_, storer);
|
||||||
}
|
}
|
||||||
|
if (has_document) {
|
||||||
|
td::store(document_, storer);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class ParserT>
|
template <class ParserT>
|
||||||
@ -3513,10 +3559,12 @@ class NotificationManager::EditMessagePushNotificationLogEvent {
|
|||||||
bool has_message_id;
|
bool has_message_id;
|
||||||
bool has_arg;
|
bool has_arg;
|
||||||
bool has_photo;
|
bool has_photo;
|
||||||
|
bool has_document;
|
||||||
BEGIN_PARSE_FLAGS();
|
BEGIN_PARSE_FLAGS();
|
||||||
PARSE_FLAG(has_message_id);
|
PARSE_FLAG(has_message_id);
|
||||||
PARSE_FLAG(has_arg);
|
PARSE_FLAG(has_arg);
|
||||||
PARSE_FLAG(has_photo);
|
PARSE_FLAG(has_photo);
|
||||||
|
PARSE_FLAG(has_document);
|
||||||
END_PARSE_FLAGS();
|
END_PARSE_FLAGS();
|
||||||
td::parse(dialog_id_, parser);
|
td::parse(dialog_id_, parser);
|
||||||
if (has_message_id) {
|
if (has_message_id) {
|
||||||
@ -3532,12 +3580,15 @@ class NotificationManager::EditMessagePushNotificationLogEvent {
|
|||||||
} else {
|
} else {
|
||||||
photo_.id = -2;
|
photo_.id = -2;
|
||||||
}
|
}
|
||||||
|
if (has_document) {
|
||||||
|
td::parse(document_, parser);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
void NotificationManager::edit_message_push_notification(DialogId dialog_id, MessageId message_id, int32 edit_date,
|
void NotificationManager::edit_message_push_notification(DialogId dialog_id, MessageId message_id, int32 edit_date,
|
||||||
string loc_key, string arg, Photo photo, uint64 logevent_id,
|
string loc_key, string arg, Photo photo, Document document,
|
||||||
Promise<Unit> promise) {
|
uint64 logevent_id, Promise<Unit> promise) {
|
||||||
if (is_disabled() || max_notification_group_count_ == 0) {
|
if (is_disabled() || max_notification_group_count_ == 0) {
|
||||||
CHECK(logevent_id == 0);
|
CHECK(logevent_id == 0);
|
||||||
return promise.set_error(Status::Error(200, "Immediate success"));
|
return promise.set_error(Status::Error(200, "Immediate success"));
|
||||||
@ -3557,7 +3608,7 @@ void NotificationManager::edit_message_push_notification(DialogId dialog_id, Mes
|
|||||||
CHECK(notification_id.is_valid());
|
CHECK(notification_id.is_valid());
|
||||||
|
|
||||||
if (logevent_id == 0 && G()->parameters().use_message_db) {
|
if (logevent_id == 0 && G()->parameters().use_message_db) {
|
||||||
EditMessagePushNotificationLogEvent logevent{dialog_id, message_id, edit_date, loc_key, arg, photo};
|
EditMessagePushNotificationLogEvent logevent{dialog_id, message_id, edit_date, loc_key, arg, photo, document};
|
||||||
auto storer = LogEventStorerImpl<EditMessagePushNotificationLogEvent>(logevent);
|
auto storer = LogEventStorerImpl<EditMessagePushNotificationLogEvent>(logevent);
|
||||||
auto &cur_logevent_id = temporary_edit_notification_logevent_ids_[notification_id];
|
auto &cur_logevent_id = temporary_edit_notification_logevent_ids_[notification_id];
|
||||||
if (cur_logevent_id == 0) {
|
if (cur_logevent_id == 0) {
|
||||||
@ -3579,7 +3630,7 @@ void NotificationManager::edit_message_push_notification(DialogId dialog_id, Mes
|
|||||||
|
|
||||||
edit_notification(group_id, notification_id,
|
edit_notification(group_id, notification_id,
|
||||||
create_new_push_message_notification(sender_user_id, message_id, std::move(loc_key), std::move(arg),
|
create_new_push_message_notification(sender_user_id, message_id, std::move(loc_key), std::move(arg),
|
||||||
std::move(photo)));
|
std::move(photo), std::move(document)));
|
||||||
}
|
}
|
||||||
|
|
||||||
Result<int64> NotificationManager::get_push_receiver_id(string payload) {
|
Result<int64> NotificationManager::get_push_receiver_id(string payload) {
|
||||||
@ -3905,7 +3956,7 @@ void NotificationManager::on_binlog_events(vector<BinlogEvent> &&events) {
|
|||||||
add_message_push_notification(
|
add_message_push_notification(
|
||||||
log_event.dialog_id_, log_event.message_id_, log_event.random_id_, log_event.sender_user_id_,
|
log_event.dialog_id_, log_event.message_id_, log_event.random_id_, log_event.sender_user_id_,
|
||||||
log_event.sender_name_, log_event.date_, log_event.contains_mention_, true, log_event.loc_key_,
|
log_event.sender_name_, log_event.date_, log_event.contains_mention_, true, log_event.loc_key_,
|
||||||
log_event.arg_, log_event.photo_, log_event.notification_id_, event.id_,
|
log_event.arg_, log_event.photo_, log_event.document_, log_event.notification_id_, event.id_,
|
||||||
PromiseCreator::lambda([](Result<Unit> result) {
|
PromiseCreator::lambda([](Result<Unit> result) {
|
||||||
if (result.is_error()) {
|
if (result.is_error()) {
|
||||||
LOG(ERROR) << "Receive error " << result.error() << ", while processing message push notification";
|
LOG(ERROR) << "Receive error " << result.error() << ", while processing message push notification";
|
||||||
@ -3920,7 +3971,7 @@ void NotificationManager::on_binlog_events(vector<BinlogEvent> &&events) {
|
|||||||
|
|
||||||
edit_message_push_notification(
|
edit_message_push_notification(
|
||||||
log_event.dialog_id_, log_event.message_id_, log_event.edit_date_, log_event.loc_key_, log_event.arg_,
|
log_event.dialog_id_, log_event.message_id_, log_event.edit_date_, log_event.loc_key_, log_event.arg_,
|
||||||
log_event.photo_, event.id_, PromiseCreator::lambda([](Result<Unit> result) {
|
log_event.photo_, log_event.document_, event.id_, PromiseCreator::lambda([](Result<Unit> result) {
|
||||||
if (result.is_error()) {
|
if (result.is_error()) {
|
||||||
LOG(ERROR) << "Receive error " << result.error() << ", while processing edit message push notification";
|
LOG(ERROR) << "Receive error " << result.error() << ", while processing edit message push notification";
|
||||||
}
|
}
|
||||||
|
@ -295,11 +295,12 @@ class NotificationManager : public Actor {
|
|||||||
|
|
||||||
void add_message_push_notification(DialogId dialog_id, MessageId message_id, int64 random_id, UserId sender_user_id,
|
void add_message_push_notification(DialogId dialog_id, MessageId message_id, int64 random_id, UserId sender_user_id,
|
||||||
string sender_name, int32 date, bool contains_mention, bool is_silent,
|
string sender_name, int32 date, bool contains_mention, bool is_silent,
|
||||||
string loc_key, string arg, Photo photo, NotificationId notification_id,
|
string loc_key, string arg, Photo photo, Document document,
|
||||||
uint64 logevent_id, Promise<Unit> promise);
|
NotificationId notification_id, uint64 logevent_id, Promise<Unit> promise);
|
||||||
|
|
||||||
void edit_message_push_notification(DialogId dialog_id, MessageId message_id, int32 edit_date, string loc_key,
|
void edit_message_push_notification(DialogId dialog_id, MessageId message_id, int32 edit_date, string loc_key,
|
||||||
string arg, Photo photo, uint64 logevent_id, Promise<Unit> promise);
|
string arg, Photo photo, Document document, uint64 logevent_id,
|
||||||
|
Promise<Unit> promise);
|
||||||
|
|
||||||
void after_get_difference_impl();
|
void after_get_difference_impl();
|
||||||
|
|
||||||
|
@ -6,10 +6,17 @@
|
|||||||
//
|
//
|
||||||
#include "td/telegram/NotificationType.h"
|
#include "td/telegram/NotificationType.h"
|
||||||
|
|
||||||
|
#include "td/telegram/AnimationsManager.h"
|
||||||
|
#include "td/telegram/AudiosManager.h"
|
||||||
#include "td/telegram/ContactsManager.h"
|
#include "td/telegram/ContactsManager.h"
|
||||||
|
#include "td/telegram/DocumentsManager.h"
|
||||||
#include "td/telegram/Global.h"
|
#include "td/telegram/Global.h"
|
||||||
#include "td/telegram/MessagesManager.h"
|
#include "td/telegram/MessagesManager.h"
|
||||||
|
#include "td/telegram/StickersManager.h"
|
||||||
#include "td/telegram/Td.h"
|
#include "td/telegram/Td.h"
|
||||||
|
#include "td/telegram/VideosManager.h"
|
||||||
|
#include "td/telegram/VideoNotesManager.h"
|
||||||
|
#include "td/telegram/VoiceNotesManager.h"
|
||||||
|
|
||||||
#include "td/utils/misc.h"
|
#include "td/utils/misc.h"
|
||||||
#include "td/utils/Slice.h"
|
#include "td/utils/Slice.h"
|
||||||
@ -128,7 +135,8 @@ class NotificationTypePushMessage : public NotificationType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static td_api::object_ptr<td_api::PushMessageContent> get_push_message_content_object(Slice key, const string &arg,
|
static td_api::object_ptr<td_api::PushMessageContent> get_push_message_content_object(Slice key, const string &arg,
|
||||||
const Photo &photo) {
|
const Photo &photo,
|
||||||
|
const Document &document) {
|
||||||
bool is_pinned = false;
|
bool is_pinned = false;
|
||||||
if (begins_with(key, "PINNED_")) {
|
if (begins_with(key, "PINNED_")) {
|
||||||
is_pinned = true;
|
is_pinned = true;
|
||||||
@ -144,7 +152,14 @@ class NotificationTypePushMessage : public NotificationType {
|
|||||||
switch (key[8]) {
|
switch (key[8]) {
|
||||||
case 'A':
|
case 'A':
|
||||||
if (key == "MESSAGE_ANIMATION") {
|
if (key == "MESSAGE_ANIMATION") {
|
||||||
return td_api::make_object<td_api::pushMessageContentAnimation>(is_pinned);
|
auto animations_manager = G()->td().get_actor_unsafe()->animations_manager_.get();
|
||||||
|
return td_api::make_object<td_api::pushMessageContentAnimation>(
|
||||||
|
animations_manager->get_animation_object(document.file_id, "MESSAGE_ANIMATION"), arg, is_pinned);
|
||||||
|
}
|
||||||
|
if (key == "MESSAGE_AUDIO") {
|
||||||
|
auto audios_manager = G()->td().get_actor_unsafe()->audios_manager_.get();
|
||||||
|
return td_api::make_object<td_api::pushMessageContentAudio>(
|
||||||
|
audios_manager->get_audio_object(document.file_id), arg, is_pinned);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'B':
|
case 'B':
|
||||||
@ -189,7 +204,9 @@ class NotificationTypePushMessage : public NotificationType {
|
|||||||
break;
|
break;
|
||||||
case 'D':
|
case 'D':
|
||||||
if (key == "MESSAGE_DOCUMENT") {
|
if (key == "MESSAGE_DOCUMENT") {
|
||||||
return td_api::make_object<td_api::pushMessageContentDocument>(is_pinned);
|
auto documents_manager = G()->td().get_actor_unsafe()->documents_manager_.get();
|
||||||
|
return td_api::make_object<td_api::pushMessageContentDocument>(
|
||||||
|
documents_manager->get_document_object(document.file_id), arg, is_pinned);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'F':
|
case 'F':
|
||||||
@ -243,13 +260,15 @@ class NotificationTypePushMessage : public NotificationType {
|
|||||||
return td_api::make_object<td_api::pushMessageContentPhoto>(nullptr, arg, true, false);
|
return td_api::make_object<td_api::pushMessageContentPhoto>(nullptr, arg, true, false);
|
||||||
}
|
}
|
||||||
if (key == "MESSAGE_SECRET_VIDEO") {
|
if (key == "MESSAGE_SECRET_VIDEO") {
|
||||||
return td_api::make_object<td_api::pushMessageContentVideo>(true, false);
|
return td_api::make_object<td_api::pushMessageContentVideo>(nullptr, arg, true, false);
|
||||||
}
|
}
|
||||||
if (key == "MESSAGE_SCREENSHOT_TAKEN") {
|
if (key == "MESSAGE_SCREENSHOT_TAKEN") {
|
||||||
return td_api::make_object<td_api::pushMessageContentScreenshotTaken>();
|
return td_api::make_object<td_api::pushMessageContentScreenshotTaken>();
|
||||||
}
|
}
|
||||||
if (key == "MESSAGE_STICKER") {
|
if (key == "MESSAGE_STICKER") {
|
||||||
return td_api::make_object<td_api::pushMessageContentSticker>(arg, is_pinned);
|
auto stickers_manager = G()->td().get_actor_unsafe()->stickers_manager_.get();
|
||||||
|
return td_api::make_object<td_api::pushMessageContentSticker>(
|
||||||
|
stickers_manager->get_sticker_object(document.file_id), arg, is_pinned);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'T':
|
case 'T':
|
||||||
@ -259,16 +278,22 @@ class NotificationTypePushMessage : public NotificationType {
|
|||||||
break;
|
break;
|
||||||
case 'V':
|
case 'V':
|
||||||
if (key == "MESSAGE_VIDEO") {
|
if (key == "MESSAGE_VIDEO") {
|
||||||
return td_api::make_object<td_api::pushMessageContentVideo>(false, is_pinned);
|
auto videos_manager = G()->td().get_actor_unsafe()->videos_manager_.get();
|
||||||
|
return td_api::make_object<td_api::pushMessageContentVideo>(
|
||||||
|
videos_manager->get_video_object(document.file_id), arg, false, is_pinned);
|
||||||
}
|
}
|
||||||
if (key == "MESSAGE_VIDEO_NOTE") {
|
if (key == "MESSAGE_VIDEO_NOTE") {
|
||||||
return td_api::make_object<td_api::pushMessageContentVideoNote>(is_pinned);
|
auto video_notes_manager = G()->td().get_actor_unsafe()->video_notes_manager_.get();
|
||||||
|
return td_api::make_object<td_api::pushMessageContentVideoNote>(
|
||||||
|
video_notes_manager->get_video_note_object(document.file_id), is_pinned);
|
||||||
}
|
}
|
||||||
if (key == "MESSAGE_VIDEOS") {
|
if (key == "MESSAGE_VIDEOS") {
|
||||||
return td_api::make_object<td_api::pushMessageContentMediaAlbum>(to_integer<int32>(arg), false, true);
|
return td_api::make_object<td_api::pushMessageContentMediaAlbum>(to_integer<int32>(arg), false, true);
|
||||||
}
|
}
|
||||||
if (key == "MESSAGE_VOICE_NOTE") {
|
if (key == "MESSAGE_VOICE_NOTE") {
|
||||||
return td_api::make_object<td_api::pushMessageContentVoiceNote>(is_pinned);
|
auto voice_notes_manager = G()->td().get_actor_unsafe()->voice_notes_manager_.get();
|
||||||
|
return td_api::make_object<td_api::pushMessageContentVoiceNote>(
|
||||||
|
voice_notes_manager->get_voice_note_object(document.file_id), arg, is_pinned);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -281,12 +306,12 @@ class NotificationTypePushMessage : public NotificationType {
|
|||||||
auto sender_user_id = G()->td().get_actor_unsafe()->contacts_manager_->get_user_id_object(
|
auto sender_user_id = G()->td().get_actor_unsafe()->contacts_manager_->get_user_id_object(
|
||||||
sender_user_id_, "get_notification_type_object");
|
sender_user_id_, "get_notification_type_object");
|
||||||
return td_api::make_object<td_api::notificationTypeNewPushMessage>(
|
return td_api::make_object<td_api::notificationTypeNewPushMessage>(
|
||||||
message_id_.get(), sender_user_id, get_push_message_content_object(key_, arg_, photo_));
|
message_id_.get(), sender_user_id, get_push_message_content_object(key_, arg_, photo_, document_));
|
||||||
}
|
}
|
||||||
|
|
||||||
StringBuilder &to_string_builder(StringBuilder &string_builder) const override {
|
StringBuilder &to_string_builder(StringBuilder &string_builder) const override {
|
||||||
return string_builder << "NewPushMessageNotification[" << sender_user_id_ << ", " << message_id_ << ", " << key_
|
return string_builder << "NewPushMessageNotification[" << sender_user_id_ << ", " << message_id_ << ", " << key_
|
||||||
<< ", " << arg_ << ", " << photo_ << ']';
|
<< ", " << arg_ << ", " << photo_ << ", " << document_ << ']';
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
Type get_type() const override {
|
Type get_type() const override {
|
||||||
@ -298,14 +323,17 @@ class NotificationTypePushMessage : public NotificationType {
|
|||||||
string key_;
|
string key_;
|
||||||
string arg_;
|
string arg_;
|
||||||
Photo photo_;
|
Photo photo_;
|
||||||
|
Document document_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
NotificationTypePushMessage(UserId sender_user_id, MessageId message_id, string key, string arg, Photo photo)
|
NotificationTypePushMessage(UserId sender_user_id, MessageId message_id, string key, string arg, Photo photo,
|
||||||
|
Document document)
|
||||||
: sender_user_id_(std::move(sender_user_id))
|
: sender_user_id_(std::move(sender_user_id))
|
||||||
, message_id_(message_id)
|
, message_id_(message_id)
|
||||||
, key_(std::move(key))
|
, key_(std::move(key))
|
||||||
, arg_(std::move(arg))
|
, arg_(std::move(arg))
|
||||||
, photo_(std::move(photo)) {
|
, photo_(std::move(photo))
|
||||||
|
, document_(std::move(document)) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -322,9 +350,10 @@ unique_ptr<NotificationType> create_new_call_notification(CallId call_id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
unique_ptr<NotificationType> create_new_push_message_notification(UserId sender_user_id, MessageId message_id,
|
unique_ptr<NotificationType> create_new_push_message_notification(UserId sender_user_id, MessageId message_id,
|
||||||
string key, string arg, Photo photo) {
|
string key, string arg, Photo photo,
|
||||||
|
Document document) {
|
||||||
return td::make_unique<NotificationTypePushMessage>(sender_user_id, message_id, std::move(key), std::move(arg),
|
return td::make_unique<NotificationTypePushMessage>(sender_user_id, message_id, std::move(key), std::move(arg),
|
||||||
std::move(photo));
|
std::move(photo), std::move(document));
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace td
|
} // namespace td
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
#include "td/telegram/CallId.h"
|
#include "td/telegram/CallId.h"
|
||||||
#include "td/telegram/DialogId.h"
|
#include "td/telegram/DialogId.h"
|
||||||
|
#include "td/telegram/Document.h"
|
||||||
#include "td/telegram/MessageId.h"
|
#include "td/telegram/MessageId.h"
|
||||||
#include "td/telegram/Photo.h"
|
#include "td/telegram/Photo.h"
|
||||||
#include "td/telegram/td_api.h"
|
#include "td/telegram/td_api.h"
|
||||||
@ -63,6 +64,7 @@ unique_ptr<NotificationType> create_new_secret_chat_notification();
|
|||||||
unique_ptr<NotificationType> create_new_call_notification(CallId call_id);
|
unique_ptr<NotificationType> create_new_call_notification(CallId call_id);
|
||||||
|
|
||||||
unique_ptr<NotificationType> create_new_push_message_notification(UserId sender_user_id, MessageId message_id,
|
unique_ptr<NotificationType> create_new_push_message_notification(UserId sender_user_id, MessageId message_id,
|
||||||
string key, string arg, Photo photo);
|
string key, string arg, Photo photo,
|
||||||
|
Document document);
|
||||||
|
|
||||||
} // namespace td
|
} // namespace td
|
||||||
|
@ -230,7 +230,7 @@ class WebPagesManager::WebPage {
|
|||||||
bool has_embed_dimensions = has_embed && embed_dimensions != Dimensions();
|
bool has_embed_dimensions = has_embed && embed_dimensions != Dimensions();
|
||||||
bool has_duration = duration > 0;
|
bool has_duration = duration > 0;
|
||||||
bool has_author = !author.empty();
|
bool has_author = !author.empty();
|
||||||
bool has_document = document.type != Document::Type::Unknown;
|
bool has_document = !document.empty();
|
||||||
bool has_instant_view = !instant_view.is_empty;
|
bool has_instant_view = !instant_view.is_empty;
|
||||||
bool is_instant_view_v2 = instant_view.is_v2;
|
bool is_instant_view_v2 = instant_view.is_v2;
|
||||||
bool has_no_hash = true;
|
bool has_no_hash = true;
|
||||||
|
Reference in New Issue
Block a user