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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -230,7 +230,8 @@ 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)) {
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(); _openedFolder = folder.get();
} }
void SessionController::closeFolder() { void SessionController::closeFolder(bool force) {
_openedFolder = nullptr; if (cDefaultFilterId() == 0 || force) {
_openedFolder = nullptr;
} else {
setActiveChatsFilter(cDefaultFilterId());
checkOpenedFilter();
}
} }
const rpl::variable<Data::Folder*> &SessionController::openedFolder() const { const rpl::variable<Data::Folder*> &SessionController::openedFolder() const {
@ -783,7 +789,7 @@ FilterId SessionController::activeChatsFilterCurrent() const {
void SessionController::setActiveChatsFilter(FilterId id) { void SessionController::setActiveChatsFilter(FilterId id) {
_activeChatsFilter.force_assign(id); _activeChatsFilter.force_assign(id);
if (id) { if (id) {
closeFolder(); closeFolder(true);
} }
if (Adaptive::OneColumn()) { if (Adaptive::OneColumn()) {
Ui::showChatsList(); Ui::showChatsList();

View file

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