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

View File

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