Fixed send options in CreatePollBox and SendFilesBox in replies.

This commit is contained in:
23rd 2020-11-20 20:04:50 +03:00 committed by John Preston
parent c53d9c532f
commit c109e35d95
5 changed files with 37 additions and 22 deletions

View file

@ -754,11 +754,13 @@ CreatePollBox::CreatePollBox(
not_null<Window::SessionController*> controller, not_null<Window::SessionController*> controller,
PollData::Flags chosen, PollData::Flags chosen,
PollData::Flags disabled, PollData::Flags disabled,
Api::SendType sendType) Api::SendType sendType,
SendMenu::Type sendMenuType)
: _controller(controller) : _controller(controller)
, _chosen(chosen) , _chosen(chosen)
, _disabled(disabled) , _disabled(disabled)
, _sendType(sendType) { , _sendType(sendType)
, _sendMenuType(sendMenuType) {
} }
rpl::producer<CreatePollBox::Result> CreatePollBox::submitRequests() const { rpl::producer<CreatePollBox::Result> CreatePollBox::submitRequests() const {
@ -1101,26 +1103,23 @@ object_ptr<Ui::RpWidget> CreatePollBox::setupContent() {
}, lifetime()); }, lifetime());
const auto isNormal = (_sendType == Api::SendType::Normal); const auto isNormal = (_sendType == Api::SendType::Normal);
const auto isScheduled = (_sendType == Api::SendType::Scheduled);
const auto submit = addButton( const auto submit = addButton(
isNormal isNormal
? tr::lng_polls_create_button() ? tr::lng_polls_create_button()
: tr::lng_schedule_button(), : tr::lng_schedule_button(),
[=] { isNormal ? send({}) : sendScheduled(); }); [=] { isNormal ? send({}) : sendScheduled(); });
if (isNormal || isScheduled) { const auto sendMenuType = [=] {
const auto sendMenuType = [=] { collectError();
collectError(); return (*error)
return (*error || isScheduled) ? SendMenu::Type::Disabled
? SendMenu::Type::Disabled : _sendMenuType;
: SendMenu::Type::Scheduled; };
}; SendMenu::SetupMenuAndShortcuts(
SendMenu::SetupMenuAndShortcuts( submit.data(),
submit.data(), sendMenuType,
sendMenuType, sendSilent,
sendSilent, sendScheduled);
sendScheduled);
}
addButton(tr::lng_cancel(), [=] { closeBox(); }); addButton(tr::lng_cancel(), [=] { closeBox(); });
return result; return result;

View file

@ -22,6 +22,10 @@ namespace Window {
class SessionController; class SessionController;
} // namespace Window } // namespace Window
namespace SendMenu {
enum class Type;
} // namespace SendMenu
class CreatePollBox : public Ui::BoxContent { class CreatePollBox : public Ui::BoxContent {
public: public:
struct Result { struct Result {
@ -34,7 +38,8 @@ public:
not_null<Window::SessionController*> controller, not_null<Window::SessionController*> controller,
PollData::Flags chosen, PollData::Flags chosen,
PollData::Flags disabled, PollData::Flags disabled,
Api::SendType sendType); Api::SendType sendType,
SendMenu::Type sendMenuType);
[[nodiscard]] rpl::producer<Result> submitRequests() const; [[nodiscard]] rpl::producer<Result> submitRequests() const;
void submitFailed(const QString &error); void submitFailed(const QString &error);
@ -66,6 +71,7 @@ private:
const PollData::Flags _chosen = PollData::Flags(); const PollData::Flags _chosen = PollData::Flags();
const PollData::Flags _disabled = PollData::Flags(); const PollData::Flags _disabled = PollData::Flags();
const Api::SendType _sendType = Api::SendType(); const Api::SendType _sendType = Api::SendType();
const SendMenu::Type _sendMenuType;
Fn<void()> _setInnerFocus; Fn<void()> _setInnerFocus;
Fn<rpl::producer<bool>()> _dataIsValidValue; Fn<rpl::producer<bool>()> _dataIsValidValue;
rpl::event_stream<Result> _submitRequests; rpl::event_stream<Result> _submitRequests;

View file

@ -632,7 +632,7 @@ bool RepliesWidget::confirmSendingFiles(
text, text,
_history->peer->slowmodeApplied() ? SendLimit::One : SendLimit::Many, _history->peer->slowmodeApplied() ? SendLimit::One : SendLimit::Many,
Api::SendType::Normal, Api::SendType::Normal,
SendMenu::Type::Disabled); // #TODO replies schedule SendMenu::Type::SilentOnly); // #TODO replies schedule
_composeControls->setText({}); _composeControls->setText({});
const auto replyTo = replyToId(); const auto replyTo = replyToId();

View file

@ -616,6 +616,11 @@ void Filler::addPollAction(not_null<PeerData*> peer) {
const auto source = (_request.section == Section::Scheduled) const auto source = (_request.section == Section::Scheduled)
? Api::SendType::Scheduled ? Api::SendType::Scheduled
: Api::SendType::Normal; : Api::SendType::Normal;
const auto sendMenuType = (_request.section == Section::Scheduled)
? SendMenu::Type::Disabled
: (_request.section == Section::Replies)
? SendMenu::Type::SilentOnly
: SendMenu::Type::Scheduled;
const auto flag = PollData::Flags(); const auto flag = PollData::Flags();
const auto replyToId = _request.currentReplyToId const auto replyToId = _request.currentReplyToId
? _request.currentReplyToId ? _request.currentReplyToId
@ -627,7 +632,8 @@ void Filler::addPollAction(not_null<PeerData*> peer) {
replyToId, replyToId,
flag, flag,
flag, flag,
source); source,
sendMenuType);
}; };
_addAction(tr::lng_polls_create(tr::now), std::move(callback)); _addAction(tr::lng_polls_create(tr::now), std::move(callback));
} }
@ -812,7 +818,8 @@ void PeerMenuCreatePoll(
MsgId replyToId, MsgId replyToId,
PollData::Flags chosen, PollData::Flags chosen,
PollData::Flags disabled, PollData::Flags disabled,
Api::SendType sendType) { Api::SendType sendType,
SendMenu::Type sendMenuType) {
if (peer->isChannel() && !peer->isMegagroup()) { if (peer->isChannel() && !peer->isMegagroup()) {
chosen &= ~PollData::Flag::PublicVotes; chosen &= ~PollData::Flag::PublicVotes;
disabled |= PollData::Flag::PublicVotes; disabled |= PollData::Flag::PublicVotes;
@ -821,7 +828,8 @@ void PeerMenuCreatePoll(
controller, controller,
chosen, chosen,
disabled, disabled,
sendType)); sendType,
sendMenuType));
const auto lock = box->lifetime().make_state<bool>(false); const auto lock = box->lifetime().make_state<bool>(false);
box->submitRequests( box->submitRequests(
) | rpl::start_with_next([=](const CreatePollBox::Result &result) { ) | rpl::start_with_next([=](const CreatePollBox::Result &result) {

View file

@ -8,6 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#pragma once #pragma once
#include "api/api_common.h" #include "api/api_common.h"
#include "chat_helpers/send_context_menu.h"
#include "data/data_poll.h" #include "data/data_poll.h"
class History; class History;
@ -69,7 +70,8 @@ void PeerMenuCreatePoll(
MsgId replyToId = 0, MsgId replyToId = 0,
PollData::Flags chosen = PollData::Flags(), PollData::Flags chosen = PollData::Flags(),
PollData::Flags disabled = PollData::Flags(), PollData::Flags disabled = PollData::Flags(),
Api::SendType sendType = Api::SendType::Normal); Api::SendType sendType = Api::SendType::Normal,
SendMenu::Type sendMenuType = SendMenu::Type::Scheduled);
struct ClearChat { struct ClearChat {
}; };