mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +02:00
Added ability to change name of sticker set from sticker set box.
This commit is contained in:
parent
aeb5e57061
commit
0046bae53f
4 changed files with 104 additions and 3 deletions
|
@ -2929,6 +2929,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
"lng_masks_has_been_archived" = "Mask pack has been archived.";
|
"lng_masks_has_been_archived" = "Mask pack has been archived.";
|
||||||
"lng_masks_installed" = "Mask pack has been installed.";
|
"lng_masks_installed" = "Mask pack has been installed.";
|
||||||
"lng_emoji_nothing_found" = "No emoji found";
|
"lng_emoji_nothing_found" = "No emoji found";
|
||||||
|
"lng_stickers_context_edit_name" = "Edit name";
|
||||||
|
"lng_stickers_box_edit_name_title" = "Edit Sticker Set Name";
|
||||||
|
"lng_stickers_box_edit_name_about" = "Choose a name for your set.";
|
||||||
|
|
||||||
"lng_in_dlg_photo" = "Photo";
|
"lng_in_dlg_photo" = "Photo";
|
||||||
"lng_in_dlg_album" = "Album";
|
"lng_in_dlg_album" = "Album";
|
||||||
|
|
|
@ -25,6 +25,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "ui/widgets/buttons.h"
|
#include "ui/widgets/buttons.h"
|
||||||
#include "ui/widgets/scroll_area.h"
|
#include "ui/widgets/scroll_area.h"
|
||||||
#include "ui/widgets/gradient_round_button.h"
|
#include "ui/widgets/gradient_round_button.h"
|
||||||
|
#include "ui/widgets/fields/input_field.h"
|
||||||
#include "ui/image/image.h"
|
#include "ui/image/image.h"
|
||||||
#include "ui/image/image_location_factory.h"
|
#include "ui/image/image_location_factory.h"
|
||||||
#include "ui/text/text_utilities.h"
|
#include "ui/text/text_utilities.h"
|
||||||
|
@ -271,6 +272,10 @@ public:
|
||||||
: Data::StickersType::Stickers;
|
: Data::StickersType::Stickers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] bool amSetCreator() const {
|
||||||
|
return _amSetCreator;
|
||||||
|
}
|
||||||
|
|
||||||
~Inner();
|
~Inner();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -366,6 +371,7 @@ private:
|
||||||
TimeId _setInstallDate = TimeId(0);
|
TimeId _setInstallDate = TimeId(0);
|
||||||
StickerType _setThumbnailType = StickerType::Webp;
|
StickerType _setThumbnailType = StickerType::Webp;
|
||||||
ImageWithLocation _setThumbnail;
|
ImageWithLocation _setThumbnail;
|
||||||
|
bool _amSetCreator = false;
|
||||||
|
|
||||||
const std::unique_ptr<Ui::PathShiftGradient> _pathGradient;
|
const std::unique_ptr<Ui::PathShiftGradient> _pathGradient;
|
||||||
mutable StickerPremiumMark _premiumMark;
|
mutable StickerPremiumMark _premiumMark;
|
||||||
|
@ -538,6 +544,70 @@ void StickerSetBox::updateTitleAndButtons() {
|
||||||
updateButtons();
|
updateButtons();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ChangeSetNameBox(
|
||||||
|
not_null<Ui::GenericBox*> box,
|
||||||
|
not_null<Data::Session*> data,
|
||||||
|
const StickerSetIdentifier &input) {
|
||||||
|
box->setTitle(tr::lng_stickers_box_edit_name_title());
|
||||||
|
box->addRow(
|
||||||
|
object_ptr<Ui::FlatLabel>(
|
||||||
|
box,
|
||||||
|
tr::lng_stickers_box_edit_name_about(),
|
||||||
|
st::boxLabel));
|
||||||
|
|
||||||
|
const auto wasName = [&] {
|
||||||
|
const auto &sets = data->stickers().sets();
|
||||||
|
const auto it = sets.find(input.id);
|
||||||
|
return (it == sets.end()) ? QString() : it->second->title;
|
||||||
|
}();
|
||||||
|
const auto wrap = box->addRow(object_ptr<Ui::FixedHeightWidget>(
|
||||||
|
box,
|
||||||
|
st::editStickerSetNameField.heightMin));
|
||||||
|
auto owned = object_ptr<Ui::InputField>(
|
||||||
|
wrap,
|
||||||
|
st::editStickerSetNameField,
|
||||||
|
tr::lng_stickers_context_edit_name(),
|
||||||
|
wasName);
|
||||||
|
const auto field = owned.data();
|
||||||
|
wrap->widthValue() | rpl::start_with_next([=](int width) {
|
||||||
|
field->move(0, 0);
|
||||||
|
field->resize(width, field->height());
|
||||||
|
wrap->resize(width, field->height());
|
||||||
|
}, wrap->lifetime());
|
||||||
|
field->selectAll();
|
||||||
|
constexpr auto kMaxSetNameLength = 50;
|
||||||
|
field->setMaxLength(kMaxSetNameLength);
|
||||||
|
Ui::AddLengthLimitLabel(field, kMaxSetNameLength, kMaxSetNameLength + 1);
|
||||||
|
box->setFocusCallback([=] { field->setFocusFast(); });
|
||||||
|
const auto close = crl::guard(box, [=] { box->closeBox(); });
|
||||||
|
const auto save = [=, show = box->uiShow()] {
|
||||||
|
const auto text = field->getLastText().trimmed();
|
||||||
|
if ((Ui::ComputeRealUnicodeCharactersCount(text) > kMaxSetNameLength)
|
||||||
|
|| text.isEmpty()) {
|
||||||
|
field->showError();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
data->session().api().request(
|
||||||
|
MTPstickers_RenameStickerSet(
|
||||||
|
Data::InputStickerSet(input),
|
||||||
|
MTP_string(text))
|
||||||
|
).done([=](const MTPmessages_StickerSet &result) {
|
||||||
|
result.match([&](const MTPDmessages_stickerSet &d) {
|
||||||
|
data->stickers().feedSetFull(d);
|
||||||
|
data->stickers().notifyUpdated(Data::StickersType::Stickers);
|
||||||
|
}, [](const auto &) {
|
||||||
|
});
|
||||||
|
close();
|
||||||
|
}).fail([=](const MTP::Error &error) {
|
||||||
|
show->showToast(error.type());
|
||||||
|
close();
|
||||||
|
}).send();
|
||||||
|
};
|
||||||
|
|
||||||
|
box->addButton(tr::lng_box_done(), save);
|
||||||
|
box->addButton(tr::lng_cancel(), close);
|
||||||
|
}
|
||||||
|
|
||||||
void StickerSetBox::updateButtons() {
|
void StickerSetBox::updateButtons() {
|
||||||
clearButtons();
|
clearButtons();
|
||||||
if (_inner->loaded()) {
|
if (_inner->loaded()) {
|
||||||
|
@ -548,6 +618,20 @@ void StickerSetBox::updateButtons() {
|
||||||
? tr::lng_stickers_copied_emoji(tr::now)
|
? tr::lng_stickers_copied_emoji(tr::now)
|
||||||
: tr::lng_stickers_copied(tr::now));
|
: tr::lng_stickers_copied(tr::now));
|
||||||
};
|
};
|
||||||
|
const auto fillSetCreatorMenu = [&] {
|
||||||
|
using Filler = Fn<void(not_null<Ui::PopupMenu*>)>;
|
||||||
|
if (!_inner->amSetCreator()) {
|
||||||
|
return Filler(nullptr);
|
||||||
|
}
|
||||||
|
const auto data = &_session->data();
|
||||||
|
return Filler([=, show = _show, set = _set](
|
||||||
|
not_null<Ui::PopupMenu*> menu) {
|
||||||
|
menu->addAction(
|
||||||
|
tr::lng_stickers_context_edit_name(tr::now),
|
||||||
|
[=] { show->showBox(Box(ChangeSetNameBox, data, set)); },
|
||||||
|
&st::menuIconEdit);
|
||||||
|
});
|
||||||
|
}();
|
||||||
if (_inner->notInstalled()) {
|
if (_inner->notInstalled()) {
|
||||||
if (!_session->premium()
|
if (!_session->premium()
|
||||||
&& _session->premiumPossible()
|
&& _session->premiumPossible()
|
||||||
|
@ -586,6 +670,9 @@ void StickerSetBox::updateButtons() {
|
||||||
*menu = base::make_unique_q<Ui::PopupMenu>(
|
*menu = base::make_unique_q<Ui::PopupMenu>(
|
||||||
top,
|
top,
|
||||||
st::popupMenuWithIcons);
|
st::popupMenuWithIcons);
|
||||||
|
if (fillSetCreatorMenu) {
|
||||||
|
fillSetCreatorMenu(*menu);
|
||||||
|
}
|
||||||
(*menu)->addAction(
|
(*menu)->addAction(
|
||||||
((type == Data::StickersType::Emoji)
|
((type == Data::StickersType::Emoji)
|
||||||
? tr::lng_stickers_share_emoji
|
? tr::lng_stickers_share_emoji
|
||||||
|
@ -636,6 +723,9 @@ void StickerSetBox::updateButtons() {
|
||||||
remove,
|
remove,
|
||||||
&st::menuIconRemove);
|
&st::menuIconRemove);
|
||||||
} else {
|
} else {
|
||||||
|
if (fillSetCreatorMenu) {
|
||||||
|
fillSetCreatorMenu(*menu);
|
||||||
|
}
|
||||||
(*menu)->addAction(
|
(*menu)->addAction(
|
||||||
(type == Data::StickersType::Masks
|
(type == Data::StickersType::Masks
|
||||||
? tr::lng_masks_archive_pack(tr::now)
|
? tr::lng_masks_archive_pack(tr::now)
|
||||||
|
@ -748,7 +838,9 @@ void StickerSetBox::Inner::gotSet(const MTPmessages_StickerSet &set) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
data.vset().match([&](const MTPDstickerSet &set) {
|
|
||||||
|
{
|
||||||
|
const auto &set = data.vset().data();
|
||||||
_setTitle = _session->data().stickers().getSetTitle(
|
_setTitle = _session->data().stickers().getSetTitle(
|
||||||
set);
|
set);
|
||||||
_setShortName = qs(set.vshort_name());
|
_setShortName = qs(set.vshort_name());
|
||||||
|
@ -759,6 +851,7 @@ void StickerSetBox::Inner::gotSet(const MTPmessages_StickerSet &set) {
|
||||||
_setFlags = Data::ParseStickersSetFlags(set);
|
_setFlags = Data::ParseStickersSetFlags(set);
|
||||||
_setInstallDate = set.vinstalled_date().value_or(0);
|
_setInstallDate = set.vinstalled_date().value_or(0);
|
||||||
_setThumbnailDocumentId = set.vthumb_document_id().value_or_empty();
|
_setThumbnailDocumentId = set.vthumb_document_id().value_or_empty();
|
||||||
|
_amSetCreator = set.is_creator();
|
||||||
_setThumbnail = [&] {
|
_setThumbnail = [&] {
|
||||||
if (const auto thumbs = set.vthumbs()) {
|
if (const auto thumbs = set.vthumbs()) {
|
||||||
for (const auto &thumb : thumbs->v) {
|
for (const auto &thumb : thumbs->v) {
|
||||||
|
@ -791,7 +884,7 @@ void StickerSetBox::Inner::gotSet(const MTPmessages_StickerSet &set) {
|
||||||
set->emoji = _emoji;
|
set->emoji = _emoji;
|
||||||
set->setThumbnail(_setThumbnail, _setThumbnailType);
|
set->setThumbnail(_setThumbnail, _setThumbnailType);
|
||||||
}
|
}
|
||||||
});
|
};
|
||||||
}, [&](const MTPDmessages_stickerSetNotModified &data) {
|
}, [&](const MTPDmessages_stickerSetNotModified &data) {
|
||||||
LOG(("API Error: Unexpected messages.stickerSetNotModified."));
|
LOG(("API Error: Unexpected messages.stickerSetNotModified."));
|
||||||
});
|
});
|
||||||
|
|
|
@ -1409,6 +1409,11 @@ editTagLimit: FlatLabel(defaultFlatLabel) {
|
||||||
textFg: windowSubTextFg;
|
textFg: windowSubTextFg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
editStickerSetNameField: InputField(defaultInputField) {
|
||||||
|
textMargins: margins(0px, 28px, 26px, 4px);
|
||||||
|
heightMax: 55px;
|
||||||
|
}
|
||||||
|
|
||||||
paidStarIcon: icon {{ "settings/premium/star", creditsBg1 }};
|
paidStarIcon: icon {{ "settings/premium/star", creditsBg1 }};
|
||||||
paidStarIconTop: 7px;
|
paidStarIconTop: 7px;
|
||||||
paidAmountAbout: FlatLabel(defaultFlatLabel) {
|
paidAmountAbout: FlatLabel(defaultFlatLabel) {
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 99d9142130025e817fe7f1ac278078c34a509a1c
|
Subproject commit 97bfa6cef474b3b311a178ff1a1042d09972a7c7
|
Loading…
Add table
Reference in a new issue