Edit noforwards in group / channel type.
This commit is contained in:
parent
0309eb023e
commit
7d89952541
|
@ -1004,6 +1004,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
"lng_manage_public_group_title" = "Public";
|
"lng_manage_public_group_title" = "Public";
|
||||||
"lng_manage_private_peer_title" = "Private";
|
"lng_manage_private_peer_title" = "Private";
|
||||||
"lng_manage_public_peer_title" = "Public";
|
"lng_manage_public_peer_title" = "Public";
|
||||||
|
"lng_manage_peer_no_forwards_title" = "Saving content";
|
||||||
|
"lng_manage_peer_no_forwards" = "Restrict saving content";
|
||||||
|
"lng_manage_peer_no_forwards_about" = "Participants won't be able to forward messages from this channel or save media files.";
|
||||||
|
|
||||||
"lng_manage_discussion_group" = "Discussion";
|
"lng_manage_discussion_group" = "Discussion";
|
||||||
"lng_manage_discussion_group_add" = "Add a group";
|
"lng_manage_discussion_group_add" = "Add a group";
|
||||||
|
@ -1825,7 +1828,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
"lng_edit_contact_title" = "Edit contact name";
|
"lng_edit_contact_title" = "Edit contact name";
|
||||||
"lng_edit_channel_title" = "Edit channel";
|
"lng_edit_channel_title" = "Edit channel";
|
||||||
"lng_edit_sign_messages" = "Sign messages";
|
"lng_edit_sign_messages" = "Sign messages";
|
||||||
"lng_edit_allow_forwards" = "Allow saving content";
|
|
||||||
"lng_edit_group" = "Edit group";
|
"lng_edit_group" = "Edit group";
|
||||||
"lng_edit_self_title" = "Edit your name";
|
"lng_edit_self_title" = "Edit your name";
|
||||||
"lng_confirm_contact_data" = "New Contact";
|
"lng_confirm_contact_data" = "New Contact";
|
||||||
|
|
|
@ -277,7 +277,7 @@ private:
|
||||||
std::optional<QString> description;
|
std::optional<QString> description;
|
||||||
std::optional<bool> hiddenPreHistory;
|
std::optional<bool> hiddenPreHistory;
|
||||||
std::optional<bool> signatures;
|
std::optional<bool> signatures;
|
||||||
std::optional<bool> forwards;
|
std::optional<bool> noForwards;
|
||||||
std::optional<ChannelData*> linkedChat;
|
std::optional<ChannelData*> linkedChat;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -297,7 +297,6 @@ private:
|
||||||
void fillLinkedChatButton();
|
void fillLinkedChatButton();
|
||||||
//void fillInviteLinkButton();
|
//void fillInviteLinkButton();
|
||||||
void fillSignaturesButton();
|
void fillSignaturesButton();
|
||||||
void fillForwardsButton();
|
|
||||||
void fillHistoryVisibilityButton();
|
void fillHistoryVisibilityButton();
|
||||||
void fillManageSection();
|
void fillManageSection();
|
||||||
void fillPendingRequestsButton();
|
void fillPendingRequestsButton();
|
||||||
|
@ -345,7 +344,7 @@ private:
|
||||||
std::optional<HistoryVisibility> _historyVisibilitySavedValue;
|
std::optional<HistoryVisibility> _historyVisibilitySavedValue;
|
||||||
std::optional<QString> _usernameSavedValue;
|
std::optional<QString> _usernameSavedValue;
|
||||||
std::optional<bool> _signaturesSavedValue;
|
std::optional<bool> _signaturesSavedValue;
|
||||||
std::optional<bool> _forwardsSavedValue;
|
std::optional<bool> _noForwardsSavedValue;
|
||||||
|
|
||||||
const not_null<Window::SessionNavigation*> _navigation;
|
const not_null<Window::SessionNavigation*> _navigation;
|
||||||
const not_null<Ui::BoxContent*> _box;
|
const not_null<Ui::BoxContent*> _box;
|
||||||
|
@ -611,10 +610,11 @@ void Controller::refreshHistoryVisibility() {
|
||||||
void Controller::showEditPeerTypeBox(
|
void Controller::showEditPeerTypeBox(
|
||||||
std::optional<rpl::producer<QString>> error) {
|
std::optional<rpl::producer<QString>> error) {
|
||||||
const auto boxCallback = crl::guard(this, [=](
|
const auto boxCallback = crl::guard(this, [=](
|
||||||
Privacy checked, QString publicLink) {
|
Privacy checked, QString publicLink, bool noForwards) {
|
||||||
_privacyTypeUpdates.fire(std::move(checked));
|
_privacyTypeUpdates.fire(std::move(checked));
|
||||||
_privacySavedValue = checked;
|
_privacySavedValue = checked;
|
||||||
_usernameSavedValue = publicLink;
|
_usernameSavedValue = publicLink;
|
||||||
|
_noForwardsSavedValue = noForwards;
|
||||||
refreshHistoryVisibility();
|
refreshHistoryVisibility();
|
||||||
});
|
});
|
||||||
_navigation->parentController()->show(
|
_navigation->parentController()->show(
|
||||||
|
@ -624,6 +624,7 @@ void Controller::showEditPeerTypeBox(
|
||||||
boxCallback,
|
boxCallback,
|
||||||
_privacySavedValue,
|
_privacySavedValue,
|
||||||
_usernameSavedValue,
|
_usernameSavedValue,
|
||||||
|
_noForwardsSavedValue,
|
||||||
error),
|
error),
|
||||||
Ui::LayerOption::KeepOther);
|
Ui::LayerOption::KeepOther);
|
||||||
}
|
}
|
||||||
|
@ -699,6 +700,7 @@ void Controller::fillPrivacyTypeButton() {
|
||||||
&& _peer->asChannel()->hasUsername())
|
&& _peer->asChannel()->hasUsername())
|
||||||
? Privacy::HasUsername
|
? Privacy::HasUsername
|
||||||
: Privacy::NoUsername;
|
: Privacy::NoUsername;
|
||||||
|
_noForwardsSavedValue = !_peer->allowsForwarding();
|
||||||
|
|
||||||
const auto isGroup = (_peer->isChat() || _peer->isMegagroup());
|
const auto isGroup = (_peer->isChat() || _peer->isMegagroup());
|
||||||
AddButtonWithText(
|
AddButtonWithText(
|
||||||
|
@ -800,21 +802,6 @@ void Controller::fillSignaturesButton() {
|
||||||
}, _controls.buttonsLayout->lifetime());
|
}, _controls.buttonsLayout->lifetime());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Controller::fillForwardsButton() {
|
|
||||||
Expects(_controls.buttonsLayout != nullptr);
|
|
||||||
|
|
||||||
AddButtonWithText(
|
|
||||||
_controls.buttonsLayout,
|
|
||||||
tr::lng_edit_allow_forwards(),
|
|
||||||
rpl::single(QString()),
|
|
||||||
[=] {}
|
|
||||||
)->toggleOn(rpl::single(_peer->allowsForwarding())
|
|
||||||
)->toggledValue(
|
|
||||||
) | rpl::start_with_next([=](bool toggled) {
|
|
||||||
_forwardsSavedValue = toggled;
|
|
||||||
}, _controls.buttonsLayout->lifetime());
|
|
||||||
}
|
|
||||||
|
|
||||||
void Controller::fillHistoryVisibilityButton() {
|
void Controller::fillHistoryVisibilityButton() {
|
||||||
Expects(_controls.buttonsLayout != nullptr);
|
Expects(_controls.buttonsLayout != nullptr);
|
||||||
|
|
||||||
|
@ -874,19 +861,16 @@ void Controller::fillManageSection() {
|
||||||
const auto isChannel = (!chat);
|
const auto isChannel = (!chat);
|
||||||
if (!chat && !channel) return;
|
if (!chat && !channel) return;
|
||||||
|
|
||||||
const auto canEditUsername = [&] {
|
const auto canEditType = [&] {
|
||||||
return isChannel
|
return isChannel
|
||||||
? channel->canEditUsername()
|
? channel->amCreator()
|
||||||
: chat->canEditUsername();
|
: chat->amCreator();
|
||||||
}();
|
}();
|
||||||
const auto canEditSignatures = [&] {
|
const auto canEditSignatures = [&] {
|
||||||
return isChannel
|
return isChannel
|
||||||
? (channel->canEditSignatures() && !channel->isMegagroup())
|
? (channel->canEditSignatures() && !channel->isMegagroup())
|
||||||
: false;
|
: false;
|
||||||
}();
|
}();
|
||||||
const auto canEditForwards = [&] {
|
|
||||||
return isChannel ? channel->amCreator() : chat->amCreator();
|
|
||||||
}();
|
|
||||||
const auto canEditPreHistoryHidden = [&] {
|
const auto canEditPreHistoryHidden = [&] {
|
||||||
return isChannel
|
return isChannel
|
||||||
? channel->canEditPreHistoryHidden()
|
? channel->canEditPreHistoryHidden()
|
||||||
|
@ -946,7 +930,7 @@ void Controller::fillManageSection() {
|
||||||
|
|
||||||
AddSkip(_controls.buttonsLayout, 0);
|
AddSkip(_controls.buttonsLayout, 0);
|
||||||
|
|
||||||
if (canEditUsername) {
|
if (canEditType) {
|
||||||
fillPrivacyTypeButton();
|
fillPrivacyTypeButton();
|
||||||
//} else if (canEditInviteLinks) {
|
//} else if (canEditInviteLinks) {
|
||||||
// fillInviteLinkButton();
|
// fillInviteLinkButton();
|
||||||
|
@ -960,15 +944,11 @@ void Controller::fillManageSection() {
|
||||||
if (canEditSignatures) {
|
if (canEditSignatures) {
|
||||||
fillSignaturesButton();
|
fillSignaturesButton();
|
||||||
}
|
}
|
||||||
if (canEditForwards) {
|
|
||||||
fillForwardsButton();
|
|
||||||
}
|
|
||||||
if (canEditPreHistoryHidden
|
if (canEditPreHistoryHidden
|
||||||
|| canEditSignatures
|
|| canEditSignatures
|
||||||
|| canEditForwards
|
|
||||||
//|| canEditInviteLinks
|
//|| canEditInviteLinks
|
||||||
|| canViewOrEditLinkedChat
|
|| canViewOrEditLinkedChat
|
||||||
|| canEditUsername) {
|
|| canEditType) {
|
||||||
AddSkip(
|
AddSkip(
|
||||||
_controls.buttonsLayout,
|
_controls.buttonsLayout,
|
||||||
st::editPeerTopButtonsLayoutSkip,
|
st::editPeerTopButtonsLayoutSkip,
|
||||||
|
@ -989,7 +969,7 @@ void Controller::fillManageSection() {
|
||||||
st::infoIconPermissions);
|
st::infoIconPermissions);
|
||||||
}
|
}
|
||||||
if (canEditInviteLinks
|
if (canEditInviteLinks
|
||||||
&& (canEditUsername
|
&& (canEditType
|
||||||
|| !_peer->isChannel()
|
|| !_peer->isChannel()
|
||||||
|| !_peer->asChannel()->hasUsername())) {
|
|| !_peer->asChannel()->hasUsername())) {
|
||||||
auto count = Info::Profile::MigratedOrMeValue(
|
auto count = Info::Profile::MigratedOrMeValue(
|
||||||
|
@ -1258,10 +1238,10 @@ bool Controller::validateSignatures(Saving &to) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Controller::validateForwards(Saving &to) const {
|
bool Controller::validateForwards(Saving &to) const {
|
||||||
if (!_forwardsSavedValue.has_value()) {
|
if (!_noForwardsSavedValue.has_value()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
to.forwards = _forwardsSavedValue;
|
to.noForwards = _noForwardsSavedValue;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1537,13 +1517,13 @@ void Controller::saveSignatures() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Controller::saveForwards() {
|
void Controller::saveForwards() {
|
||||||
if (!_savingData.forwards
|
if (!_savingData.noForwards
|
||||||
|| *_savingData.forwards == _peer->allowsForwarding()) {
|
|| *_savingData.noForwards != _peer->allowsForwarding()) {
|
||||||
return continueSave();
|
return continueSave();
|
||||||
}
|
}
|
||||||
_api.request(MTPmessages_ToggleNoForwards(
|
_api.request(MTPmessages_ToggleNoForwards(
|
||||||
_peer->input,
|
_peer->input,
|
||||||
MTP_bool(!*_savingData.forwards)
|
MTP_bool(*_savingData.noForwards)
|
||||||
)).done([=](const MTPUpdates &result) {
|
)).done([=](const MTPUpdates &result) {
|
||||||
_peer->session().api().applyUpdates(result);
|
_peer->session().api().applyUpdates(result);
|
||||||
continueSave();
|
continueSave();
|
||||||
|
|
|
@ -63,13 +63,14 @@ public:
|
||||||
not_null<PeerData*> peer,
|
not_null<PeerData*> peer,
|
||||||
bool useLocationPhrases,
|
bool useLocationPhrases,
|
||||||
std::optional<Privacy> privacySavedValue,
|
std::optional<Privacy> privacySavedValue,
|
||||||
std::optional<QString> usernameSavedValue);
|
std::optional<QString> usernameSavedValue,
|
||||||
|
std::optional<bool> noForwardsSavedValue);
|
||||||
|
|
||||||
void createContent();
|
void createContent();
|
||||||
QString getUsernameInput();
|
[[nodiscard]] QString getUsernameInput() const;
|
||||||
void setFocusUsername();
|
void setFocusUsername();
|
||||||
|
|
||||||
rpl::producer<QString> getTitle() {
|
[[nodiscard]] rpl::producer<QString> getTitle() const {
|
||||||
return !_privacySavedValue
|
return !_privacySavedValue
|
||||||
? tr::lng_create_invite_link_title()
|
? tr::lng_create_invite_link_title()
|
||||||
: _isGroup
|
: _isGroup
|
||||||
|
@ -77,14 +78,18 @@ public:
|
||||||
: tr::lng_manage_peer_channel_type();
|
: tr::lng_manage_peer_channel_type();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isAllowSave() {
|
[[nodiscard]] bool isAllowSave() {
|
||||||
return _isAllowSave;
|
return _isAllowSave;
|
||||||
}
|
}
|
||||||
|
|
||||||
Privacy getPrivacy() {
|
[[nodiscard]] Privacy getPrivacy() const {
|
||||||
return _controls.privacy->value();
|
return _controls.privacy->value();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] bool noForwards() const {
|
||||||
|
return _controls.noForwards->toggled();
|
||||||
|
}
|
||||||
|
|
||||||
void showError(rpl::producer<QString> text) {
|
void showError(rpl::producer<QString> text) {
|
||||||
_controls.usernameInput->showError();
|
_controls.usernameInput->showError();
|
||||||
showUsernameError(std::move(text));
|
showUsernameError(std::move(text));
|
||||||
|
@ -100,6 +105,8 @@ private:
|
||||||
|
|
||||||
Ui::SlideWrap<Ui::RpWidget> *inviteLinkWrap = nullptr;
|
Ui::SlideWrap<Ui::RpWidget> *inviteLinkWrap = nullptr;
|
||||||
Ui::FlatLabel *inviteLink = nullptr;
|
Ui::FlatLabel *inviteLink = nullptr;
|
||||||
|
|
||||||
|
Ui::SettingsButton *noForwards = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
Controls _controls;
|
Controls _controls;
|
||||||
|
@ -133,6 +140,7 @@ private:
|
||||||
MTP::Sender _api;
|
MTP::Sender _api;
|
||||||
std::optional<Privacy> _privacySavedValue;
|
std::optional<Privacy> _privacySavedValue;
|
||||||
std::optional<QString> _usernameSavedValue;
|
std::optional<QString> _usernameSavedValue;
|
||||||
|
std::optional<bool> _noForwardsSavedValue;
|
||||||
|
|
||||||
bool _useLocationPhrases = false;
|
bool _useLocationPhrases = false;
|
||||||
bool _isGroup = false;
|
bool _isGroup = false;
|
||||||
|
@ -153,12 +161,14 @@ Controller::Controller(
|
||||||
not_null<PeerData*> peer,
|
not_null<PeerData*> peer,
|
||||||
bool useLocationPhrases,
|
bool useLocationPhrases,
|
||||||
std::optional<Privacy> privacySavedValue,
|
std::optional<Privacy> privacySavedValue,
|
||||||
std::optional<QString> usernameSavedValue)
|
std::optional<QString> usernameSavedValue,
|
||||||
|
std::optional<bool> noForwardsSavedValue)
|
||||||
: _peer(peer)
|
: _peer(peer)
|
||||||
, _linkOnly(!privacySavedValue.has_value())
|
, _linkOnly(!privacySavedValue.has_value())
|
||||||
, _api(&_peer->session().mtp())
|
, _api(&_peer->session().mtp())
|
||||||
, _privacySavedValue(privacySavedValue)
|
, _privacySavedValue(privacySavedValue)
|
||||||
, _usernameSavedValue(usernameSavedValue)
|
, _usernameSavedValue(usernameSavedValue)
|
||||||
|
, _noForwardsSavedValue(noForwardsSavedValue)
|
||||||
, _useLocationPhrases(useLocationPhrases)
|
, _useLocationPhrases(useLocationPhrases)
|
||||||
, _isGroup(_peer->isChat() || _peer->isMegagroup())
|
, _isGroup(_peer->isChat() || _peer->isMegagroup())
|
||||||
, _isAllowSave(!_usernameSavedValue.value_or(QString()).isEmpty())
|
, _isAllowSave(!_usernameSavedValue.value_or(QString()).isEmpty())
|
||||||
|
@ -196,6 +206,25 @@ void Controller::createContent() {
|
||||||
AddSkip(_wrap.get());
|
AddSkip(_wrap.get());
|
||||||
AddDividerText(_wrap.get(), tr::lng_group_invite_manage_about());
|
AddDividerText(_wrap.get(), tr::lng_group_invite_manage_about());
|
||||||
|
|
||||||
|
AddSkip(_wrap.get());
|
||||||
|
AddSubsectionTitle(_wrap.get(), tr::lng_manage_peer_no_forwards_title());
|
||||||
|
_controls.noForwards = _wrap->add(EditPeerInfoBox::CreateButton(
|
||||||
|
_wrap.get(),
|
||||||
|
tr::lng_manage_peer_no_forwards(),
|
||||||
|
rpl::single(QString()),
|
||||||
|
[=] {},
|
||||||
|
st::manageGroupTopButtonWithText,
|
||||||
|
nullptr
|
||||||
|
));
|
||||||
|
_controls.noForwards->toggleOn(
|
||||||
|
rpl::single(_noForwardsSavedValue.value_or(false))
|
||||||
|
)->toggledValue(
|
||||||
|
) | rpl::start_with_next([=](bool toggled) {
|
||||||
|
_noForwardsSavedValue = toggled;
|
||||||
|
}, _wrap->lifetime());
|
||||||
|
AddSkip(_wrap.get());
|
||||||
|
AddDividerText(_wrap.get(), tr::lng_manage_peer_no_forwards_about());
|
||||||
|
|
||||||
if (_linkOnly) {
|
if (_linkOnly) {
|
||||||
_controls.inviteLinkWrap->show(anim::type::instant);
|
_controls.inviteLinkWrap->show(anim::type::instant);
|
||||||
} else {
|
} else {
|
||||||
|
@ -299,7 +328,7 @@ void Controller::setFocusUsername() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QString Controller::getUsernameInput() {
|
QString Controller::getUsernameInput() const {
|
||||||
return _controls.usernameInput->getLastText().trimmed();
|
return _controls.usernameInput->getLastText().trimmed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -575,22 +604,24 @@ EditPeerTypeBox::EditPeerTypeBox(
|
||||||
QWidget*,
|
QWidget*,
|
||||||
not_null<PeerData*> peer,
|
not_null<PeerData*> peer,
|
||||||
bool useLocationPhrases,
|
bool useLocationPhrases,
|
||||||
std::optional<FnMut<void(Privacy, QString)>> savedCallback,
|
std::optional<FnMut<void(Privacy, QString, bool)>> savedCallback,
|
||||||
std::optional<Privacy> privacySaved,
|
std::optional<Privacy> privacySaved,
|
||||||
std::optional<QString> usernameSaved,
|
std::optional<QString> usernameSaved,
|
||||||
|
std::optional<bool> noForwardsValue,
|
||||||
std::optional<rpl::producer<QString>> usernameError)
|
std::optional<rpl::producer<QString>> usernameError)
|
||||||
: _peer(peer)
|
: _peer(peer)
|
||||||
, _useLocationPhrases(useLocationPhrases)
|
, _useLocationPhrases(useLocationPhrases)
|
||||||
, _savedCallback(std::move(savedCallback))
|
, _savedCallback(std::move(savedCallback))
|
||||||
, _privacySavedValue(privacySaved)
|
, _privacySavedValue(privacySaved)
|
||||||
, _usernameSavedValue(usernameSaved)
|
, _usernameSavedValue(usernameSaved)
|
||||||
|
, _noForwardsValue(noForwardsValue)
|
||||||
, _usernameError(usernameError) {
|
, _usernameError(usernameError) {
|
||||||
}
|
}
|
||||||
|
|
||||||
EditPeerTypeBox::EditPeerTypeBox(
|
EditPeerTypeBox::EditPeerTypeBox(
|
||||||
QWidget*,
|
QWidget*,
|
||||||
not_null<PeerData*> peer)
|
not_null<PeerData*> peer)
|
||||||
: EditPeerTypeBox(nullptr, peer, {}, {}, {}, {}, {}) {
|
: EditPeerTypeBox(nullptr, peer, {}, {}, {}, {}, {}, {}) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditPeerTypeBox::setInnerFocus() {
|
void EditPeerTypeBox::setInnerFocus() {
|
||||||
|
@ -608,7 +639,8 @@ void EditPeerTypeBox::prepare() {
|
||||||
_peer,
|
_peer,
|
||||||
_useLocationPhrases,
|
_useLocationPhrases,
|
||||||
_privacySavedValue,
|
_privacySavedValue,
|
||||||
_usernameSavedValue);
|
_usernameSavedValue,
|
||||||
|
_noForwardsValue);
|
||||||
_focusRequests.events(
|
_focusRequests.events(
|
||||||
) | rpl::start_with_next(
|
) | rpl::start_with_next(
|
||||||
[=] {
|
[=] {
|
||||||
|
@ -632,10 +664,12 @@ void EditPeerTypeBox::prepare() {
|
||||||
}
|
}
|
||||||
|
|
||||||
auto local = std::move(*_savedCallback);
|
auto local = std::move(*_savedCallback);
|
||||||
local(v,
|
local(
|
||||||
(v == Privacy::HasUsername)
|
v,
|
||||||
|
(v == Privacy::HasUsername
|
||||||
? controller->getUsernameInput()
|
? controller->getUsernameInput()
|
||||||
: QString()); // We don't need username with private type.
|
: QString()),
|
||||||
|
controller->noForwards()); // We don't need username with private type.
|
||||||
closeBox();
|
closeBox();
|
||||||
});
|
});
|
||||||
addButton(tr::lng_cancel(), [=] { closeBox(); });
|
addButton(tr::lng_cancel(), [=] { closeBox(); });
|
||||||
|
|
|
@ -36,9 +36,10 @@ public:
|
||||||
QWidget*,
|
QWidget*,
|
||||||
not_null<PeerData*> peer,
|
not_null<PeerData*> peer,
|
||||||
bool useLocationPhrases,
|
bool useLocationPhrases,
|
||||||
std::optional<FnMut<void(Privacy, QString)>> savedCallback,
|
std::optional<FnMut<void(Privacy, QString, bool)>> savedCallback,
|
||||||
std::optional<Privacy> privacySaved,
|
std::optional<Privacy> privacySaved,
|
||||||
std::optional<QString> usernameSaved,
|
std::optional<QString> usernameSaved,
|
||||||
|
std::optional<bool> noForwardsSaved,
|
||||||
std::optional<rpl::producer<QString>> usernameError = {});
|
std::optional<rpl::producer<QString>> usernameError = {});
|
||||||
|
|
||||||
// For invite link only.
|
// For invite link only.
|
||||||
|
@ -53,10 +54,11 @@ protected:
|
||||||
private:
|
private:
|
||||||
not_null<PeerData*> _peer;
|
not_null<PeerData*> _peer;
|
||||||
bool _useLocationPhrases = false;
|
bool _useLocationPhrases = false;
|
||||||
std::optional<FnMut<void(Privacy, QString)>> _savedCallback;
|
std::optional<FnMut<void(Privacy, QString, bool)>> _savedCallback;
|
||||||
|
|
||||||
std::optional<Privacy> _privacySavedValue;
|
std::optional<Privacy> _privacySavedValue;
|
||||||
std::optional<QString> _usernameSavedValue;
|
std::optional<QString> _usernameSavedValue;
|
||||||
|
std::optional<bool> _noForwardsValue;
|
||||||
std::optional<rpl::producer<QString>> _usernameError;
|
std::optional<rpl::producer<QString>> _usernameError;
|
||||||
|
|
||||||
rpl::event_stream<> _focusRequests;
|
rpl::event_stream<> _focusRequests;
|
||||||
|
|
|
@ -467,6 +467,10 @@ bool Instance::moveInPlaylist(
|
||||||
const auto jumpById = [&](FullMsgId id) {
|
const auto jumpById = [&](FullMsgId id) {
|
||||||
return jumpByItem(data->history->owner().message(id));
|
return jumpByItem(data->history->owner().message(id));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (data->order.current() == OrderMode::Shuffle) {
|
||||||
|
}
|
||||||
|
|
||||||
const auto newIndex = *data->playlistIndex
|
const auto newIndex = *data->playlistIndex
|
||||||
+ (data->order.current() == OrderMode::Reverse ? -delta : delta);
|
+ (data->order.current() == OrderMode::Reverse ? -delta : delta);
|
||||||
const auto useIndex = (!data->playlistSlice
|
const auto useIndex = (!data->playlistSlice
|
||||||
|
@ -499,6 +503,7 @@ bool Instance::previousAvailable(AudioMsgId::Type type) const {
|
||||||
return false;
|
return false;
|
||||||
} else if (data->repeat.current() == RepeatMode::All) {
|
} else if (data->repeat.current() == RepeatMode::All) {
|
||||||
return true;
|
return true;
|
||||||
|
} else if (data->order.current() == OrderMode::Shuffle) {
|
||||||
}
|
}
|
||||||
return (data->order.current() == OrderMode::Reverse)
|
return (data->order.current() == OrderMode::Reverse)
|
||||||
? (*data->playlistIndex + 1 < data->playlistSlice->size())
|
? (*data->playlistIndex + 1 < data->playlistSlice->size())
|
||||||
|
@ -513,6 +518,7 @@ bool Instance::nextAvailable(AudioMsgId::Type type) const {
|
||||||
return false;
|
return false;
|
||||||
} else if (data->repeat.current() == RepeatMode::All) {
|
} else if (data->repeat.current() == RepeatMode::All) {
|
||||||
return true;
|
return true;
|
||||||
|
} else if (data->order.current() == OrderMode::Shuffle) {
|
||||||
}
|
}
|
||||||
return (data->order.current() == OrderMode::Reverse)
|
return (data->order.current() == OrderMode::Reverse)
|
||||||
? (*data->playlistIndex > 0)
|
? (*data->playlistIndex > 0)
|
||||||
|
|
Loading…
Reference in New Issue