Add is_file_reference_error.
GitOrigin-RevId: 7c36433edff5de1a9ef6c2ffb0b4745e4aede0be
This commit is contained in:
parent
3648434fa4
commit
6633b87d51
@ -22,6 +22,10 @@ namespace td {
|
||||
|
||||
int VERBOSITY_NAME(file_references) = VERBOSITY_NAME(WARNING);
|
||||
|
||||
bool FileReferenceManager::is_file_reference_error(const Status &error) {
|
||||
return error.is_error() && error.code() == 400 && begins_with(error.message(), "FILE_REFERENCE_");
|
||||
}
|
||||
|
||||
/*
|
||||
fileSourceMessage chat_id:int53 message_id:int53 = FileSource; // repaired with get_messages_from_server
|
||||
fileSourceUserProfilePhoto user_id:int32 photo_id:int64 = FileSource; // repaired with photos.getUserPhotos
|
||||
|
@ -30,6 +30,8 @@ extern int VERBOSITY_NAME(file_references);
|
||||
|
||||
class FileReferenceManager : public Actor {
|
||||
public:
|
||||
static bool is_file_reference_error(const Status &error);
|
||||
|
||||
FileSourceId create_message_file_source(FullMessageId full_message_id);
|
||||
FileSourceId create_user_photo_file_source(UserId user_id, int64 photo_id);
|
||||
FileSourceId create_chat_photo_file_source(ChatId chat_id);
|
||||
|
@ -8,6 +8,7 @@
|
||||
|
||||
#include "td/telegram/telegram_api.h"
|
||||
|
||||
#include "td/telegram/FileReferenceManager.h"
|
||||
#include "td/telegram/files/FileLoaderUtils.h"
|
||||
#include "td/telegram/files/FileType.h"
|
||||
#include "td/telegram/Global.h"
|
||||
@ -272,9 +273,9 @@ Result<std::pair<NetQueryPtr, bool>> FileDownloader::start_part(Part part, int32
|
||||
Status FileDownloader::check_net_query(NetQueryPtr &net_query) {
|
||||
if (net_query->is_error()) {
|
||||
auto error = net_query->move_as_error();
|
||||
if (error.code() == 400 && begins_with(error.message(), "FILE_REFERENCE_")) {
|
||||
error = Status::Error(400, PSLICE()
|
||||
<< "FILE_REFERENCE_EXPIRED_BASE64" << base64_encode(remote_.get_file_reference()));
|
||||
if (FileReferenceManager::is_file_reference_error(error)) {
|
||||
error = Status::Error(error.code(),
|
||||
PSLICE() << error.message() << "#BASE64" << base64_encode(remote_.get_file_reference()));
|
||||
}
|
||||
return error;
|
||||
}
|
||||
|
@ -2822,11 +2822,12 @@ void FileManager::on_error_impl(FileNodePtr node, FileManager::Query::Type type,
|
||||
if (begins_with(status.message(), "FILE_GENERATE_LOCATION_INVALID")) {
|
||||
node->set_generate_location(nullptr);
|
||||
}
|
||||
if (begins_with(status.message(), "FILE_REFERENCE_")) {
|
||||
if (FileReferenceManager::is_file_reference_error(status)) {
|
||||
string file_reference;
|
||||
Slice prefix = "FILE_REFERENCE_EXPIRED_BASE64";
|
||||
if (begins_with(status.message(), prefix)) {
|
||||
auto r_file_reference = base64_decode(status.message().substr(prefix.size()));
|
||||
Slice prefix = "#BASE64";
|
||||
auto pos = status.message().rfind('#');
|
||||
if (pos < status.message().size() && begins_with(status.message().substr(pos), prefix)) {
|
||||
auto r_file_reference = base64_decode(status.message().substr(pos + prefix.size()));
|
||||
if (r_file_reference.is_ok()) {
|
||||
file_reference = r_file_reference.move_as_ok();
|
||||
} else {
|
||||
|
Reference in New Issue
Block a user