Support premium bio (with links and x2 length).

This commit is contained in:
John Preston 2022-05-30 18:30:51 +04:00
parent 8ca2f6a444
commit 5bc072de07
4 changed files with 26 additions and 17 deletions

View file

@ -106,14 +106,6 @@ void ChatCreateDone(
} // namespace } // namespace
style::InputField CreateBioFieldStyle() {
auto result = st::newGroupDescription;
result.textMargins.setRight(
st::boxTextFont->spacew
+ st::boxTextFont->width(QString::number(kMaxBioLength)));
return result;
}
TextWithEntities PeerFloodErrorText( TextWithEntities PeerFloodErrorText(
not_null<Main::Session*> session, not_null<Main::Session*> session,
PeerFloodType type) { PeerFloodType type) {

View file

@ -35,16 +35,12 @@ class LinkButton;
class UserpicButton; class UserpicButton;
} // namespace Ui } // namespace Ui
constexpr auto kMaxBioLength = 70;
enum class PeerFloodType { enum class PeerFloodType {
Send, Send,
InviteGroup, InviteGroup,
InviteChannel, InviteChannel,
}; };
[[nodiscard]] style::InputField CreateBioFieldStyle();
[[nodiscard]] TextWithEntities PeerFloodErrorText( [[nodiscard]] TextWithEntities PeerFloodErrorText(
not_null<Main::Session*> session, not_null<Main::Session*> session,
PeerFloodType type); PeerFloodType type);

View file

@ -26,6 +26,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "data/data_user.h" #include "data/data_user.h"
#include "data/data_session.h" #include "data/data_session.h"
#include "boxes/peers/edit_peer_permissions_box.h" #include "boxes/peers/edit_peer_permissions_box.h"
#include "boxes/premium_limits_box.h"
#include "base/unixtime.h" #include "base/unixtime.h"
namespace Info { namespace Info {
@ -125,6 +126,7 @@ TextWithEntities AboutWithEntities(
auto flags = TextParseLinks | TextParseMentions; auto flags = TextParseLinks | TextParseMentions;
const auto user = peer->asUser(); const auto user = peer->asUser();
const auto isBot = user && user->isBot(); const auto isBot = user && user->isBot();
const auto isPremium = user && user->isPremium();
if (!user) { if (!user) {
flags |= TextParseHashtags; flags |= TextParseHashtags;
} else if (isBot) { } else if (isBot) {
@ -132,7 +134,14 @@ TextWithEntities AboutWithEntities(
} }
const auto stripExternal = peer->isChat() const auto stripExternal = peer->isChat()
|| peer->isMegagroup() || peer->isMegagroup()
|| (user && !isBot); || (user && !isBot && !isPremium);
const auto limit = AppConfigLimit(
&peer->session(),
"about_length_limit_default",
70);
const auto used = (!user || isPremium || value.size() <= limit)
? value
: value.mid(0, limit) + "...";
auto result = TextWithEntities{ value }; auto result = TextWithEntities{ value };
TextUtilities::ParseEntities(result, flags); TextUtilities::ParseEntities(result, flags);
if (stripExternal) { if (stripExternal) {

View file

@ -26,6 +26,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "chat_helpers/emoji_suggestions_widget.h" #include "chat_helpers/emoji_suggestions_widget.h"
#include "boxes/add_contact_box.h" #include "boxes/add_contact_box.h"
#include "boxes/change_phone_box.h" #include "boxes/change_phone_box.h"
#include "boxes/premium_limits_box.h"
#include "boxes/username_box.h" #include "boxes/username_box.h"
#include "data/data_session.h" #include "data/data_session.h"
#include "data/data_user.h" #include "data/data_user.h"
@ -343,10 +344,18 @@ void SetupRows(
void SetupBio( void SetupBio(
not_null<Ui::VerticalLayout*> container, not_null<Ui::VerticalLayout*> container,
not_null<UserData*> self) { not_null<UserData*> self) {
const auto bioStyle = [] { const auto defaultLimit = AppConfigLimit(
&self->session(),
"about_length_limit_default",
70);
const auto premiumLimit = AppConfigLimit(
&self->session(),
"about_length_limit_premium",
140);
const auto bioStyle = [=] {
auto result = st::settingsBio; auto result = st::settingsBio;
result.textMargins.setRight(st::boxTextFont->spacew result.textMargins.setRight(st::boxTextFont->spacew
+ st::boxTextFont->width(QString::number(kMaxBioLength))); + st::boxTextFont->width('-' + QString::number(premiumLimit)));
return result; return result;
}; };
const auto style = Ui::AttachAsChild(container, bioStyle()); const auto style = Ui::AttachAsChild(container, bioStyle());
@ -390,8 +399,11 @@ void SetupBio(
text = bio->getLastText(); text = bio->getLastText();
} }
changed->fire(*current != text); changed->fire(*current != text);
const auto countLeft = qMax(kMaxBioLength - text.size(), 0); const auto limit = self->isPremium() ? premiumLimit : defaultLimit;
const auto countLeft = limit - int(text.size());
countdown->setText(QString::number(countLeft)); countdown->setText(QString::number(countLeft));
countdown->setTextColorOverride(
countLeft < 0 ? st::boxTextFgError->c : std::optional<QColor>());
}; };
const auto save = [=] { const auto save = [=] {
self->session().api().saveSelfBio( self->session().api().saveSelfBio(
@ -435,7 +447,7 @@ void SetupBio(
} }
}); });
bio->setMaxLength(kMaxBioLength); bio->setMaxLength(premiumLimit * 2);
bio->setSubmitSettings(Ui::InputField::SubmitSettings::Both); bio->setSubmitSettings(Ui::InputField::SubmitSettings::Both);
auto cursor = bio->textCursor(); auto cursor = bio->textCursor();
cursor.setPosition(bio->getLastText().size()); cursor.setPosition(bio->getLastText().size());