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_SettingsShowID_Hide" = "Hide";
"ayu_SettingsRecentStickersCount" = "Recent stickers count"; "ayu_SettingsRecentStickersCount" = "Recent stickers count";
"ayu_SettingsCustomizationHint" = "After making changes to the \"Customization\" section, you must restart the application."; "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_RegexFilters" = "Message Filters";
"ayu_RegexFiltersAmount" = "filters"; "ayu_RegexFiltersAmount" = "filters";
"ayu_RegexFiltersHeader" = "Filters"; "ayu_RegexFiltersHeader" = "Filters";

View file

@ -286,11 +286,36 @@ void AyuGramSettings::set_recentStickersCount(int val)
recentStickersCount = 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) void AyuGramSettings::set_showGhostToggleInDrawer(bool val)
{ {
showGhostToggleInDrawer = 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) void AyuGramSettings::set_mainFont(QString val)
{ {
mainFont = val; mainFont = val;

View file

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

View file

@ -46,22 +46,11 @@
#include "ui/wrap/slide_wrap.h" #include "ui/wrap/slide_wrap.h"
#include "ui/wrap/vertical_layout.h" #include "ui/wrap/vertical_layout.h"
#include "window/window_session_controller.h" #include "window/window_session_controller.h"
#include "styles/style_ayu_icons.h"
class PainterHighQualityEnabler; 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, not_null<Ui::RpWidget *> AddInnerToggle(not_null<Ui::VerticalLayout *> container,
const style::SettingsButton &st, const style::SettingsButton &st,
std::vector<not_null<Ui::AbstractCheckView *>> innerCheckViews, std::vector<not_null<Ui::AbstractCheckView *>> innerCheckViews,
@ -848,12 +837,134 @@ void Ayu::SetupCustomization(not_null<Ui::VerticalLayout *> container,
AyuSettings::save(); AyuSettings::save();
}, container->lifetime()); }, container->lifetime());
AddSkip(container);
AddDivider(container);
SetupDrawerElements(container);
AddSkip(container);
AddDivider(container);
SetupTrayElements(container);
AddSkip(container); AddSkip(container);
AddDivider(container); AddDivider(container);
AddSkip(container); AddSkip(container);
SetupFonts(container, controller); 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, void Ayu::SetupShowPeerId(not_null<Ui::VerticalLayout *> container,
not_null<Window::SessionController *> controller) not_null<Window::SessionController *> controller)
{ {
@ -1057,13 +1168,6 @@ void Ayu::SetupSendConfirmations(not_null<Ui::VerticalLayout *> container)
}, container->lifetime()); }, 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, void Ayu::SetupAyuGramSettings(not_null<Ui::VerticalLayout *> container,
not_null<Window::SessionController *> controller) not_null<Window::SessionController *> controller)
{ {
@ -1102,10 +1206,7 @@ void Ayu::SetupAyuGramSettings(not_null<Ui::VerticalLayout *> container,
AddSkip(container); AddSkip(container);
SetupSendConfirmations(container); SetupSendConfirmations(container);
AddSkip(container); AddSkip(container);
AddDivider(container); AddDivider(container);
AddSkip(container);
SetupExperimental(container, controller);
AddDividerText(container, tr::ayu_SettingsWatermark()); AddDividerText(container, tr::ayu_SettingsWatermark());
} }

View file

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

View file

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

View file

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