12std::string qtFilterListToFileInputAccept(
const QStringList &filterList)
14 QStringList transformed;
15 for (
const auto &filter : filterList) {
16 const auto type = Type::fromQt(filter);
17 if (type && type->accept()) {
18 const auto &extensions = type->accept()->mimeType().extensions();
19 std::transform(extensions.begin(), extensions.end(), std::back_inserter(transformed),
20 [](
const Type::Accept::MimeType::Extension &extension) {
21 return extension.value().toString();
25 return transformed.join(QStringLiteral(
",")).toStdString();
28std::optional<emscripten::val> qtFilterListToTypes(
const QStringList &filterList)
30 using namespace qstdweb;
31 using namespace emscripten;
32 auto types = emscripten::val::array();
34 for (
const auto &fileFilter : filterList) {
35 auto type = Type::fromQt(fileFilter);
37 auto jsType = emscripten::val::object();
38 jsType.set(
"description", type->description().toString().toStdString());
40 jsType.set(
"accept", ([&mimeType = type->accept()->mimeType()]() {
41 val acceptDict = val::object();
43 QList<emscripten::val> extensions;
44 extensions.reserve(mimeType.extensions().size());
46 mimeType.extensions().begin(), mimeType.extensions().end(),
47 std::back_inserter(extensions),
48 [](
const Type::Accept::MimeType::Extension &extension) {
49 return val(extension.value().toString().toStdString());
51 acceptDict.set(
"application/octet-stream",
52 emscripten::val::array(extensions.begin(),
57 types.call<
void>(
"push", std::move(jsType));
61 return types[
"length"].as<
int>() == 0 ? std::optional<emscripten::val>() : types;
181 auto options = emscripten::val::object();
182 if (
auto typeList = qtFilterListToTypes(filterList); typeList) {
183 options.set(
"types",
std::move(*typeList));
184 options.set(
"excludeAcceptAllOption",
true);
187 options.set(
"multiple", acceptMultiple);
194 auto options = emscripten::val::object();
196 if (!suggestedName.empty())
197 options.set(
"suggestedName", emscripten::val(suggestedName));
199 if (
auto typeList = qtFilterListToTypes(filterList))
200 options.set(
"types", emscripten::val(std::move(*typeList)));
207 return qtFilterListToFileInputAccept(filterList);