mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-06 15:13:57 +02:00
Added initial ability to gift credits to users.
This commit is contained in:
parent
8ad2d3d39a
commit
0bfb0fd045
6 changed files with 222 additions and 0 deletions
|
@ -272,6 +272,8 @@ PRIVATE
|
||||||
boxes/edit_caption_box.h
|
boxes/edit_caption_box.h
|
||||||
boxes/edit_privacy_box.cpp
|
boxes/edit_privacy_box.cpp
|
||||||
boxes/edit_privacy_box.h
|
boxes/edit_privacy_box.h
|
||||||
|
boxes/gift_credits_box.cpp
|
||||||
|
boxes/gift_credits_box.h
|
||||||
boxes/gift_premium_box.cpp
|
boxes/gift_premium_box.cpp
|
||||||
boxes/gift_premium_box.h
|
boxes/gift_premium_box.h
|
||||||
boxes/language_box.cpp
|
boxes/language_box.cpp
|
||||||
|
|
|
@ -2342,6 +2342,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
"lng_credits_summary_history_tab_out" = "Outgoing";
|
"lng_credits_summary_history_tab_out" = "Outgoing";
|
||||||
"lng_credits_summary_history_entry_inner_in" = "In-App Purchase";
|
"lng_credits_summary_history_entry_inner_in" = "In-App Purchase";
|
||||||
"lng_credits_summary_balance" = "Balance";
|
"lng_credits_summary_balance" = "Balance";
|
||||||
|
"lng_credits_gift_button" = "Gift Stars to Friends";
|
||||||
"lng_credits_box_out_title" = "Confirm Your Purchase";
|
"lng_credits_box_out_title" = "Confirm Your Purchase";
|
||||||
"lng_credits_box_out_sure#one" = "Do you want to buy **\"{text}\"** in **{bot}** for **{count} Star**?";
|
"lng_credits_box_out_sure#one" = "Do you want to buy **\"{text}\"** in **{bot}** for **{count} Star**?";
|
||||||
"lng_credits_box_out_sure#other" = "Do you want to buy **\"{text}\"** in **{bot}** for **{count} Stars**?";
|
"lng_credits_box_out_sure#other" = "Do you want to buy **\"{text}\"** in **{bot}** for **{count} Stars**?";
|
||||||
|
@ -2390,6 +2391,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
"lng_credits_small_balance_about" = "Buy **Stars** and use them on **{bot}** and other miniapps.";
|
"lng_credits_small_balance_about" = "Buy **Stars** and use them on **{bot}** and other miniapps.";
|
||||||
"lng_credits_purchase_blocked" = "Sorry, you can't purchase this item with Telegram Stars.";
|
"lng_credits_purchase_blocked" = "Sorry, you can't purchase this item with Telegram Stars.";
|
||||||
|
|
||||||
|
"lng_credits_gift_title" = "Gift Telegram Stars";
|
||||||
|
|
||||||
"lng_location_title" = "Location";
|
"lng_location_title" = "Location";
|
||||||
"lng_location_about" = "Display the location of your business on your account.";
|
"lng_location_about" = "Display the location of your business on your account.";
|
||||||
"lng_location_address" = "Enter Address";
|
"lng_location_address" = "Enter Address";
|
||||||
|
|
180
Telegram/SourceFiles/boxes/gift_credits_box.cpp
Normal file
180
Telegram/SourceFiles/boxes/gift_credits_box.cpp
Normal file
|
@ -0,0 +1,180 @@
|
||||||
|
/*
|
||||||
|
This file is part of Telegram Desktop,
|
||||||
|
the official desktop application for the Telegram messaging service.
|
||||||
|
|
||||||
|
For license and copyright information please follow this link:
|
||||||
|
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
|
*/
|
||||||
|
#include "boxes/gift_credits_box.h"
|
||||||
|
|
||||||
|
#include "api/api_credits.h"
|
||||||
|
#include "boxes/peer_list_controllers.h"
|
||||||
|
#include "data/data_peer.h"
|
||||||
|
#include "data/data_session.h"
|
||||||
|
#include "data/data_user.h"
|
||||||
|
#include "data/stickers/data_custom_emoji.h"
|
||||||
|
#include "lang/lang_keys.h"
|
||||||
|
#include "main/session/session_show.h"
|
||||||
|
#include "settings/settings_credits_graphics.h"
|
||||||
|
#include "ui/controls/userpic_button.h"
|
||||||
|
#include "ui/effects/premium_graphics.h"
|
||||||
|
#include "ui/effects/premium_stars_colored.h"
|
||||||
|
#include "ui/layers/generic_box.h"
|
||||||
|
#include "ui/rect.h"
|
||||||
|
#include "ui/text/text_utilities.h"
|
||||||
|
#include "ui/vertical_list.h"
|
||||||
|
#include "ui/widgets/label_with_custom_emoji.h"
|
||||||
|
#include "window/window_session_controller.h"
|
||||||
|
#include "styles/style_boxes.h"
|
||||||
|
#include "styles/style_channel_earn.h"
|
||||||
|
#include "styles/style_chat.h"
|
||||||
|
#include "styles/style_credits.h"
|
||||||
|
#include "styles/style_giveaway.h"
|
||||||
|
#include "styles/style_layers.h"
|
||||||
|
#include "styles/style_premium.h"
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
|
||||||
|
void GiftCreditsBox(
|
||||||
|
not_null<Ui::GenericBox*> box,
|
||||||
|
not_null<PeerData*> peer,
|
||||||
|
Fn<void()> gifted) {
|
||||||
|
box->setStyle(st::creditsGiftBox);
|
||||||
|
box->setNoContentMargin(true);
|
||||||
|
box->addButton(tr::lng_create_group_back(), [=] { box->closeBox(); });
|
||||||
|
|
||||||
|
const auto content = box->setPinnedToTopContent(
|
||||||
|
object_ptr<Ui::VerticalLayout>(box));
|
||||||
|
|
||||||
|
Ui::AddSkip(content);
|
||||||
|
Ui::AddSkip(content);
|
||||||
|
const auto &stUser = st::premiumGiftsUserpicButton;
|
||||||
|
const auto userpicWrap = content->add(
|
||||||
|
object_ptr<Ui::CenterWrap<>>(
|
||||||
|
content,
|
||||||
|
object_ptr<Ui::UserpicButton>(content, peer, stUser)));
|
||||||
|
userpicWrap->setAttribute(Qt::WA_TransparentForMouseEvents);
|
||||||
|
Ui::AddSkip(content);
|
||||||
|
Ui::AddSkip(content);
|
||||||
|
|
||||||
|
{
|
||||||
|
const auto widget = Ui::CreateChild<Ui::RpWidget>(content);
|
||||||
|
using ColoredMiniStars = Ui::Premium::ColoredMiniStars;
|
||||||
|
const auto stars = widget->lifetime().make_state<ColoredMiniStars>(
|
||||||
|
widget,
|
||||||
|
false,
|
||||||
|
Ui::Premium::MiniStars::Type::BiStars);
|
||||||
|
stars->setColorOverride(Ui::Premium::CreditsIconGradientStops());
|
||||||
|
widget->resize(
|
||||||
|
st::boxWidth - stUser.photoSize,
|
||||||
|
stUser.photoSize * 2);
|
||||||
|
content->sizeValue(
|
||||||
|
) | rpl::start_with_next([=](const QSize &size) {
|
||||||
|
widget->moveToLeft(stUser.photoSize / 2, 0);
|
||||||
|
const auto starsRect = Rect(widget->size());
|
||||||
|
stars->setPosition(starsRect.topLeft());
|
||||||
|
stars->setSize(starsRect.size());
|
||||||
|
widget->lower();
|
||||||
|
}, widget->lifetime());
|
||||||
|
widget->paintRequest(
|
||||||
|
) | rpl::start_with_next([=](const QRect &r) {
|
||||||
|
auto p = QPainter(widget);
|
||||||
|
p.fillRect(r, Qt::transparent);
|
||||||
|
stars->paint(p);
|
||||||
|
}, widget->lifetime());
|
||||||
|
}
|
||||||
|
{
|
||||||
|
Ui::AddSkip(content);
|
||||||
|
const auto arrow = Ui::Text::SingleCustomEmoji(
|
||||||
|
peer->owner().customEmojiManager().registerInternalEmoji(
|
||||||
|
st::topicButtonArrow,
|
||||||
|
st::channelEarnLearnArrowMargins,
|
||||||
|
false));
|
||||||
|
auto link = tr::lng_credits_box_history_entry_gift_about_link(
|
||||||
|
lt_emoji,
|
||||||
|
rpl::single(arrow),
|
||||||
|
Ui::Text::RichLangValue
|
||||||
|
) | rpl::map([](TextWithEntities text) {
|
||||||
|
return Ui::Text::Link(
|
||||||
|
std::move(text),
|
||||||
|
tr::lng_credits_box_history_entry_gift_about_url(tr::now));
|
||||||
|
});
|
||||||
|
content->add(
|
||||||
|
object_ptr<Ui::CenterWrap<>>(
|
||||||
|
content,
|
||||||
|
Ui::CreateLabelWithCustomEmoji(
|
||||||
|
content,
|
||||||
|
tr::lng_credits_box_history_entry_gift_out_about(
|
||||||
|
lt_user,
|
||||||
|
rpl::single(TextWithEntities{ peer->shortName() }),
|
||||||
|
lt_link,
|
||||||
|
std::move(link),
|
||||||
|
Ui::Text::RichLangValue),
|
||||||
|
{ .session = &peer->session() },
|
||||||
|
st::creditsBoxAbout)),
|
||||||
|
st::boxRowPadding);
|
||||||
|
}
|
||||||
|
Ui::AddSkip(content);
|
||||||
|
Ui::AddSkip(box->verticalLayout());
|
||||||
|
|
||||||
|
Settings::FillCreditOptions(
|
||||||
|
Main::MakeSessionShow(box->uiShow(), &peer->session()),
|
||||||
|
box->verticalLayout(),
|
||||||
|
peer,
|
||||||
|
0,
|
||||||
|
[=] { gifted(); box->uiShow()->hideLayer(); });
|
||||||
|
|
||||||
|
const auto bottom = box->setPinnedToBottomContent(
|
||||||
|
object_ptr<Ui::VerticalLayout>(box));
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShowGiftCreditsBox(
|
||||||
|
not_null<Window::SessionController*> controller,
|
||||||
|
Fn<void()> gifted) {
|
||||||
|
|
||||||
|
class Controller final : public ContactsBoxController {
|
||||||
|
public:
|
||||||
|
Controller(
|
||||||
|
not_null<Main::Session*> session,
|
||||||
|
Fn<void(not_null<PeerData*>)> choose)
|
||||||
|
: ContactsBoxController(session)
|
||||||
|
, _choose(std::move(choose)) {
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
std::unique_ptr<PeerListRow> createRow(
|
||||||
|
not_null<UserData*> user) override {
|
||||||
|
if (user->isSelf()
|
||||||
|
|| user->isBot()
|
||||||
|
|| user->isServiceUser()
|
||||||
|
|| user->isInaccessible()) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
return ContactsBoxController::createRow(user);
|
||||||
|
}
|
||||||
|
|
||||||
|
void rowClicked(not_null<PeerListRow*> row) override {
|
||||||
|
_choose(row->peer());
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
const Fn<void(not_null<PeerData*>)> _choose;
|
||||||
|
|
||||||
|
};
|
||||||
|
auto initBox = [=](not_null<PeerListBox*> peersBox) {
|
||||||
|
peersBox->setTitle(tr::lng_credits_gift_title());
|
||||||
|
peersBox->addButton(tr::lng_cancel(), [=] { peersBox->closeBox(); });
|
||||||
|
};
|
||||||
|
|
||||||
|
const auto show = controller->uiShow();
|
||||||
|
auto listController = std::make_unique<Controller>(
|
||||||
|
&controller->session(),
|
||||||
|
[=](not_null<PeerData*> peer) {
|
||||||
|
show->showBox(Box(GiftCreditsBox, peer, gifted));
|
||||||
|
});
|
||||||
|
show->showBox(
|
||||||
|
Box<PeerListBox>(std::move(listController), std::move(initBox)),
|
||||||
|
Ui::LayerOption::KeepOther);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace Ui
|
20
Telegram/SourceFiles/boxes/gift_credits_box.h
Normal file
20
Telegram/SourceFiles/boxes/gift_credits_box.h
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
/*
|
||||||
|
This file is part of Telegram Desktop,
|
||||||
|
the official desktop application for the Telegram messaging service.
|
||||||
|
|
||||||
|
For license and copyright information please follow this link:
|
||||||
|
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace Window {
|
||||||
|
class SessionController;
|
||||||
|
} // namespace Window
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
|
||||||
|
void ShowGiftCreditsBox(
|
||||||
|
not_null<Window::SessionController*> controller,
|
||||||
|
Fn<void()> gifted);
|
||||||
|
|
||||||
|
} // namespace Ui
|
|
@ -8,6 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "settings/settings_credits.h"
|
#include "settings/settings_credits.h"
|
||||||
|
|
||||||
#include "api/api_credits.h"
|
#include "api/api_credits.h"
|
||||||
|
#include "boxes/gift_credits_box.h"
|
||||||
#include "boxes/gift_premium_box.h"
|
#include "boxes/gift_premium_box.h"
|
||||||
#include "core/click_handler_types.h"
|
#include "core/click_handler_types.h"
|
||||||
#include "data/data_file_origin.h"
|
#include "data/data_file_origin.h"
|
||||||
|
@ -291,6 +292,19 @@ void Credits::setupContent() {
|
||||||
};
|
};
|
||||||
const auto self = _controller->session().user();
|
const auto self = _controller->session().user();
|
||||||
FillCreditOptions(_controller->uiShow(), content, self, 0, paid);
|
FillCreditOptions(_controller->uiShow(), content, self, 0, paid);
|
||||||
|
{
|
||||||
|
Ui::AddSkip(content);
|
||||||
|
const auto giftButton = AddButtonWithIcon(
|
||||||
|
content,
|
||||||
|
tr::lng_credits_gift_button(),
|
||||||
|
st::settingsButtonLightNoIcon);
|
||||||
|
Ui::AddSkip(content);
|
||||||
|
Ui::AddDivider(content);
|
||||||
|
giftButton->setClickedCallback([=] {
|
||||||
|
Ui::ShowGiftCreditsBox(_controller, paid);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
setupHistory(content);
|
setupHistory(content);
|
||||||
|
|
||||||
Ui::ResizeFitChild(this, content);
|
Ui::ResizeFitChild(this, content);
|
||||||
|
|
|
@ -54,3 +54,6 @@ creditsHistoryEntryGiftStickerSkip: -20px;
|
||||||
creditsHistoryEntryGiftStickerSize: 150px;
|
creditsHistoryEntryGiftStickerSize: 150px;
|
||||||
creditsHistoryEntryGiftStickerSpace: 105px;
|
creditsHistoryEntryGiftStickerSpace: 105px;
|
||||||
|
|
||||||
|
creditsGiftBox: Box(defaultBox) {
|
||||||
|
shadowIgnoreTopSkip: true;
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue