From f7aadc352b2f8bbe2bc0aa41970327f169699256 Mon Sep 17 00:00:00 2001 From: John Preston Date: Sun, 24 Jun 2018 13:30:09 +0100 Subject: [PATCH] Handle LOCATION_INVALID error. --- .../SourceFiles/export/export_api_wrap.cpp | 25 +++++++++++++++++-- Telegram/SourceFiles/export/export_api_wrap.h | 1 + 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/Telegram/SourceFiles/export/export_api_wrap.cpp b/Telegram/SourceFiles/export/export_api_wrap.cpp index 3ed629756bd828..58d39e05d2f8c5 100644 --- a/Telegram/SourceFiles/export/export_api_wrap.cpp +++ b/Telegram/SourceFiles/export/export_api_wrap.cpp @@ -282,6 +282,8 @@ auto ApiWrap::fileRequest(const Data::FileLocation &location, int offset) { filePartDone(0, MTP_upload_file(MTP_storage_filePartial(), MTP_int(0), MTP_bytes(QByteArray()))); + } else if (result.type() == qstr("LOCATION_INVALID")) { + filePartUnavailable(); } else { error(std::move(result)); } @@ -558,8 +560,11 @@ void ApiWrap::requestOtherData( void ApiWrap::otherDataDone(const QString &relativePath) { Expects(_otherDataProcess != nullptr); - _otherDataProcess->file.relativePath = relativePath; const auto process = base::take(_otherDataProcess); + process->file.relativePath = relativePath; + if (relativePath.isEmpty()) { + process->file.skipReason = Data::File::SkipReason::Unavailable; + } process->done(std::move(process->file)); } @@ -696,6 +701,9 @@ void ApiWrap::loadUserpicDone(const QString &relativePath) { const auto index = _userpicsProcess->fileIndex; auto &file = _userpicsProcess->slice->list[index].image.file; file.relativePath = relativePath; + if (relativePath.isEmpty()) { + file.skipReason = Data::File::SkipReason::Unavailable; + } loadNextUserpic(); } @@ -1139,7 +1147,11 @@ void ApiWrap::loadMessageFileDone(const QString &relativePath) { && (_chatProcess->fileIndex < _chatProcess->slice->list.size())); const auto index = _chatProcess->fileIndex; - _chatProcess->slice->list[index].file().relativePath = relativePath; + auto &file = _chatProcess->slice->list[index].file(); + file.relativePath = relativePath; + if (relativePath.isEmpty()) { + file.skipReason = Data::File::SkipReason::Unavailable; + } loadNextMessageFile(); } @@ -1352,6 +1364,15 @@ void ApiWrap::filePartDone(int offset, const MTPupload_File &result) { process->done(process->relativePath); } +void ApiWrap::filePartUnavailable() { + Expects(_fileProcess != nullptr); + Expects(!_fileProcess->requests.empty()); + + LOG(("Export Error: File unavailable.")); + + base::take(_fileProcess)->done(QString()); +} + void ApiWrap::error(RPCError &&error) { _errors.fire(std::move(error)); } diff --git a/Telegram/SourceFiles/export/export_api_wrap.h b/Telegram/SourceFiles/export/export_api_wrap.h index 564b5429878e8c..6b10c1bb028851 100644 --- a/Telegram/SourceFiles/export/export_api_wrap.h +++ b/Telegram/SourceFiles/export/export_api_wrap.h @@ -167,6 +167,7 @@ class ApiWrap { FnMut done); void loadFilePart(); void filePartDone(int offset, const MTPupload_File &result); + void filePartUnavailable(); template [[nodiscard]] auto mainRequest(Request &&request);