/* This file is part of Telegram Desktop, the official desktop application for the Telegram messaging service. For license and copyright information please follow this link: https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #pragma once #include "storage/cache/storage_cache_types.h" #include "base/basic_types.h" #include #include #include #include namespace Storage { class EncryptionKey; namespace Cache { namespace details { class DatabaseObject; } // namespace details class Database { public: using Settings = details::Settings; using SettingsUpdate = details::SettingsUpdate; Database(const QString &path, const Settings &settings); void reconfigure(const Settings &settings); void updateSettings(const SettingsUpdate &update); void open(EncryptionKey &&key, FnMut &&done = nullptr); void close(FnMut &&done = nullptr); void put( const Key &key, QByteArray &&value, FnMut &&done = nullptr); void get(const Key &key, FnMut &&done); void remove(const Key &key, FnMut &&done = nullptr); void putIfEmpty( const Key &key, QByteArray &&value, FnMut &&done = nullptr); void copyIfEmpty( const Key &from, const Key &to, FnMut &&done = nullptr); void moveIfEmpty( const Key &from, const Key &to, FnMut &&done = nullptr); using TaggedValue = details::TaggedValue; void put( const Key &key, TaggedValue &&value, FnMut &&done = nullptr); void putIfEmpty( const Key &key, TaggedValue &&value, FnMut &&done = nullptr); void getWithTag(const Key &key, FnMut &&done); void getWithSizes( const Key &key, std::vector &&keys, FnMut&&)> &&done); using Stats = details::Stats; using TaggedSummary = details::TaggedSummary; rpl::producer statsOnMain() const; void clear(FnMut &&done = nullptr); void clearByTag(uint8 tag, FnMut &&done = nullptr); void waitForCleaner(FnMut &&done = nullptr); void sync(); ~Database(); private: using Implementation = details::DatabaseObject; crl::object_on_queue _wrapped; }; } // namespace Cache } // namespace Storage