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
style::InputField CreateBioFieldStyle() {
auto result = st::newGroupDescription;
result.textMargins.setRight(
st::boxTextFont->spacew
+ st::boxTextFont->width(QString::number(kMaxBioLength)));
return result;
}
TextWithEntities PeerFloodErrorText(
not_null<Main::Session*> session,
PeerFloodType type) {

View file

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

View file

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

View file

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