Do not drop streaming offset in cancelDownloadFile.

GitOrigin-RevId: 9f8699e85ba82ec84c0e85f9510b691f72af0c47
This commit is contained in:
levlam 2018-12-27 04:21:08 +03:00
parent 7ae4b6f220
commit c0f19bf6fd
3 changed files with 13 additions and 3 deletions

View File

@ -4859,6 +4859,9 @@ void Td::on_request(uint64 id, const td_api::getFile &request) {
} }
void Td::on_request(uint64 id, const td_api::getFileDownloadedPrefixSize &request) { void Td::on_request(uint64 id, const td_api::getFileDownloadedPrefixSize &request) {
if (request.offset_ < 0) {
return send_error_raw(id, 5, "Prefix offset must be non-negative");
}
auto file_view = file_manager_->get_file_view(FileId(request.file_id_, 0)); auto file_view = file_manager_->get_file_view(FileId(request.file_id_, 0));
if (file_view.empty()) { if (file_view.empty()) {
return send_closure(actor_id(this), &Td::send_error, id, Status::Error(10, "Unknown file id")); return send_closure(actor_id(this), &Td::send_error, id, Status::Error(10, "Unknown file id"));
@ -5677,6 +5680,9 @@ void Td::on_request(uint64 id, const td_api::downloadFile &request) {
if (!(1 <= priority && priority <= 32)) { if (!(1 <= priority && priority <= 32)) {
return send_error_raw(id, 5, "Download priority must be in [1;32] range"); return send_error_raw(id, 5, "Download priority must be in [1;32] range");
} }
if (request.offset_ < 0) {
return send_error_raw(id, 5, "Download offset must be non-negative");
}
file_manager_->download(FileId(request.file_id_, 0), download_file_callback_, priority, request.offset_); file_manager_->download(FileId(request.file_id_, 0), download_file_callback_, priority, request.offset_);
auto file = file_manager_->get_file_object(FileId(request.file_id_, 0), false); auto file = file_manager_->get_file_object(FileId(request.file_id_, 0), false);
@ -5688,6 +5694,9 @@ void Td::on_request(uint64 id, const td_api::downloadFile &request) {
} }
void Td::on_request(uint64 id, const td_api::setFileDownloadOffset &request) { void Td::on_request(uint64 id, const td_api::setFileDownloadOffset &request) {
if (request.offset_ < 0) {
return send_error_raw(id, 5, "Download offset must be non-negative");
}
file_manager_->download_set_offset(FileId(request.file_id_, 0), request.offset_); file_manager_->download_set_offset(FileId(request.file_id_, 0), request.offset_);
auto file = file_manager_->get_file_object(FileId(request.file_id_, 0), false); auto file = file_manager_->get_file_object(FileId(request.file_id_, 0), false);
if (file->id_ == 0) { if (file->id_ == 0) {
@ -5698,7 +5707,7 @@ void Td::on_request(uint64 id, const td_api::setFileDownloadOffset &request) {
} }
void Td::on_request(uint64 id, const td_api::cancelDownloadFile &request) { void Td::on_request(uint64 id, const td_api::cancelDownloadFile &request) {
file_manager_->download(FileId(request.file_id_, 0), nullptr, 0, request.only_if_pending_ ? -1 : 0); file_manager_->download(FileId(request.file_id_, 0), nullptr, request.only_if_pending_ ? -1 : 0, -1);
send_closure(actor_id(this), &Td::send_result, id, make_tl_object<td_api::ok>()); send_closure(actor_id(this), &Td::send_result, id, make_tl_object<td_api::ok>());
} }

View File

@ -87,7 +87,7 @@ class FileDownloadGenerateActor : public FileGenerateActor {
-1); -1);
} }
void hangup() override { void hangup() override {
send_closure(G()->file_manager(), &FileManager::download, file_id_, nullptr, 0, 0); send_closure(G()->file_manager(), &FileManager::download, file_id_, nullptr, 0, -1);
stop(); stop();
} }

View File

@ -357,6 +357,7 @@ bool FileView::is_downloading() const {
int64 FileView::download_offset() const { int64 FileView::download_offset() const {
return node_->download_offset_; return node_->download_offset_;
} }
int64 FileView::downloaded_prefix(int64 offset) const { int64 FileView::downloaded_prefix(int64 offset) const {
switch (node_->local_.type()) { switch (node_->local_.type()) {
case LocalFileLocation::Type::Empty: case LocalFileLocation::Type::Empty:
@ -1582,7 +1583,7 @@ void FileManager::download(FileId file_id, std::shared_ptr<DownloadCallback> cal
LOG(INFO) << "Change download priority of file " << file_id << " to " << new_priority; LOG(INFO) << "Change download priority of file " << file_id << " to " << new_priority;
if (file_view.is_encrypted_any()) { if (file_view.is_encrypted_any()) {
// TODO: we need to set it always and just download from the beginning // TODO: we need to set offset always and just download from the beginning
offset = 0; offset = 0;
} }
node->set_download_offset(offset); node->set_download_offset(offset);