Fix cancelling upload file for yet unsent messages.

GitOrigin-RevId: e525b421c7cf1cd98923215dba23966496f2e36c
This commit is contained in:
levlam 2019-02-15 19:54:18 +03:00
parent 7a6a506e9e
commit fd5b5d6e55
2 changed files with 14 additions and 7 deletions

View File

@ -6277,8 +6277,8 @@ void MessagesManager::on_load_secret_thumbnail(FileId thumbnail_file_id, BufferS
if (m == nullptr) { if (m == nullptr) {
// message has already been deleted by the user, do not need to send it // message has already been deleted by the user, do not need to send it
// cancel file upload of the main file to allow next upload with the same file to succeed // cancel file upload of the main file to allow next upload with the same file to succeed
td_->file_manager_->cancel_upload(file_id);
LOG(INFO) << "Message with a media has already been deleted"; LOG(INFO) << "Message with a media has already been deleted";
cancel_upload_file(file_id);
return; return;
} }
CHECK(m->message_id.is_yet_unsent()); CHECK(m->message_id.is_yet_unsent());
@ -15005,18 +15005,23 @@ vector<FileId> MessagesManager::get_message_file_ids(const Message *message) con
void MessagesManager::cancel_upload_message_content_files(const MessageContent *content) { void MessagesManager::cancel_upload_message_content_files(const MessageContent *content) {
auto file_id = get_message_content_file_id(content); auto file_id = get_message_content_file_id(content);
// always cancel file upload, it is a no-op in the worst case // always cancel file upload, it should be a no-op in the worst case
if (being_uploaded_files_.erase(file_id) || file_id.is_valid()) { if (being_uploaded_files_.erase(file_id) || file_id.is_valid()) {
LOG(INFO) << "Cancel upload file " << file_id; cancel_upload_file(file_id);
td_->file_manager_->cancel_upload(file_id);
} }
file_id = get_message_content_thumbnail_file_id(content, td_); file_id = get_message_content_thumbnail_file_id(content, td_);
if (being_uploaded_thumbnails_.erase(file_id) || file_id.is_valid()) { if (being_uploaded_thumbnails_.erase(file_id) || file_id.is_valid()) {
LOG(INFO) << "Cancel upload thumbnail file " << file_id; cancel_upload_file(file_id);
td_->file_manager_->cancel_upload(file_id);
} }
} }
void MessagesManager::cancel_upload_file(FileId file_id) {
// send the request later so they doesn't interfere with other actions
// for example merge, supposed to happen soon, can auto-cancel the upload
LOG(WARNING) << "Cancel upload of file " << file_id;
send_closure_later(G()->file_manager(), &FileManager::cancel_upload, file_id);
}
void MessagesManager::cancel_send_message_query(DialogId dialog_id, unique_ptr<Message> &m) { void MessagesManager::cancel_send_message_query(DialogId dialog_id, unique_ptr<Message> &m) {
CHECK(m != nullptr); CHECK(m != nullptr);
CHECK(m->content != nullptr); CHECK(m->content != nullptr);
@ -22431,7 +22436,7 @@ bool MessagesManager::update_message_content(DialogId dialog_id, Message *old_me
if (need_finish_upload) { if (need_finish_upload) {
// the file is likely to be already merged with a server file, but if not we need to // the file is likely to be already merged with a server file, but if not we need to
// cancel file upload of the main file to allow next upload with the same file to succeed // cancel file upload of the main file to allow next upload with the same file to succeed
td_->file_manager_->cancel_upload(old_file_id); cancel_upload_file(old_file_id);
} }
if (is_content_changed || need_update) { if (is_content_changed || need_update) {

View File

@ -1802,6 +1802,8 @@ class MessagesManager : public Actor {
void cancel_upload_message_content_files(const MessageContent *content); void cancel_upload_message_content_files(const MessageContent *content);
static void cancel_upload_file(FileId file_id);
void cancel_send_message_query(DialogId dialog_id, unique_ptr<Message> &m); void cancel_send_message_query(DialogId dialog_id, unique_ptr<Message> &m);
static int32 get_message_flags(const Message *m); static int32 get_message_flags(const Message *m);