diff --git a/Telegram/SourceFiles/passport/passport_form_controller.cpp b/Telegram/SourceFiles/passport/passport_form_controller.cpp index 7eb85c23d0..9df2df9f87 100644 --- a/Telegram/SourceFiles/passport/passport_form_controller.cpp +++ b/Telegram/SourceFiles/passport/passport_form_controller.cpp @@ -16,6 +16,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "mainwindow.h" #include "auth_session.h" #include "storage/localimageloader.h" +#include "storage/localstorage.h" #include "storage/file_upload.h" #include "storage/file_download.h" @@ -323,21 +324,21 @@ void FormController::uploadEncryptedScan( auto &file = _form.fields[fieldIndex].filesInEdit[fileIndex]; file.uploaded = std::make_unique(std::move(data)); - auto uploaded = std::make_shared( + auto prepared = std::make_shared( TaskId(), file.uploaded->fileId, FileLoadTo(PeerId(0), false, MsgId(0)), TextWithTags(), std::shared_ptr(nullptr)); - uploaded->type = SendMediaType::Secure; - uploaded->content = QByteArray::fromRawData( + prepared->type = SendMediaType::Secure; + prepared->content = QByteArray::fromRawData( reinterpret_cast(file.uploaded->bytes.data()), file.uploaded->bytes.size()); - uploaded->setFileData(uploaded->content); - uploaded->filemd5 = file.uploaded->md5checksum; + prepared->setFileData(prepared->content); + prepared->filemd5 = file.uploaded->md5checksum; file.uploaded->fullId = FullMsgId(0, clientMsgId()); - Auth().uploader().upload(file.uploaded->fullId, std::move(uploaded)); + Auth().uploader().upload(file.uploaded->fullId, std::move(prepared)); } void FormController::scanUploadDone(const Storage::UploadSecureDone &data) { @@ -790,6 +791,18 @@ auto FormController::parseFiles( if (i != editData.end()) { normal.image = i->fields.image; normal.downloadOffset = i->fields.downloadOffset; + if (i->uploaded) { + Local::writeImage( + StorageKey( + storageMix32To64( + SecureFileLocation, + normal.dcId), + normal.id), + StorageImageSaved(QByteArray::fromRawData( + reinterpret_cast( + i->uploaded->bytes.data()), + i->uploaded->bytes.size()))); + } } result.push_back(std::move(normal)); } break; diff --git a/Telegram/SourceFiles/storage/file_download.cpp b/Telegram/SourceFiles/storage/file_download.cpp index 7388e63334..496be2951e 100644 --- a/Telegram/SourceFiles/storage/file_download.cpp +++ b/Telegram/SourceFiles/storage/file_download.cpp @@ -773,6 +773,12 @@ bool mtpFileLoader::feedPart(int offset, bytes::const_span buffer) { Local::writeStickerImage(mkey, _data); } else if (_locationType == AudioFileLocation) { Local::writeAudio(mkey, _data); + } else if (_locationType == SecureFileLocation) { + Local::writeImage( + StorageKey( + storageMix32To64(_locationType, _dcId), + _id), + StorageImageSaved(_data)); } } } else { @@ -896,6 +902,10 @@ bool mtpFileLoader::tryLoadLocal() { _localTaskId = Local::startStickerImageLoad(mkey, this); } else if (_locationType == AudioFileLocation) { _localTaskId = Local::startAudioLoad(mkey, this); + } else if (_locationType == SecureFileLocation) { + _localTaskId = Local::startImageLoad(StorageKey( + storageMix32To64(_locationType, _dcId), + _id), this); } } }