Set correct cache tags for different file types.

This commit is contained in:
John Preston 2018-08-29 00:09:55 +03:00
parent e2f08d4161
commit 55f60866cb
9 changed files with 119 additions and 31 deletions

View File

@ -771,13 +771,15 @@ void DocumentData::save(
&_urlLocation,
size,
fromCloud,
autoLoading);
autoLoading,
cacheTag());
} else if (!_access && !_url.isEmpty()) {
_loader = new webFileLoader(
_url,
toFile,
fromCloud,
autoLoading);
autoLoading,
cacheTag());
} else {
_loader = new mtpFileLoader(
_dc,
@ -790,7 +792,8 @@ void DocumentData::save(
size,
(saveToCache() ? LoadToCacheAsWell : LoadToFileOnly),
fromCloud,
autoLoading);
autoLoading,
cacheTag());
}
_loader->connect(_loader, SIGNAL(progress(FileLoader*)), App::main(), SLOT(documentLoadProgress(FileLoader*)));
@ -1098,6 +1101,19 @@ Storage::Cache::Key DocumentData::cacheKey() const {
}
}
uint8 DocumentData::cacheTag() const {
if (type == StickerDocument) {
return Data::kStickerCacheTag;
} else if (isVoiceMessage()) {
return Data::kVoiceMessageCacheTag;
} else if (isVideoMessage()) {
return Data::kVideoMessageCacheTag;
} else if (isAnimation()) {
return Data::kAnimationCacheTag;
}
return 0;
}
QString DocumentData::composeNameString() const {
if (auto songData = song()) {
return ComposeNameString(

View File

@ -180,6 +180,7 @@ public:
MediaKey mediaKey() const;
Storage::Cache::Key cacheKey() const;
uint8 cacheTag() const;
static QString ComposeNameString(
const QString &filename,

View File

@ -357,7 +357,9 @@ bool MediaPhoto::updateSentMedia(const MTPMessageMedia &media) {
}
Auth().data().cache().putIfEmpty(
Data::StorageCacheKey(key),
image->savedData());
Storage::Cache::Database::TaggedValue(
image->savedData(),
Data::kImageCacheTag));
};
auto &sizes = photo.c_photo().vsizes.v;
auto max = 0;

View File

@ -41,6 +41,12 @@ Storage::Cache::Key StorageCacheKey(const StorageImageLocation &location);
Storage::Cache::Key WebDocumentCacheKey(const WebFileLocation &location);
Storage::Cache::Key UrlCacheKey(const QString &location);
constexpr auto kImageCacheTag = uint8(0x01);
constexpr auto kStickerCacheTag = uint8(0x02);
constexpr auto kVoiceMessageCacheTag = uint8(0x03);
constexpr auto kVideoMessageCacheTag = uint8(0x04);
constexpr auto kAnimationCacheTag = uint8(0x05);
} // namespace Data
struct MessageGroupId {

View File

@ -1732,7 +1732,8 @@ void FormController::loadFile(File &file) {
file.size,
LoadToCacheAsWell,
LoadFromCloudOrLocal,
false));
false,
Data::kImageCacheTag));
const auto loader = j->second.get();
loader->connect(loader, &mtpFileLoader::progress, [=] {
if (loader->finished()) {
@ -2341,9 +2342,11 @@ void FormController::fillDownloadedFile(
const auto &bytes = i->uploadData->bytes;
Auth().data().cache().put(
Data::DocumentCacheKey(destination.dcId, destination.id),
QByteArray(
reinterpret_cast<const char*>(bytes.data()),
bytes.size()));
Storage::Cache::Database::TaggedValue(
QByteArray(
reinterpret_cast<const char*>(bytes.data()),
bytes.size()),
Data::kImageCacheTag));
}
auto FormController::parseValue(

View File

@ -107,9 +107,17 @@ WebLoadMainManager *_webLoadMainManager = nullptr;
} // namespace
FileLoader::FileLoader(const QString &toFile, int32 size, LocationType locationType, LoadToCacheSetting toCache, LoadFromCloudSetting fromCloud, bool autoLoading)
FileLoader::FileLoader(
const QString &toFile,
int32 size,
LocationType locationType,
LoadToCacheSetting toCache,
LoadFromCloudSetting fromCloud,
bool autoLoading,
uint8 cacheTag)
: _downloader(&Auth().downloader())
, _autoLoading(autoLoading)
, _cacheTag(cacheTag)
, _filename(toFile)
, _file(_filename)
, _toCache(toCache)
@ -471,15 +479,17 @@ mtpFileLoader::mtpFileLoader(
not_null<StorageImageLocation*> location,
Data::FileOrigin origin,
int32 size,
LoadFromCloudSetting fromCloud
, bool autoLoading)
LoadFromCloudSetting fromCloud,
bool autoLoading,
uint8 cacheTag)
: FileLoader(
QString(),
size,
UnknownFileLocation,
LoadToCacheAsWell,
fromCloud,
autoLoading)
autoLoading,
cacheTag)
, _dcId(location->dc())
, _location(location)
, _origin(origin) {
@ -502,14 +512,16 @@ mtpFileLoader::mtpFileLoader(
int32 size,
LoadToCacheSetting toCache,
LoadFromCloudSetting fromCloud,
bool autoLoading)
bool autoLoading,
uint8 cacheTag)
: FileLoader(
to,
size,
type,
toCache,
fromCloud,
autoLoading)
autoLoading,
cacheTag)
, _dcId(dc)
, _id(id)
, _accessHash(accessHash)
@ -527,14 +539,16 @@ mtpFileLoader::mtpFileLoader(
const WebFileLocation *location,
int32 size,
LoadFromCloudSetting fromCloud,
bool autoLoading)
bool autoLoading,
uint8 cacheTag)
: FileLoader(
QString(),
size,
UnknownFileLocation,
LoadToCacheAsWell,
fromCloud,
autoLoading)
autoLoading,
cacheTag)
, _dcId(location->dc())
, _urlLocation(location) {
auto shiftedDcId = MTP::downloadDcId(_dcId, 0);
@ -957,7 +971,11 @@ bool mtpFileLoader::feedPart(int offset, bytes::const_span buffer) {
|| _locationType == UnknownFileLocation
|| _toCache == LoadToCacheAsWell) {
if (const auto key = cacheKey()) {
Auth().data().cache().put(*key, base::duplicate(_data));
Auth().data().cache().put(
*key,
Storage::Cache::Database::TaggedValue(
base::duplicate(_data),
_cacheTag));
}
}
}
@ -1105,8 +1123,20 @@ mtpFileLoader::~mtpFileLoader() {
cancelRequests();
}
webFileLoader::webFileLoader(const QString &url, const QString &to, LoadFromCloudSetting fromCloud, bool autoLoading)
: FileLoader(QString(), 0, UnknownFileLocation, LoadToCacheAsWell, fromCloud, autoLoading)
webFileLoader::webFileLoader(
const QString &url,
const QString &to,
LoadFromCloudSetting fromCloud,
bool autoLoading,
uint8 cacheTag)
: FileLoader(
QString(),
0,
UnknownFileLocation,
LoadToCacheAsWell,
fromCloud,
autoLoading,
cacheTag)
, _url(url)
, _requestSent(false)
, _already(0) {
@ -1167,7 +1197,11 @@ void webFileLoader::onFinished(const QByteArray &data) {
if (_localStatus == LocalStatus::NotFound) {
if (const auto key = cacheKey()) {
Auth().data().cache().put(*key, base::duplicate(_data));
Auth().data().cache().put(
*key,
Storage::Cache::Database::TaggedValue(
base::duplicate(_data),
_cacheTag));
}
}
_downloader->taskFinished().notify();

View File

@ -72,7 +72,15 @@ class FileLoader : public QObject {
Q_OBJECT
public:
FileLoader(const QString &toFile, int32 size, LocationType locationType, LoadToCacheSetting, LoadFromCloudSetting fromCloud, bool autoLoading);
FileLoader(
const QString &toFile,
int32 size,
LocationType locationType,
LoadToCacheSetting toCache,
LoadFromCloudSetting fromCloud,
bool autoLoading,
uint8 cacheTag);
bool finished() const {
return _finished;
}
@ -163,6 +171,7 @@ protected:
bool _paused = false;
bool _autoLoading = false;
uint8 _cacheTag = 0;
bool _inQueue = false;
bool _finished = false;
bool _cancelled = false;
@ -197,7 +206,8 @@ public:
Data::FileOrigin origin,
int32 size,
LoadFromCloudSetting fromCloud,
bool autoLoading);
bool autoLoading,
uint8 cacheTag);
mtpFileLoader(
int32 dc,
uint64 id,
@ -209,12 +219,14 @@ public:
int32 size,
LoadToCacheSetting toCache,
LoadFromCloudSetting fromCloud,
bool autoLoading);
bool autoLoading,
uint8 cacheTag);
mtpFileLoader(
const WebFileLocation *location,
int32 size,
LoadFromCloudSetting fromCloud,
bool autoLoading);
bool autoLoading,
uint8 cacheTag);
int32 currentOffset(bool includeSkipped = false) const override;
Data::FileOrigin fileOrigin() const override;
@ -317,7 +329,8 @@ public:
const QString &url,
const QString &to,
LoadFromCloudSetting fromCloud,
bool autoLoading);
bool autoLoading,
uint8 cacheTag);
int32 currentOffset(bool includeSkipped = false) const override;

View File

@ -129,7 +129,9 @@ void Uploader::uploadMedia(const FullMsgId &msgId, const SendMediaReady &media)
if (document->saveToCache()) {
Auth().data().cache().put(
document->cacheKey(),
base::duplicate(media.data));
Storage::Cache::Database::TaggedValue(
base::duplicate(media.data),
document->cacheTag()));
}
}
if (!media.file.isEmpty()) {
@ -156,7 +158,9 @@ void Uploader::upload(
if (document->saveToCache()) {
Auth().data().cache().put(
document->cacheKey(),
base::duplicate(file->content));
Storage::Cache::Database::TaggedValue(
base::duplicate(file->content),
document->cacheTag()));
}
}
if (!file->filepath.isEmpty()) {

View File

@ -1024,7 +1024,9 @@ void RemoteImage::setImageBytes(
if (!location.isNull() && !bytes.isEmpty()) {
Auth().data().cache().putIfEmpty(
Data::StorageCacheKey(location),
base::duplicate(bytes));
Storage::Cache::Database::TaggedValue(
base::duplicate(bytes),
Data::kImageCacheTag));
}
}
@ -1165,7 +1167,8 @@ FileLoader *StorageImage::createLoader(
origin,
_size,
fromCloud,
autoLoading);
autoLoading,
Data::kImageCacheTag);
}
WebFileImage::WebFileImage(
@ -1220,7 +1223,8 @@ FileLoader *WebFileImage::createLoader(
&_location,
_size,
fromCloud,
autoLoading);
autoLoading,
Data::kImageCacheTag);
}
DelayedStorageImage::DelayedStorageImage() : StorageImage(StorageImageLocation())
@ -1359,7 +1363,12 @@ FileLoader *WebImage::createLoader(
Data::FileOrigin origin,
LoadFromCloudSetting fromCloud,
bool autoLoading) {
return new webFileLoader(_url, QString(), fromCloud, autoLoading);
return new webFileLoader(
_url,
QString(),
fromCloud,
autoLoading,
Data::kImageCacheTag);
}
namespace internal {