Fixed state stuck after canceling of box of stream scheduling.
This commit is contained in:
parent
6fd02ccbae
commit
ffc0e04a1e
|
@ -323,9 +323,11 @@ void ChooseJoinAsProcess::start(
|
||||||
PeerData *changingJoinAsFrom) {
|
PeerData *changingJoinAsFrom) {
|
||||||
Expects(done != nullptr);
|
Expects(done != nullptr);
|
||||||
|
|
||||||
|
const auto isScheduled = (context == Context::CreateScheduled);
|
||||||
|
|
||||||
const auto session = &peer->session();
|
const auto session = &peer->session();
|
||||||
if (_request) {
|
if (_request) {
|
||||||
if (_request->peer == peer) {
|
if (_request->peer == peer && !isScheduled) {
|
||||||
_request->context = context;
|
_request->context = context;
|
||||||
_request->showBox = std::move(showBox);
|
_request->showBox = std::move(showBox);
|
||||||
_request->showToast = std::move(showToast);
|
_request->showToast = std::move(showToast);
|
||||||
|
@ -336,28 +338,37 @@ void ChooseJoinAsProcess::start(
|
||||||
session->api().request(_request->id).cancel();
|
session->api().request(_request->id).cancel();
|
||||||
_request = nullptr;
|
_request = nullptr;
|
||||||
}
|
}
|
||||||
_request = std::make_unique<ChannelsListRequest>(
|
|
||||||
ChannelsListRequest{
|
const auto createRequest = [=,
|
||||||
|
showToast = std::move(showToast),
|
||||||
|
done = std::move(done)] {
|
||||||
|
_request = std::make_unique<ChannelsListRequest>(ChannelsListRequest{
|
||||||
.peer = peer,
|
.peer = peer,
|
||||||
.showBox = showBox,
|
.showBox = showBox,
|
||||||
.showToast = std::move(showToast),
|
.showToast = std::move(showToast),
|
||||||
.done = std::move(done),
|
.done = std::move(done),
|
||||||
.context = context });
|
.context = context });
|
||||||
|
};
|
||||||
|
|
||||||
|
if (isScheduled) {
|
||||||
|
auto box = Box(
|
||||||
|
ScheduleGroupCallBox,
|
||||||
|
JoinInfo{ .peer = peer, .joinAs = peer },
|
||||||
|
[=, createRequest = std::move(createRequest)](JoinInfo info) {
|
||||||
|
createRequest();
|
||||||
|
finish(info);
|
||||||
|
});
|
||||||
|
showBox(std::move(box));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
createRequest();
|
||||||
session->account().sessionChanges(
|
session->account().sessionChanges(
|
||||||
) | rpl::start_with_next([=] {
|
) | rpl::start_with_next([=] {
|
||||||
_request = nullptr;
|
_request = nullptr;
|
||||||
}, _request->lifetime);
|
}, _request->lifetime);
|
||||||
|
|
||||||
if (context == Context::CreateScheduled) {
|
requestList();
|
||||||
auto box = Box(
|
|
||||||
ScheduleGroupCallBox,
|
|
||||||
JoinInfo{ .peer = peer, .joinAs = peer },
|
|
||||||
[=](auto info) { finish(info); });
|
|
||||||
_request->box = Ui::MakeWeak(box.data());
|
|
||||||
showBox(std::move(box));
|
|
||||||
} else {
|
|
||||||
requestList();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ChooseJoinAsProcess::requestList() {
|
void ChooseJoinAsProcess::requestList() {
|
||||||
|
|
Loading…
Reference in New Issue