Option to set folder as default when editing
This commit is contained in:
parent
581bbc0d00
commit
d819c07823
7 changed files with 87 additions and 8 deletions
|
|
@ -2460,4 +2460,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
"ktg_settings_recent_stickers_limit#other" = "Recent stickers: show {count} stickers";
|
||||
"ktg_settings_recent_stickers_limit_none" = "Recent stickers: hide all";
|
||||
|
||||
"ktg_filters_default" = "Default folder";
|
||||
|
||||
// Keys finished
|
||||
|
|
|
|||
|
|
@ -97,5 +97,6 @@
|
|||
"many": "Недавние стикеры: показывать {count} стикеров",
|
||||
"other": "Недавние стикеры: показывать {count} стикеров"
|
||||
},
|
||||
"ktg_settings_recent_stickers_limit_none": "Недавние стикеры: скрыть все"
|
||||
"ktg_settings_recent_stickers_limit_none": "Недавние стикеры: скрыть все",
|
||||
"ktg_filters_default": "Папка по умолчанию"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
#include "chat_helpers/emoji_suggestions_widget.h"
|
||||
#include "ui/layers/generic_box.h"
|
||||
#include "ui/text/text_utilities.h"
|
||||
#include "ui/widgets/checkbox.h"
|
||||
#include "ui/widgets/buttons.h"
|
||||
#include "ui/widgets/input_fields.h"
|
||||
#include "ui/effects/panel_animation.h"
|
||||
|
|
@ -19,6 +20,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
#include "data/data_chat_filters.h"
|
||||
#include "data/data_peer.h"
|
||||
#include "data/data_session.h"
|
||||
#include "core/kotato_settings.h"
|
||||
#include "settings/settings_common.h"
|
||||
#include "base/event_filter.h"
|
||||
#include "lang/lang_keys.h"
|
||||
|
|
@ -539,6 +541,19 @@ void EditFilterBox(
|
|||
name->setFocusFast();
|
||||
});
|
||||
|
||||
const auto isCurrent = filter.id() == cDefaultFilterId();
|
||||
const auto checkboxDefault = content->add(
|
||||
object_ptr<Ui::Checkbox>(
|
||||
box,
|
||||
tr::ktg_filters_default(tr::now),
|
||||
(creating ? false : isCurrent),
|
||||
st::defaultBoxCheckbox),
|
||||
style::margins(
|
||||
st::boxPadding.left(),
|
||||
st::boxPadding.bottom(),
|
||||
st::boxPadding.right(),
|
||||
st::boxPadding.bottom()));
|
||||
|
||||
AddSkip(content);
|
||||
AddDivider(content);
|
||||
AddSkip(content);
|
||||
|
|
@ -618,6 +633,7 @@ void EditFilterBox(
|
|||
const auto save = [=] {
|
||||
const auto title = name->getLastText().trimmed();
|
||||
const auto rules = data->current();
|
||||
const auto checked = checkboxDefault && checkboxDefault->checked();
|
||||
const auto result = Data::ChatFilter(
|
||||
rules.id(),
|
||||
title,
|
||||
|
|
@ -625,7 +641,8 @@ void EditFilterBox(
|
|||
rules.flags(),
|
||||
rules.always(),
|
||||
rules.pinned(),
|
||||
rules.never());
|
||||
rules.never(),
|
||||
checked);
|
||||
if (title.isEmpty()) {
|
||||
name->showError();
|
||||
return;
|
||||
|
|
@ -670,6 +687,12 @@ void EditExistingFilter(
|
|||
MTP_int(id),
|
||||
tl
|
||||
)).send();
|
||||
const auto isCurrentDefault = result.id() == cDefaultFilterId();
|
||||
if ((isCurrentDefault && !result.isDefault())
|
||||
|| (!isCurrentDefault && result.isDefault())) {
|
||||
cSetDefaultFilterId(result.isDefault() ? result.id() : 0);
|
||||
KotatoSettings::Write();
|
||||
}
|
||||
};
|
||||
window->window().show(Box(
|
||||
EditFilterBox,
|
||||
|
|
|
|||
|
|
@ -29,6 +29,9 @@ constexpr auto kLoadExceptionsPerRequest = 100;
|
|||
|
||||
} // namespace
|
||||
|
||||
ChatFilter::ChatFilter(FilterId id) : _id(id) {
|
||||
}
|
||||
|
||||
ChatFilter::ChatFilter(
|
||||
FilterId id,
|
||||
const QString &title,
|
||||
|
|
@ -36,14 +39,16 @@ ChatFilter::ChatFilter(
|
|||
Flags flags,
|
||||
base::flat_set<not_null<History*>> always,
|
||||
std::vector<not_null<History*>> pinned,
|
||||
base::flat_set<not_null<History*>> never)
|
||||
base::flat_set<not_null<History*>> never,
|
||||
bool isDefault)
|
||||
: _id(id)
|
||||
, _title(title)
|
||||
, _iconEmoji(iconEmoji)
|
||||
, _always(std::move(always))
|
||||
, _pinned(std::move(pinned))
|
||||
, _never(std::move(never))
|
||||
, _flags(flags) {
|
||||
, _flags(flags)
|
||||
, _isDefault(isDefault) {
|
||||
}
|
||||
|
||||
ChatFilter ChatFilter::FromTL(
|
||||
|
|
@ -102,7 +107,8 @@ ChatFilter ChatFilter::FromTL(
|
|||
flags,
|
||||
std::move(list),
|
||||
std::move(pinned),
|
||||
{ never.begin(), never.end() });
|
||||
{ never.begin(), never.end() },
|
||||
(data.vid().v == cDefaultFilterId()));
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -154,6 +160,10 @@ QString ChatFilter::title() const {
|
|||
return _title;
|
||||
}
|
||||
|
||||
bool ChatFilter::isDefault() const {
|
||||
return _isDefault;
|
||||
}
|
||||
|
||||
QString ChatFilter::iconEmoji() const {
|
||||
return _iconEmoji;
|
||||
}
|
||||
|
|
@ -465,7 +475,8 @@ const ChatFilter &ChatFilters::applyUpdatedPinned(
|
|||
i->flags(),
|
||||
std::move(always),
|
||||
std::move(pinned),
|
||||
i->never()));
|
||||
i->never(),
|
||||
(id == cDefaultFilterId())));
|
||||
return *i;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ public:
|
|||
static constexpr int kPinnedLimit = 100;
|
||||
|
||||
ChatFilter() = default;
|
||||
ChatFilter(FilterId id);
|
||||
ChatFilter(
|
||||
FilterId id,
|
||||
const QString &title,
|
||||
|
|
@ -45,7 +46,8 @@ public:
|
|||
Flags flags,
|
||||
base::flat_set<not_null<History*>> always,
|
||||
std::vector<not_null<History*>> pinned,
|
||||
base::flat_set<not_null<History*>> never);
|
||||
base::flat_set<not_null<History*>> never,
|
||||
bool isDefault = false);
|
||||
|
||||
[[nodiscard]] static ChatFilter FromTL(
|
||||
const MTPDialogFilter &data,
|
||||
|
|
@ -54,6 +56,7 @@ public:
|
|||
|
||||
[[nodiscard]] FilterId id() const;
|
||||
[[nodiscard]] QString title() const;
|
||||
[[nodiscard]] bool isDefault() const;
|
||||
[[nodiscard]] QString iconEmoji() const;
|
||||
[[nodiscard]] Flags flags() const;
|
||||
[[nodiscard]] const base::flat_set<not_null<History*>> &always() const;
|
||||
|
|
@ -70,6 +73,7 @@ private:
|
|||
std::vector<not_null<History*>> _pinned;
|
||||
base::flat_set<not_null<History*>> _never;
|
||||
Flags _flags;
|
||||
bool _isDefault = false;
|
||||
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
#include "ui/wrap/slide_wrap.h"
|
||||
#include "ui/painter.h"
|
||||
#include "ui/filter_icons.h"
|
||||
#include "core/kotato_settings.h"
|
||||
#include "settings/settings_common.h"
|
||||
#include "lang/lang_keys.h"
|
||||
#include "apiwrap.h"
|
||||
|
|
@ -39,6 +40,8 @@ namespace {
|
|||
|
||||
constexpr auto kRefreshSuggestedTimeout = 7200 * crl::time(1000);
|
||||
constexpr auto kFiltersLimit = 10;
|
||||
auto currentDefaultRemoved = false;
|
||||
auto localNewFilterId = kFiltersLimit;
|
||||
|
||||
using Flag = Data::ChatFilter::Flag;
|
||||
using Flags = Data::ChatFilter::Flags;
|
||||
|
|
@ -309,6 +312,9 @@ void FilterRowButton::paintEvent(QPaintEvent *e) {
|
|||
not_null<Window::SessionController*> controller,
|
||||
not_null<Ui::VerticalLayout*> container) {
|
||||
auto &lifetime = container->lifetime();
|
||||
const auto currentDefaultId = cDefaultFilterId();
|
||||
localNewFilterId = kFiltersLimit;
|
||||
currentDefaultRemoved = false;
|
||||
|
||||
const auto session = &controller->session();
|
||||
AddSkip(container, st::settingsSectionSkip);
|
||||
|
|
@ -337,6 +343,9 @@ void FilterRowButton::paintEvent(QPaintEvent *e) {
|
|||
button->removeRequests(
|
||||
) | rpl::start_with_next([=] {
|
||||
button->setRemoved(true);
|
||||
if (find(button)->filter.id() == cDefaultFilterId()) {
|
||||
currentDefaultRemoved = true;
|
||||
}
|
||||
find(button)->removed = true;
|
||||
}, button->lifetime());
|
||||
button->restoreRequests(
|
||||
|
|
@ -344,6 +353,9 @@ void FilterRowButton::paintEvent(QPaintEvent *e) {
|
|||
if (showLimitReached()) {
|
||||
return;
|
||||
}
|
||||
if (find(button)->filter.id() == cDefaultFilterId()) {
|
||||
currentDefaultRemoved = false;
|
||||
}
|
||||
button->setRemoved(false);
|
||||
find(button)->removed = false;
|
||||
}, button->lifetime());
|
||||
|
|
@ -354,6 +366,11 @@ void FilterRowButton::paintEvent(QPaintEvent *e) {
|
|||
}
|
||||
const auto doneCallback = [=](const Data::ChatFilter &result) {
|
||||
find(button)->filter = result;
|
||||
const auto isCurrentDefault = result.id() == cDefaultFilterId();
|
||||
if ((isCurrentDefault && !result.isDefault())
|
||||
|| (!isCurrentDefault && result.isDefault())) {
|
||||
cSetDefaultFilterId(result.isDefault() ? result.id() : 0);
|
||||
}
|
||||
button->updateData(result);
|
||||
};
|
||||
controller->window().show(Box(
|
||||
|
|
@ -414,12 +431,15 @@ void FilterRowButton::paintEvent(QPaintEvent *e) {
|
|||
return;
|
||||
}
|
||||
const auto doneCallback = [=](const Data::ChatFilter &result) {
|
||||
if (result.isDefault()) {
|
||||
cSetDefaultFilterId(result.id());
|
||||
}
|
||||
addFilter(result);
|
||||
};
|
||||
controller->window().show(Box(
|
||||
EditFilterBox,
|
||||
controller,
|
||||
Data::ChatFilter(),
|
||||
Data::ChatFilter(++localNewFilterId),
|
||||
crl::guard(container, doneCallback)));
|
||||
});
|
||||
AddSkip(container);
|
||||
|
|
@ -508,6 +528,9 @@ void FilterRowButton::paintEvent(QPaintEvent *e) {
|
|||
continue;
|
||||
} else if (!ranges::contains(list, id, &Data::ChatFilter::id)) {
|
||||
result.emplace(row.button, chooseNextId());
|
||||
if (cDefaultFilterId() == id) {
|
||||
cSetDefaultFilterId(localId);
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
|
@ -565,6 +588,13 @@ void FilterRowButton::paintEvent(QPaintEvent *e) {
|
|||
if (!order.empty() && !addRequests.empty()) {
|
||||
realFilters.saveOrder(order, previousId);
|
||||
}
|
||||
if (currentDefaultRemoved) {
|
||||
cSetDefaultFilterId(0);
|
||||
controller->setActiveChatsFilter(0);
|
||||
}
|
||||
if (currentDefaultId != cDefaultFilterId()) {
|
||||
KotatoSettings::Write();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
#include "ui/widgets/popup_menu.h"
|
||||
#include "boxes/confirm_box.h"
|
||||
#include "boxes/filters/edit_filter_box.h"
|
||||
#include "core/kotato_settings.h"
|
||||
#include "settings/settings_common.h"
|
||||
#include "api/api_chat_filters.h"
|
||||
#include "apiwrap.h"
|
||||
|
|
@ -292,6 +293,13 @@ void FiltersMenu::remove(FilterId id) {
|
|||
MTP_int(id),
|
||||
MTPDialogFilter()
|
||||
)).send();
|
||||
if (id == cDefaultFilterId()) {
|
||||
cSetDefaultFilterId(0);
|
||||
KotatoSettings::Write();
|
||||
if (id == _session->activeChatsFilterCurrent()) {
|
||||
_session->setActiveChatsFilter(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void FiltersMenu::applyReorder(
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue