Save sticker path thumbnails to local storage.

This commit is contained in:
John Preston 2021-07-02 13:39:08 +03:00
parent 4124c2eb57
commit 01b4a24ac7

View File

@ -18,7 +18,7 @@ namespace Serialize {
namespace { namespace {
constexpr auto kVersionTag = int32(0x7FFFFFFF); constexpr auto kVersionTag = int32(0x7FFFFFFF);
constexpr auto kVersion = 1; constexpr auto kVersion = 2;
enum StickerSetType { enum StickerSetType {
StickerSetTypeEmpty = 0, StickerSetTypeEmpty = 0,
@ -54,7 +54,10 @@ void Document::writeToStream(QDataStream &stream, DocumentData *document) {
writeImageLocation(stream, document->thumbnailLocation()); writeImageLocation(stream, document->thumbnailLocation());
stream << qint32(document->thumbnailByteSize()); stream << qint32(document->thumbnailByteSize());
writeImageLocation(stream, document->videoThumbnailLocation()); writeImageLocation(stream, document->videoThumbnailLocation());
stream << qint32(document->videoThumbnailByteSize()); stream
<< qint32(document->videoThumbnailByteSize())
<< qint32(document->inlineThumbnailIsPath() ? 1 : 0)
<< document->inlineThumbnailBytes();
} }
DocumentData *Document::readFromStreamHelper( DocumentData *Document::readFromStreamHelper(
@ -124,11 +127,16 @@ DocumentData *Document::readFromStreamHelper(
} }
std::optional<ImageLocation> videoThumb; std::optional<ImageLocation> videoThumb;
qint32 thumbnailByteSize = 0, videoThumbnailByteSize = 0; qint32 thumbnailByteSize = 0, videoThumbnailByteSize = 0;
qint32 inlineThumbnailIsPath = 0;
QByteArray inlineThumbnailBytes;
const auto thumb = readImageLocation(streamAppVersion, stream); const auto thumb = readImageLocation(streamAppVersion, stream);
if (version >= 1) { if (version >= 1) {
stream >> thumbnailByteSize; stream >> thumbnailByteSize;
videoThumb = readImageLocation(streamAppVersion, stream); videoThumb = readImageLocation(streamAppVersion, stream);
stream >> videoThumbnailByteSize; stream >> videoThumbnailByteSize;
if (version >= 2) {
stream >> inlineThumbnailIsPath >> inlineThumbnailBytes;
}
} else { } else {
videoThumb = ImageLocation(); videoThumb = ImageLocation();
} }
@ -164,7 +172,10 @@ DocumentData *Document::readFromStreamHelper(
date, date,
attributes, attributes,
mime, mime,
InlineImageLocation(), InlineImageLocation{
inlineThumbnailBytes,
(inlineThumbnailIsPath == 1),
},
ImageWithLocation{ ImageWithLocation{
.location = *thumb, .location = *thumb,
.bytesCount = thumbnailByteSize .bytesCount = thumbnailByteSize
@ -195,8 +206,10 @@ DocumentData *Document::readFromStream(
int Document::sizeInStream(DocumentData *document) { int Document::sizeInStream(DocumentData *document) {
int result = 0; int result = 0;
// id + access + date + version // id + access + date
result += sizeof(quint64) + sizeof(quint64) + sizeof(qint32) + sizeof(qint32); result += sizeof(quint64) + sizeof(quint64) + sizeof(qint32);
// file_reference + version tag + version
result += bytearraySize(document->_fileReference) + sizeof(qint32) * 2;
// + namelen + name + mimelen + mime + dc + size // + namelen + name + mimelen + mime + dc + size
result += stringSize(document->filename()) + stringSize(document->mimeString()) + sizeof(qint32) + sizeof(qint32); result += stringSize(document->filename()) + stringSize(document->mimeString()) + sizeof(qint32) + sizeof(qint32);
// + width + height // + width + height
@ -213,6 +226,11 @@ int Document::sizeInStream(DocumentData *document) {
} }
// + thumb loc // + thumb loc
result += Serialize::imageLocationSize(document->thumbnailLocation()); result += Serialize::imageLocationSize(document->thumbnailLocation());
result += sizeof(qint32); // thumbnail_byte_size
result += Serialize::imageLocationSize(document->videoThumbnailLocation());
result += sizeof(qint32); // video_thumbnail_byte_size
result += sizeof(qint32) + Serialize::bytearraySize(document->inlineThumbnailBytes());
return result; return result;
} }