Rework default folders feature
This commit is contained in:
parent
f8f70fe828
commit
532243092b
13 changed files with 167 additions and 35 deletions
|
|
@ -32,6 +32,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "lang/lang_keys.h"
|
#include "lang/lang_keys.h"
|
||||||
#include "history/history.h"
|
#include "history/history.h"
|
||||||
#include "main/main_session.h"
|
#include "main/main_session.h"
|
||||||
|
#include "main/main_account.h"
|
||||||
#include "window/window_session_controller.h"
|
#include "window/window_session_controller.h"
|
||||||
#include "window/window_controller.h"
|
#include "window/window_controller.h"
|
||||||
#include "apiwrap.h"
|
#include "apiwrap.h"
|
||||||
|
|
@ -637,7 +638,8 @@ void EditFilterBox(
|
||||||
name->setFocusFast();
|
name->setFocusFast();
|
||||||
});
|
});
|
||||||
|
|
||||||
const auto isCurrent = filter.id() == cDefaultFilterId();
|
const auto defaultFilterId = window->session().account().defaultFilterId();
|
||||||
|
const auto isCurrent = filter.id() == defaultFilterId;
|
||||||
const auto checkboxDefault = content->add(
|
const auto checkboxDefault = content->add(
|
||||||
object_ptr<Ui::Checkbox>(
|
object_ptr<Ui::Checkbox>(
|
||||||
box,
|
box,
|
||||||
|
|
@ -783,10 +785,11 @@ void EditExistingFilter(
|
||||||
MTP_int(id),
|
MTP_int(id),
|
||||||
tl
|
tl
|
||||||
)).send();
|
)).send();
|
||||||
const auto isCurrentDefault = result.id() == cDefaultFilterId();
|
const auto defaultFilterId = session->account().defaultFilterId();
|
||||||
|
const auto isCurrentDefault = result.id() == defaultFilterId;
|
||||||
if ((isCurrentDefault && !result.isDefault())
|
if ((isCurrentDefault && !result.isDefault())
|
||||||
|| (!isCurrentDefault && result.isDefault())) {
|
|| (!isCurrentDefault && result.isDefault())) {
|
||||||
cSetDefaultFilterId(result.isDefault() ? result.id() : 0);
|
session->account().setDefaultFilterId(result.isDefault() ? result.id() : 0);
|
||||||
Kotato::JsonSettings::Write();
|
Kotato::JsonSettings::Write();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "dialogs/dialogs_main_list.h"
|
#include "dialogs/dialogs_main_list.h"
|
||||||
#include "ui/ui_utility.h"
|
#include "ui/ui_utility.h"
|
||||||
#include "main/main_session.h"
|
#include "main/main_session.h"
|
||||||
|
#include "main/main_account.h"
|
||||||
#include "apiwrap.h"
|
#include "apiwrap.h"
|
||||||
|
|
||||||
namespace Data {
|
namespace Data {
|
||||||
|
|
@ -100,6 +101,7 @@ ChatFilter ChatFilter::FromTL(
|
||||||
all.begin(),
|
all.begin(),
|
||||||
all.end()
|
all.end()
|
||||||
};
|
};
|
||||||
|
const auto defaultFilterId = owner->session().account().defaultFilterId();
|
||||||
return ChatFilter(
|
return ChatFilter(
|
||||||
data.vid().v,
|
data.vid().v,
|
||||||
qs(data.vtitle()),
|
qs(data.vtitle()),
|
||||||
|
|
@ -108,7 +110,7 @@ ChatFilter ChatFilter::FromTL(
|
||||||
std::move(list),
|
std::move(list),
|
||||||
std::move(pinned),
|
std::move(pinned),
|
||||||
{ never.begin(), never.end() },
|
{ never.begin(), never.end() },
|
||||||
(data.vid().v == cDefaultFilterId()));
|
(data.vid().v == defaultFilterId));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -472,6 +474,7 @@ const ChatFilter &ChatFilters::applyUpdatedPinned(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
const auto defaultFilterId = _owner->session().account().defaultFilterId();
|
||||||
set(ChatFilter(
|
set(ChatFilter(
|
||||||
id,
|
id,
|
||||||
i->title(),
|
i->title(),
|
||||||
|
|
@ -480,7 +483,7 @@ const ChatFilter &ChatFilters::applyUpdatedPinned(
|
||||||
std::move(always),
|
std::move(always),
|
||||||
std::move(pinned),
|
std::move(pinned),
|
||||||
i->never(),
|
i->never(),
|
||||||
(id == cDefaultFilterId())));
|
(id == defaultFilterId)));
|
||||||
return *i;
|
return *i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
#include "mainwidget.h"
|
#include "mainwidget.h"
|
||||||
#include "main/main_session.h"
|
#include "main/main_session.h"
|
||||||
|
#include "main/main_account.h"
|
||||||
#include "main/main_session_settings.h"
|
#include "main/main_session_settings.h"
|
||||||
#include "apiwrap.h"
|
#include "apiwrap.h"
|
||||||
#include "base/event_filter.h"
|
#include "base/event_filter.h"
|
||||||
|
|
@ -696,10 +697,11 @@ void Widget::escape() {
|
||||||
if (controller()->openedFolder().current()) {
|
if (controller()->openedFolder().current()) {
|
||||||
controller()->closeFolder();
|
controller()->closeFolder();
|
||||||
} else if (!onCancelSearch()) {
|
} else if (!onCancelSearch()) {
|
||||||
|
const auto defaultFilterId = session().account().defaultFilterId();
|
||||||
if (controller()->activeChatEntryCurrent().key) {
|
if (controller()->activeChatEntryCurrent().key) {
|
||||||
emit cancelled();
|
emit cancelled();
|
||||||
} else if (controller()->activeChatsFilterCurrent() != cDefaultFilterId()) {
|
} else if (controller()->activeChatsFilterCurrent() != defaultFilterId) {
|
||||||
controller()->setActiveChatsFilter(cDefaultFilterId());
|
controller()->setActiveChatsFilter(defaultFilterId);
|
||||||
}
|
}
|
||||||
} else if (!_searchInChat && !controller()->selectingPeer()) {
|
} else if (!_searchInChat && !controller()->selectingPeer()) {
|
||||||
if (controller()->activeChatEntryCurrent().key) {
|
if (controller()->activeChatEntryCurrent().key) {
|
||||||
|
|
|
||||||
|
|
@ -137,6 +137,7 @@ QByteArray GenerateSettingsJson(bool areDefault = false) {
|
||||||
|
|
||||||
auto settingsFonts = QJsonObject();
|
auto settingsFonts = QJsonObject();
|
||||||
auto settingsFolders = QJsonObject();
|
auto settingsFolders = QJsonObject();
|
||||||
|
auto settingsFoldersDefault = QJsonObject();
|
||||||
auto settingsScales = QJsonArray();
|
auto settingsScales = QJsonArray();
|
||||||
auto settingsReplaces = QJsonArray();
|
auto settingsReplaces = QJsonArray();
|
||||||
|
|
||||||
|
|
@ -173,6 +174,22 @@ QByteArray GenerateSettingsJson(bool areDefault = false) {
|
||||||
a << i.key() << i.value();
|
a << i.key() << i.value();
|
||||||
settingsReplaces << a;
|
settingsReplaces << a;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const auto defaultFilterIdMap = cDefaultFilterId();
|
||||||
|
for (auto i = defaultFilterIdMap.constBegin(), e = defaultFilterIdMap.constEnd(); i != e; ++i) {
|
||||||
|
auto value = i.value();
|
||||||
|
if (value == 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto key = QString::number(std::abs(i.key()));
|
||||||
|
|
||||||
|
if (i.key() < 0) {
|
||||||
|
key.prepend("test_");
|
||||||
|
}
|
||||||
|
|
||||||
|
settingsFoldersDefault.insert(key, value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
settings.insert(qsl("sticker_height"), StickerHeight());
|
settings.insert(qsl("sticker_height"), StickerHeight());
|
||||||
|
|
@ -199,7 +216,7 @@ QByteArray GenerateSettingsJson(bool areDefault = false) {
|
||||||
settingsFonts.insert(qsl("use_system_font"), cUseSystemFont());
|
settingsFonts.insert(qsl("use_system_font"), cUseSystemFont());
|
||||||
settingsFonts.insert(qsl("use_original_metrics"), cUseOriginalMetrics());
|
settingsFonts.insert(qsl("use_original_metrics"), cUseOriginalMetrics());
|
||||||
|
|
||||||
settingsFolders.insert(qsl("default"), cDefaultFilterId());
|
settingsFolders.insert(qsl("default"), settingsFoldersDefault);
|
||||||
settingsFolders.insert(qsl("count_unmuted_only"), cUnmutedFilterCounterOnly());
|
settingsFolders.insert(qsl("count_unmuted_only"), cUnmutedFilterCounterOnly());
|
||||||
settingsFolders.insert(qsl("hide_edit_button"), cHideFilterEditButton());
|
settingsFolders.insert(qsl("hide_edit_button"), cHideFilterEditButton());
|
||||||
settingsFolders.insert(qsl("hide_names"), cHideFilterNames());
|
settingsFolders.insert(qsl("hide_names"), cHideFilterNames());
|
||||||
|
|
@ -443,10 +460,38 @@ bool Manager::readCustomFile() {
|
||||||
});
|
});
|
||||||
|
|
||||||
ReadObjectOption(settings, "folders", [&](auto o) {
|
ReadObjectOption(settings, "folders", [&](auto o) {
|
||||||
ReadIntOption(o, "default", [&](auto v) {
|
auto isDefaultFilterRead = ReadIntOption(o, "default", [&](auto v) {
|
||||||
cSetDefaultFilterId(v);
|
SetDefaultFilterId(0, v);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (!isDefaultFilterRead) {
|
||||||
|
ReadObjectOption(o, "default", [&](auto f) {
|
||||||
|
if (f.empty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
bool isInt;
|
||||||
|
|
||||||
|
for (auto i = f.begin(), e = f.end(); i != e; ++i) {
|
||||||
|
auto value = i.value().toInt(0);
|
||||||
|
|
||||||
|
if (value == 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto key = i.key();
|
||||||
|
if (key.startsWith("test_")) {
|
||||||
|
key = key.mid(5).prepend("-");
|
||||||
|
}
|
||||||
|
|
||||||
|
auto account_id = key.toInt(&isInt, 10);
|
||||||
|
|
||||||
|
if (isInt) {
|
||||||
|
SetDefaultFilterId(account_id, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
ReadBoolOption(o, "count_unmuted_only", [&](auto v) {
|
ReadBoolOption(o, "count_unmuted_only", [&](auto v) {
|
||||||
cSetUnmutedFilterCounterOnly(v);
|
cSetUnmutedFilterCounterOnly(v);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -149,7 +149,26 @@ bool gDisableTrayCounter = false;
|
||||||
bool gUseTelegramPanelIcon = false;
|
bool gUseTelegramPanelIcon = false;
|
||||||
int gCustomAppIcon = 0;
|
int gCustomAppIcon = 0;
|
||||||
|
|
||||||
int gDefaultFilterId = 0;
|
DefaultFilterMap gDefaultFilterId;
|
||||||
|
void SetDefaultFilterId(int account, int filter) {
|
||||||
|
if (gDefaultFilterId.contains(account)) {
|
||||||
|
gDefaultFilterId[account] = filter;
|
||||||
|
} else {
|
||||||
|
gDefaultFilterId.insert(account, filter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int DefaultFilterId(int account) {
|
||||||
|
if (gDefaultFilterId.contains(account)) {
|
||||||
|
return gDefaultFilterId[account];
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
bool HasDefaultFilterId(int account) {
|
||||||
|
return gDefaultFilterId.contains(account);
|
||||||
|
}
|
||||||
|
bool ClearDefaultFilterId(int account) {
|
||||||
|
return gDefaultFilterId.remove(account);
|
||||||
|
}
|
||||||
bool gUnmutedFilterCounterOnly = false;
|
bool gUnmutedFilterCounterOnly = false;
|
||||||
bool gHideFilterEditButton = false;
|
bool gHideFilterEditButton = false;
|
||||||
bool gHideFilterNames = false;
|
bool gHideFilterNames = false;
|
||||||
|
|
|
||||||
|
|
@ -105,7 +105,12 @@ DeclareSetting(bool, DisableTrayCounter);
|
||||||
DeclareSetting(bool, UseTelegramPanelIcon);
|
DeclareSetting(bool, UseTelegramPanelIcon);
|
||||||
DeclareSetting(int, CustomAppIcon);
|
DeclareSetting(int, CustomAppIcon);
|
||||||
|
|
||||||
DeclareSetting(int, DefaultFilterId);
|
using DefaultFilterMap = QMap<int, int>;
|
||||||
|
DeclareRefSetting(DefaultFilterMap, DefaultFilterId);
|
||||||
|
void SetDefaultFilterId(int account, int filter);
|
||||||
|
int DefaultFilterId(int account);
|
||||||
|
bool HasDefaultFilterId(int account);
|
||||||
|
bool ClearDefaultFilterId(int account);
|
||||||
DeclareSetting(bool, UnmutedFilterCounterOnly);
|
DeclareSetting(bool, UnmutedFilterCounterOnly);
|
||||||
DeclareSetting(bool, HideFilterEditButton);
|
DeclareSetting(bool, HideFilterEditButton);
|
||||||
DeclareSetting(bool, HideFilterNames);
|
DeclareSetting(bool, HideFilterNames);
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "main/main_session.h"
|
#include "main/main_session.h"
|
||||||
#include "main/main_domain.h"
|
#include "main/main_domain.h"
|
||||||
#include "main/main_session_settings.h"
|
#include "main/main_session_settings.h"
|
||||||
|
#include "kotato/json_settings.h"
|
||||||
#include "facades.h"
|
#include "facades.h"
|
||||||
|
|
||||||
namespace Main {
|
namespace Main {
|
||||||
|
|
@ -188,6 +189,19 @@ void Account::createSession(
|
||||||
_sessionValue = _session.get();
|
_sessionValue = _session.get();
|
||||||
|
|
||||||
Ensures(_session != nullptr);
|
Ensures(_session != nullptr);
|
||||||
|
|
||||||
|
const auto defaultFilterUserId = _mtp->isTestMode()
|
||||||
|
? -session().userId()
|
||||||
|
: session().userId();
|
||||||
|
|
||||||
|
if (HasDefaultFilterId(0)) {
|
||||||
|
const auto newDefaultFilterId = DefaultFilterId(0);
|
||||||
|
ClearDefaultFilterId(0);
|
||||||
|
setDefaultFilterId(newDefaultFilterId);
|
||||||
|
Kotato::JsonSettings::Write();
|
||||||
|
} else {
|
||||||
|
_defaultFilterId = DefaultFilterId(defaultFilterUserId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Account::destroySession(DestroyReason reason) {
|
void Account::destroySession(DestroyReason reason) {
|
||||||
|
|
@ -577,6 +591,22 @@ void Account::destroyStaleAuthorizationKeys() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Account::setDefaultFilterId(int id) {
|
||||||
|
Expects(_mtp != nullptr);
|
||||||
|
Expects(_session != nullptr);
|
||||||
|
|
||||||
|
_defaultFilterId = id;
|
||||||
|
const auto defaultFilterUserId = _mtp->isTestMode()
|
||||||
|
? -session().userId()
|
||||||
|
: session().userId();
|
||||||
|
|
||||||
|
if (id == 0) {
|
||||||
|
ClearDefaultFilterId(defaultFilterUserId);
|
||||||
|
} else {
|
||||||
|
SetDefaultFilterId(defaultFilterUserId, id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Account::resetAuthorizationKeys() {
|
void Account::resetAuthorizationKeys() {
|
||||||
Expects(_mtp != nullptr);
|
Expects(_mtp != nullptr);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -107,6 +107,11 @@ public:
|
||||||
return _lifetime;
|
return _lifetime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] int defaultFilterId() {
|
||||||
|
return _defaultFilterId;
|
||||||
|
}
|
||||||
|
void setDefaultFilterId(int id);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static constexpr auto kDefaultSaveDelay = crl::time(1000);
|
static constexpr auto kDefaultSaveDelay = crl::time(1000);
|
||||||
enum class DestroyReason {
|
enum class DestroyReason {
|
||||||
|
|
@ -152,6 +157,7 @@ private:
|
||||||
MTP::Instance::Fields _mtpFields;
|
MTP::Instance::Fields _mtpFields;
|
||||||
MTP::AuthKeysList _mtpKeysToDestroy;
|
MTP::AuthKeysList _mtpKeysToDestroy;
|
||||||
bool _loggingOut = false;
|
bool _loggingOut = false;
|
||||||
|
int _defaultFilterId = 0;
|
||||||
|
|
||||||
rpl::lifetime _lifetime;
|
rpl::lifetime _lifetime;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "data/data_chat_filters.h"
|
#include "data/data_chat_filters.h"
|
||||||
#include "history/history.h"
|
#include "history/history.h"
|
||||||
#include "main/main_session.h"
|
#include "main/main_session.h"
|
||||||
|
#include "main/main_account.h"
|
||||||
#include "window/window_session_controller.h"
|
#include "window/window_session_controller.h"
|
||||||
#include "window/window_controller.h"
|
#include "window/window_controller.h"
|
||||||
#include "ui/layers/generic_box.h"
|
#include "ui/layers/generic_box.h"
|
||||||
|
|
@ -312,11 +313,13 @@ void FilterRowButton::paintEvent(QPaintEvent *e) {
|
||||||
not_null<Window::SessionController*> controller,
|
not_null<Window::SessionController*> controller,
|
||||||
not_null<Ui::VerticalLayout*> container) {
|
not_null<Ui::VerticalLayout*> container) {
|
||||||
auto &lifetime = container->lifetime();
|
auto &lifetime = container->lifetime();
|
||||||
const auto currentDefaultId = cDefaultFilterId();
|
|
||||||
|
const auto session = &controller->session();
|
||||||
|
const auto account = &session->account();
|
||||||
|
const auto currentDefaultId = account->defaultFilterId();
|
||||||
localNewFilterId = kFiltersLimit;
|
localNewFilterId = kFiltersLimit;
|
||||||
currentDefaultRemoved = false;
|
currentDefaultRemoved = false;
|
||||||
|
|
||||||
const auto session = &controller->session();
|
|
||||||
AddSkip(container, st::settingsSectionSkip);
|
AddSkip(container, st::settingsSectionSkip);
|
||||||
AddSubsectionTitle(container, tr::lng_filters_subtitle());
|
AddSubsectionTitle(container, tr::lng_filters_subtitle());
|
||||||
|
|
||||||
|
|
@ -343,7 +346,7 @@ void FilterRowButton::paintEvent(QPaintEvent *e) {
|
||||||
button->removeRequests(
|
button->removeRequests(
|
||||||
) | rpl::start_with_next([=] {
|
) | rpl::start_with_next([=] {
|
||||||
button->setRemoved(true);
|
button->setRemoved(true);
|
||||||
if (find(button)->filter.id() == cDefaultFilterId()) {
|
if (find(button)->filter.id() == account->defaultFilterId()) {
|
||||||
currentDefaultRemoved = true;
|
currentDefaultRemoved = true;
|
||||||
}
|
}
|
||||||
find(button)->removed = true;
|
find(button)->removed = true;
|
||||||
|
|
@ -353,7 +356,7 @@ void FilterRowButton::paintEvent(QPaintEvent *e) {
|
||||||
if (showLimitReached()) {
|
if (showLimitReached()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (find(button)->filter.id() == cDefaultFilterId()) {
|
if (find(button)->filter.id() == account->defaultFilterId()) {
|
||||||
currentDefaultRemoved = false;
|
currentDefaultRemoved = false;
|
||||||
}
|
}
|
||||||
button->setRemoved(false);
|
button->setRemoved(false);
|
||||||
|
|
@ -366,10 +369,10 @@ void FilterRowButton::paintEvent(QPaintEvent *e) {
|
||||||
}
|
}
|
||||||
const auto doneCallback = [=](const Data::ChatFilter &result) {
|
const auto doneCallback = [=](const Data::ChatFilter &result) {
|
||||||
find(button)->filter = result;
|
find(button)->filter = result;
|
||||||
const auto isCurrentDefault = result.id() == cDefaultFilterId();
|
const auto isCurrentDefault = result.id() == account->defaultFilterId();
|
||||||
if ((isCurrentDefault && !result.isDefault())
|
if ((isCurrentDefault && !result.isDefault())
|
||||||
|| (!isCurrentDefault && result.isDefault())) {
|
|| (!isCurrentDefault && result.isDefault())) {
|
||||||
cSetDefaultFilterId(result.isDefault() ? result.id() : 0);
|
account->setDefaultFilterId(result.isDefault() ? result.id() : 0);
|
||||||
}
|
}
|
||||||
button->updateData(result);
|
button->updateData(result);
|
||||||
};
|
};
|
||||||
|
|
@ -432,7 +435,7 @@ void FilterRowButton::paintEvent(QPaintEvent *e) {
|
||||||
}
|
}
|
||||||
const auto doneCallback = [=](const Data::ChatFilter &result) {
|
const auto doneCallback = [=](const Data::ChatFilter &result) {
|
||||||
if (result.isDefault()) {
|
if (result.isDefault()) {
|
||||||
cSetDefaultFilterId(result.id());
|
account->setDefaultFilterId(result.id());
|
||||||
}
|
}
|
||||||
addFilter(result);
|
addFilter(result);
|
||||||
};
|
};
|
||||||
|
|
@ -528,8 +531,8 @@ void FilterRowButton::paintEvent(QPaintEvent *e) {
|
||||||
continue;
|
continue;
|
||||||
} else if (!ranges::contains(list, id, &Data::ChatFilter::id)) {
|
} else if (!ranges::contains(list, id, &Data::ChatFilter::id)) {
|
||||||
result.emplace(row.button, chooseNextId());
|
result.emplace(row.button, chooseNextId());
|
||||||
if (cDefaultFilterId() == id) {
|
if (account->defaultFilterId() == id) {
|
||||||
cSetDefaultFilterId(localId);
|
account->setDefaultFilterId(localId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -589,10 +592,10 @@ void FilterRowButton::paintEvent(QPaintEvent *e) {
|
||||||
realFilters.saveOrder(order, previousId);
|
realFilters.saveOrder(order, previousId);
|
||||||
}
|
}
|
||||||
if (currentDefaultRemoved) {
|
if (currentDefaultRemoved) {
|
||||||
cSetDefaultFilterId(0);
|
account->setDefaultFilterId(0);
|
||||||
controller->setActiveChatsFilter(0);
|
controller->setActiveChatsFilter(0);
|
||||||
}
|
}
|
||||||
if (currentDefaultId != cDefaultFilterId()) {
|
if (currentDefaultId != account->defaultFilterId()) {
|
||||||
Kotato::JsonSettings::Write();
|
Kotato::JsonSettings::Write();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "ui/emoji_config.h"
|
#include "ui/emoji_config.h"
|
||||||
#include "chat_helpers/emoji_sets_manager.h"
|
#include "chat_helpers/emoji_sets_manager.h"
|
||||||
#include "window/window_session_controller.h"
|
#include "window/window_session_controller.h"
|
||||||
|
#include "window/window_filters_menu.h"
|
||||||
#include "window/themes/window_theme.h"
|
#include "window/themes/window_theme.h"
|
||||||
#include "window/themes/window_theme_editor.h"
|
#include "window/themes/window_theme_editor.h"
|
||||||
#include "boxes/confirm_box.h"
|
#include "boxes/confirm_box.h"
|
||||||
|
|
@ -68,6 +69,7 @@ void Controller::showAccount(not_null<Main::Account*> account) {
|
||||||
}, session->lifetime());
|
}, session->lifetime());
|
||||||
}
|
}
|
||||||
if (session && session->settings().dialogsFiltersEnabled()) {
|
if (session && session->settings().dialogsFiltersEnabled()) {
|
||||||
|
ResetFiltersFirstLoad();
|
||||||
_sessionController->toggleFiltersMenu(true);
|
_sessionController->toggleFiltersMenu(true);
|
||||||
} else {
|
} else {
|
||||||
sideBarChanged();
|
sideBarChanged();
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "window/window_session_controller.h"
|
#include "window/window_session_controller.h"
|
||||||
#include "window/window_controller.h"
|
#include "window/window_controller.h"
|
||||||
#include "main/main_session.h"
|
#include "main/main_session.h"
|
||||||
|
#include "main/main_account.h"
|
||||||
#include "data/data_session.h"
|
#include "data/data_session.h"
|
||||||
#include "data/data_chat_filters.h"
|
#include "data/data_chat_filters.h"
|
||||||
#include "data/data_folder.h"
|
#include "data/data_folder.h"
|
||||||
|
|
@ -61,6 +62,10 @@ bool FiltersFirstLoad = true;
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
void ResetFiltersFirstLoad() {
|
||||||
|
FiltersFirstLoad = true;
|
||||||
|
}
|
||||||
|
|
||||||
FiltersMenu::FiltersMenu(
|
FiltersMenu::FiltersMenu(
|
||||||
not_null<Ui::RpWidget*> parent,
|
not_null<Ui::RpWidget*> parent,
|
||||||
not_null<SessionController*> session)
|
not_null<SessionController*> session)
|
||||||
|
|
@ -101,6 +106,7 @@ void FiltersMenu::setup() {
|
||||||
}, _outer.lifetime());
|
}, _outer.lifetime());
|
||||||
|
|
||||||
const auto filters = &_session->session().data().chatsFilters();
|
const auto filters = &_session->session().data().chatsFilters();
|
||||||
|
_activeFilterId = _session->activeChatsFilterCurrent();
|
||||||
rpl::single(
|
rpl::single(
|
||||||
rpl::empty_value()
|
rpl::empty_value()
|
||||||
) | rpl::then(
|
) | rpl::then(
|
||||||
|
|
@ -109,7 +115,6 @@ void FiltersMenu::setup() {
|
||||||
refresh();
|
refresh();
|
||||||
}, _outer.lifetime());
|
}, _outer.lifetime());
|
||||||
|
|
||||||
_activeFilterId = _session->activeChatsFilterCurrent();
|
|
||||||
_session->activeChatsFilter(
|
_session->activeChatsFilter(
|
||||||
) | rpl::filter([=](FilterId id) {
|
) | rpl::filter([=](FilterId id) {
|
||||||
return id != _activeFilterId;
|
return id != _activeFilterId;
|
||||||
|
|
@ -200,7 +205,7 @@ void FiltersMenu::refresh() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FiltersFirstLoad) {
|
if (FiltersFirstLoad) {
|
||||||
_session->setActiveChatsFilter(cDefaultFilterId());
|
_session->setActiveChatsFilter(_session->session().account().defaultFilterId());
|
||||||
FiltersFirstLoad = false;
|
FiltersFirstLoad = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -321,11 +326,12 @@ void FiltersMenu::showMenu(QPoint position, FilterId id) {
|
||||||
if (i == end(_filters)) {
|
if (i == end(_filters)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
const auto defaultFilterId = _session->session().account().defaultFilterId();
|
||||||
_popupMenu = base::make_unique_q<Ui::PopupMenu>(i->second.get());
|
_popupMenu = base::make_unique_q<Ui::PopupMenu>(i->second.get());
|
||||||
_popupMenu->addAction(
|
_popupMenu->addAction(
|
||||||
tr::lng_filters_context_edit(tr::now),
|
tr::lng_filters_context_edit(tr::now),
|
||||||
crl::guard(&_outer, [=] { showEditBox(id); }));
|
crl::guard(&_outer, [=] { showEditBox(id); }));
|
||||||
if (cDefaultFilterId() != id) {
|
if (defaultFilterId != id) {
|
||||||
_popupMenu->addAction(
|
_popupMenu->addAction(
|
||||||
tr::ktg_filters_context_make_default(tr::now),
|
tr::ktg_filters_context_make_default(tr::now),
|
||||||
crl::guard(&_outer, [=] { setDefaultFilter(id); }));
|
crl::guard(&_outer, [=] { setDefaultFilter(id); }));
|
||||||
|
|
@ -345,11 +351,12 @@ void FiltersMenu::showAllMenu(QPoint position) {
|
||||||
_popupMenu = nullptr;
|
_popupMenu = nullptr;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
const auto defaultFilterId = _session->session().account().defaultFilterId();
|
||||||
_popupMenu = base::make_unique_q<Ui::PopupMenu>(_all);
|
_popupMenu = base::make_unique_q<Ui::PopupMenu>(_all);
|
||||||
_popupMenu->addAction(
|
_popupMenu->addAction(
|
||||||
tr::ktg_filters_context_edit_all(tr::now),
|
tr::ktg_filters_context_edit_all(tr::now),
|
||||||
crl::guard(&_outer, [=] { _session->showSettings(Settings::Type::Folders); }));
|
crl::guard(&_outer, [=] { _session->showSettings(Settings::Type::Folders); }));
|
||||||
if (cDefaultFilterId() != 0) {
|
if (defaultFilterId != 0) {
|
||||||
_popupMenu->addAction(
|
_popupMenu->addAction(
|
||||||
tr::ktg_filters_context_make_default(tr::now),
|
tr::ktg_filters_context_make_default(tr::now),
|
||||||
crl::guard(&_outer, [=] { setDefaultFilter(0); }));
|
crl::guard(&_outer, [=] { setDefaultFilter(0); }));
|
||||||
|
|
@ -359,8 +366,9 @@ void FiltersMenu::showAllMenu(QPoint position) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void FiltersMenu::setDefaultFilter(FilterId id) {
|
void FiltersMenu::setDefaultFilter(FilterId id) {
|
||||||
if (cDefaultFilterId() != id) {
|
const auto defaultFilterId = _session->session().account().defaultFilterId();
|
||||||
cSetDefaultFilterId(id);
|
if (defaultFilterId != id) {
|
||||||
|
_session->session().account().setDefaultFilterId(id);
|
||||||
Kotato::JsonSettings::Write();
|
Kotato::JsonSettings::Write();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -378,6 +386,7 @@ void FiltersMenu::showRemoveBox(FilterId id) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void FiltersMenu::remove(FilterId id) {
|
void FiltersMenu::remove(FilterId id) {
|
||||||
|
const auto defaultFilterId = _session->session().account().defaultFilterId();
|
||||||
_session->session().data().chatsFilters().apply(MTP_updateDialogFilter(
|
_session->session().data().chatsFilters().apply(MTP_updateDialogFilter(
|
||||||
MTP_flags(MTPDupdateDialogFilter::Flag(0)),
|
MTP_flags(MTPDupdateDialogFilter::Flag(0)),
|
||||||
MTP_int(id),
|
MTP_int(id),
|
||||||
|
|
@ -387,8 +396,8 @@ void FiltersMenu::remove(FilterId id) {
|
||||||
MTP_int(id),
|
MTP_int(id),
|
||||||
MTPDialogFilter()
|
MTPDialogFilter()
|
||||||
)).send();
|
)).send();
|
||||||
if (id == cDefaultFilterId()) {
|
if (id == defaultFilterId) {
|
||||||
cSetDefaultFilterId(0);
|
_session->session().account().setDefaultFilterId(0);
|
||||||
Kotato::JsonSettings::Write();
|
Kotato::JsonSettings::Write();
|
||||||
if (id == _session->activeChatsFilterCurrent()) {
|
if (id == _session->activeChatsFilterCurrent()) {
|
||||||
_session->setActiveChatsFilter(0);
|
_session->setActiveChatsFilter(0);
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,8 @@ namespace Window {
|
||||||
|
|
||||||
class SessionController;
|
class SessionController;
|
||||||
|
|
||||||
|
void ResetFiltersFirstLoad();
|
||||||
|
|
||||||
class FiltersMenu final {
|
class FiltersMenu final {
|
||||||
public:
|
public:
|
||||||
FiltersMenu(
|
FiltersMenu(
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "mainwidget.h"
|
#include "mainwidget.h"
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
#include "main/main_session.h"
|
#include "main/main_session.h"
|
||||||
|
#include "main/main_account.h"
|
||||||
#include "main/main_session_settings.h"
|
#include "main/main_session_settings.h"
|
||||||
#include "apiwrap.h"
|
#include "apiwrap.h"
|
||||||
#include "support/support_helper.h"
|
#include "support/support_helper.h"
|
||||||
|
|
@ -290,8 +291,9 @@ void SessionController::checkOpenedFilter() {
|
||||||
const auto &list = session().data().chatsFilters().list();
|
const auto &list = session().data().chatsFilters().list();
|
||||||
const auto i = ranges::find(list, filterId, &Data::ChatFilter::id);
|
const auto i = ranges::find(list, filterId, &Data::ChatFilter::id);
|
||||||
if (i == end(list)) {
|
if (i == end(list)) {
|
||||||
const auto j = ranges::find(list, FilterId(cDefaultFilterId()), &Data::ChatFilter::id);
|
const auto defaultFilterId = session().account().defaultFilterId();
|
||||||
setActiveChatsFilter(j == end(list) ? 0 : cDefaultFilterId());
|
const auto j = ranges::find(list, FilterId(defaultFilterId), &Data::ChatFilter::id);
|
||||||
|
setActiveChatsFilter(j == end(list) ? 0 : defaultFilterId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -311,10 +313,11 @@ void SessionController::openFolder(not_null<Data::Folder*> folder) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void SessionController::closeFolder(bool force) {
|
void SessionController::closeFolder(bool force) {
|
||||||
if (cDefaultFilterId() == 0 || force) {
|
const auto defaultFilterId = session().account().defaultFilterId();
|
||||||
|
if (defaultFilterId == 0 || force) {
|
||||||
_openedFolder = nullptr;
|
_openedFolder = nullptr;
|
||||||
} else {
|
} else {
|
||||||
setActiveChatsFilter(cDefaultFilterId());
|
setActiveChatsFilter(defaultFilterId);
|
||||||
checkOpenedFilter();
|
checkOpenedFilter();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue