Set correct cache tags for different file types.
This commit is contained in:
		
							parent
							
								
									e2f08d4161
								
							
						
					
					
						commit
						55f60866cb
					
				
					 9 changed files with 119 additions and 31 deletions
				
			
		| 
						 | 
				
			
			@ -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(
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -180,6 +180,7 @@ public:
 | 
			
		|||
 | 
			
		||||
	MediaKey mediaKey() const;
 | 
			
		||||
	Storage::Cache::Key cacheKey() const;
 | 
			
		||||
	uint8 cacheTag() const;
 | 
			
		||||
 | 
			
		||||
	static QString ComposeNameString(
 | 
			
		||||
		const QString &filename,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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 {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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(
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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()) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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 {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue