Skip to content

Commit

Permalink
Fix has_input_media.
Browse files Browse the repository at this point in the history
GitOrigin-RevId: f10ffc8116028849b3a0afc4ebf7169d707dd794
  • Loading branch information
levlam committed Jan 31, 2018
1 parent e0d3030 commit 536def0
Show file tree
Hide file tree
Showing 8 changed files with 50 additions and 20 deletions.
8 changes: 6 additions & 2 deletions td/telegram/DocumentsManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -330,10 +330,14 @@ const DocumentsManager::Document *DocumentsManager::get_document(FileId file_id)
return document->second.get();
}

bool DocumentsManager::has_input_media(FileId file_id, bool is_secret) const {
bool DocumentsManager::has_input_media(FileId file_id, FileId thumbnail_file_id, bool is_secret) const {
auto file_view = td_->file_manager_->get_file_view(file_id);
if (is_secret) {
return file_view.is_encrypted() && file_view.has_remote_location();
if (file_view.encryption_key().empty() || !file_view.has_remote_location()) {
return false;
}

return !thumbnail_file_id.is_valid();
} else {
if (file_view.is_encrypted()) {
return false;
Expand Down
2 changes: 1 addition & 1 deletion td/telegram/DocumentsManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ class DocumentsManager {

void create_document(FileId file_id, PhotoSize thumbnail, string file_name, string mime_type, bool replace);

bool has_input_media(FileId file_id, bool is_secret) const;
bool has_input_media(FileId file_id, FileId thumbnail_file_id, bool is_secret) const;

SecretInputMedia get_secret_input_media(FileId document_file_id,
tl_object_ptr<telegram_api::InputEncryptedFile> input_file,
Expand Down
39 changes: 24 additions & 15 deletions td/telegram/MessagesManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6310,16 +6310,18 @@ void MessagesManager::after_get_difference() {
}
}

// TODO move to AnimationsManager
td_->animations_manager_->get_saved_animations(Auto());
if (td_->is_online()) {
// TODO move to AnimationsManager
td_->animations_manager_->get_saved_animations(Auto());

// TODO move to StickersManager
td_->stickers_manager_->get_installed_sticker_sets(false, Auto());
td_->stickers_manager_->get_installed_sticker_sets(true, Auto());
td_->stickers_manager_->get_featured_sticker_sets(Auto());
td_->stickers_manager_->get_recent_stickers(false, Auto());
td_->stickers_manager_->get_recent_stickers(true, Auto());
td_->stickers_manager_->get_favorite_stickers(Auto());
// TODO move to StickersManager
td_->stickers_manager_->get_installed_sticker_sets(false, Auto());
td_->stickers_manager_->get_installed_sticker_sets(true, Auto());
td_->stickers_manager_->get_featured_sticker_sets(Auto());
td_->stickers_manager_->get_recent_stickers(false, Auto());
td_->stickers_manager_->get_recent_stickers(true, Auto());
td_->stickers_manager_->get_favorite_stickers(Auto());
}

load_notification_settings();

Expand Down Expand Up @@ -20342,10 +20344,14 @@ unique_ptr<MessageContent> MessagesManager::dup_message_content(DialogId dialog_
return file_manager->dup_file_id(file_id);
};

FileId thumbnail_file_id;
if (to_secret) {
thumbnail_file_id = get_message_content_thumbnail_file_id(content);
}
switch (content->get_id()) {
case MessageAnimation::ID: {
auto result = make_unique<MessageAnimation>(*static_cast<const MessageAnimation *>(content));
if (td_->documents_manager_->has_input_media(result->file_id, to_secret)) {
if (td_->documents_manager_->has_input_media(result->file_id, thumbnail_file_id, to_secret)) {
return std::move(result);
}
result->file_id = td_->animations_manager_->dup_animation(fix_file_id(result->file_id), result->file_id);
Expand All @@ -20354,7 +20360,7 @@ unique_ptr<MessageContent> MessagesManager::dup_message_content(DialogId dialog_
}
case MessageAudio::ID: {
auto result = make_unique<MessageAudio>(*static_cast<const MessageAudio *>(content));
if (td_->documents_manager_->has_input_media(result->file_id, to_secret)) {
if (td_->documents_manager_->has_input_media(result->file_id, thumbnail_file_id, to_secret)) {
return std::move(result);
}
result->file_id = td_->audios_manager_->dup_audio(fix_file_id(result->file_id), result->file_id);
Expand All @@ -20365,7 +20371,7 @@ unique_ptr<MessageContent> MessagesManager::dup_message_content(DialogId dialog_
return make_unique<MessageContact>(*static_cast<const MessageContact *>(content));
case MessageDocument::ID: {
auto result = make_unique<MessageDocument>(*static_cast<const MessageDocument *>(content));
if (td_->documents_manager_->has_input_media(result->file_id, to_secret)) {
if (td_->documents_manager_->has_input_media(result->file_id, thumbnail_file_id, to_secret)) {
return std::move(result);
}
result->file_id = td_->documents_manager_->dup_document(fix_file_id(result->file_id), result->file_id);
Expand Down Expand Up @@ -20436,6 +20442,9 @@ unique_ptr<MessageContent> MessagesManager::dup_message_content(DialogId dialog_
}

result->photo.photos.back().file_id = fix_file_id(result->photo.photos.back().file_id);
if (thumbnail.type != 0) {
result->photo.photos[0].file_id = td_->file_manager_->dup_file_id(result->photo.photos[0].file_id);
}
return std::move(result);
}
case MessageSticker::ID: {
Expand All @@ -20453,7 +20462,7 @@ unique_ptr<MessageContent> MessagesManager::dup_message_content(DialogId dialog_
return make_unique<MessageVenue>(*static_cast<const MessageVenue *>(content));
case MessageVideo::ID: {
auto result = make_unique<MessageVideo>(*static_cast<const MessageVideo *>(content));
if (td_->documents_manager_->has_input_media(result->file_id, to_secret)) {
if (td_->documents_manager_->has_input_media(result->file_id, thumbnail_file_id, to_secret)) {
return std::move(result);
}
result->file_id = td_->videos_manager_->dup_video(fix_file_id(result->file_id), result->file_id);
Expand All @@ -20463,7 +20472,7 @@ unique_ptr<MessageContent> MessagesManager::dup_message_content(DialogId dialog_
case MessageVideoNote::ID: {
auto result = make_unique<MessageVideoNote>(*static_cast<const MessageVideoNote *>(content));
result->is_viewed = false;
if (td_->documents_manager_->has_input_media(result->file_id, to_secret)) {
if (td_->documents_manager_->has_input_media(result->file_id, thumbnail_file_id, to_secret)) {
return std::move(result);
}
result->file_id = td_->video_notes_manager_->dup_video_note(fix_file_id(result->file_id), result->file_id);
Expand All @@ -20473,7 +20482,7 @@ unique_ptr<MessageContent> MessagesManager::dup_message_content(DialogId dialog_
case MessageVoiceNote::ID: {
auto result = make_unique<MessageVoiceNote>(*static_cast<const MessageVoiceNote *>(content));
result->is_listened = false;
if (td_->documents_manager_->has_input_media(result->file_id, to_secret)) {
if (td_->documents_manager_->has_input_media(result->file_id, thumbnail_file_id, to_secret)) {
return std::move(result);
}
result->file_id = td_->voice_notes_manager_->dup_voice_note(fix_file_id(result->file_id), result->file_id);
Expand Down
12 changes: 11 additions & 1 deletion td/telegram/Photo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -386,7 +386,17 @@ bool photo_has_input_media(FileManager *file_manager, const Photo &photo, bool i
auto file_id = photo.photos.back().file_id;
auto file_view = file_manager->get_file_view(file_id);
if (is_secret) {
return file_view.is_encrypted() && file_view.has_remote_location();
if (file_view.encryption_key().empty() || !file_view.has_remote_location()) {
return false;
}

for (const auto &size : photo.photos) {
if (size.type == 't' && size.file_id.is_valid()) {
return false;
}
}

return true;
} else {
if (file_view.is_encrypted()) {
return false;
Expand Down
1 change: 1 addition & 0 deletions td/telegram/SecretChatActor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1687,6 +1687,7 @@ void SecretChatActor::on_outbound_outer_send_message_promise(uint64 state_id, Pr
LOG(INFO) << "Outbound secret message [TODO] " << tag("logevent_id", state->message->logevent_id());
promise.set_value(Unit()); // Seems like this message is at least stored to binlog already
}

void SecretChatActor::outbound_loop(OutboundMessageState *state, uint64 state_id) {
if (close_flag_) {
return;
Expand Down
2 changes: 1 addition & 1 deletion td/telegram/StickersManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1229,7 +1229,7 @@ bool StickersManager::has_input_media(FileId sticker_file_id, bool is_secret) co
auto file_view = td_->file_manager_->get_file_view(sticker_file_id);
if (is_secret) {
if (file_view.is_encrypted()) {
if (file_view.has_remote_location()) {
if (file_view.has_remote_location() && !sticker->message_thumbnail.file_id.is_valid()) {
return true;
}
} else {
Expand Down
4 changes: 4 additions & 0 deletions td/telegram/Td.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3562,6 +3562,10 @@ void Td::on_channel_unban_timeout(int64 channel_id_long) {
contacts_manager_->on_channel_unban_timeout(ChannelId(narrow_cast<int32>(channel_id_long)));
}

bool Td::is_online() const {
return is_online_;
}

void Td::request(uint64 id, tl_object_ptr<td_api::Function> function) {
request_set_.insert(id);

Expand Down
2 changes: 2 additions & 0 deletions td/telegram/Td.h
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,8 @@ class Td final : public NetQueryCallback {

void on_channel_unban_timeout(int64 channel_id_long);

bool is_online() const;

template <class ActorT, class... ArgsT>
ActorId<ActorT> create_net_actor(ArgsT &&... args) {
auto slot_id = request_actors_.create(ActorOwn<>(), RequestActorIdType);
Expand Down

0 comments on commit 536def0

Please sign in to comment.