Enable / disable side bar based on filters.

This commit is contained in:
John Preston 2020-03-18 13:19:58 +04:00
parent 3c0ee9fa20
commit 4881981cf6
13 changed files with 41 additions and 32 deletions

View File

@ -504,7 +504,9 @@ void ManageFiltersPrepare::SetupBox(
continue;
}
const auto newId = ids.take(id).value_or(id);
const auto tl = removed ? MTPDialogFilter() : row.filter.tl();
const auto tl = removed
? MTPDialogFilter()
: row.filter.tl(newId);
const auto request = MTPmessages_UpdateDialogFilter(
MTP_flags(removed
? MTPmessages_UpdateDialogFilter::Flag(0)

View File

@ -502,13 +502,6 @@ void Application::switchDebugMode() {
}
}
void Application::switchWorkMode() {
Global::SetDialogsFiltersEnabled(!Global::DialogsFiltersEnabled());
Global::SetDialogsFilterId(0);
Local::writeUserSettings();
App::restart();
}
void Application::switchTestMode() {
if (cTestMode()) {
QFile(cWorkingDir() + qsl("tdata/withtestmode")).remove();

View File

@ -214,7 +214,6 @@ public:
void handleAppDeactivated();
void switchDebugMode();
void switchWorkMode();
void switchTestMode();
void writeInstallBetaVersionsSetting();

View File

@ -92,7 +92,7 @@ ChatFilter ChatFilter::FromTL(
});
}
MTPDialogFilter ChatFilter::tl() const {
MTPDialogFilter ChatFilter::tl(FilterId replaceId) const {
using TLFlag = MTPDdialogFilter::Flag;
const auto flags = TLFlag(0)
| ((_flags & Flag::Contacts) ? TLFlag::f_contacts : TLFlag(0))
@ -124,7 +124,7 @@ MTPDialogFilter ChatFilter::tl() const {
}
return MTP_dialogFilter(
MTP_flags(flags),
MTP_int(_id),
MTP_int(replaceId ? replaceId : _id),
MTP_string(_title),
MTPstring(), // emoticon
MTP_vector<MTPInputPeer>(pinned),

View File

@ -49,7 +49,7 @@ public:
[[nodiscard]] static ChatFilter FromTL(
const MTPDialogFilter &data,
not_null<Session*> owner);
[[nodiscard]] MTPDialogFilter tl() const;
[[nodiscard]] MTPDialogFilter tl(FilterId replaceId = 0) const;
[[nodiscard]] FilterId id() const;
[[nodiscard]] QString title() const;

View File

@ -2546,11 +2546,11 @@ bool InnerWidget::chooseCollapsedRow() {
void InnerWidget::switchToFilter(FilterId filterId) {
clearSelection();
if (!Global::DialogsFiltersEnabled()
|| !ranges::contains(
session().data().chatsFilters().list(),
filterId,
&Data::ChatFilter::id)) {
const auto found = ranges::contains(
session().data().chatsFilters().list(),
filterId,
&Data::ChatFilter::id);
if (!found) {
filterId = 0;
}
stopReorderPinned();

View File

@ -311,7 +311,6 @@ struct Data {
base::Observable<void> AdaptiveChanged;
bool DialogsFiltersEnabled = false;
FilterId DialogsFilterId = 0;
bool ModerateModeEnabled = false;
bool ScreenIsLocked = false;
@ -441,7 +440,6 @@ DefineVar(Global, bool, AdaptiveForWide);
DefineRefVar(Global, base::Observable<void>, AdaptiveChanged);
DefineVar(Global, bool, DialogsFiltersEnabled);
DefineVar(Global, FilterId, DialogsFilterId);
DefineVar(Global, bool, ModerateModeEnabled);
DefineVar(Global, bool, ScreenIsLocked);

View File

@ -150,7 +150,6 @@ DeclareVar(bool, AdaptiveForWide);
DeclareRefVar(base::Observable<void>, AdaptiveChanged);
DeclareVar(bool, DialogsFiltersEnabled);
DeclareVar(FilterId, DialogsFilterId);
DeclareVar(bool, ModerateModeEnabled);
DeclareVar(bool, ScreenIsLocked);

View File

@ -69,12 +69,6 @@ auto GenerateCodes() {
codes.emplace(qsl("crashplease"), [](::Main::Session *session) {
Unexpected("Crashed in Settings!");
});
codes.emplace(qsl("workmode"), [](::Main::Session *session) {
auto text = Global::DialogsFiltersEnabled() ? qsl("Disable filters?") : qsl("Enable filters?");
Ui::show(Box<ConfirmBox>(text, [] {
Core::App().switchWorkMode();
}));
});
codes.emplace(qsl("moderate"), [](::Main::Session *session) {
auto text = Global::ModerateModeEnabled() ? qsl("Disable moderate mode?") : qsl("Enable moderate mode?");
Ui::show(Box<ConfirmBox>(text, [] {

View File

@ -613,7 +613,7 @@ enum {
dbiHiddenPinnedMessages = 0x39,
dbiRecentEmoji = 0x3a,
dbiEmojiVariants = 0x3b,
dbiDialogsFilters = 0x40,
dbiDialogsModeOld = 0x40,
dbiModerateMode = 0x41,
dbiVideoVolume = 0x42,
dbiStickersRecentLimit = 0x43,
@ -644,6 +644,7 @@ enum {
dbiCacheSettings = 0x5c,
dbiTxtDomainString = 0x5d,
dbiApplicationSettings = 0x5e,
dbiDialogsFilters = 0x5f,
dbiEncryptedWithSalt = 333,
dbiEncrypted = 444,
@ -1167,10 +1168,16 @@ bool _readSetting(quint32 blockId, QDataStream &stream, int version, ReadSetting
}
} break;
case dbiDialogsFilters: {
case dbiDialogsModeOld: {
qint32 enabled, modeInt;
stream >> enabled >> modeInt;
if (!_checkStreamStatus(stream)) return false;
} break;
case dbiDialogsFilters: {
qint32 enabled;
stream >> enabled;
if (!_checkStreamStatus(stream)) return false;
Global::SetDialogsFiltersEnabled(enabled == 1);
} break;
@ -2091,7 +2098,7 @@ void _writeUserSettings() {
: QByteArray();
auto callSettings = serializeCallSettings();
uint32 size = 23 * (sizeof(quint32) + sizeof(qint32));
uint32 size = 24 * (sizeof(quint32) + sizeof(qint32));
size += sizeof(quint32) + Serialize::stringSize(Global::AskDownloadPath() ? QString() : Global::DownloadPath()) + Serialize::bytearraySize(Global::AskDownloadPath() ? QByteArray() : Global::DownloadPathBookmark());
size += sizeof(quint32) + sizeof(qint32);
@ -2104,7 +2111,6 @@ void _writeUserSettings() {
size += sizeof(quint32) + Serialize::stringSize(cDialogLastPath());
size += sizeof(quint32) + 3 * sizeof(qint32);
size += sizeof(quint32) + 2 * sizeof(qint32);
size += sizeof(quint32) + 2 * sizeof(qint32);
size += sizeof(quint32) + sizeof(qint64) + sizeof(qint32);
if (!Global::HiddenPinnedMessages().isEmpty()) {
size += sizeof(quint32) + sizeof(qint32) + Global::HiddenPinnedMessages().size() * (sizeof(PeerId) + sizeof(MsgId));
@ -2132,7 +2138,7 @@ void _writeUserSettings() {
data.stream << quint32(dbiDialogLastPath) << cDialogLastPath();
data.stream << quint32(dbiSongVolume) << qint32(qRound(Global::SongVolume() * 1e6));
data.stream << quint32(dbiVideoVolume) << qint32(qRound(Global::VideoVolume() * 1e6));
data.stream << quint32(dbiDialogsFilters) << qint32(Global::DialogsFiltersEnabled() ? 1 : 0) << static_cast<qint32>(Global::DialogsFilterId());
data.stream << quint32(dbiDialogsFilters) << qint32(Global::DialogsFiltersEnabled() ? 1 : 0);
data.stream << quint32(dbiModerateMode) << qint32(Global::ModerateModeEnabled() ? 1 : 0);
data.stream << quint32(dbiUseExternalVideoPlayer) << qint32(cUseExternalVideoPlayer());
data.stream << quint32(dbiCacheSettings) << qint64(_cacheTotalSizeLimit) << qint32(_cacheTotalTimeLimit) << qint64(_cacheBigFileTotalSizeLimit) << qint32(_cacheBigFileTotalTimeLimit);

View File

@ -28,7 +28,7 @@ Controller::Controller(not_null<Main::Account*> account)
: _account(account)
, _widget(this) {
_account->sessionValue(
) | rpl::start_with_next([=](Main::Session *session) {
) | rpl::start_with_next([=](Main::Session *session) {
_sessionController = session
? std::make_unique<SessionController>(session, this)
: nullptr;

View File

@ -22,6 +22,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "data/data_folder.h"
#include "data/data_channel.h"
#include "data/data_chat.h"
#include "data/data_chat_filters.h"
#include "passport/passport_form_controller.h"
#include "chat_helpers/tabbed_selector.h"
#include "core/shortcuts.h"
@ -135,6 +136,13 @@ SessionController::SessionController(
folder->updateChatListSortPosition();
closeFolder();
}, lifetime());
session->data().chatsFilters().changed(
) | rpl::start_with_next([=] {
crl::on_main(session, [=] {
refreshFiltersMenu();
});
}, session->lifetime());
}
not_null<::MainWindow*> SessionController::widget() const {
@ -203,6 +211,15 @@ void SessionController::toggleFiltersMenu(bool enabled) {
_window->sideBarChanged();
}
void SessionController::refreshFiltersMenu() {
const auto enabled = !session().data().chatsFilters().list().empty();
if (enabled != Global::DialogsFiltersEnabled()) {
Global::SetDialogsFiltersEnabled(enabled);
session().saveSettingsDelayed();
toggleFiltersMenu(enabled);
}
}
bool SessionController::uniqueChatsInSearchResults() const {
return session().supportMode()
&& !session().settings().supportAllSearchResults()

View File

@ -299,6 +299,7 @@ public:
void setActiveChatsFilter(FilterId id);
void toggleFiltersMenu(bool enabled);
void refreshFiltersMenu();
rpl::lifetime &lifetime() {
return _lifetime;