Add td_api::getAutosaveSettings.
This commit is contained in:
parent
216b6e1acf
commit
c5c9707837
@ -4816,6 +4816,25 @@ autoDownloadSettings is_auto_download_enabled:Bool max_photo_file_size:int32 max
|
||||
autoDownloadSettingsPresets low:autoDownloadSettings medium:autoDownloadSettings high:autoDownloadSettings = AutoDownloadSettingsPresets;
|
||||
|
||||
|
||||
//@description Contains autosave settings for a chat or a chat scope
|
||||
//@autosave_photos True, if photo autosave is enabled
|
||||
//@autosave_videos True, if video autosave is enabled
|
||||
//@max_video_file_size The maximum size of a video file to be autosaved, in bytes; 0 if not limited
|
||||
chatAutosaveSettings autosave_photos:Bool autosave_videos:Bool max_video_file_size:int53 = ChatAutosaveSettings;
|
||||
|
||||
//@description Contains autosave settings for a chat, which overrides settings for the corresponding scope
|
||||
//@chat_id Chat identifier
|
||||
//@settings Autosave settings for the chat
|
||||
chatAutosaveException chat_id:int53 settings:chatAutosaveSettings = ChatAutosaveException;
|
||||
|
||||
//@description Describes autosave settings
|
||||
//@private_chat_settings Default autosave settings for private chats
|
||||
//@group_settings Default autosave settings for basic group and supergroup chats
|
||||
//@channel_settings Default autosave settings for channel chats
|
||||
//@exceptions Autosave exceptions for specific chats
|
||||
autosaveSettings private_chat_settings:chatAutosaveSettings group_settings:chatAutosaveSettings channel_settings:chatAutosaveSettings exceptions:vector<chatAutosaveException> = AutosaveSettings;
|
||||
|
||||
|
||||
//@class ConnectionState @description Describes the current state of the connection to Telegram servers
|
||||
|
||||
//@description Currently waiting for the network to become available. Use setNetworkType to change the available network type
|
||||
@ -7809,6 +7828,9 @@ getAutoDownloadSettingsPresets = AutoDownloadSettingsPresets;
|
||||
//@description Sets auto-download settings @settings New user auto-download settings @type Type of the network for which the new settings are relevant
|
||||
setAutoDownloadSettings settings:autoDownloadSettings type:NetworkType = Ok;
|
||||
|
||||
//@description Returns autosave settings for the current user
|
||||
getAutosaveSettings = AutosaveSettings;
|
||||
|
||||
|
||||
//@description Returns information about a bank card @bank_card_number The bank card number
|
||||
getBankCardInfo bank_card_number:string = BankCardInfo;
|
||||
|
@ -6,10 +6,43 @@
|
||||
//
|
||||
#include "td/telegram/AutosaveManager.h"
|
||||
|
||||
#include "td/telegram/ContactsManager.h"
|
||||
#include "td/telegram/MessagesManager.h"
|
||||
#include "td/telegram/Td.h"
|
||||
|
||||
#include "td/utils/algorithm.h"
|
||||
#include "td/utils/buffer.h"
|
||||
|
||||
namespace td {
|
||||
|
||||
class GetAutosaveSettingsQuery final : public Td::ResultHandler {
|
||||
Promise<telegram_api::object_ptr<telegram_api::account_autoSaveSettings>> promise_;
|
||||
|
||||
public:
|
||||
explicit GetAutosaveSettingsQuery(Promise<telegram_api::object_ptr<telegram_api::account_autoSaveSettings>> &&promise)
|
||||
: promise_(std::move(promise)) {
|
||||
}
|
||||
|
||||
void send() {
|
||||
send_query(G()->net_query_creator().create(telegram_api::account_getAutoSaveSettings()));
|
||||
}
|
||||
|
||||
void on_result(BufferSlice packet) final {
|
||||
auto result_ptr = fetch_result<telegram_api::account_getAutoSaveSettings>(packet);
|
||||
if (result_ptr.is_error()) {
|
||||
return on_error(result_ptr.move_as_error());
|
||||
}
|
||||
|
||||
auto ptr = result_ptr.move_as_ok();
|
||||
LOG(INFO) << "Receive result for GetAutoSaveSettingsQuery: " << to_string(ptr);
|
||||
promise_.set_value(std::move(ptr));
|
||||
}
|
||||
|
||||
void on_error(Status status) final {
|
||||
promise_.set_error(std::move(status));
|
||||
}
|
||||
};
|
||||
|
||||
AutosaveManager::AutosaveManager(Td *td, ActorShared<> parent) : td_(td), parent_(std::move(parent)) {
|
||||
}
|
||||
|
||||
@ -17,4 +50,81 @@ void AutosaveManager::tear_down() {
|
||||
parent_.reset();
|
||||
}
|
||||
|
||||
AutosaveManager::DialogAutosaveSettings::DialogAutosaveSettings(const telegram_api::autoSaveSettings *settings) {
|
||||
CHECK(settings != nullptr);
|
||||
autosave_photos_ = settings->photos_;
|
||||
autosave_videos_ = settings->videos_;
|
||||
max_video_file_size_ = settings->video_max_size_;
|
||||
}
|
||||
|
||||
td_api::object_ptr<td_api::chatAutosaveSettings>
|
||||
AutosaveManager::DialogAutosaveSettings::get_chat_autosave_settings_object() const {
|
||||
return td_api::make_object<td_api::chatAutosaveSettings>(autosave_photos_, autosave_videos_, max_video_file_size_);
|
||||
}
|
||||
|
||||
td_api::object_ptr<td_api::chatAutosaveException>
|
||||
AutosaveManager::DialogAutosaveSettings::get_chat_autosave_exception_object(DialogId dialog_id) const {
|
||||
return td_api::make_object<td_api::chatAutosaveException>(dialog_id.get(), get_chat_autosave_settings_object());
|
||||
}
|
||||
|
||||
td_api::object_ptr<td_api::autosaveSettings> AutosaveManager::AutosaveSettings::get_autosave_settings_object() const {
|
||||
CHECK(are_inited_);
|
||||
auto exceptions = transform(exceptions_, [](const auto &exception) {
|
||||
return exception.second.get_chat_autosave_exception_object(exception.first);
|
||||
});
|
||||
return td_api::make_object<td_api::autosaveSettings>(
|
||||
user_settings_.get_chat_autosave_settings_object(), user_settings_.get_chat_autosave_settings_object(),
|
||||
user_settings_.get_chat_autosave_settings_object(), std::move(exceptions));
|
||||
}
|
||||
|
||||
void AutosaveManager::get_autosave_settings(Promise<td_api::object_ptr<td_api::autosaveSettings>> &&promise) {
|
||||
if (settings_.are_inited_) {
|
||||
return promise.set_value(settings_.get_autosave_settings_object());
|
||||
}
|
||||
|
||||
load_settings_queries_.push_back(std::move(promise));
|
||||
if (load_settings_queries_.size() != 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto query_promise = PromiseCreator::lambda(
|
||||
[actor_id = actor_id(this)](Result<telegram_api::object_ptr<telegram_api::account_autoSaveSettings>> r_settings) {
|
||||
send_closure(actor_id, &AutosaveManager::on_get_autosave_settings, std::move(r_settings));
|
||||
});
|
||||
td_->create_handler<GetAutosaveSettingsQuery>(std::move(query_promise))->send();
|
||||
}
|
||||
|
||||
void AutosaveManager::on_get_autosave_settings(
|
||||
Result<telegram_api::object_ptr<telegram_api::account_autoSaveSettings>> r_settings) {
|
||||
CHECK(!settings_.are_inited_);
|
||||
if (G()->close_flag() && r_settings.is_ok()) {
|
||||
r_settings = Global::request_aborted_error();
|
||||
}
|
||||
if (r_settings.is_error()) {
|
||||
return fail_promises(load_settings_queries_, r_settings.move_as_error());
|
||||
}
|
||||
|
||||
auto settings = r_settings.move_as_ok();
|
||||
settings_.are_inited_ = true;
|
||||
td_->contacts_manager_->on_get_users(std::move(settings->users_), "on_get_autosave_settings");
|
||||
td_->contacts_manager_->on_get_chats(std::move(settings->chats_), "on_get_autosave_settings");
|
||||
settings_.user_settings_ = DialogAutosaveSettings(settings->users_settings_.get());
|
||||
settings_.chat_settings_ = DialogAutosaveSettings(settings->chats_settings_.get());
|
||||
settings_.broadcast_settings_ = DialogAutosaveSettings(settings->broadcasts_settings_.get());
|
||||
settings_.exceptions_.clear();
|
||||
for (auto &exception : settings->exceptions_) {
|
||||
DialogId dialog_id(exception->peer_);
|
||||
if (!dialog_id.is_valid()) {
|
||||
continue;
|
||||
}
|
||||
td_->messages_manager_->force_create_dialog(dialog_id, "on_get_autosave_settings");
|
||||
settings_.exceptions_[dialog_id] = DialogAutosaveSettings(exception->settings_.get());
|
||||
}
|
||||
|
||||
auto promises = std::move(load_settings_queries_);
|
||||
for (auto &promise : promises) {
|
||||
promise.set_value(settings_.get_autosave_settings_object());
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace td
|
||||
|
@ -6,9 +6,16 @@
|
||||
//
|
||||
#pragma once
|
||||
|
||||
#include "td/telegram/DialogId.h"
|
||||
#include "td/telegram/td_api.h"
|
||||
#include "td/telegram/telegram_api.h"
|
||||
|
||||
#include "td/actor/actor.h"
|
||||
|
||||
#include "td/utils/common.h"
|
||||
#include "td/utils/FlatHashMap.h"
|
||||
#include "td/utils/Promise.h"
|
||||
#include "td/utils/Status.h"
|
||||
|
||||
namespace td {
|
||||
|
||||
@ -18,11 +25,42 @@ class AutosaveManager final : public Actor {
|
||||
public:
|
||||
AutosaveManager(Td *td, ActorShared<> parent);
|
||||
|
||||
void get_autosave_settings(Promise<td_api::object_ptr<td_api::autosaveSettings>> &&promise);
|
||||
|
||||
private:
|
||||
struct DialogAutosaveSettings {
|
||||
bool autosave_photos_ = false;
|
||||
bool autosave_videos_ = false;
|
||||
int64 max_video_file_size_ = 0;
|
||||
|
||||
DialogAutosaveSettings() = default;
|
||||
|
||||
explicit DialogAutosaveSettings(const telegram_api::autoSaveSettings *settings);
|
||||
|
||||
td_api::object_ptr<td_api::chatAutosaveSettings> get_chat_autosave_settings_object() const;
|
||||
|
||||
td_api::object_ptr<td_api::chatAutosaveException> get_chat_autosave_exception_object(DialogId dialog_id) const;
|
||||
};
|
||||
|
||||
struct AutosaveSettings {
|
||||
bool are_inited_ = false;
|
||||
DialogAutosaveSettings user_settings_;
|
||||
DialogAutosaveSettings chat_settings_;
|
||||
DialogAutosaveSettings broadcast_settings_;
|
||||
FlatHashMap<DialogId, DialogAutosaveSettings, DialogIdHash> exceptions_;
|
||||
|
||||
td_api::object_ptr<td_api::autosaveSettings> get_autosave_settings_object() const;
|
||||
};
|
||||
|
||||
void tear_down() final;
|
||||
|
||||
void on_get_autosave_settings(Result<telegram_api::object_ptr<telegram_api::account_autoSaveSettings>> r_settings);
|
||||
|
||||
Td *td_;
|
||||
ActorShared<> parent_;
|
||||
|
||||
AutosaveSettings settings_;
|
||||
vector<Promise<td_api::object_ptr<td_api::autosaveSettings>>> load_settings_queries_;
|
||||
};
|
||||
|
||||
} // namespace td
|
||||
|
@ -4946,6 +4946,12 @@ void Td::on_request(uint64 id, const td_api::setAutoDownloadSettings &request) {
|
||||
std::move(promise));
|
||||
}
|
||||
|
||||
void Td::on_request(uint64 id, const td_api::getAutosaveSettings &request) {
|
||||
CHECK_IS_USER();
|
||||
CREATE_REQUEST_PROMISE();
|
||||
autosave_manager_->get_autosave_settings(std::move(promise));
|
||||
}
|
||||
|
||||
void Td::on_request(uint64 id, const td_api::getTopChats &request) {
|
||||
CHECK_IS_USER();
|
||||
CREATE_REQUEST_PROMISE();
|
||||
|
@ -590,6 +590,8 @@ class Td final : public Actor {
|
||||
|
||||
void on_request(uint64 id, const td_api::setAutoDownloadSettings &request);
|
||||
|
||||
void on_request(uint64 id, const td_api::getAutosaveSettings &request);
|
||||
|
||||
void on_request(uint64 id, const td_api::getTopChats &request);
|
||||
|
||||
void on_request(uint64 id, const td_api::removeTopChat &request);
|
||||
|
@ -2831,6 +2831,8 @@ class CliClient final : public Actor {
|
||||
} else if (op == "sads") {
|
||||
send_request(td_api::make_object<td_api::setAutoDownloadSettings>(
|
||||
td_api::make_object<td_api::autoDownloadSettings>(), as_network_type(args)));
|
||||
} else if (op == "gaus") {
|
||||
send_request(td_api::make_object<td_api::getAutosaveSettings>());
|
||||
} else if (op == "ansc") {
|
||||
int32 sent_bytes;
|
||||
int32 received_bytes;
|
||||
|
Loading…
x
Reference in New Issue
Block a user