Use percent encoding for saved groupings

Fixes #1758
This commit is contained in:
Jonas Kvinge
2025-07-30 00:41:12 +02:00
parent a9140232e5
commit fe5fbae4b4
2 changed files with 18 additions and 12 deletions

View File

@@ -34,6 +34,7 @@
#include <QVariant> #include <QVariant>
#include <QString> #include <QString>
#include <QStringList> #include <QStringList>
#include <QUrl>
#include <QRegularExpression> #include <QRegularExpression>
#include <QInputDialog> #include <QInputDialog>
#include <QList> #include <QList>
@@ -295,19 +296,21 @@ QActionGroup *CollectionFilterWidget::CreateGroupByActions(const QString &saved_
if (version == 1) { if (version == 1) {
QStringList saved = s.childKeys(); QStringList saved = s.childKeys();
for (int i = 0; i < saved.size(); ++i) { for (int i = 0; i < saved.size(); ++i) {
if (saved.at(i) == "version"_L1) continue; const QString &name = saved.at(i);
QByteArray bytes = s.value(saved.at(i)).toByteArray(); if (name == "version"_L1) continue;
QByteArray bytes = s.value(name).toByteArray();
QDataStream ds(&bytes, QIODevice::ReadOnly); QDataStream ds(&bytes, QIODevice::ReadOnly);
CollectionModel::Grouping g; CollectionModel::Grouping g;
ds >> g; ds >> g;
ret->addAction(CreateGroupByAction(saved.at(i), parent, g)); ret->addAction(CreateGroupByAction(QUrl::fromPercentEncoding(name.toUtf8()), parent, g));
} }
} }
else { else {
QStringList saved = s.childKeys(); QStringList saved = s.childKeys();
for (int i = 0; i < saved.size(); ++i) { for (int i = 0; i < saved.size(); ++i) {
if (saved.at(i) == "version"_L1) continue; const QString &name = saved.at(i);
s.remove(saved.at(i)); if (name == "version"_L1) continue;
s.remove(name);
} }
} }
s.endGroup(); s.endGroup();
@@ -339,7 +342,7 @@ void CollectionFilterWidget::SaveGroupBy() {
if (!model_) return; if (!model_) return;
QString name = QInputDialog::getText(this, tr("Grouping Name"), tr("Grouping name:")); const QString name = QInputDialog::getText(this, tr("Grouping Name"), tr("Grouping name:"));
if (name.isEmpty()) return; if (name.isEmpty()) return;
qLog(Debug) << "Saving current grouping to" << name; qLog(Debug) << "Saving current grouping to" << name;
@@ -355,7 +358,7 @@ void CollectionFilterWidget::SaveGroupBy() {
QDataStream datastream(&buffer, QIODevice::WriteOnly); QDataStream datastream(&buffer, QIODevice::WriteOnly);
datastream << model_->GetGroupBy(); datastream << model_->GetGroupBy();
s.setValue("version", u"1"_s); s.setValue("version", u"1"_s);
s.setValue(name, buffer); s.setValue(QUrl::toPercentEncoding(name), buffer);
s.endGroup(); s.endGroup();
UpdateGroupByActions(); UpdateGroupByActions();

View File

@@ -30,6 +30,7 @@
#include <QByteArray> #include <QByteArray>
#include <QString> #include <QString>
#include <QStringList> #include <QStringList>
#include <QUrl>
#include <QIODevice> #include <QIODevice>
#include <QDataStream> #include <QDataStream>
#include <QKeySequence> #include <QKeySequence>
@@ -167,14 +168,15 @@ void SavedGroupingManager::UpdateModel() {
if (version == 1) { if (version == 1) {
QStringList saved = s.childKeys(); QStringList saved = s.childKeys();
for (int i = 0; i < saved.size(); ++i) { for (int i = 0; i < saved.size(); ++i) {
if (saved.at(i) == "version"_L1) continue; const QString &name = saved.at(i);
QByteArray bytes = s.value(saved.at(i)).toByteArray(); if (name == "version"_L1) continue;
QByteArray bytes = s.value(name).toByteArray();
QDataStream ds(&bytes, QIODevice::ReadOnly); QDataStream ds(&bytes, QIODevice::ReadOnly);
CollectionModel::Grouping g; CollectionModel::Grouping g;
ds >> g; ds >> g;
QList<QStandardItem*> list; QList<QStandardItem*> list;
list << new QStandardItem(saved.at(i)) list << new QStandardItem(QUrl::fromPercentEncoding(name.toUtf8()))
<< new QStandardItem(GroupByToString(g.first)) << new QStandardItem(GroupByToString(g.first))
<< new QStandardItem(GroupByToString(g.second)) << new QStandardItem(GroupByToString(g.second))
<< new QStandardItem(GroupByToString(g.third)); << new QStandardItem(GroupByToString(g.third));
@@ -185,8 +187,9 @@ void SavedGroupingManager::UpdateModel() {
else { else {
QStringList saved = s.childKeys(); QStringList saved = s.childKeys();
for (int i = 0; i < saved.size(); ++i) { for (int i = 0; i < saved.size(); ++i) {
if (saved.at(i) == "version"_L1) continue; const QString &name = saved.at(i);
s.remove(saved.at(i)); if (name == "version"_L1) continue;
s.remove(name);
} }
} }
s.endGroup(); s.endGroup();