mirror of
https://github.com/telegramdesktop/tdesktop
synced 2025-09-05 17:06:03 +00:00
new image / file confirm / send codepath made by Task / TaskQueue, sending single file paste and image paste / drop with that new code
This commit is contained in:
@@ -22,7 +22,12 @@ Copyright (c) 2014-2015 John Preston, https://desktop.telegram.org
|
||||
#include "localimageloader.h"
|
||||
#include "gui/filedialog.h"
|
||||
#include "audio.h"
|
||||
#include <libexif/exif-data.h>
|
||||
|
||||
#include "boxes/photosendbox.h"
|
||||
#include "mainwidget.h"
|
||||
#include "window.h"
|
||||
#include "lang.h"
|
||||
#include "boxes/confirmbox.h"
|
||||
|
||||
LocalImageLoaderPrivate::LocalImageLoaderPrivate(LocalImageLoader *loader, QThread *thread) : QObject(0)
|
||||
, loader(loader)
|
||||
@@ -42,7 +47,7 @@ void LocalImageLoaderPrivate::prepareImages() {
|
||||
uint64 id, thumbId = 0;
|
||||
int32 duration = 0;
|
||||
QString thumbExt = "jpg";
|
||||
ToPrepareMediaType type;
|
||||
PrepareMediaType type;
|
||||
bool animated = false;
|
||||
bool broadcast = false;
|
||||
bool ctrlShiftEnter = false;
|
||||
@@ -67,53 +72,53 @@ void LocalImageLoaderPrivate::prepareImages() {
|
||||
if (img.isNull()) {
|
||||
if (!file.isEmpty()) {
|
||||
QFileInfo info(file);
|
||||
if (type == ToPrepareAuto) {
|
||||
if (type == PrepareAuto) {
|
||||
QString lower(file.toLower());
|
||||
const QStringList &photoExtensions(cPhotoExtensions());
|
||||
for (QStringList::const_iterator i = photoExtensions.cbegin(), e = photoExtensions.cend(); i != e; ++i) {
|
||||
if (lower.lastIndexOf(*i) == lower.size() - i->size()) {
|
||||
if (info.size() < MaxUploadPhotoSize) {
|
||||
type = ToPreparePhoto;
|
||||
type = PreparePhoto;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (type == ToPrepareAuto && info.size() < MaxUploadDocumentSize) {
|
||||
type = ToPrepareDocument;
|
||||
if (type == PrepareAuto && info.size() < MaxUploadDocumentSize) {
|
||||
type = PrepareDocument;
|
||||
}
|
||||
}
|
||||
if (type != ToPrepareAuto && info.size() < MaxUploadPhotoSize) {
|
||||
if (type != PrepareAuto && info.size() < MaxUploadPhotoSize) {
|
||||
bool opaque = (mime != stickerMime);
|
||||
img = App::readImage(file, 0, opaque, &animated);
|
||||
if (animated) {
|
||||
type = ToPrepareDocument;
|
||||
type = PrepareDocument;
|
||||
}
|
||||
}
|
||||
if (type == ToPrepareDocument) {
|
||||
if (type == PrepareDocument) {
|
||||
mime = mimeTypeForFile(info).name();
|
||||
}
|
||||
filename = info.fileName();
|
||||
filesize = info.size();
|
||||
} else if (!data.isEmpty()) {
|
||||
if (type != ToPrepareAudio) {
|
||||
if (type != PrepareAudio) {
|
||||
img = App::readImage(data, 0, true, &animated);
|
||||
if (type == ToPrepareAuto) {
|
||||
if (type == PrepareAuto) {
|
||||
if (!img.isNull() && data.size() < MaxUploadPhotoSize) {
|
||||
type = ToPreparePhoto;
|
||||
type = PreparePhoto;
|
||||
} else if (data.size() < MaxUploadDocumentSize) {
|
||||
type = ToPrepareDocument;
|
||||
type = PrepareDocument;
|
||||
} else {
|
||||
img = QImage();
|
||||
}
|
||||
}
|
||||
}
|
||||
MimeType mimeType = mimeTypeForData(data);
|
||||
if (type == ToPrepareDocument || type == ToPrepareAudio) {
|
||||
if (type == PrepareDocument || type == PrepareAudio) {
|
||||
mime = mimeType.name();
|
||||
}
|
||||
if (mime == "image/jpeg") {
|
||||
filename = filedialogDefaultName(qsl("image"), qsl(".jpg"), QString(), true);
|
||||
} else if (type == ToPrepareAudio) {
|
||||
} else if (type == PrepareAudio) {
|
||||
filename = filedialogDefaultName(qsl("audio"), qsl(".ogg"), QString(), true);
|
||||
mime = "audio/ogg";
|
||||
} else {
|
||||
@@ -122,12 +127,12 @@ void LocalImageLoaderPrivate::prepareImages() {
|
||||
if (!patterns.isEmpty()) {
|
||||
ext = patterns.front().replace('*', QString());
|
||||
}
|
||||
filename = filedialogDefaultName((type == ToPrepareAudio) ? qsl("audio") : qsl("doc"), ext, QString(), true);
|
||||
filename = filedialogDefaultName((type == PrepareAudio) ? qsl("audio") : qsl("doc"), ext, QString(), true);
|
||||
}
|
||||
filesize = data.size();
|
||||
}
|
||||
} else {
|
||||
if (type == ToPrepareDocument) {
|
||||
if (type == PrepareDocument) {
|
||||
filename = filedialogDefaultName(qsl("image"), qsl(".png"), QString(), true);
|
||||
mime = mimeTypeForName("image/png").name();
|
||||
data = QByteArray();
|
||||
@@ -145,13 +150,13 @@ void LocalImageLoaderPrivate::prepareImages() {
|
||||
}
|
||||
img = solid;
|
||||
}
|
||||
type = ToPreparePhoto;
|
||||
type = PreparePhoto;
|
||||
filename = qsl("Untitled.jpg");
|
||||
filesize = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if ((img.isNull() && ((type != ToPrepareDocument && type != ToPrepareAudio) || !filesize)) || type == ToPrepareAuto || (img.isNull() && file.isEmpty() && data.isEmpty())) { // if could not decide what type
|
||||
if ((img.isNull() && ((type != PrepareDocument && type != PrepareAudio) || !filesize)) || type == PrepareAuto || (img.isNull() && file.isEmpty() && data.isEmpty())) { // if could not decide what type
|
||||
{
|
||||
QMutexLocker lock(loader->toPrepareMutex());
|
||||
ToPrepareMedias &list(loader->toPrepareMedias());
|
||||
@@ -174,7 +179,7 @@ void LocalImageLoaderPrivate::prepareImages() {
|
||||
|
||||
bool isSong = false;
|
||||
QByteArray jpeg;
|
||||
if (type == ToPrepareDocument) {
|
||||
if (type == PrepareDocument) {
|
||||
if (mime == qstr("audio/mp3") || mime == qstr("audio/m4a") || mime == qstr("audio/aac") || mime == qstr("audio/ogg") || mime == qstr("audio/flac") ||
|
||||
filename.endsWith(qstr(".mp3"), Qt::CaseInsensitive) || filename.endsWith(qstr(".m4a"), Qt::CaseInsensitive) ||
|
||||
filename.endsWith(qstr(".aac"), Qt::CaseInsensitive) || filename.endsWith(qstr(".ogg"), Qt::CaseInsensitive) ||
|
||||
@@ -207,7 +212,7 @@ void LocalImageLoaderPrivate::prepareImages() {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (type == ToPreparePhoto) {
|
||||
if (type == PreparePhoto) {
|
||||
int32 w = img.width(), h = img.height();
|
||||
|
||||
QPixmap thumb = (w > 100 || h > 100) ? QPixmap::fromImage(img.scaled(100, 100, Qt::KeepAspectRatio, Qt::SmoothTransformation), Qt::ColorOnly) : QPixmap::fromImage(img);
|
||||
@@ -231,7 +236,7 @@ void LocalImageLoaderPrivate::prepareImages() {
|
||||
photo = MTP_photo(MTP_long(id), MTP_long(0), MTP_int(unixtime()), MTP_vector<MTPPhotoSize>(photoSizes));
|
||||
|
||||
thumbId = id;
|
||||
} else if ((type == ToPrepareVideo || type == ToPrepareDocument) && !img.isNull() && !isSong) {
|
||||
} else if ((type == PrepareVideo || type == PrepareDocument) && !img.isNull() && !isSong) {
|
||||
int32 w = img.width(), h = img.height();
|
||||
QByteArray thumbFormat = "JPG";
|
||||
int32 thumbQuality = 87;
|
||||
@@ -258,9 +263,9 @@ void LocalImageLoaderPrivate::prepareImages() {
|
||||
}
|
||||
}
|
||||
|
||||
if (type == ToPrepareDocument) {
|
||||
if (type == PrepareDocument) {
|
||||
document = MTP_document(MTP_long(id), MTP_long(0), MTP_int(unixtime()), MTP_string(mime), MTP_int(filesize), thumb, MTP_int(MTP::maindc()), MTP_vector<MTPDocumentAttribute>(attributes));
|
||||
} else if (type == ToPrepareAudio) {
|
||||
} else if (type == PrepareAudio) {
|
||||
audio = MTP_audio(MTP_long(id), MTP_long(0), MTP_int(unixtime()), MTP_int(duration), MTP_string(mime), MTP_int(filesize), MTP_int(MTP::maindc()));
|
||||
}
|
||||
|
||||
@@ -288,7 +293,7 @@ LocalImageLoaderPrivate::~LocalImageLoaderPrivate() {
|
||||
LocalImageLoader::LocalImageLoader(QObject *parent) : QObject(parent), thread(0), priv(0) {
|
||||
}
|
||||
|
||||
void LocalImageLoader::append(const QStringList &files, const PeerId &peer, bool broadcast, MsgId replyTo, ToPrepareMediaType t) {
|
||||
void LocalImageLoader::append(const QStringList &files, const PeerId &peer, bool broadcast, MsgId replyTo, PrepareMediaType t) {
|
||||
{
|
||||
QMutexLocker lock(toPrepareMutex());
|
||||
for (QStringList::const_iterator i = files.cbegin(), e = files.cend(); i != e; ++i) {
|
||||
@@ -303,7 +308,7 @@ void LocalImageLoader::append(const QStringList &files, const PeerId &peer, bool
|
||||
emit needToPrepare();
|
||||
}
|
||||
|
||||
PhotoId LocalImageLoader::append(const QByteArray &img, const PeerId &peer, bool broadcast, MsgId replyTo, ToPrepareMediaType t) {
|
||||
PhotoId LocalImageLoader::append(const QByteArray &img, const PeerId &peer, bool broadcast, MsgId replyTo, PrepareMediaType t) {
|
||||
PhotoId result = 0;
|
||||
{
|
||||
QMutexLocker lock(toPrepareMutex());
|
||||
@@ -319,7 +324,7 @@ PhotoId LocalImageLoader::append(const QByteArray &img, const PeerId &peer, bool
|
||||
return result;
|
||||
}
|
||||
|
||||
AudioId LocalImageLoader::append(const QByteArray &audio, int32 duration, const PeerId &peer, bool broadcast, MsgId replyTo, ToPrepareMediaType t) {
|
||||
AudioId LocalImageLoader::append(const QByteArray &audio, int32 duration, const PeerId &peer, bool broadcast, MsgId replyTo, PrepareMediaType t) {
|
||||
AudioId result = 0;
|
||||
{
|
||||
QMutexLocker lock(toPrepareMutex());
|
||||
@@ -335,7 +340,7 @@ AudioId LocalImageLoader::append(const QByteArray &audio, int32 duration, const
|
||||
return result;
|
||||
}
|
||||
|
||||
PhotoId LocalImageLoader::append(const QImage &img, const PeerId &peer, bool broadcast, MsgId replyTo, ToPrepareMediaType t, bool ctrlShiftEnter) {
|
||||
PhotoId LocalImageLoader::append(const QImage &img, const PeerId &peer, bool broadcast, MsgId replyTo, PrepareMediaType t, bool ctrlShiftEnter) {
|
||||
PhotoId result = 0;
|
||||
{
|
||||
QMutexLocker lock(toPrepareMutex());
|
||||
@@ -351,7 +356,7 @@ PhotoId LocalImageLoader::append(const QImage &img, const PeerId &peer, bool bro
|
||||
return result;
|
||||
}
|
||||
|
||||
PhotoId LocalImageLoader::append(const QString &file, const PeerId &peer, bool broadcast, MsgId replyTo, ToPrepareMediaType t) {
|
||||
PhotoId LocalImageLoader::append(const QString &file, const PeerId &peer, bool broadcast, MsgId replyTo, PrepareMediaType t) {
|
||||
PhotoId result = 0;
|
||||
{
|
||||
QMutexLocker lock(toPrepareMutex());
|
||||
@@ -416,7 +421,6 @@ LocalImageLoader::~LocalImageLoader() {
|
||||
delete thread;
|
||||
}
|
||||
|
||||
|
||||
TaskQueue::TaskQueue(QObject *parent, int32 stopTimeoutMs) : QObject(parent), _thread(0), _worker(0), _stopTimer(0) {
|
||||
if (stopTimeoutMs > 0) {
|
||||
_stopTimer = new QTimer(this);
|
||||
@@ -534,3 +538,256 @@ void TaskQueueWorker::onTaskAdded() {
|
||||
|
||||
_inTaskAdded = false;
|
||||
}
|
||||
|
||||
FileLoadTask::FileLoadTask(const QString &filepath, PrepareMediaType type, const FileLoadTo &to, FileLoadForceConfirmType confirm) : _id(MTP::nonce<uint64>())
|
||||
, _to(to)
|
||||
, _filepath(filepath)
|
||||
, _duration(0)
|
||||
, _type(type)
|
||||
, _confirm(confirm)
|
||||
, _result(0) {
|
||||
}
|
||||
|
||||
FileLoadTask::FileLoadTask(const QByteArray &content, PrepareMediaType type, const FileLoadTo &to) : _id(MTP::nonce<uint64>())
|
||||
, _to(to)
|
||||
, _content(content)
|
||||
, _duration(0)
|
||||
, _type(type)
|
||||
, _confirm(FileLoadNoForceConfirm)
|
||||
, _result(0) {
|
||||
}
|
||||
|
||||
FileLoadTask::FileLoadTask(const QImage &image, const FileLoadTo &to, FileLoadForceConfirmType confirm, const QString &originalText) : _id(MTP::nonce<uint64>())
|
||||
, _to(to)
|
||||
, _image(image)
|
||||
, _duration(0)
|
||||
, _type(PrepareAuto)
|
||||
, _confirm(confirm)
|
||||
, _originalText(originalText)
|
||||
, _result(0) {
|
||||
}
|
||||
|
||||
FileLoadTask::FileLoadTask(const QByteArray &audio, int32 duration, const FileLoadTo &to) : _id(MTP::nonce<uint64>())
|
||||
, _to(to)
|
||||
, _content(audio)
|
||||
, _duration(duration)
|
||||
, _type(PrepareAudio)
|
||||
, _confirm(FileLoadNoForceConfirm)
|
||||
, _result(0) {
|
||||
}
|
||||
|
||||
void FileLoadTask::process() {
|
||||
const QString stickerMime = qsl("image/webp");
|
||||
|
||||
_result = FileLoadResultPtr(new FileLoadResult(_id, _to));
|
||||
|
||||
QString filename, filemime;
|
||||
qint64 filesize = 0;
|
||||
QByteArray filedata;
|
||||
|
||||
uint64 thumbId = 0;
|
||||
QString thumbname = "thumb.jpg";
|
||||
QByteArray thumbdata;
|
||||
|
||||
bool animated = false;
|
||||
QImage fullimage = _image;
|
||||
|
||||
if (!_filepath.isEmpty()) {
|
||||
QFileInfo info(_filepath);
|
||||
filesize = info.size();
|
||||
filemime = mimeTypeForFile(info).name();
|
||||
filename = info.fileName();
|
||||
if (filesize <= MaxUploadPhotoSize && _type != PrepareAudio) {
|
||||
bool opaque = (filemime != stickerMime);
|
||||
fullimage = App::readImage(_filepath, 0, opaque, &animated);
|
||||
}
|
||||
} else if (!_content.isEmpty()) {
|
||||
filesize = _content.size();
|
||||
MimeType mimeType = mimeTypeForData(_content);
|
||||
filemime = mimeType.name();
|
||||
if (filesize <= MaxUploadPhotoSize && _type != PrepareAudio) {
|
||||
bool opaque = (filemime != stickerMime);
|
||||
fullimage = App::readImage(_content, 0, opaque, &animated);
|
||||
}
|
||||
if (filemime == "image/jpeg") {
|
||||
filename = filedialogDefaultName(qsl("image"), qsl(".jpg"), QString(), true);
|
||||
} else if (_type == PrepareAudio) {
|
||||
filename = filedialogDefaultName(qsl("audio"), qsl(".ogg"), QString(), true);
|
||||
filemime = "audio/ogg";
|
||||
} else {
|
||||
QString ext;
|
||||
QStringList patterns = mimeType.globPatterns();
|
||||
if (!patterns.isEmpty()) {
|
||||
ext = patterns.front().replace('*', QString());
|
||||
}
|
||||
filename = filedialogDefaultName(qsl("file"), ext, QString(), true);
|
||||
}
|
||||
} else if (!_image.isNull()) {
|
||||
_image = QImage();
|
||||
|
||||
filemime = mimeTypeForName("image/png").name();
|
||||
filename = filedialogDefaultName(qsl("image"), qsl(".png"), QString(), true);
|
||||
{
|
||||
QBuffer buffer(&_content);
|
||||
fullimage.save(&buffer, "PNG");
|
||||
}
|
||||
filesize = _content.size();
|
||||
|
||||
if (fullimage.hasAlphaChannel()) {
|
||||
QImage solid(fullimage.width(), fullimage.height(), QImage::Format_ARGB32_Premultiplied);
|
||||
solid.fill(st::white->c);
|
||||
{
|
||||
QPainter(&solid).drawImage(0, 0, fullimage);
|
||||
}
|
||||
fullimage = solid;
|
||||
}
|
||||
}
|
||||
_result->filesize = (int32)qMin(filesize, qint64(INT_MAX));
|
||||
|
||||
if (!filesize || filesize > MaxUploadDocumentSize) {
|
||||
return;
|
||||
}
|
||||
|
||||
PreparedPhotoThumbs photoThumbs;
|
||||
QVector<MTPPhotoSize> photoSizes;
|
||||
QPixmap thumb;
|
||||
|
||||
QVector<MTPDocumentAttribute> attributes(1, MTP_documentAttributeFilename(MTP_string(filename)));
|
||||
|
||||
MTPPhotoSize thumbSize(MTP_photoSizeEmpty(MTP_string("")));
|
||||
MTPPhoto photo(MTP_photoEmpty(MTP_long(0)));
|
||||
MTPDocument document(MTP_documentEmpty(MTP_long(0)));
|
||||
MTPAudio audio(MTP_audioEmpty(MTP_long(0)));
|
||||
|
||||
bool song = false;
|
||||
if (_type != PrepareAudio) {
|
||||
if (filemime == qstr("audio/mp3") || filemime == qstr("audio/m4a") || filemime == qstr("audio/aac") || filemime == qstr("audio/ogg") || filemime == qstr("audio/flac") ||
|
||||
filename.endsWith(qstr(".mp3"), Qt::CaseInsensitive) || filename.endsWith(qstr(".m4a"), Qt::CaseInsensitive) ||
|
||||
filename.endsWith(qstr(".aac"), Qt::CaseInsensitive) || filename.endsWith(qstr(".ogg"), Qt::CaseInsensitive) ||
|
||||
filename.endsWith(qstr(".flac"), Qt::CaseInsensitive)) {
|
||||
|
||||
QImage cover;
|
||||
QByteArray coverBytes, coverFormat;
|
||||
MTPDocumentAttribute audioAttribute = audioReadSongAttributes(_filepath, _content, cover, coverBytes, coverFormat);
|
||||
if (audioAttribute.type() == mtpc_documentAttributeAudio) {
|
||||
attributes.push_back(audioAttribute);
|
||||
song = true;
|
||||
if (!cover.isNull()) { // cover to thumb
|
||||
int32 cw = cover.width(), ch = cover.height();
|
||||
if (cw < 20 * ch && ch < 20 * cw) {
|
||||
QPixmap full = (cw > 90 || ch > 90) ? QPixmap::fromImage(cover.scaled(90, 90, Qt::KeepAspectRatio, Qt::SmoothTransformation), Qt::ColorOnly) : QPixmap::fromImage(cover, Qt::ColorOnly);
|
||||
{
|
||||
QByteArray thumbFormat = "JPG";
|
||||
int32 thumbQuality = 87;
|
||||
|
||||
QBuffer buffer(&thumbdata);
|
||||
full.save(&buffer, thumbFormat, thumbQuality);
|
||||
}
|
||||
|
||||
thumb = full;
|
||||
thumbSize = MTP_photoSize(MTP_string(""), MTP_fileLocationUnavailable(MTP_long(0), MTP_int(0), MTP_long(0)), MTP_int(full.width()), MTP_int(full.height()), MTP_int(0));
|
||||
|
||||
thumbId = MTP::nonce<uint64>();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!fullimage.isNull() && fullimage.width() > 0 && !song) {
|
||||
int32 w = fullimage.width(), h = fullimage.height();
|
||||
attributes.push_back(MTP_documentAttributeImageSize(MTP_int(w), MTP_int(h)));
|
||||
|
||||
if (w < 20 * h && h < 20 * w) {
|
||||
if (animated) {
|
||||
attributes.push_back(MTP_documentAttributeAnimated());
|
||||
} else {
|
||||
QPixmap thumb = (w > 100 || h > 100) ? QPixmap::fromImage(fullimage.scaled(100, 100, Qt::KeepAspectRatio, Qt::SmoothTransformation), Qt::ColorOnly) : QPixmap::fromImage(fullimage);
|
||||
photoThumbs.insert('s', thumb);
|
||||
photoSizes.push_back(MTP_photoSize(MTP_string("s"), MTP_fileLocationUnavailable(MTP_long(0), MTP_int(0), MTP_long(0)), MTP_int(thumb.width()), MTP_int(thumb.height()), MTP_int(0)));
|
||||
|
||||
QPixmap medium = (w > 320 || h > 320) ? QPixmap::fromImage(fullimage.scaled(320, 320, Qt::KeepAspectRatio, Qt::SmoothTransformation), Qt::ColorOnly) : QPixmap::fromImage(fullimage);
|
||||
photoThumbs.insert('m', medium);
|
||||
photoSizes.push_back(MTP_photoSize(MTP_string("m"), MTP_fileLocationUnavailable(MTP_long(0), MTP_int(0), MTP_long(0)), MTP_int(medium.width()), MTP_int(medium.height()), MTP_int(0)));
|
||||
|
||||
QPixmap full = (w > 1280 || h > 1280) ? QPixmap::fromImage(fullimage.scaled(1280, 1280, Qt::KeepAspectRatio, Qt::SmoothTransformation), Qt::ColorOnly) : QPixmap::fromImage(fullimage);
|
||||
photoThumbs.insert('y', full);
|
||||
photoSizes.push_back(MTP_photoSize(MTP_string("y"), MTP_fileLocationUnavailable(MTP_long(0), MTP_int(0), MTP_long(0)), MTP_int(full.width()), MTP_int(full.height()), MTP_int(0)));
|
||||
|
||||
{
|
||||
QBuffer buffer(&filedata);
|
||||
full.save(&buffer, "JPG", 77);
|
||||
}
|
||||
|
||||
photo = MTP_photo(MTP_long(_id), MTP_long(0), MTP_int(unixtime()), MTP_vector<MTPPhotoSize>(photoSizes));
|
||||
}
|
||||
|
||||
QByteArray thumbFormat = "JPG";
|
||||
int32 thumbQuality = 87;
|
||||
if (!animated && filemime == stickerMime && w > 0 && h > 0 && w <= StickerMaxSize && h <= StickerMaxSize && filesize < StickerInMemory) {
|
||||
attributes.push_back(MTP_documentAttributeSticker(MTP_string(""), MTP_inputStickerSetEmpty()));
|
||||
thumbFormat = "webp";
|
||||
thumbname = qsl("thumb.webp");
|
||||
}
|
||||
|
||||
QPixmap full = (w > 90 || h > 90) ? QPixmap::fromImage(fullimage.scaled(90, 90, Qt::KeepAspectRatio, Qt::SmoothTransformation), Qt::ColorOnly) : QPixmap::fromImage(fullimage, Qt::ColorOnly);
|
||||
|
||||
{
|
||||
QBuffer buffer(&thumbdata);
|
||||
full.save(&buffer, thumbFormat, thumbQuality);
|
||||
}
|
||||
|
||||
thumb = full;
|
||||
thumbSize = MTP_photoSize(MTP_string(""), MTP_fileLocationUnavailable(MTP_long(0), MTP_int(0), MTP_long(0)), MTP_int(full.width()), MTP_int(full.height()), MTP_int(0));
|
||||
|
||||
thumbId = MTP::nonce<uint64>();
|
||||
}
|
||||
}
|
||||
|
||||
if (_type == PrepareAudio) {
|
||||
audio = MTP_audio(MTP_long(_id), MTP_long(0), MTP_int(unixtime()), MTP_int(_duration), MTP_string(filemime), MTP_int(filesize), MTP_int(MTP::maindc()));
|
||||
} else {
|
||||
document = MTP_document(MTP_long(_id), MTP_long(0), MTP_int(unixtime()), MTP_string(filemime), MTP_int(filesize), thumbSize, MTP_int(MTP::maindc()), MTP_vector<MTPDocumentAttribute>(attributes));
|
||||
if (photo.type() == mtpc_photoEmpty) {
|
||||
_type = PrepareDocument;
|
||||
}
|
||||
}
|
||||
|
||||
_result->type = _type;
|
||||
_result->filepath = _filepath;
|
||||
_result->content = _content;
|
||||
|
||||
_result->filename = filename;
|
||||
_result->setFileData(filedata);
|
||||
|
||||
_result->thumbId = thumbId;
|
||||
_result->thumbname = thumbname;
|
||||
_result->setThumbData(thumbdata);
|
||||
_result->thumb = thumb;
|
||||
|
||||
_result->photo = photo;
|
||||
_result->audio = audio;
|
||||
_result->document = document;
|
||||
_result->photoThumbs = photoThumbs;
|
||||
}
|
||||
|
||||
void FileLoadTask::finish() {
|
||||
if (!_result || !_result->filesize) {
|
||||
if (_result) App::main()->onSendFileCancel(_result);
|
||||
App::wnd()->replaceLayer(new InformBox(lang(lng_send_image_empty)));
|
||||
return;
|
||||
}
|
||||
if (_result->filesize > MaxUploadDocumentSize) {
|
||||
App::main()->onSendFileCancel(_result);
|
||||
App::wnd()->replaceLayer(new InformBox(lang(lng_send_image_too_large)));
|
||||
return;
|
||||
}
|
||||
if (App::main()) {
|
||||
bool confirm = (_confirm == FileLoadAlwaysConfirm) || (_result->photo.type() != mtpc_photoEmpty && _confirm != FileLoadNeverConfirm);
|
||||
if (confirm) {
|
||||
App::wnd()->showLayerLast(new PhotoSendBox(_result));
|
||||
} else {
|
||||
App::main()->onSendFileConfirm(_result, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user