Divided ChooseJoinAsProcess::start into methods.

This commit is contained in:
23rd 2022-02-26 05:59:21 +03:00
parent 40ed4559c4
commit f2f4f9b24b
2 changed files with 122 additions and 103 deletions

View file

@ -328,6 +328,7 @@ void ChooseJoinAsProcess::start(
_request->showBox = std::move(showBox);
_request->showToast = std::move(showToast);
_request->done = std::move(done);
_request->changingJoinAsFrom = changingJoinAsFrom;
return;
}
session->api().request(_request->id).cancel();
@ -345,21 +346,14 @@ void ChooseJoinAsProcess::start(
_request = nullptr;
}, _request->lifetime);
const auto finish = [=](JoinInfo info) {
const auto done = std::move(_request->done);
const auto box = _request->box;
_request = nullptr;
done(std::move(info));
if (const auto strong = box.data()) {
strong->closeBox();
requestList();
}
};
void ChooseJoinAsProcess::requestList() {
const auto session = &_request->peer->session();
_request->id = session->api().request(MTPphone_GetGroupCallJoinAs(
_request->peer->input
)).done([=](const MTPphone_JoinAsPeers &result) {
const auto peer = _request->peer;
const auto self = peer->session().user();
auto info = JoinInfo{ .peer = peer, .joinAs = self };
auto list = result.match([&](const MTPDphone_joinAsPeers &data) {
session->data().processUsers(data.vusers());
session->data().processChats(data.vchats());
@ -376,6 +370,31 @@ void ChooseJoinAsProcess::start(
}
return list;
});
processList(std::move(list));
}).fail([=] {
finish({
.peer = _request->peer,
.joinAs = _request->peer->session().user(),
});
}).send();
}
void ChooseJoinAsProcess::finish(JoinInfo info) {
const auto done = std::move(_request->done);
const auto box = _request->box;
_request = nullptr;
done(std::move(info));
if (const auto strong = box.data()) {
strong->closeBox();
}
}
void ChooseJoinAsProcess::processList(
std::vector<not_null<PeerData*>> &&list) {
const auto session = &_request->peer->session();
const auto peer = _request->peer;
const auto self = peer->session().user();
auto info = JoinInfo{ .peer = peer, .joinAs = self };
const auto selectedId = peer->groupCallDefaultJoinAs();
if (list.empty()) {
_request->showToast(Lang::Hard::ServerError());
@ -385,6 +404,7 @@ void ChooseJoinAsProcess::start(
const auto loaded = selectedId
? session->data().peerLoaded(selectedId)
: nullptr;
const auto changingJoinAsFrom = _request->changingJoinAsFrom;
return (changingJoinAsFrom
&& ranges::contains(list, not_null{ changingJoinAsFrom }))
? not_null(changingJoinAsFrom)
@ -404,10 +424,10 @@ void ChooseJoinAsProcess::start(
&& (info.joinAs->id == selectedId)
&& (peer->groupCall() != nullptr);
if (!changingJoinAsFrom && (onlyByMe || byAlreadyUsed)) {
if (!_request->changingJoinAsFrom && (onlyByMe || byAlreadyUsed)) {
auto confirmation = CreateOrJoinConfirmation(
peer,
context,
_request->context,
byAlreadyUsed);
if (confirmation.text.isEmpty()) {
finish(info);
@ -433,7 +453,7 @@ void ChooseJoinAsProcess::start(
_request->showBox(Box(
ScheduleGroupCallBox,
info,
crl::guard(guard, finish)));
crl::guard(guard, [=](auto info) { finish(info); })));
}
return false;
};
@ -457,9 +477,9 @@ void ChooseJoinAsProcess::start(
}
auto box = Box(
ChooseJoinAsBox,
context,
_request->context,
std::move(info),
crl::guard(&_request->guard, finish));
crl::guard(&_request->guard, [=](auto info) { finish(info); }));
box->boxClosing(
) | rpl::start_with_next([=] {
_request = nullptr;
@ -467,12 +487,6 @@ void ChooseJoinAsProcess::start(
_request->box = box.data();
_request->showBox(std::move(box));
}).fail([=] {
finish({
.peer = _request->peer,
.joinAs = _request->peer->session().user(),
});
}).send();
}
} // namespace Calls::Group

View file

@ -41,6 +41,10 @@ public:
PeerData *changingJoinAsFrom = nullptr);
private:
void requestList();
void processList(std::vector<not_null<PeerData*>> &&list);
void finish(JoinInfo info);
struct ChannelsListRequest {
not_null<PeerData*> peer;
Fn<void(object_ptr<Ui::BoxContent>)> showBox;
@ -51,6 +55,7 @@ private:
rpl::lifetime lifetime;
Context context = Context();
mtpRequestId id = 0;
PeerData *changingJoinAsFrom = nullptr;
};
std::unique_ptr<ChannelsListRequest> _request;