feat: add toggles to customization

This commit is contained in:
ZavaruKitsu 2023-11-10 17:36:37 +03:00
parent aa0d733cde
commit ae3dfacdf9
7 changed files with 233 additions and 71 deletions

View file

@ -4493,6 +4493,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"ayu_SettingsShowID_Hide" = "Hide";
"ayu_SettingsRecentStickersCount" = "Recent stickers count";
"ayu_SettingsCustomizationHint" = "After making changes to the \"Customization\" section, you must restart the application.";
"ayu_DrawerElementsHeader" = "Drawer Elements";
"ayu_TrayElementsHeader" = "Tray Elements";
"ayu_RegexFilters" = "Message Filters";
"ayu_RegexFiltersAmount" = "filters";
"ayu_RegexFiltersHeader" = "Filters";

View file

@ -286,11 +286,36 @@ void AyuGramSettings::set_recentStickersCount(int val)
recentStickersCount = val;
}
void AyuGramSettings::set_showLReadToggleInDrawer(bool val)
{
showLReadToggleInDrawer = val;
}
void AyuGramSettings::set_showSReadToggleInDrawer(bool val)
{
showSReadToggleInDrawer = val;
}
void AyuGramSettings::set_showGhostToggleInDrawer(bool val)
{
showGhostToggleInDrawer = val;
}
void AyuGramSettings::set_showStreamerToggleInDrawer(bool val)
{
showStreamerToggleInDrawer = val;
}
void AyuGramSettings::set_showGhostToggleInTray(bool val)
{
showGhostToggleInTray = val;
}
void AyuGramSettings::set_showStreamerToggleInTray(bool val)
{
showStreamerToggleInTray = val;
}
void AyuGramSettings::set_mainFont(QString val)
{
mainFont = val;

View file

@ -63,8 +63,16 @@ public:
simpleQuotesAndReplies = true;
deletedMark = "🧹";
editedMark = tr::lng_edited(tr::now);
recentStickersCount = 20;
recentStickersCount = 50;
showLReadToggleInDrawer = true;
showSReadToggleInDrawer = true;
showGhostToggleInDrawer = true;
showStreamerToggleInDrawer = false;
showGhostToggleInTray = true;
showStreamerToggleInTray = false;
mainFont = "";
monoFont = "";
@ -105,7 +113,12 @@ public:
QString deletedMark;
QString editedMark;
int recentStickersCount;
bool showLReadToggleInDrawer;
bool showSReadToggleInDrawer;
bool showGhostToggleInDrawer;
bool showStreamerToggleInDrawer;
bool showGhostToggleInTray;
bool showStreamerToggleInTray;
QString mainFont;
QString monoFont;
int showPeerId;
@ -160,8 +173,18 @@ public:
void set_recentStickersCount(int val);
void set_showLReadToggleInDrawer(bool val);
void set_showSReadToggleInDrawer(bool val);
void set_showGhostToggleInDrawer(bool val);
void set_showStreamerToggleInDrawer(bool val);
void set_showGhostToggleInTray(bool val);
void set_showStreamerToggleInTray(bool val);
void set_mainFont(QString val);
void set_monoFont(QString val);
@ -201,7 +224,12 @@ NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(
deletedMark,
editedMark,
recentStickersCount,
showLReadToggleInDrawer,
showSReadToggleInDrawer,
showGhostToggleInDrawer,
showStreamerToggleInDrawer,
showGhostToggleInTray,
showStreamerToggleInTray,
mainFont,
monoFont,
showPeerId,

View file

@ -46,22 +46,11 @@
#include "ui/wrap/slide_wrap.h"
#include "ui/wrap/vertical_layout.h"
#include "window/window_session_controller.h"
#include "styles/style_ayu_icons.h"
class PainterHighQualityEnabler;
const char kStreamerMode[] =
"streamer-mode";
base::options::toggle StreamerMode(
{
.id = kStreamerMode,
.name = "Show streamer mode toggles",
.description = "Streamer mode completely hides AyuGram windows and notifications from capture apps.",
.scope = base::options::windows,
.restartRequired = true
}
);
not_null<Ui::RpWidget *> AddInnerToggle(not_null<Ui::VerticalLayout *> container,
const style::SettingsButton &st,
std::vector<not_null<Ui::AbstractCheckView *>> innerCheckViews,
@ -848,12 +837,134 @@ void Ayu::SetupCustomization(not_null<Ui::VerticalLayout *> container,
AyuSettings::save();
}, container->lifetime());
AddSkip(container);
AddDivider(container);
SetupDrawerElements(container);
AddSkip(container);
AddDivider(container);
SetupTrayElements(container);
AddSkip(container);
AddDivider(container);
AddSkip(container);
SetupFonts(container, controller);
}
void Ayu::SetupDrawerElements(not_null<Ui::VerticalLayout *> container)
{
auto settings = &AyuSettings::getInstance();
AddSkip(container);
AddSubsectionTitle(container, tr::ayu_DrawerElementsHeader());
AddButton(
container,
tr::ayu_LReadMessages(),
st::settingsButton,
{&st::ayuLReadMenuIcon}
)->toggleOn(
rpl::single(settings->showLReadToggleInDrawer)
)->toggledValue(
) | rpl::filter([=](bool enabled)
{
return (enabled != settings->showLReadToggleInDrawer);
}) | start_with_next([=](bool enabled)
{
settings->set_showLReadToggleInDrawer(enabled);
AyuSettings::save();
}, container->lifetime());
AddButton(
container,
tr::ayu_SReadMessages(),
st::settingsButton,
{&st::ayuSReadMenuIcon}
)->toggleOn(
rpl::single(settings->showSReadToggleInDrawer)
)->toggledValue(
) | rpl::filter([=](bool enabled)
{
return (enabled != settings->showSReadToggleInDrawer);
}) | start_with_next([=](bool enabled)
{
settings->set_showSReadToggleInDrawer(enabled);
AyuSettings::save();
}, container->lifetime());
AddButton(
container,
tr::ayu_GhostModeToggle(),
st::settingsButton,
{&st::ayuGhostIcon}
)->toggleOn(
rpl::single(settings->showGhostToggleInDrawer)
)->toggledValue(
) | rpl::filter([=](bool enabled)
{
return (enabled != settings->showGhostToggleInDrawer);
}) | start_with_next([=](bool enabled)
{
settings->set_showGhostToggleInDrawer(enabled);
AyuSettings::save();
}, container->lifetime());
AddButton(
container,
tr::ayu_StreamerModeToggle(),
st::settingsButton,
{&st::ayuStreamerModeMenuIcon}
)->toggleOn(
rpl::single(settings->showStreamerToggleInDrawer)
)->toggledValue(
) | rpl::filter([=](bool enabled)
{
return (enabled != settings->showStreamerToggleInDrawer);
}) | start_with_next([=](bool enabled)
{
settings->set_showStreamerToggleInDrawer(enabled);
AyuSettings::save();
}, container->lifetime());
}
void Ayu::SetupTrayElements(not_null<Ui::VerticalLayout *> container)
{
auto settings = &AyuSettings::getInstance();
AddSkip(container);
AddSubsectionTitle(container, tr::ayu_TrayElementsHeader());
AddButton(
container,
tr::ayu_EnableGhostModeTray(),
st::settingsButtonNoIcon
)->toggleOn(
rpl::single(settings->showGhostToggleInTray)
)->toggledValue(
) | rpl::filter([=](bool enabled)
{
return (enabled != settings->showGhostToggleInTray);
}) | start_with_next([=](bool enabled)
{
settings->set_showGhostToggleInTray(enabled);
AyuSettings::save();
}, container->lifetime());
AddButton(
container,
tr::ayu_EnableStreamerModeTray(),
st::settingsButtonNoIcon
)->toggleOn(
rpl::single(settings->showStreamerToggleInTray)
)->toggledValue(
) | rpl::filter([=](bool enabled)
{
return (enabled != settings->showStreamerToggleInTray);
}) | start_with_next([=](bool enabled)
{
settings->set_showStreamerToggleInTray(enabled);
AyuSettings::save();
}, container->lifetime());
}
void Ayu::SetupShowPeerId(not_null<Ui::VerticalLayout *> container,
not_null<Window::SessionController *> controller)
{
@ -1057,13 +1168,6 @@ void Ayu::SetupSendConfirmations(not_null<Ui::VerticalLayout *> container)
}, container->lifetime());
}
void Ayu::SetupExperimental(not_null<Ui::VerticalLayout *> container,
not_null<Window::SessionController *> controller)
{
AddSubsectionTitle(container, tr::lng_settings_experimental());
AddPlatformOption(controller, container, StreamerMode, rpl::producer<>());
}
void Ayu::SetupAyuGramSettings(not_null<Ui::VerticalLayout *> container,
not_null<Window::SessionController *> controller)
{
@ -1102,10 +1206,7 @@ void Ayu::SetupAyuGramSettings(not_null<Ui::VerticalLayout *> container,
AddSkip(container);
SetupSendConfirmations(container);
AddSkip(container);
AddDivider(container);
AddSkip(container);
SetupExperimental(container, controller);
AddDividerText(container, tr::ayu_SettingsWatermark());
}

View file

@ -17,10 +17,6 @@ class Controller;
class SessionController;
} // namespace Window
extern const char kStreamerMode[];
extern base::options::toggle StreamerMode;
namespace Settings
{
@ -53,6 +49,10 @@ private:
void SetupCustomization(not_null<Ui::VerticalLayout *> container,
not_null<Window::SessionController *> controller);
void SetupDrawerElements(not_null<Ui::VerticalLayout *> container);
void SetupTrayElements(not_null<Ui::VerticalLayout *> container);
void SetupShowPeerId(not_null<Ui::VerticalLayout *> container, not_null<Window::SessionController *> controller);
void SetupRecentStickersLimitSlider(not_null<Ui::VerticalLayout *> container);
@ -63,9 +63,6 @@ private:
void SetupSendConfirmations(not_null<Ui::VerticalLayout *> container);
void SetupExperimental(not_null<Ui::VerticalLayout *> container,
not_null<Window::SessionController *> controller);
void SetupAyuGramSettings(not_null<Ui::VerticalLayout *> container, not_null<Window::SessionController *> null);
void setupContent(not_null<Window::SessionController *> controller);

View file

@ -100,6 +100,8 @@ void Tray::rebuildMenu() {
[=] { toggleSoundNotifications(); });
}
auto settings = &AyuSettings::getInstance();
auto turnGhostModeText = _textUpdates.events(
) | rpl::map([=]
{
@ -111,7 +113,6 @@ void Tray::rebuildMenu() {
});
_tray.addAction(std::move(turnGhostModeText), [=]
{
auto settings = &AyuSettings::getInstance();
bool ghostMode = AyuSettings::get_ghostModeEnabled();
settings->set_ghostModeEnabled(!ghostMode);
@ -119,7 +120,7 @@ void Tray::rebuildMenu() {
AyuSettings::save();
});
if (StreamerMode.value()) {
if (settings->showStreamerToggleInTray) {
auto turnStreamerModeText = _textUpdates.events(
) | rpl::map([=] {
bool streamerModeEnabled = AyuFeatures::StreamerMode::isEnabled();

View file

@ -927,28 +927,35 @@ void MainMenu::setupMenu() {
)->setClickedCallback([=] {
controller->showPeerHistory(controller->session().user());
});
addAction(
tr::ayu_LReadMessages(),
{ &st::ayuLReadMenuIcon }
)->setClickedCallback([=]
{
auto settings = &AyuSettings::getInstance();
auto prev = settings->sendReadMessages;
settings->set_sendReadMessages(false);
auto chats = controller->session().data().chatsList();
MarkAsReadChatList(chats);
const auto settings = &AyuSettings::getInstance();
settings->set_sendReadMessages(prev);
});
addAction(
tr::ayu_SReadMessages(),
{ &st::ayuSReadMenuIcon }
)->setClickedCallback([=]
{
auto box = Box<AyuUi::ConfirmationBox>(controller);
Ui::show(std::move(box));
});
if (settings->showLReadToggleInDrawer) {
addAction(
tr::ayu_LReadMessages(),
{&st::ayuLReadMenuIcon}
)->setClickedCallback([=]
{
auto prev = settings->sendReadMessages;
settings->set_sendReadMessages(false);
auto chats = controller->session().data().chatsList();
MarkAsReadChatList(chats);
settings->set_sendReadMessages(prev);
});
}
if (settings->showSReadToggleInDrawer) {
addAction(
tr::ayu_SReadMessages(),
{&st::ayuSReadMenuIcon}
)->setClickedCallback([=]
{
auto box = Box<AyuUi::ConfirmationBox>(controller);
Ui::show(std::move(box));
});
}
} else {
addAction(
tr::lng_profile_add_contact(),
@ -1011,36 +1018,37 @@ void MainMenu::setupMenu() {
}, _nightThemeToggle->lifetime());
const auto settings = &AyuSettings::getInstance();
if (settings->showGhostToggleInDrawer)
{
if (settings->showGhostToggleInDrawer) {
_ghostModeToggle = addAction(
tr::ayu_GhostModeToggle(),
{ &st::ayuGhostIcon }
{&st::ayuGhostIcon}
)->toggleOn(AyuSettings::get_ghostModeEnabledReactive());
_ghostModeToggle->toggledChanges(
) | rpl::start_with_next([=](bool ghostMode)
{
settings->set_ghostModeEnabled(ghostMode);
{
settings->set_ghostModeEnabled(ghostMode);
AyuSettings::save();
}, _ghostModeToggle->lifetime());
AyuSettings::save();
}, _ghostModeToggle->lifetime());
}
if (StreamerMode.value()) {
if (settings->showStreamerToggleInDrawer) {
_streamerModeToggle = addAction(
tr::ayu_StreamerModeToggle(),
{ &st::ayuStreamerModeMenuIcon }
)->toggleOn(rpl::single(AyuFeatures::StreamerMode::isEnabled()));
tr::ayu_StreamerModeToggle(),
{&st::ayuStreamerModeMenuIcon}
)->toggleOn(rpl::single(AyuFeatures::StreamerMode::isEnabled()));
_streamerModeToggle->toggledChanges(
) | rpl::start_with_next([=](bool enabled) {
if (enabled) {
AyuFeatures::StreamerMode::enable();
} else {
AyuFeatures::StreamerMode::disable();
}
}, _streamerModeToggle->lifetime());
) | rpl::start_with_next([=](bool enabled)
{
if (enabled) {
AyuFeatures::StreamerMode::enable();
}
else {
AyuFeatures::StreamerMode::disable();
}
}, _streamerModeToggle->lifetime());
}
Core::App().settings().systemDarkModeValue(