diff --git a/td/telegram/files/FileDb.cpp b/td/telegram/files/FileDb.cpp index a7d028df..f976f38e 100644 --- a/td/telegram/files/FileDb.cpp +++ b/td/telegram/files/FileDb.cpp @@ -306,7 +306,7 @@ Status fix_file_remote_location_key_bug(SqliteDb &db) { auto remote_str = PSTRING() << key.substr(4, 4) << Slice("\0\0\0\0") << key.substr(8); FullRemoteFileLocation remote; if (unserialize(remote, remote_str).is_ok()) { - kv.set(as_key(remote), value); + kv.set(FileDbInterface::as_key(remote), value); } LOG(DEBUG) << "ERASE " << format::as_hex_dump<4>(Slice(key)); kv.erase(key); diff --git a/td/telegram/files/FileDb.h b/td/telegram/files/FileDb.h index 8b7927a7..0fd04e7b 100644 --- a/td/telegram/files/FileDb.h +++ b/td/telegram/files/FileDb.h @@ -11,8 +11,10 @@ #include "td/actor/PromiseFuture.h" +#include "td/utils/buffer.h" #include "td/utils/logging.h" #include "td/utils/Status.h" +#include "td/utils/tl_storers.h" #include @@ -41,9 +43,25 @@ class FileDbInterface { // thread safe virtual void close(Promise<> promise) = 0; + + template + static string as_key(const LocationT &object) { + TlStorerCalcLength calc_length; + calc_length.store_int(0); + object.as_key().store(calc_length); + + BufferSlice key_buffer{calc_length.get_length()}; + auto key = key_buffer.as_slice(); + TlStorerUnsafe storer(key.ubegin()); + storer.store_int(LocationT::KEY_MAGIC); + object.as_key().store(storer); + CHECK(storer.get_buf() == key.uend()); + return key.str(); + } + template void get_file_data(const LocationT &location, Promise promise) { - get_file_data(as_key(location), std::move(promise)); + get_file_data_impl(as_key(location), std::move(promise)); } template diff --git a/td/telegram/files/FileLocation.h b/td/telegram/files/FileLocation.h index 415cb668..34b2a5c8 100644 --- a/td/telegram/files/FileLocation.h +++ b/td/telegram/files/FileLocation.h @@ -22,7 +22,6 @@ #include "td/utils/Slice.h" #include "td/utils/StringBuilder.h" #include "td/utils/tl_helpers.h" -#include "td/utils/tl_storers.h" #include "td/utils/Variant.h" #include @@ -1306,19 +1305,4 @@ inline StringBuilder &operator<<(StringBuilder &sb, const FileData &file_data) { return sb << "]"; } -template -string as_key(const T &object) { - TlStorerCalcLength calc_length; - calc_length.store_int(0); - object.as_key().store(calc_length); - - BufferSlice key_buffer{calc_length.get_length()}; - auto key = key_buffer.as_slice(); - TlStorerUnsafe storer(key.ubegin()); - storer.store_int(T::KEY_MAGIC); - object.as_key().store(storer); - CHECK(storer.get_buf() == key.uend()); - return key.str(); -} - } // namespace td