mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-04-16 22:27:20 +02:00
Added few last used mute periods to mute menu.
This commit is contained in:
parent
511789d7af
commit
1a746b1ba3
9 changed files with 109 additions and 6 deletions
BIN
Telegram/Resources/icons/menu/mute_for_plain.png
Normal file
BIN
Telegram/Resources/icons/menu/mute_for_plain.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 472 B |
BIN
Telegram/Resources/icons/menu/mute_for_plain@2x.png
Normal file
BIN
Telegram/Resources/icons/menu/mute_for_plain@2x.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 795 B |
BIN
Telegram/Resources/icons/menu/mute_for_plain@3x.png
Normal file
BIN
Telegram/Resources/icons/menu/mute_for_plain@3x.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
|
@ -891,6 +891,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
"lng_mute_menu_unmute" = "Unmute";
|
||||
"lng_mute_menu_duration_hours#one" = "Mute for {count} hour";
|
||||
"lng_mute_menu_duration_hours#other" = "Mute for {count} hours";
|
||||
"lng_mute_menu_duration_any" = "Mute for {duration}";
|
||||
"lng_mute_menu_duration" = "Mute for...";
|
||||
"lng_mute_menu_duration_forever" = "Mute forever";
|
||||
"lng_mute_menu_duration_unmute" = "Unmute";
|
||||
|
|
|
@ -38,7 +38,9 @@ QByteArray SessionSettings::serialize() const {
|
|||
size += _groupStickersSectionHidden.size() * sizeof(quint64);
|
||||
size += _mediaLastPlaybackPosition.size() * 2 * sizeof(quint64);
|
||||
size += Serialize::bytearraySize(autoDownload);
|
||||
size += sizeof(qint32) + _hiddenPinnedMessages.size() * (sizeof(quint64) + sizeof(qint32));
|
||||
size += sizeof(qint32)
|
||||
+ _hiddenPinnedMessages.size() * (sizeof(quint64) + sizeof(qint32))
|
||||
+ (_mutePeriods.size() * sizeof(quint64));
|
||||
|
||||
auto result = QByteArray();
|
||||
result.reserve(size);
|
||||
|
@ -72,6 +74,10 @@ QByteArray SessionSettings::serialize() const {
|
|||
for (const auto &[key, value] : _hiddenPinnedMessages) {
|
||||
stream << SerializePeerId(key) << qint64(value.bare);
|
||||
}
|
||||
stream << qint32(_mutePeriods.size());
|
||||
for (const auto &period : _mutePeriods) {
|
||||
stream << quint64(period);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
@ -132,6 +138,7 @@ void SessionSettings::addFromSerialized(const QByteArray &serialized) {
|
|||
qint32 dialogsFiltersEnabled = _dialogsFiltersEnabled ? 1 : 0;
|
||||
qint32 supportAllSilent = _supportAllSilent ? 1 : 0;
|
||||
qint32 photoEditorHintShowsCount = _photoEditorHintShowsCount;
|
||||
std::vector<TimeId> mutePeriods;
|
||||
|
||||
stream >> versionTag;
|
||||
if (versionTag == kVersionTag) {
|
||||
|
@ -351,6 +358,17 @@ void SessionSettings::addFromSerialized(const QByteArray &serialized) {
|
|||
}
|
||||
}
|
||||
}
|
||||
if (!stream.atEnd()) {
|
||||
auto count = qint32(0);
|
||||
stream >> count;
|
||||
if (stream.status() == QDataStream::Ok) {
|
||||
for (auto i = 0; i != count; ++i) {
|
||||
quint64 period;
|
||||
stream >> period;
|
||||
mutePeriods.emplace_back(period);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (stream.status() != QDataStream::Ok) {
|
||||
LOG(("App Error: "
|
||||
"Bad data for SessionSettings::addFromSerialized()"));
|
||||
|
@ -394,6 +412,7 @@ void SessionSettings::addFromSerialized(const QByteArray &serialized) {
|
|||
_dialogsFiltersEnabled = (dialogsFiltersEnabled == 1);
|
||||
_supportAllSilent = (supportAllSilent == 1);
|
||||
_photoEditorHintShowsCount = std::move(photoEditorHintShowsCount);
|
||||
_mutePeriods = std::move(mutePeriods);
|
||||
|
||||
if (version < 2) {
|
||||
app.setLastSeenWarningSeen(appLastSeenWarningSeen == 1);
|
||||
|
@ -542,4 +561,20 @@ void SessionSettings::incrementPhotoEditorHintShown() {
|
|||
}
|
||||
}
|
||||
|
||||
std::vector<TimeId> SessionSettings::mutePeriods() const {
|
||||
return _mutePeriods;
|
||||
}
|
||||
|
||||
void SessionSettings::addMutePeriod(TimeId period) {
|
||||
if (_mutePeriods.empty()) {
|
||||
_mutePeriods.push_back(period);
|
||||
} else if (_mutePeriods.back() != period) {
|
||||
if (_mutePeriods.back() < period) {
|
||||
_mutePeriods = { _mutePeriods.back(), period };
|
||||
} else {
|
||||
_mutePeriods = { period, _mutePeriods.back() };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace Main
|
||||
|
|
|
@ -123,6 +123,9 @@ public:
|
|||
[[nodiscard]] bool photoEditorHintShown() const;
|
||||
void incrementPhotoEditorHintShown();
|
||||
|
||||
[[nodiscard]] std::vector<TimeId> mutePeriods() const;
|
||||
void addMutePeriod(TimeId period);
|
||||
|
||||
private:
|
||||
static constexpr auto kDefaultSupportChatsLimitSlice = 7 * 24 * 60 * 60;
|
||||
static constexpr auto kPhotoEditorHintMaxShowsCount = 5;
|
||||
|
@ -138,6 +141,7 @@ private:
|
|||
base::flat_map<PeerId, MsgId> _hiddenPinnedMessages;
|
||||
bool _dialogsFiltersEnabled = false;
|
||||
int _photoEditorHintShowsCount = 0;
|
||||
std::vector<TimeId> _mutePeriods;
|
||||
|
||||
Support::SwitchSettings _supportSwitch;
|
||||
bool _supportFixChatsOrder = true;
|
||||
|
|
|
@ -7,19 +7,21 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
*/
|
||||
#include "menu/menu_mute.h"
|
||||
|
||||
#include "data/notify/data_notify_settings.h"
|
||||
#include "data/data_peer.h"
|
||||
#include "data/data_session.h"
|
||||
#include "data/notify/data_notify_settings.h"
|
||||
#include "info/profile/info_profile_values.h"
|
||||
#include "lang/lang_keys.h"
|
||||
#include "main/main_session.h"
|
||||
#include "main/main_session_settings.h"
|
||||
#include "ui/boxes/choose_time.h"
|
||||
#include "ui/boxes/time_picker_box.h"
|
||||
#include "ui/effects/animation_value.h"
|
||||
#include "ui/layers/generic_box.h"
|
||||
#include "ui/text/format_values.h"
|
||||
#include "ui/widgets/checkbox.h"
|
||||
#include "ui/widgets/menu/menu_action.h"
|
||||
#include "ui/widgets/popup_menu.h"
|
||||
#include "ui/boxes/time_picker_box.h"
|
||||
#include "styles/style_boxes.h"
|
||||
#include "styles/style_info.h" // infoTopBarMenu
|
||||
#include "styles/style_layers.h"
|
||||
|
@ -31,6 +33,35 @@ namespace {
|
|||
|
||||
constexpr auto kMuteDurSecondsDefault = crl::time(8) * 3600;
|
||||
|
||||
class IconWithText final : public Ui::Menu::Action {
|
||||
public:
|
||||
using Ui::Menu::Action::Action;
|
||||
|
||||
void setData(const QString &text, const QPoint &iconPosition);
|
||||
|
||||
protected:
|
||||
void paintEvent(QPaintEvent *e) override;
|
||||
|
||||
private:
|
||||
QPoint _iconPosition;
|
||||
QString _text;
|
||||
|
||||
};
|
||||
|
||||
void IconWithText::setData(const QString &text, const QPoint &iconPosition) {
|
||||
_iconPosition = iconPosition;
|
||||
_text = text;
|
||||
}
|
||||
|
||||
void IconWithText::paintEvent(QPaintEvent *e) {
|
||||
Ui::Menu::Action::paintEvent(e);
|
||||
|
||||
Painter p(this);
|
||||
p.setFont(st::menuIconMuteForAnyTextFont);
|
||||
p.setPen(st::menuIconColor);
|
||||
p.drawText(_iconPosition, _text);
|
||||
}
|
||||
|
||||
class MuteItem final : public Ui::Menu::Action {
|
||||
public:
|
||||
MuteItem(
|
||||
|
@ -161,9 +192,10 @@ void PickMuteBox(not_null<Ui::GenericBox*> box, not_null<PeerData*> peer) {
|
|||
const auto pickerCallback = TimePickerBox(box, seconds, phrases, 0);
|
||||
|
||||
box->addButton(tr::lng_mute_menu_mute(), [=] {
|
||||
peer->owner().notifySettings().updateNotifySettings(
|
||||
peer,
|
||||
pickerCallback());
|
||||
const auto muteFor = pickerCallback();
|
||||
peer->owner().notifySettings().updateNotifySettings(peer, muteFor);
|
||||
peer->session().settings().addMutePeriod(muteFor);
|
||||
peer->session().saveSettings();
|
||||
box->closeBox();
|
||||
});
|
||||
|
||||
|
@ -210,6 +242,32 @@ void FillMuteMenu(
|
|||
},
|
||||
soundIsNone ? &st::menuIconSoundOn : &st::menuIconSoundOff);
|
||||
|
||||
const auto &st = menu->st().menu;
|
||||
const auto iconTextPosition = st.itemIconPosition
|
||||
+ st::menuIconMuteForAnyTextPosition;
|
||||
for (const auto &muteFor : peer->session().settings().mutePeriods()) {
|
||||
const auto callback = [=] {
|
||||
peer->owner().notifySettings().updateNotifySettings(
|
||||
peer,
|
||||
muteFor);
|
||||
};
|
||||
|
||||
auto item = base::make_unique_q<IconWithText>(
|
||||
menu,
|
||||
st,
|
||||
Ui::Menu::CreateAction(
|
||||
menu->menu().get(),
|
||||
tr::lng_mute_menu_duration_any(
|
||||
tr::now,
|
||||
lt_duration,
|
||||
Ui::FormatMuteFor(muteFor)),
|
||||
callback),
|
||||
&st::menuIconMuteForAny,
|
||||
&st::menuIconMuteForAny);
|
||||
item->setData(Ui::FormatMuteForTiny(muteFor), iconTextPosition);
|
||||
menu->addAction(std::move(item));
|
||||
}
|
||||
|
||||
menu->addAction(
|
||||
tr::lng_mute_menu_duration(tr::now),
|
||||
[=, show = args.show] { show->showBox(Box(PickMuteBox, peer)); },
|
||||
|
|
|
@ -36,6 +36,7 @@ constexpr auto kTTLDurSeconds3 = kTTLDurHours3 * 3600;
|
|||
constexpr auto kTTLDurHours4 = crl::time(24 * 30);
|
||||
constexpr auto kTTLDurSeconds4 = kTTLDurHours4 * 3600;
|
||||
|
||||
// See menu_mute.cpp.
|
||||
class IconWithText final : public Ui::Menu::Action {
|
||||
public:
|
||||
using Ui::Menu::Action::Action;
|
||||
|
|
|
@ -108,6 +108,10 @@ menuIconTTLAny: icon {{ "menu/auto_delete_plain", menuIconColor }};
|
|||
menuIconTTLAnyTextPosition: point(11px, 22px);
|
||||
menuIconTTL: icon {{ "menu/auto_delete", menuIconColor }};
|
||||
|
||||
menuIconMuteForAny: icon {{ "menu/mute_for_plain", menuIconColor }};
|
||||
menuIconMuteForAnyTextPosition: point(14px, 9px);
|
||||
menuIconMuteForAnyTextFont: font(8px semibold);
|
||||
|
||||
mediaMenuIconStickers: icon {{ "menu/stickers", mediaviewMenuFg }};
|
||||
mediaMenuIconCancel: icon {{ "menu/cancel", mediaviewMenuFg }};
|
||||
mediaMenuIconShowInChat: icon {{ "menu/show_in_chat", mediaviewMenuFg }};
|
||||
|
|
Loading…
Add table
Reference in a new issue