summaryrefslogtreecommitdiffstats
path: root/src/gui/platform/wasm/qwasmlocalfileaccess.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/platform/wasm/qwasmlocalfileaccess.cpp')
-rw-r--r--src/gui/platform/wasm/qwasmlocalfileaccess.cpp68
1 files changed, 10 insertions, 58 deletions
diff --git a/src/gui/platform/wasm/qwasmlocalfileaccess.cpp b/src/gui/platform/wasm/qwasmlocalfileaccess.cpp
index 80e32d629d..a946cda043 100644
--- a/src/gui/platform/wasm/qwasmlocalfileaccess.cpp
+++ b/src/gui/platform/wasm/qwasmlocalfileaccess.cpp
@@ -135,66 +135,18 @@ void readFiles(const qstdweb::FileList &fileList,
(*readFile)(0);
}
-QStringList acceptListFromQtFormat(const std::string &qtAcceptList)
+QStringList makeFilterList(const std::string &qtAcceptList)
{
// copy of qt_make_filter_list() from qfiledialog.cpp
- auto make_filter_list = [](const QString &filter) -> QStringList
- {
- if (filter.isEmpty())
- return QStringList();
-
- QString sep(";;");
- if (!filter.contains(sep) && filter.contains(u'\n'))
- sep = u'\n';
-
- return filter.split(sep);
- };
-
- const QStringList fileFilter = make_filter_list(QString::fromStdString(qtAcceptList));
- QStringList transformed;
- for (const auto &element : fileFilter) {
- // Accepts either a string in format:
- // GROUP3
- // or in this format:
- // GROUP1 (GROUP2)
- // Group 1 is treated as the description, whereas group 2 or 3 are treated as the filter
- // list.
- static QRegularExpression regex(
- QString(QStringLiteral("(?:([^(]*)\\(([^()]+)\\)[^)]*)|([^()]+)")));
- static QRegularExpression wordCharacterRegex(QString(QStringLiteral("\\w")));
- const auto match = regex.match(element);
-
- if (!match.hasMatch())
- continue;
-
- constexpr size_t FilterListFromParensIndex = 2;
- constexpr size_t PlainFilterListIndex = 3;
- QString filterList = match.captured(match.hasCaptured(FilterListFromParensIndex)
- ? FilterListFromParensIndex
- : PlainFilterListIndex);
- for (auto singleExtension : filterList.split(QStringLiteral(" "), Qt::SkipEmptyParts)) {
- // Checks for a filter that matches everything:
- // Any number of asterisks or any number of asterisks with a '.' between them.
- // The web filter does not support wildcards.
- static QRegularExpression qtAcceptAllRegex(QRegularExpression::anchoredPattern(
- QString(QStringLiteral("[*]+|[*]+\\.[*]+"))));
- if (qtAcceptAllRegex.match(singleExtension).hasMatch())
- continue;
-
- // Checks for correctness. The web filter only allows filename extensions and does not
- // filter the actual filenames, therefore we check whether the filter provided only
- // filters for the extension.
- static QRegularExpression qtFilenameMatcherRegex(QRegularExpression::anchoredPattern(
- QString(QStringLiteral("(\\*?)(\\.[^*]+)"))));
-
- auto extensionMatch = qtFilenameMatcherRegex.match(singleExtension);
- if (extensionMatch.hasMatch())
- transformed.append(extensionMatch.captured(2));
- }
- }
- return transformed;
+ auto filter = QString::fromStdString(qtAcceptList);
+ if (filter.isEmpty())
+ return QStringList();
+ QString sep(";;");
+ if (!filter.contains(sep) && filter.contains(u'\n'))
+ sep = u'\n';
+
+ return filter.split(sep);
}
-
}
void downloadDataAsFile(const char *content, size_t size, const std::string &fileNameHint)
@@ -225,7 +177,7 @@ void openFiles(const std::string &accept, FileSelectMode fileSelectMode,
const std::function<char *(uint64_t size, const std::string& name)> &acceptFile,
const std::function<void()> &fileDataReady)
{
- FileDialog::showOpen(acceptListFromQtFormat(accept), fileSelectMode, {
+ FileDialog::showOpen(makeFilterList(accept), fileSelectMode, {
.thenFunc = [=](emscripten::val result) {
auto files = qstdweb::FileList(result);
fileDialogClosed(files.length());