Set default folder by id

This commit is contained in:
Eric Kotato 2020-03-28 18:06:15 +03:00
parent a63f44ce1d
commit 581bbc0d00
8 changed files with 31 additions and 10 deletions

View file

@ -333,6 +333,10 @@ bool Manager::readCustomFile() {
cSetCustomAppIcon(v);
}
});
ReadIntOption(settings, "default_folder_id", [&](auto v) {
cSetDefaultFilterId(v);
});
return true;
}
@ -377,6 +381,7 @@ void Manager::writeDefaultFile() {
settings.insert(qsl("userpic_corner_type"), cUserpicCornersType());
settings.insert(qsl("always_show_top_userpic"), cShowTopBarUserpic());
settings.insert(qsl("custom_app_icon"), cCustomAppIcon());
settings.insert(qsl("default_folder_id"), cDefaultFilterId());
auto settingsScales = QJsonArray();
settings.insert(qsl("scales"), settingsScales);
@ -442,6 +447,7 @@ void Manager::writeCurrentSettings() {
settings.insert(qsl("userpic_corner_type"), cUserpicCornersType());
settings.insert(qsl("always_show_top_userpic"), cShowTopBarUserpic());
settings.insert(qsl("custom_app_icon"), cCustomAppIcon());
settings.insert(qsl("default_folder_id"), cDefaultFilterId());
auto settingsScales = QJsonArray();
auto currentScales = cInterfaceScales();

View file

@ -687,8 +687,8 @@ void Widget::escape() {
} else if (!onCancelSearch()) {
if (controller()->activeChatEntryCurrent().key) {
emit cancelled();
} else if (controller()->activeChatsFilterCurrent()) {
controller()->setActiveChatsFilter(FilterId(0));
} else if (controller()->activeChatsFilterCurrent() != cDefaultFilterId()) {
controller()->setActiveChatsFilter(cDefaultFilterId());
}
} else if (!_searchInChat && !App::main()->selectingPeer()) {
if (controller()->activeChatEntryCurrent().key) {

View file

@ -319,3 +319,6 @@ rpl::producer<int> RecentStickersLimitChanges() {
int gUserpicCornersType = 3;
bool gShowTopBarUserpic = false;
int gCustomAppIcon = 0;
int gDefaultFilterId = 0;

View file

@ -249,3 +249,5 @@ void SetRecentStickersLimit(int limit);
DeclareSetting(int, UserpicCornersType);
DeclareSetting(bool, ShowTopBarUserpic);
DeclareSetting(int, CustomAppIcon);
DeclareSetting(int, DefaultFilterId);

View file

@ -104,7 +104,7 @@ void FiltersMenu::setup() {
) | rpl::then(
filters->changed()
) | rpl::start_with_next([=] {
refresh();
refresh(true);
}, _outer.lifetime());
_activeFilterId = _session->activeChatsFilterCurrent();
@ -132,7 +132,7 @@ void FiltersMenu::setup() {
});
}
void FiltersMenu::refresh() {
void FiltersMenu::refresh(bool firstLoad) {
const auto filters = &_session->session().data().chatsFilters();
if (filters->list().empty() || _ignoreRefresh) {
return;
@ -156,6 +156,10 @@ void FiltersMenu::refresh() {
_reorder->start();
_container->resizeToWidth(_outer.width());
if (firstLoad) {
_session->setActiveChatsFilter(cDefaultFilterId());
}
}
void FiltersMenu::setupList() {

View file

@ -34,7 +34,7 @@ public:
private:
void setup();
void refresh();
void refresh(bool firstLoad = false);
void setupList();
void applyReorder(
not_null<Ui::RpWidget*> widget,

View file

@ -230,7 +230,8 @@ void SessionController::checkOpenedFilter() {
const auto &list = session().data().chatsFilters().list();
const auto i = ranges::find(list, filterId, &Data::ChatFilter::id);
if (i == end(list)) {
setActiveChatsFilter(0);
const auto j = ranges::find(list, FilterId(cDefaultFilterId()), &Data::ChatFilter::id);
setActiveChatsFilter(j == end(list) ? 0 : cDefaultFilterId());
}
}
}
@ -246,8 +247,13 @@ void SessionController::openFolder(not_null<Data::Folder*> folder) {
_openedFolder = folder.get();
}
void SessionController::closeFolder() {
_openedFolder = nullptr;
void SessionController::closeFolder(bool force) {
if (cDefaultFilterId() == 0 || force) {
_openedFolder = nullptr;
} else {
setActiveChatsFilter(cDefaultFilterId());
checkOpenedFilter();
}
}
const rpl::variable<Data::Folder*> &SessionController::openedFolder() const {
@ -783,7 +789,7 @@ FilterId SessionController::activeChatsFilterCurrent() const {
void SessionController::setActiveChatsFilter(FilterId id) {
_activeChatsFilter.force_assign(id);
if (id) {
closeFolder();
closeFolder(true);
}
if (Adaptive::OneColumn()) {
Ui::showChatsList();

View file

@ -184,7 +184,7 @@ public:
rpl::variable<Dialogs::Key> searchInChat;
bool uniqueChatsInSearchResults() const;
void openFolder(not_null<Data::Folder*> folder);
void closeFolder();
void closeFolder(bool force = false);
const rpl::variable<Data::Folder*> &openedFolder() const;
void setActiveChatEntry(Dialogs::RowDescriptor row);