Use request promise in td_api::getChatFolder.
This commit is contained in:
parent
5872f0951a
commit
d6b53d61fc
@ -820,6 +820,7 @@ td_api::object_ptr<td_api::chatFolder> DialogFilterManager::get_chat_folder_obje
|
||||
unknown_dialog_ids.push_back(dialog_id);
|
||||
left_dialog_ids.push_back(dialog_id);
|
||||
} else {
|
||||
// possible if the chat folder has just been edited from another device
|
||||
LOG(ERROR) << "Can't find " << dialog_id << " from " << dialog_filter_id;
|
||||
unknown_dialog_ids.push_back(dialog_id);
|
||||
}
|
||||
@ -866,7 +867,7 @@ void DialogFilterManager::on_get_recommended_dialog_filters(
|
||||
if (recommended_dialog_filter.dialog_filter == nullptr) {
|
||||
continue;
|
||||
}
|
||||
load_dialog_filter(recommended_dialog_filter.dialog_filter.get(), false, mpas.get_promise());
|
||||
load_dialog_filter(recommended_dialog_filter.dialog_filter.get(), mpas.get_promise());
|
||||
|
||||
recommended_dialog_filter.description = std::move(suggested_filter->description_);
|
||||
filters.push_back(std::move(recommended_dialog_filter));
|
||||
@ -897,7 +898,8 @@ void DialogFilterManager::on_load_recommended_dialog_filters(
|
||||
promise.set_value(td_api::make_object<td_api::recommendedChatFolders>(std::move(chat_folders)));
|
||||
}
|
||||
|
||||
void DialogFilterManager::load_dialog_filter(DialogFilterId dialog_filter_id, bool force, Promise<Unit> &&promise) {
|
||||
void DialogFilterManager::get_dialog_filter(DialogFilterId dialog_filter_id,
|
||||
Promise<td_api::object_ptr<td_api::chatFolder>> &&promise) {
|
||||
CHECK(!td_->auth_manager_->is_bot());
|
||||
if (!dialog_filter_id.is_valid()) {
|
||||
return promise.set_error(Status::Error(400, "Invalid chat folder identifier specified"));
|
||||
@ -905,13 +907,26 @@ void DialogFilterManager::load_dialog_filter(DialogFilterId dialog_filter_id, bo
|
||||
|
||||
auto dialog_filter = get_dialog_filter(dialog_filter_id);
|
||||
if (dialog_filter == nullptr) {
|
||||
return promise.set_value(Unit());
|
||||
return promise.set_value(nullptr);
|
||||
}
|
||||
|
||||
load_dialog_filter(dialog_filter, force, std::move(promise));
|
||||
auto load_promise = PromiseCreator::lambda(
|
||||
[actor_id = actor_id(this), dialog_filter_id, promise = std::move(promise)](Result<Unit> &&result) mutable {
|
||||
if (result.is_error()) {
|
||||
return promise.set_error(result.move_as_error());
|
||||
}
|
||||
send_closure(actor_id, &DialogFilterManager::on_load_dialog_filter, dialog_filter_id, std::move(promise));
|
||||
});
|
||||
load_dialog_filter(dialog_filter, std::move(load_promise));
|
||||
}
|
||||
|
||||
void DialogFilterManager::load_dialog_filter(const DialogFilter *dialog_filter, bool force, Promise<Unit> &&promise) {
|
||||
void DialogFilterManager::on_load_dialog_filter(DialogFilterId dialog_filter_id,
|
||||
Promise<td_api::object_ptr<td_api::chatFolder>> &&promise) {
|
||||
TRY_STATUS_PROMISE(promise, G()->close_status());
|
||||
promise.set_value(get_chat_folder_object(dialog_filter_id));
|
||||
}
|
||||
|
||||
void DialogFilterManager::load_dialog_filter(const DialogFilter *dialog_filter, Promise<Unit> &&promise) {
|
||||
CHECK(!td_->auth_manager_->is_bot());
|
||||
vector<InputDialogId> needed_dialog_ids;
|
||||
dialog_filter->for_each_dialog([&](const InputDialogId &input_dialog_id) {
|
||||
@ -935,7 +950,7 @@ void DialogFilterManager::load_dialog_filter(const DialogFilter *dialog_filter,
|
||||
}
|
||||
}
|
||||
|
||||
if (!input_dialog_ids.empty() && !force) {
|
||||
if (!input_dialog_ids.empty()) {
|
||||
return load_dialog_filter_dialogs(dialog_filter->get_dialog_filter_id(), std::move(input_dialog_ids),
|
||||
std::move(promise));
|
||||
}
|
||||
|
@ -59,6 +59,8 @@ class DialogFilterManager final : public Actor {
|
||||
|
||||
Status add_dialog(DialogFilterId dialog_filter_id, InputDialogId input_dialog_id);
|
||||
|
||||
void get_dialog_filter(DialogFilterId dialog_filter_id, Promise<td_api::object_ptr<td_api::chatFolder>> &&promise);
|
||||
|
||||
void create_dialog_filter(td_api::object_ptr<td_api::chatFolder> filter,
|
||||
Promise<td_api::object_ptr<td_api::chatFolderInfo>> &&promise);
|
||||
|
||||
@ -74,8 +76,6 @@ class DialogFilterManager final : public Actor {
|
||||
void reorder_dialog_filters(vector<DialogFilterId> dialog_filter_ids, int32 main_dialog_list_position,
|
||||
Promise<Unit> &&promise);
|
||||
|
||||
td_api::object_ptr<td_api::chatFolder> get_chat_folder_object(DialogFilterId dialog_filter_id);
|
||||
|
||||
void create_dialog_filter_invite_link(DialogFilterId dialog_filter_id, string invite_link_name,
|
||||
vector<DialogId> dialog_ids,
|
||||
Promise<td_api::object_ptr<td_api::chatFolderInviteLink>> promise);
|
||||
@ -111,8 +111,6 @@ class DialogFilterManager final : public Actor {
|
||||
|
||||
void get_recommended_dialog_filters(Promise<td_api::object_ptr<td_api::recommendedChatFolders>> &&promise);
|
||||
|
||||
void load_dialog_filter(DialogFilterId dialog_filter_id, bool force, Promise<Unit> &&promise);
|
||||
|
||||
void load_dialog_filter_dialogs(DialogFilterId dialog_filter_id, vector<InputDialogId> &&input_dialog_ids,
|
||||
Promise<Unit> &&promise);
|
||||
|
||||
@ -153,6 +151,8 @@ class DialogFilterManager final : public Actor {
|
||||
|
||||
void synchronize_dialog_filters();
|
||||
|
||||
td_api::object_ptr<td_api::chatFolder> get_chat_folder_object(DialogFilterId dialog_filter_id);
|
||||
|
||||
td_api::object_ptr<td_api::chatFolder> get_chat_folder_object(const DialogFilter *dialog_filter);
|
||||
|
||||
void send_update_chat_folders();
|
||||
@ -199,7 +199,10 @@ class DialogFilterManager final : public Actor {
|
||||
void on_load_recommended_dialog_filters(Result<Unit> &&result, vector<RecommendedDialogFilter> &&filters,
|
||||
Promise<td_api::object_ptr<td_api::recommendedChatFolders>> &&promise);
|
||||
|
||||
void load_dialog_filter(const DialogFilter *dialog_filter, bool force, Promise<Unit> &&promise);
|
||||
void load_dialog_filter(const DialogFilter *dialog_filter, Promise<Unit> &&promise);
|
||||
|
||||
void on_load_dialog_filter(DialogFilterId dialog_filter_id,
|
||||
Promise<td_api::object_ptr<td_api::chatFolder>> &&promise);
|
||||
|
||||
void on_load_dialog_filter_dialogs(DialogFilterId dialog_filter_id, vector<DialogId> &&dialog_ids,
|
||||
Promise<Unit> &&promise);
|
||||
|
@ -727,24 +727,6 @@ class GetChatRequest final : public RequestActor<> {
|
||||
}
|
||||
};
|
||||
|
||||
class GetChatFolderRequest final : public RequestActor<> {
|
||||
DialogFilterId dialog_filter_id_;
|
||||
|
||||
void do_run(Promise<Unit> &&promise) final {
|
||||
td_->dialog_filter_manager_->load_dialog_filter(dialog_filter_id_, get_tries() < 2, std::move(promise));
|
||||
}
|
||||
|
||||
void do_send_result() final {
|
||||
send_result(td_->dialog_filter_manager_->get_chat_folder_object(dialog_filter_id_));
|
||||
}
|
||||
|
||||
public:
|
||||
GetChatFolderRequest(ActorShared<Td> td, uint64 request_id, int32 dialog_filter_id)
|
||||
: RequestActor(std::move(td), request_id), dialog_filter_id_(dialog_filter_id) {
|
||||
set_tries(3);
|
||||
}
|
||||
};
|
||||
|
||||
class SearchUserByPhoneNumberRequest final : public RequestActor<> {
|
||||
string phone_number_;
|
||||
|
||||
@ -6116,7 +6098,8 @@ void Td::on_request(uint64 id, const td_api::addChatToList &request) {
|
||||
|
||||
void Td::on_request(uint64 id, const td_api::getChatFolder &request) {
|
||||
CHECK_IS_USER();
|
||||
CREATE_REQUEST(GetChatFolderRequest, request.chat_folder_id_);
|
||||
CREATE_REQUEST_PROMISE();
|
||||
dialog_filter_manager_->get_dialog_filter(DialogFilterId(request.chat_folder_id_), std::move(promise));
|
||||
}
|
||||
|
||||
void Td::on_request(uint64 id, const td_api::getRecommendedChatFolders &request) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user