Allow turning off inactive accounts notifications.
This commit is contained in:
parent
5cc7c2b6c6
commit
1dc31c7f2f
|
@ -292,6 +292,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
"lng_settings_empty_bio" = "None";
|
"lng_settings_empty_bio" = "None";
|
||||||
|
|
||||||
"lng_settings_section_notify" = "Notifications";
|
"lng_settings_section_notify" = "Notifications";
|
||||||
|
"lng_settings_show_from" = "Show notifications from";
|
||||||
|
"lng_settings_notify_all" = "All accounts";
|
||||||
|
"lng_settings_notify_all_about" = "Turn this off if you want to receive notifications only from the account you are currently using.";
|
||||||
"lng_settings_notify_title" = "Notifications for chats";
|
"lng_settings_notify_title" = "Notifications for chats";
|
||||||
"lng_settings_desktop_notify" = "Desktop notifications";
|
"lng_settings_desktop_notify" = "Desktop notifications";
|
||||||
"lng_settings_show_name" = "Show sender's name";
|
"lng_settings_show_name" = "Show sender's name";
|
||||||
|
|
|
@ -104,7 +104,8 @@ QByteArray Settings::serialize() const {
|
||||||
0,
|
0,
|
||||||
1000000))
|
1000000))
|
||||||
<< qint32(_thirdColumnWidth.current())
|
<< qint32(_thirdColumnWidth.current())
|
||||||
<< qint32(_thirdSectionExtendedBy);
|
<< qint32(_thirdSectionExtendedBy)
|
||||||
|
<< qint32(_notifyFromAll ? 1 : 0);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -167,6 +168,7 @@ void Settings::addFromSerialized(const QByteArray &serialized) {
|
||||||
float64 dialogsWidthRatio = _dialogsWidthRatio.current();
|
float64 dialogsWidthRatio = _dialogsWidthRatio.current();
|
||||||
qint32 thirdColumnWidth = _thirdColumnWidth.current();
|
qint32 thirdColumnWidth = _thirdColumnWidth.current();
|
||||||
qint32 thirdSectionExtendedBy = _thirdSectionExtendedBy;
|
qint32 thirdSectionExtendedBy = _thirdSectionExtendedBy;
|
||||||
|
qint32 notifyFromAll = _notifyFromAll ? 1 : 0;
|
||||||
|
|
||||||
stream >> themesAccentColors;
|
stream >> themesAccentColors;
|
||||||
if (!stream.atEnd()) {
|
if (!stream.atEnd()) {
|
||||||
|
@ -237,7 +239,8 @@ void Settings::addFromSerialized(const QByteArray &serialized) {
|
||||||
>> thirdSectionInfoEnabled
|
>> thirdSectionInfoEnabled
|
||||||
>> dialogsWidthRatioInt
|
>> dialogsWidthRatioInt
|
||||||
>> thirdColumnWidth
|
>> thirdColumnWidth
|
||||||
>> thirdSectionExtendedBy;
|
>> thirdSectionExtendedBy
|
||||||
|
>> notifyFromAll;
|
||||||
dialogsWidthRatio = snap(dialogsWidthRatioInt / 1000000., 0., 1.);
|
dialogsWidthRatio = snap(dialogsWidthRatioInt / 1000000., 0., 1.);
|
||||||
}
|
}
|
||||||
if (stream.status() != QDataStream::Ok) {
|
if (stream.status() != QDataStream::Ok) {
|
||||||
|
@ -331,6 +334,7 @@ void Settings::addFromSerialized(const QByteArray &serialized) {
|
||||||
if (_thirdSectionInfoEnabled) {
|
if (_thirdSectionInfoEnabled) {
|
||||||
_tabbedSelectorSectionEnabled = false;
|
_tabbedSelectorSectionEnabled = false;
|
||||||
}
|
}
|
||||||
|
_notifyFromAll = (notifyFromAll == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Settings::chatWide() const {
|
bool Settings::chatWide() const {
|
||||||
|
@ -462,6 +466,7 @@ void Settings::resetOnLastLogout() {
|
||||||
_thirdSectionExtendedBy = -1; // per-window
|
_thirdSectionExtendedBy = -1; // per-window
|
||||||
_dialogsWidthRatio = DefaultDialogsWidthRatio(); // per-window
|
_dialogsWidthRatio = DefaultDialogsWidthRatio(); // per-window
|
||||||
_thirdColumnWidth = kDefaultThirdColumnWidth; // p-w
|
_thirdColumnWidth = kDefaultThirdColumnWidth; // p-w
|
||||||
|
_notifyFromAll = true;
|
||||||
_tabbedReplacedWithInfo = false; // per-window
|
_tabbedReplacedWithInfo = false; // per-window
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -401,6 +401,12 @@ public:
|
||||||
void setThirdColumnWidth(int width);
|
void setThirdColumnWidth(int width);
|
||||||
[[nodiscard]] int thirdColumnWidth() const;
|
[[nodiscard]] int thirdColumnWidth() const;
|
||||||
[[nodiscard]] rpl::producer<int> thirdColumnWidthChanges() const;
|
[[nodiscard]] rpl::producer<int> thirdColumnWidthChanges() const;
|
||||||
|
void setNotifyFromAll(bool value) {
|
||||||
|
_notifyFromAll = value;
|
||||||
|
}
|
||||||
|
[[nodiscard]] bool notifyFromAll() const {
|
||||||
|
return _notifyFromAll;
|
||||||
|
}
|
||||||
|
|
||||||
[[nodiscard]] static bool ThirdColumnByDefault();
|
[[nodiscard]] static bool ThirdColumnByDefault();
|
||||||
[[nodiscard]] float64 DefaultDialogsWidthRatio();
|
[[nodiscard]] float64 DefaultDialogsWidthRatio();
|
||||||
|
@ -467,6 +473,7 @@ private:
|
||||||
int _thirdSectionExtendedBy = -1; // per-window
|
int _thirdSectionExtendedBy = -1; // per-window
|
||||||
rpl::variable<float64> _dialogsWidthRatio; // per-window
|
rpl::variable<float64> _dialogsWidthRatio; // per-window
|
||||||
rpl::variable<int> _thirdColumnWidth = kDefaultThirdColumnWidth; // p-w
|
rpl::variable<int> _thirdColumnWidth = kDefaultThirdColumnWidth; // p-w
|
||||||
|
bool _notifyFromAll = true;
|
||||||
|
|
||||||
bool _tabbedReplacedWithInfo = false; // per-window
|
bool _tabbedReplacedWithInfo = false; // per-window
|
||||||
rpl::event_stream<bool> _tabbedReplacedWithInfoValue; // per-window
|
rpl::event_stream<bool> _tabbedReplacedWithInfoValue; // per-window
|
||||||
|
|
|
@ -22,6 +22,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
#include "core/application.h"
|
#include "core/application.h"
|
||||||
#include "main/main_session.h"
|
#include "main/main_session.h"
|
||||||
|
#include "main/main_account.h"
|
||||||
#include "main/main_domain.h"
|
#include "main/main_domain.h"
|
||||||
#include "apiwrap.h"
|
#include "apiwrap.h"
|
||||||
#include "facades.h"
|
#include "facades.h"
|
||||||
|
@ -540,9 +541,49 @@ void SetupAdvancedNotifications(
|
||||||
AddSkip(container, st::settingsCheckboxesSkip);
|
AddSkip(container, st::settingsCheckboxesSkip);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SetupMultiAccountNotifications(
|
||||||
|
not_null<Window::SessionController*> controller,
|
||||||
|
not_null<Ui::VerticalLayout*> container) {
|
||||||
|
if (Core::App().domain().accounts().size() < 2) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
AddSubsectionTitle(container, tr::lng_settings_show_from());
|
||||||
|
|
||||||
|
const auto fromAll = container->add(
|
||||||
|
object_ptr<Ui::Checkbox>(
|
||||||
|
container,
|
||||||
|
tr::lng_settings_notify_all(tr::now),
|
||||||
|
Core::App().settings().notifyFromAll(),
|
||||||
|
st::settingsCheckbox),
|
||||||
|
st::settingsCheckboxPadding);
|
||||||
|
fromAll->checkedChanges(
|
||||||
|
) | rpl::filter([](bool checked) {
|
||||||
|
return (checked != Core::App().settings().notifyFromAll());
|
||||||
|
}) | rpl::start_with_next([=](bool checked) {
|
||||||
|
Core::App().settings().setNotifyFromAll(checked);
|
||||||
|
Core::App().saveSettingsDelayed();
|
||||||
|
if (!checked) {
|
||||||
|
auto ¬ifications = Core::App().notifications();
|
||||||
|
const auto &list = Core::App().domain().accounts();
|
||||||
|
for (const auto &[index, account] : list) {
|
||||||
|
if (account.get() == &Core::App().domain().active()) {
|
||||||
|
continue;
|
||||||
|
} else if (const auto session = account->maybeSession()) {
|
||||||
|
notifications.clearFromSession(session);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, fromAll->lifetime());
|
||||||
|
|
||||||
|
AddSkip(container);
|
||||||
|
AddDividerText(container, tr::lng_settings_notify_all_about());
|
||||||
|
}
|
||||||
|
|
||||||
void SetupNotificationsContent(
|
void SetupNotificationsContent(
|
||||||
not_null<Window::SessionController*> controller,
|
not_null<Window::SessionController*> controller,
|
||||||
not_null<Ui::VerticalLayout*> container) {
|
not_null<Ui::VerticalLayout*> container) {
|
||||||
|
SetupMultiAccountNotifications(controller, container);
|
||||||
|
|
||||||
AddSubsectionTitle(container, tr::lng_settings_notify_title());
|
AddSubsectionTitle(container, tr::lng_settings_notify_title());
|
||||||
|
|
||||||
const auto session = &controller->session();
|
const auto session = &controller->session();
|
||||||
|
|
|
@ -89,6 +89,9 @@ System::SkipState System::skipNotification(
|
||||||
const auto notifyBy = item->specialNotificationPeer();
|
const auto notifyBy = item->specialNotificationPeer();
|
||||||
if (App::quitting() || !history->currentNotification()) {
|
if (App::quitting() || !history->currentNotification()) {
|
||||||
return { SkipState::Skip };
|
return { SkipState::Skip };
|
||||||
|
} else if (!Core::App().settings().notifyFromAll()
|
||||||
|
&& &history->session().account() != &Core::App().domain().active()) {
|
||||||
|
return { SkipState::Skip };
|
||||||
}
|
}
|
||||||
const auto scheduled = item->out() && item->isFromScheduled();
|
const auto scheduled = item->out() && item->isFromScheduled();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue