11std::string qtFilterListToFileInputAccept(
const QStringList &filterList)
13 QStringList transformed;
14 for (
const auto &filter : filterList) {
15 const auto type = Type::fromQt(filter);
16 if (type && type->accept()) {
17 const auto &extensions = type->accept()->mimeType().extensions();
18 std::transform(extensions.begin(), extensions.end(), std::back_inserter(transformed),
19 [](
const Type::Accept::MimeType::Extension &extension) {
20 return extension.value().toString();
24 return transformed.join(QStringLiteral(
",")).toStdString();
27std::optional<emscripten::val> qtFilterListToTypes(
const QStringList &filterList)
29 using namespace qstdweb;
30 using namespace emscripten;
31 auto types = emscripten::val::array();
33 for (
const auto &fileFilter : filterList) {
34 auto type = Type::fromQt(fileFilter);
36 auto jsType = emscripten::val::object();
37 jsType.set(
"description", type->description().toString().toStdString());
39 jsType.set(
"accept", ([&mimeType = type->accept()->mimeType()]() {
40 val acceptDict = val::object();
42 QList<emscripten::val> extensions;
43 extensions.reserve(mimeType.extensions().size());
45 mimeType.extensions().begin(), mimeType.extensions().end(),
46 std::back_inserter(extensions),
47 [](
const Type::Accept::MimeType::Extension &extension) {
48 return val(extension.value().toString().toStdString());
50 acceptDict.set(
"application/octet-stream",
51 emscripten::val::array(extensions.begin(),
56 types.call<
void>(
"push", std::move(jsType));
60 return types[
"length"].as<
int>() == 0 ? std::optional<emscripten::val>() : types;
180 auto options = emscripten::val::object();
181 if (
auto typeList = qtFilterListToTypes(filterList); typeList) {
182 options.set(
"types",
std::move(*typeList));
183 options.set(
"excludeAcceptAllOption",
true);
186 options.set(
"multiple", acceptMultiple);
193 auto options = emscripten::val::object();
195 if (!suggestedName.empty())
196 options.set(
"suggestedName", emscripten::val(suggestedName));
198 if (
auto typeList = qtFilterListToTypes(filterList))
199 options.set(
"types", emscripten::val(std::move(*typeList)));
206 return qtFilterListToFileInputAccept(filterList);