Remember all the collapsed trees

This commit is contained in:
Nicolas Werner 2021-12-01 03:46:55 +01:00
parent aa5d2098d0
commit b774a671da
No known key found for this signature in database
GPG Key ID: C8D75E610773F2D9
4 changed files with 76 additions and 2 deletions

View File

@ -69,7 +69,6 @@ UserSettings::load(std::optional<QString> profile)
hasDesktopNotifications_ = settings.value("user/desktop_notifications", true).toBool();
hasAlertOnNotification_ = settings.value("user/alert_on_notification", false).toBool();
groupView_ = settings.value("user/group_view", true).toBool();
hiddenTags_ = settings.value("user/hidden_tags", QStringList{}).toStringList();
buttonsInTimeline_ = settings.value("user/timeline/buttons", true).toBool();
timelineMaxWidth_ = settings.value("user/timeline/max_width", 0).toInt();
messageHoverHighlight_ =
@ -117,6 +116,12 @@ UserSettings::load(std::optional<QString> profile)
homeserver_ = settings.value(prefix + "auth/home_server", "").toString();
userId_ = settings.value(prefix + "auth/user_id", "").toString();
deviceId_ = settings.value(prefix + "auth/device_id", "").toString();
hiddenTags_ = settings.value(prefix + "user/hidden_tags", QStringList{}).toStringList();
collapsedSpaces_.clear();
for (const auto &e :
settings.value(prefix + "user/collapsed_spaces", QList<QVariant>{}).toList())
collapsedSpaces_.push_back(e.toStringList());
shareKeysWithTrustedUsers_ =
settings.value(prefix + "user/automatically_share_keys_with_trusted_users", false).toBool();
@ -195,6 +200,13 @@ UserSettings::setHiddenTags(QStringList hiddenTags)
save();
}
void
UserSettings::setCollapsedSpaces(QList<QStringList> spaces)
{
collapsedSpaces_ = spaces;
save();
}
void
UserSettings::setMarkdown(bool state)
{
@ -658,7 +670,6 @@ UserSettings::save()
settings.setValue("minor_events", sortByImportance_);
settings.setValue("read_receipts", readReceipts_);
settings.setValue("group_view", groupView_);
settings.setValue("hidden_tags", hiddenTags_);
settings.setValue("markdown_enabled", markdown_);
settings.setValue("animate_images_on_hover", animateImagesOnHover_);
settings.setValue("desktop_notifications", hasDesktopNotifications_);
@ -695,6 +706,12 @@ UserSettings::save()
settings.setValue(prefix + "user/only_share_keys_with_verified_users",
onlyShareKeysWithVerifiedUsers_);
settings.setValue(prefix + "user/online_key_backup", useOnlineKeyBackup_);
settings.setValue(prefix + "user/hidden_tags", hiddenTags_);
QVariantList v;
for (const auto &e : collapsedSpaces_)
v.push_back(e);
settings.setValue(prefix + "user/collapsed_spaces", v);
settings.setValue("disable_certificate_validation", disableCertificateValidation_);

View File

@ -172,6 +172,7 @@ public:
void setDisableCertificateValidation(bool disabled);
void setHiddenTags(QStringList hiddenTags);
void setUseIdenticon(bool state);
void setCollapsedSpaces(QList<QStringList> spaces);
QString theme() const { return !theme_.isEmpty() ? theme_ : defaultTheme_; }
bool messageHoverHighlight() const { return messageHoverHighlight_; }
@ -228,6 +229,7 @@ public:
bool disableCertificateValidation() const { return disableCertificateValidation_; }
QStringList hiddenTags() const { return hiddenTags_; }
bool useIdenticon() const { return useIdenticon_ && JdenticonProvider::isAvailable(); }
QList<QStringList> collapsedSpaces() const { return collapsedSpaces_; }
signals:
void groupViewStateChanged(bool state);
@ -329,6 +331,7 @@ private:
QString deviceId_;
QString homeserver_;
QStringList hiddenTags_;
QList<QStringList> collapsedSpaces_;
bool useIdenticon_;
QSettings settings;

View File

@ -40,6 +40,7 @@ CommunitiesModel::setData(const QModelIndex &index, const QVariant &value, int r
const auto cindex = spaceOrder_.lastChild(index.row() - 2);
emit dataChanged(index, this->index(cindex + 2), {Collapsed, Qt::DisplayRole});
spaceOrder_.storeCollapsed();
return true;
} else
return false;
@ -276,6 +277,7 @@ CommunitiesModel::initializeSidebar()
tags_.push_back(QString::fromStdString(t));
hiddentTagIds_ = UserSettings::instance()->hiddenTags();
spaceOrder_.restoreCollapsed();
endResetModel();
emit tagsChanged();
@ -283,6 +285,55 @@ CommunitiesModel::initializeSidebar()
emit containsSubspacesChanged();
}
void
CommunitiesModel::FlatTree::storeCollapsed()
{
QList<QStringList> elements;
int depth = -1;
QStringList current;
for (const auto &e : tree) {
if (e.depth > depth) {
current.push_back(e.name);
} else if (e.depth == depth) {
current.back() = e.name;
} else {
current.pop_back();
current.back() = e.name;
}
if (e.collapsed)
elements.push_back(current);
}
UserSettings::instance()->setCollapsedSpaces(elements);
}
void
CommunitiesModel::FlatTree::restoreCollapsed()
{
QList<QStringList> elements = UserSettings::instance()->collapsedSpaces();
int depth = -1;
QStringList current;
for (auto &e : tree) {
if (e.depth > depth) {
current.push_back(e.name);
} else if (e.depth == depth) {
current.back() = e.name;
} else {
current.pop_back();
current.back() = e.name;
}
if (elements.contains(current))
e.collapsed = true;
}
}
void
CommunitiesModel::clear()
{

View File

@ -92,6 +92,9 @@ public:
break;
return i;
}
void storeCollapsed();
void restoreCollapsed();
};
CommunitiesModel(QObject *parent = nullptr);